Lehká teorie, aneb co vlastně chceme

Pro projekt, na kterém aktuálně pracuji, potřebuji vyřešit zdánlivě banální věc – potřebuji být schopen poslat SMS na zadané číslo. Akorát se to malinko začíná komplikovat s dalšími požadavky:

  • musím být schopen poslat SMS i v případě, že nefunguje Internetové připojení
  • musím být schopen poslat SMS v rozumně krátkém časovém horizontu
  • musím být schopen poslat SMS pomocí http api a na základě zprávy v rabbitmq
  • musím být schopen snadno škálovat a dosáhnout alespoň základní vysoké dostupnosti
  • a nechci za to dát stovky tisíc korun

Požadavky jsou to krásné, ale prakticky eliminují vše, jak se tento problém běžně řeší – internetové SMS brány a API operátorů jsou závislé na konektivitě ven, mobil připojený přímo k serveru má problémy se signálem v racku, normální sms brány jsou velmi drahé. Při brouzdání světem hardwarových sms bran jsem náhodou narazil na GSM modul SIM800L a to byl začátek myšlenky, že si sms bránu postavím sám.

Ovocný mobil na ploše poštovní známky

Modul SIM800L je vlastně radiová část mobilního telefonu. Obsahuje slot na sim kartu, konektor na anténu, porty pro připojení mikrofonu a reproduktoru a hlavně sériové rozhraní pro komunikaci. S rozměry cca. 25x25mm se jedná o opravdu miniaturní součástku, která ale řeší nejdůležitější část celé SMS brány – rozhraní mezi GSM sítí a mojí aplikací.

Teď už je potřeba pouze tenhle modul něčím řídit, přes něco do něj předávat data a nějak ho uchytit do racku. Rozhodl jsem se pro tyhle účely použít minipočítače Raspberry Pi, které mi poskytnou krásné rozhraní sít – modem, jsou levné, dají se snadno programovat a monitorovat a jejich výkon bohatě postačuje k odesílání stovek SMS za minutu, což je řádově víc, než budu potřebovat.

Dalo by se říct, že celý koncept je hotov – modem připojím 4 dráty k raspberry, to připojím do sítě, v pythonu napíšu daemona, co bude na jedné straně poslouchat na http a na rabbitovi a na druhé ovládat modem a hotovo. Ještě je ale potřeba vymyslet, jak to strčit do racku. Myšlenka krabičky volně ležící na polici se mi nelíbí, stejně jako spousta nabíječek. Existují sice rackmounty pro raspberry, ale ty staví na tom, že jenom poskytnou platformu pro šroubky, ale rozvody napájení, sítě apod. si každé raspberry řeší samo. Výsledek je ošklivá změť kabelů, nabíječek a bůh ví čeho ještě na místo krásně úhledné krabičky.

První konkrétní návrhy

Finální podoba brány, ke které se chci dostat, je následující:

  • 1U rackmount case
  • pouze 1 napájecí kabel, pouze 1 síťový kabel
  • prostor pro 4 raspberráky, každý s vlastním modemem, simkou a viditelností do sítě
  • na předním panelu vyvedeny USB, HDMI a GSM porty od všech raspberry a přívodní kabel sítě
  • podpora pro řízení větráků na základě teploty uvnitř boxu

Blokové schéma zapojení bude následující

Celková výroba SMS brány bude znamenat vyrobit několik custom plošných spojů, rackovou krabici, připravit software a udělat to celé pokud možno bezpečně. Nebude to úplně jednoduchý úkol, ale bude to zábava. Celý postup, zkoušení, slepé uličky a další zdokumentuji zde na blogu a můžete je i sledovat u mně na githubu v projektu https://github.com/SniperCZE/sms-gateway – postupně tam budu dávat veškerý HW, modely, schémata, part listy a samozřejmě kód SMS brány jako takové.

Elektronická část vznikne v KiCADu, modely krabice a sestavení ve FreeCADu a samotný kód sms brány bude python.