SIM908 modulin liittäminen muuhun maailmaan

Ostin kilkkeen, jossa on samassa GSM ja GPS palikat. Moduli perustuu simcomin sim908 palikkaan.  LIevähkö yllätys tuli siinä vaiheessa, kun minulle selvisi, että modulia ohjataan AT käskyillä. Olen tässä vuosien varrella muutamia kertoja törmännyt sivulauseessa kyseisiin komentoihin, mutta edellisen kerran minä niitä varsinaisesti olen käyttänyt viimeksi suunnilleen 90-luvulla, kun leikin modeemilla.  Ensimmäiset muistikuvat AT-käskyistä on jo 80-luvulta. Äidillä oli työ käytössä silloin ”tyhmä pääte” ja sen yhteys maatalouden laskentakeskuksen koneeseen avattiin ja lopetettiin AT-käskyillä.  Yritin netistä löytää kuvaa kapistuksesta, mutten kunnollista löytänyt. Ainut kuva missä pääte edes oli, oli historiikki kuva ja siitä ei juuri päätteestä selvää saa.

Tarkoituksena siis tieto kulkemaan molempiin suuntaan moduulista sekä tekstiviestillä, että netin yli.  Alunperin suunnittelin, että moduli itsessään toimisi webbi serverinä, mutta erinäisistä syistä johtuen päädyin käyttämään apuna erillistä webbiserveriä. Suurin syy on se, että pääsen ehkä helpommalla koodauksen kanssa näin. Muita syitä on mm. se että mobiilissa palikan IP numero vaihtelee. Tämä ainakin on siis tällä hetkellä suunnitelma.

Simcom kertoo kyllä kiltisti kaikki AT-käskyt ja vastaukset niihin, mutta kaikistellen ei mitenkään selitä mitä tarvitaan mihinkin. Yllättäviä vaikeuksi aihuetti myöskin se etten heti tajunnut, että AT käskyissä on useampaa versiota ja modulissa on varsinaisia AT-käskyjä että simcomin omia AT-käskyjä. Varsinkin nettipuolen  yhteys oli aluksi sen takia täysin mahdoton idea. Varsinkin nettipuolen toiminnnan kannalta nettisivut olivat todella hyvää luettavaa. Kuten myöskin cooking hackingin sivut auttoivat valtavasti, mutta myös aiheuttivat harmaita hiuksia virheellisen GPS-koordinaattien muunnoksen takia. Heidän koodin mukaisella sijannilla asun Suomenlinnassa.

Katsotaan sitten miten moduli tottelee AT käskyjä. Aloitetaan ihan yleisillä jutuilla ja mennään sitten aluksi tarkemmin tekstiviesteihin ja sen jälkeen netti datasiirtoon.

AT käskyjen yleinen muoto on AT+KÄSKY. Moduli yleisin vastaus OK tai error, lisäksi tulee riipuen käskystä muutakin. Moduli on kytkettävissä suoraan arduinon TX ja RX pinneihin. Kokeilu vaiheessa käytin myöskin USB to TTL muunninta, joka toimi itse asiassa paremmin kuin arduino. Arduinon software serial kirjasto ei minun kokeiluissa toiminut luotettavasti ja muutenkin lienee parempi tehdä homma suoraan hardware TX/RX linjoihin, koska lopullisessa käyttökohteessa moduli tulee nimenomaan hardware serial linjaan kiinni.

Modulin kytkennän ja toiminnan voi varmistaa käskyllä AT, vastauksen pitäis olla OK.

AT+CPIN? Kertoo SIM-kortin PIN koodin tilanteen.  ”+CPIN: READY” kertoo, että PIN koodi on ok ja ”+CPIN: SIM PIN” taasen, että PIN koodia ei ole annettu. AT+CPIN=1234 lähettään PIN-koodin.

AT+CREG? kertoo, kun moduli on kiinni verkossa.  ”+CREG: 0,1” kertoo, että ollaan kiinni kotiverkossa. Jälkimmäinen numero kertoo verkossa kiinni olemisen tilanteen.

0 Not registered, MT is not currently searching a new operator to register to

1 Registered, home network

2 Not registered, but MT is currently searching a new

operator to register to

3 Registration denied

4 Unknown

5 Registered, roaming

AT+CMGF=1 Asettaa modulin teksti moodiin, AT+CMGF=0 asettaa PDU moodin (binääri).  Minä olen käyttänyt teksti moodia.

AT+CMGS=”0401234567″ Lähettää puhelinnumeron modulille ja moduli vastaa ”>” merkillä. Sen jälkeen lähetetään itse tekstiviesti ja perään CTRL-Z (eli lopetus koodi) 0x1A heksakoodina.

Ja siinä se! tekstiviesti lähti maailmalle. Modulista löytyy monta IMG_20151021_185729käskyä joilla voidaan tekstiviestejä käsitellä mm. tallentaa odottamaan lähetystä.  Ilmeisesti viesti ei ihan normaali muodossa lähde oletus arvoilla, koska se tulee vähän hassusti puhelimeen. Viesti pitää erikseen tallentaa puhelimessa.

Viestin lukemiseen modulista tarvitaan muutama komento lisää. Moduli laitetaan tekstimoodiin, jos se ei jo siinä ole (AT+CMGF=1)

AT+CPMS=”SM,”SM”,”SM” käskyllä asetetaan muisti. Tarkkaan en ole tutustunut käskyyn, mutta SM tarkoittaa SIM korttia ja käskyssä ensimmäinen SM on muisti joka käsittelee viestien lukemista ja poistamista, toinen SM on kirjoitus ja lähetys ja viimeinen on viestien vastaanotto. Tämä tarvitsee kyllä viellä tutkimista, että mikä on mikäkin.

AT+CMGR=1 Lukee ensimmäisessä muisti paikassa olevan viestin. Toisessa muisti paikassa olevan viestin voin lukea vaihtamalla numeron 1 numeroksi 2

AT+CMGL=”ALL” Käskyllä saadaan listattua kaikki viestit muistista kerralla.

”REC UNREAD” Received unread messages
”REC READ” Received read messages
”STO UNSENT” Stored unsent messages
”STO SENT” Stored sent messages
”ALL” All message
Niin kuin jo aikaisemmin sanoin tekstiviestien käsittelyyn löytyy paljon enemmänkin käskyjä, mutta tässä on nyt aikalailla minini mitä tarvitaan.

Netin kautta yhdistämiseen löytyy useampikin vaihtoehtoinen tapa. Valitettavasti mistään ei selvästi tätä suoraan kerrottu, joten jouduin aika hyvän hetken taistelemaan, että sain yhteyden toimimaan.

Kokeillaans sitten miten saadaan netistä tietoa moduliin päin. Kun AT+CREG? kertoo, että ollaan kiinni verkossa yhteys voidaan aloittaa.

AT+SAPBR=3,1,”Contype”,”GPRS” Asettaa yhteystyypin GPRS moodiin.

AT+SAPBR=3,1,”APN”,”internet” Asettaa APN, tässä tapauksessa saunalahden käyttämä ”internet”.  LIsäksi tarvittaessa voidaan asettaa käyttäjätunnus ja salasana. Saunalahden yhteydessä niitä ei tarvita (eikä ilmeisesti muissakaan suurilla Suomalaisilla operaattoreilla)

AT+SAPBR =1,1 Käynnistää yhteyden.

AT+SAPBR=2,1 Kertoo yhteyden tilan mm. modulin IP numeron. Jos yhteydellä on IP numero voimme jatkaa, muuten kokeillaan uudestaan.

AT+HTTPINIT Aloittaa HTTP yhteyden muodostamisen.

AT+HTTPPARA=”CID”,1 Asettaa yhteyden profiilin numeron (bearer profile identifier). CID on yksi niitä juttuja joista ei älyttömästi kerrota mikä se on.

AT+HTTPPARA=”URL”,”https://rahikkala.net/robots.txt”  Asettaa kohde URL:n.

AT+HTTPACTION=0 Aloittaa HTTP GET yhteyden. vastaus ”+HTTPACTION:0,200,87 ” kertoo onnistuneen yhteyden.  0 kertoo että käytetään GET metodia, 200 kertoo onnistuneesta yhteydestä, ja 87 kertoo kuinka monta tavua on noudettu.

AT+HTTPREAD hakee serverin vastauksen.

 

Modulista maailmalle päin voidaan dataa saada useammallakin tavalla liikenteeseen. Itse taidan käyttää GET metodia, joka on helpompi. Periaatteessa eroa netistä tiedon hakuun on vain se, että serverillä on sopiva vaikkapa PHP-koodi joka otta vastaan tiedon. GET metodissa tieto on URL:ssä. URL-osoitteessa on ”?” merkki jonka jälkeen data tulee.  Cooking hacksin sivuilla on hyvä esimerkki tästä ja sieltä myös löytyy esimerkki sopivasta PHP-koodista.

Tämä on vain pinta raapaisu miten SIM908 voidaan liittää muuhun maailmaan, jätän ihan tarkoituksella monia asioita selittämättä, suurimmaksi osaksi ihan siksi, etten itsekään vielä tiedä. Valmiista laitteesta tulee vielä tarkemmin juttua, mutta se voi hyvinkin mennä tulevalle vuodelle.  SIM908 dokumentaation periaatteessa hyvä, mutta käytännössä se vaatii melkeinpä kokeilemalla kokeilemaan miten mikäkin toimii. Onneksi internetistä löytyy tietoa aika paljonkin. Erillaisia kirjastoja olisi ollut vaikka kuinka paljon valmiiksikin kirjoitettuna, mutta en halunnut käyttää niitä tässä.

 

Ps. Vaikka useimpien lauseiden aikamuodosta voisi päätellä muuta, en ole vielä oikeastaan edes aloittanut koodin kirjoittamista, mutta kaikki mainitut käskyt on kuitenkin testattu ja toimivaksi todettu.

 

Kissan elämää

Yksi luetuimmista jutuista tässä blogissa on lyhyt idea artikkeli kissan ruokinta-automaatista. Kokeillaans sitten miten käy, jos kirjoitan ihan koko jutun pelkästään kissoista.

Yksiöön muuton jälkeen to do listalla oli Robinssonille kaverin hommaaminen, koska balineesi on ainoana kissana ei ole parhaasta päästä ideoista. En varsinaisesti kerenyt etsiä toista kissaa, kun minulle jo tarjottiin käytännössä täsmälleen sellaista kissaa, jota olin ajatellut itsekin. Leikattu, suunnilleen Robinsonin ikäinen ja narttu. Oikeassa paikassa suunsa aukaiseminen oli taas hyvä valinta.

Ensimmäinen viikko ja pari päivää päällekin on nyt takana ja tilanne on itse asiassa huomattavasti mukavampi kuin olisin ikinä voinut kuvitellakaan! Luulin, että tässä vaiheessa vielä joutuu vahtimaan kissoja hyvin tarkkaan, mutta mitä vielä! neljäntenä päivänä uskalsi jättää kissat keskenään siksi aikaa, että kävi kaupassa ja nyt olen jo jättänyt ne kahdestaan koko päiväksikin.

Belle on ottanut itselleen paikan minun sängyn päältä ja erityisesti peiton päältä. (Luulitko todella minun petaavan sängyn joka aamu?) Lopputus on sitten se, että saan kuunnella joka ilta sähinää, kun Belle on sitä mieltä, että ei saa häiritä kesken unien xD Belle on  sanotaan tempperamenttinen kissa. Belle ilmoittaa kyllä hyvin selvästi, että nyt ei rapsutukset kiinnosta. Robsku on luonteeltaan hyvin erillainen. Robskun olen kuullut sähisevän käytännössä ainoastaan vieraalle kissalle ja käytännössä aina saa silittää tai rapsuttaa korvan takaa. Robsku on myöskin sosiaalisempi kuin Belle. Tosin Belle voi viellä vierastaa sekä paikkaa, että minua sen verran ettei ihan kaikkea luonteesta vielä voi sanoa.

Molemmat kissat tykkäävät nukkua jalkojen välissä ja Belle on aika tehokkaasti pitänyt Robkun poissa sängystä. Eilen oli kuitenkin ensimmäinen kerta, kun molemmat kissat olivat sängyssä, mutta minkäänlaista sähinää ei kuulunut.  Onnistuin pätkän videotakin asiasta ottamaan.

 

Mitenkään vahvasti kissat eivät näytä toisiinsa luottavan, mutta paremmin tämä on mennyt kuin oletin! Kissat ovat olleet samassa sängyssä jo aikaisemminkin, mutta silloin Belle on pitänyt sähinän ja mekkalan, jos Robsku on mennyt liian lähelle. Kaiken kaikkiaan Robsku on huomattavasti kiinnostuneempi Bellestä kuin toisin päin.

Tänään oli myös ensimmäistä kertaa tilanne, että molemmat kissat olivat (lähes) yhtä aikaa syömässä. Molemmilla oli ruokakippa edessä IMG_20151018_203829ja molemmat olivat keittiössä, mutta Belle aloitti syömään vasta kun Robsku oli omansa jo syönyt.

 

Minua myöskin varoitettiin, että Belle ja kuivamuona ei ole mikään hyvä yhdistelmä, mikä oli vähän harmi, koska Robsku on tottunut siihen, että tarjolla on jatkuvasti kuivaruokaa.  Olen kuitenkin pitänyt pientä määrää kuivamuonaa tarjolla kokeilu mielessä. Lopputulos on että Belle syö paremmin kuivamuonaa kuin Robsku. Robsku ei käytännössä koskaan juo vettä heti raksujen jälkeen, mutta Belle on tähän mennessä juonut joka kerta raksujen jälkeen, kun olen ollut tilannetta ollut seuraamassa. Muutenkaan ei kyllä ole ollut ruuan kanssa ongelmaa Bellen kanssa, kaikki on hävinnyt kiposta mitä sinne on laittanut. En taida raksuautomaattia laittaa esille, mutta päivän annoksen raksuja taidan laittaa jatkossakin esille.

Vaikka noi kaksi kissaa ovatkin täysin erilaisia samaakin noissa kahdessa kissassa on, molemmilla on ”paskan irroitus villi”. Kumpikin nimittäin juoksee ympäri kämppää hetken aikaa hiekka-astialla käynnin jälkeen.