GSM Modem i.c.m MQTT

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 25-09 18:06
EDIT: Allereerst bedankt voor de tijd en moeite die genomen wordt om inhoudelijk te reageren in dit topic! Aan de hand van de reacties van Sprite_tm, eppie en Springuin heb ik de TS even herschreven. De oude TS is hieronder te lezen.

Probleemstelling
De informatie die door microcontrollers met sensoren wordt verzameld dient over het GSM (GPRS) netwerk verstuurd te worden naar het server over het MQTT protocol.
Concreet voorbeeld: Een zelf ontwikkelde regenmeter stuurt iedere 2 uur het aantal mm neerslag op, of een sensor die de waterhoogte meet in een rivier stuurt deze waterhoogte door.
We willen een generieke oplossing die zowel kan worden toegepast tijdens het prototyping (met rpi’s en arduino’s) als tijdens verder ontwikkelde producten (specifiekere microcontrollers). Het stroomverbruik van de gekozen oplossing is ook erg belangrijk.

Waarom MQTT?
MQTT is een machine-to-machine connectiviteits protocol dat verloopt over TCP/IP. Het is ontwikkeld voor extreem lichtgewicht publish/subscribe berichten verkeer. Hierdoor is het nuttig om te gebruiken voor afgelegen locaties waar het dataverkeer minimaal moet worden gehouden of het dataverkeer erg kostbaar is. (Bron http://mqtt.org/ )
Wij willen dit protocol gebruiken omdat de sensoren ook op plaatsen ingezet gaan worden waar het dataverkeer erg kostbaar zal zijn.

GSM Modems
Er worden M2M GMS modems aangeboden met verschillende interfaces: RS232, USB en LAN. De meest geschikte interface in combinatie met microcontrollers is RS232 omdat dit een seriële verbinding is die vanaf bijna iedere microcontroller gemaakt kan worden. Met deze interface kan een PPP-verbinding opgezet worden naar de modem, hiervoor is wel vaak een library nodig aangezien dit vrij uitgebreid is. Een andere mogelijkheid die geen library nodig heeft is het versturen van AT-commando’s naar de modem, hiervoor is een modem met ingebouwde TCP stack nodig.
Er zijn ook modems waar je je eigen applicatie/script op kan draaien zoals een J2ME applicatie voor modems op basis van gemalto tc65i of ehs5/6 chipset. Er zijn ook o.a. Telit modems waarop het mogelijk is om een eigen python script te draaien.
Concrete vraag: Indien je gebruikt maakt van zo’n modem met eigen script, lees je dan de seriële datastroom uit en gebruik je vervolgens in dit script dan de AT-commands om deze data te versturen?

GPRS shield/module
De goedkoopste mogelijkheid is de bestaande microcontroller die de sensor uitleest uit te breiden met een GRPS module. Hierbij werk je, net als bij de GSM modems zonder eigen script, door middel van AT commando’s uit te voeren binnen je script dat draait op de microcontrollers dat de sensoren uitleest.

Smartphone
Er zijn android smartphones op de markt voor ruim onder de € 100, die eigenlijk alle functionaliteiten bevatten die je wilt hebben. Door de microcontroller d.m.v RS232 te verbinden met de smartphone (https://github.com/mik3y/usb-serial-for-android) kan je een simpele Android App maken die de data van je microcontroller ontvangt, en vervolgens over MQTT communiceert naar de server. Het nadeel is hier dat je (binnen een gewone applicatie) niet zoveel controle hebt over de verbinding als wanneer je AT-commands gebruikt. Normaal wordt een data-verbinding dan open gehouden volgens mij? Heeft dit nadelen t.o.v AT commands waar je steeds de verbinding opent en sluit?


Tussen de verschillende mogelijkheden moeten worden geëvalueerd op de volgende aspecten: stabiliteit, aanschafkosten, stroomverbruik, dataverbruik, eenvoud implementatie microcontrollers.
De eenvoud gaat dus vooral om het implementen van het uiteindelijk systeem aan verschillende sensoren, niet zozeer het eenmalig opzetten van het systeem. Wat zijn jullie gedachten/aanbevelingen ten aanzien van bovenstaande punten?


Oude TS:
edit:
Beste Tweakers,

Ik wil graag gebruik maken van de expertise die er binnen dit forum is om mij het een en ander te verduidelijken over het gebruik van GSM (GRPS/EDGE) Modems die worden gekoppeld aan een sensor in combinatie met MQTT (http://mqtt.org/).

Als ik het goed begrijp werkt MQTT over het normale TCP protocol en het zou dus geen probleem moeten zijn om dit te combineren met een GSM modem. Nou zijn deze modems er vaak in 3 uitvoeringen: USB, RS232 en LAN.

Bij een USB modem moeten er (zover ik het begrijp) drivers worden geinstalleerd. Zodra dit is gedaan heeft je device gewoon een internetverbinding en hoef je hier dus in je programmeercode geen rekening mee te houden.

Bij een RS323 werk je als ik het goed begrijp met AT commands. Je hoeft hier dan geen drivers te installeren (dus je kan het vanaf ieder device gebruiken) maar je code wordt wel ingewikkelder? Ik kan weinig vinden over AT codes voor MQTT, vragen die hierover staan worden niet direct beantwoord maar vaak wordt er verwezen naar andere middleware die dan dus ook niet op ieder apparaat gaat werken (http://stackoverflow.com/...t-using-gprs-sim900-modem).

De GSM modem die met LAN wordt verbonden lijkt mij de eenvoudigste en meest universele optie. Er komt gewoon een LAN verbinding tot stand tussen je sensor device en de modem, je merkt er dan helemaal niets van dat je via een GSM modem verbonden bent?

Het is erg belangrijk om zo weinig mogelijk dataverkeer te genereren (vandaar ook het MQTT protocol). Zit er nog verschil tussen de typen modems met betrekking hiertot? Mij lijkt dat je met een RS323 modem d.m.v AT commands dus zelf de verbinding steeds opzet en afsluit, terwijl bij LAN bijvoorbeeld de modem dit allemaal zelf beheert?

Graag hoor ik of mijn bovenstaande aannames kloppen, en eventuele adviezen/ervaringen bij het koppelen van sensoren met modems over MQTT.

[ Voor 51% gewijzigd door Qzar op 30-08-2014 14:14 ]


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 06:53

Damic

Tijd voor Jasmijn thee

Conrad mag gewoon, het is nu niet dat tweakers iets verkoopt wat conrad ook doet :p

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 11-08 04:52

Sprite_tm

Semi-Chinees

Hoe de RS232-link vaak werkt is door een PPP-verbinding op te zetten naar de modem. Daar kan je dan vrolijk TCP/IP overheen praten en MQTT daar weer overheen gooien.

Sommige modules (Wavecom doet het, staat me bij) kunnen ook dmv AT-commando's zelf een TCP-link opzetten. Als je daar je MQTT-data overheen kan flikkeren ben je ook waar je wezen moet. Da's echter minder universeel dan de PPP-oplossing.

Wat is je setup precies? Met welk device praat je met de modem?

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


Acties:
  • 0 Henk 'm!

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Je zou ook een modem kunnen gebruiken op basis van de gemalto tc65i of ehs5/6 chipset. Hierop kan je namelijk j2me applicaties draaien welke een sensor uitleest en dat verstuurd via ttmq. Dit is vrij eenvouding voor elkaar te krijgen. Bijvoorbeeld de mtx terminal serie van matrix. Ai/di/spi/i2c etc.

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 25-09 18:06
Sprite_tm schreef op maandag 25 augustus 2014 @ 23:17:
Hoe de RS232-link vaak werkt is door een PPP-verbinding op te zetten naar de modem. Daar kan je dan vrolijk TCP/IP overheen praten en MQTT daar weer overheen gooien.

Sommige modules (Wavecom doet het, staat me bij) kunnen ook dmv AT-commando's zelf een TCP-link opzetten. Als je daar je MQTT-data overheen kan flikkeren ben je ook waar je wezen moet. Da's echter minder universeel dan de PPP-oplossing.

Wat is je setup precies? Met welk device praat je met de modem?
Bedankt voor je reactie. Bij de meeste modems die ik heb bekeken wordt er inderdaad met AT-commando's gewerkt. Dit lijkt mij de simpelste (maar ook meest primitieve) oplossing omdat je hiervoor geen library of wrapper nodig hebt.

Voor de PPP toepassing heb je volgens mij al wel een library nodig omdat dit een stuk lastiger (maar dus ook meer met meer mogelijkheden) werkt?

De device's die we willen gebruiken zijn verschillend. We willen graag een standaard methode gebruiken voor zowel arduino's, rpi's maar ook sensoren die het prototype stadium al gepasseerd zijn. Mij lijkt dus dat RS232 i.c.m AT commands de makkelijkste oplosing is?

Verder heb ik ook zitten kijken naar het gebruik van een smartphone. Je hebt al android smartphones voor € 50, een heel stuk goedkoper dan GPRS modems (vanaf € 250). Is het eigenlijk niet veel handiger een applciatie te schrijven voor zo'n smartphone die data via RS232 ontvangt en dit dan zelf naar de server stuurt en weer feedback geeft over de RS232 verbinding?

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 25-09 18:06
eppie schreef op woensdag 27 augustus 2014 @ 19:27:
Je zou ook een modem kunnen gebruiken op basis van de gemalto tc65i of ehs5/6 chipset. Hierop kan je namelijk j2me applicaties draaien welke een sensor uitleest en dat verstuurd via ttmq. Dit is vrij eenvouding voor elkaar te krijgen. Bijvoorbeeld de mtx terminal serie van matrix. Ai/di/spi/i2c etc.
Bedankt voor je reactie, ik had zelf nog geen modems gezien waarop je zelf nog een J2ME applicatie kon plaatsen. In deze applicatie lees je dan de datastroom van de seriele poort uit en vervolgens verstuur je dit met je eigen applicatie?

Acties:
  • 0 Henk 'm!

  • Cassettebandje
  • Registratie: Juli 2002
  • Nu online

Cassettebandje

SA-C90 TDK

Allereerst: GSM modems, als je ze als module koopt, zonder behuizing e.d. dan zijn ze veel goedkoper.
Verder: je verhaal is nog wat vaag, je wilt iets met een modem en iets met MQTT en iets met sensoren, die drie dingen zitten elk op een verschillend niveau, namelijk je datalink, je protocol en je informatie. In principe zijn die dingen volledig onafhankelijk; je datalink heeft niets met een protocol te maken en de informatie die je verzendt heeft weer niets met je protocol te maken. De vraag "USB, RS232 of LAN, wat past het beste bij MQTT" is naar mijn mening daarom een rare vraag.

Waarom is het van belang weinig data te versturen? Zijn datakosten een motivatie? Een smartphone abbonnementje is niet duur; bij grotere aantallen kun je M2M abonnementjes nemen met heel lage kosten en een paar MB aan data, maar je vraagstelling suggereert niet dat je van plan bent honderden stuks van dit soort dingen weg te zetten.

RS232 met AT commands kan het makkelijkst zijn, maar dat hangt af van waar je vertrekt. Bij een microcontroller is dat je makkelijkste keuze: een serie intialisatie commando's; een "Open verbinding naar server ..." en je hebt een transparante TCP verbinding met je server waarover je dat MQTT kunt doen.
Dat vereist een GSM/GPRS modem (module) met een ingebouwde TCP stack. Dat is standaard bij een hele serie modules van bijvoorbeeld Telit, Enfora, Simcom, ublox, wavecom, enz...
Je kunt vrij nauwkeurig voorspellen hoeveel data verbruikt wordt; per keer moet je een keer een verbinding opzetten, een IP adres ophalen en dan wat data heen en weer sturen, dat heb je allemaal zelf in de hand.

Als je een hele computer ter beschikking hebt met Windows of Linux dan is een USB modem of LAN -GSM modem een mooie optie (maar RS232 technisch gezien niet uitgesloten). Let wel dat je dan op moet passen dat het besturingssysteem niet zomaar updates gaat binnenhalen over die verbinding. Met deze methode kun je gewoon in je software een TCP connectie openen naar je server, data uitwisselen en je bent klaar. Je krijgt waarschijnlijk wel meer dataverbruik omdat het besturingssysteem ook nog wat dingen zal doen wanneer het doorheeft dat er een internetconnectie is.

Vertel eens wat meer over de achtergrond, en wat je wilt bereiken misschien valt er dan wat meer te zeggen.

Verder: verwant aan J2ME: op Telit modems kun je Python code draaien en er zijn meer modems die het mogelijk maken om eigen code te laten uitvoeren.

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 25-09 18:06
@Springuin, bedankt voor je reactie. Ik heb de topic start aangepast aan de verkregen informatie, en wat duidelijker de probleemstelling geschetst.

Acties:
  • 0 Henk 'm!

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Wat jij beschrijft in jouw op topic start doe ik op mijn werk met TC65i/EHSx terminals :)

Op het modem plaatst ik dan een java applicatie die o.a. de ADC ingang uitleest (analoge niveau sensor), de waarden opslaat op flash en verstuurd via GPRS / 3G over TCP over een eigen simpel protocolletje. Zelfde geld voor de regenmeters. Deze bestaan meestal uit een tipping-bucket welke niets anders is dan een read contact. Kortom een di / counter ingang is voldoende. Ook deze is aanwezig op dit type modules en ik zet ook werkelijk deze modules in samen met een tipping-bucket of zelfs een distrometer via rs485.

Voordeel is dat je die hele microcontrollers waarschijnlijk niet meer nodig hebt en deze terminals kosten ronde de 100 euro.

De genoemde modems van Telit zijn inderdaad ook een optie en die draaien Python. Zelf minder ervaring met deze modules.

http://m2m.gemalto.com/products/terminals/tc65t.html - TC65 terminal met 10x gpio, 1x counter, 2x adc (0-2.4v)
Pagina: 1