GRANT : Sensoric Net
Project status: | ACTIVE | Language: | |
Project owner[S]: | Overdrive – Ivan_Ahepjuk – Dron – Cyberian | ||
Interested: | Dave@Page – M. Bargo – Duchar – ruza – rainbof – adelajka | ||
Related: | Video z POLAR TV, ktere vysvetluje, co delame, zacina kolem 05:48 | ||
Linkz: | https://en.wikipedia.org/wiki/USB_dead_drop; https://deaddrops.com/db/?page=map | ||
License: | CLOSED SOURCE && afetr all core mebers goes ti public domain as viral GPL3 or higher Uveďte původ-Zachovejte licenci CC BY-SA |
INFRA CMDB
Device | IP | Role | Location | Notes | |
Database RAW data | |||||
Database AI post-product | |||||
Graphana | |||||
Sensor HW + Communication
Sensor # | Version | Functional | Contact to owner | Testing/Production | Notes |
sensoricnet-lora-0001 | <1.0 | yes | Dron | testing | Lora, Opava |
sensoricnet-lora-0002 | <1.0 | yes | Dron | testing | Lora, Opava |
sensoricnet-lora-0004 | <1.0 | no | Dron | testing | Lora, Opava, vyple |
NBIOT-0007 | <1.0 | no | martin_rysavy@centrum.cz | bad sensor | |
NBIOT-0022 | 1.0 | nevi se | testing | OPC-N2 176861009 | |
NBIOT-0028 | 1.0 | no - see debugg chapter | martin_rysavy@centrum.cz | testing | OPC-N2 176861006 |
NBIOT-0029 | 1.0 | yes - without BME280 | mdostal.cz@gmail.com | OPC-N2 176861014, umisten v Labce, schazi BME280 | |
NBIOT-0030 | 1.0 | yes | testing | OPC-N2 176861013, umisten v Labce za oknem | |
NBIOT-0031 | 1.0 | yes | over@labka.cz, 721 007 507 | testing/showtime | OPC-N2 176861006 |
Sensoric Firmware + Protocols
- Overall LABKA MASTER branch GIT:
- Ivan Ahepjuk GIT: https://github.com/ivanahepjuk/SensoricNet-particle-meter
- Dron GIT: https://github.com/dron23
- SensoricNet API: https://github.com/dron23/SensoricNet-api
- Překladač NBIoT udp packetu na (TTN) API call: https://github.com/dron23/SensoricNet-udp
- Příjem MQTT zpráv a jejich ukládání do InfuxDB (Grafana): https://github.com/dron23/SensoricNet-mqtt-influxdb
- Ansible playbooky pro nasazení infra https://github.com/dron23/SensoricNet-ansible
- Forknuté repo ze kterého dělám pull requesty zpět do Ivanova SensoricNet-particle-meter https://github.com/dron23/SensoricNet-particle-meter
- DavePage: SensoricNet mapy https://github.com/daveOVApage/SensoricNet-maps
- Marx GIT:
- Cyberian GIT: https://github.com/0xB800/SensoricNet-particle-meter (old version)
Power Input and power supply
- 6V/250milA
- potrentially usable bathery [4days]: https://www.dstechnik.cz/specialni-6v-akumulator-20ah-pro-napriklad-nemocnicni-luzka-el-vozitka/alarmguard-aku-6v-20ah-6272.html
Boxing [cad, 3d printing sources]
- To be addded by MICHAL
Logic + related links + PR
Related documents + specification
SensoricNet backend
Backend se skládá z několika komponent, které řeší dílčí kroky v toku dat backendem. Celý backend je schematicky znázorněn na obrázku.
Primární zdroj dat jsou data ze senzorů odesílaných ze sítě NBIoT, ale backend je psán i s ohledem na kompatibilitu se sítí LoRaWAN a komunitním projektem The Things Network (TTN).
Příjem dat ze sítě NBIoT
Senzory jsou připojeny do sítě pomocí modulu Quectel a vybaveny SIM kartou. NBIoT síť Vodafone přijme data ze senzoru a odesílá je ve formě UPD packetu na předdefinovanou IP adresu našeho „network serveru“, který je ale realizovaný relativně jednoduchým daemonem (projekt SensoricNet-udp), který naslouchá na portu a přijatá data dekóduje. Pro enkódování používáme Cayenne Low Power Payload (LPP)1 metodu. Data jsou dále odeslána jako http POST požadavek ve formátu JavaScript Object Notation (JSON) našemu „aplikačnímu serveru“ (projekt SensoricNet-api), který má implementované REST API, které je schopno takto odeslaná data rozparsovat, uložit a odeslat je k dalšímu zpracování.
Při návrhu aplikačního serveru námi stanovené priority byly
- ukládání měřených hodnot i všech metadat do relační databáze
- odesílání dat k dalšímu zpracování pomocí protokolu MQTT
- interakce s okolím pomocí REST API
- kompatibilita s metodou „HTTP Integration2“ network serveru TTN
- opensource
Pro realizaci jsme zvolili vcelku konzervativní prostředky – network server i aplikační server je napsán v jazyce PHP, použitá relační databáze je MariaDB, distribuce dat k dalšímu zpracování je řešena pomocí Mosquitto-PHP knihovny. MQTT broker je nainstalován na samostatném serveru a v současné době jediné další zpracování dat spočívá v jejich ukládání v InfluxDB3 a vizualizaci pomocí nástroje Grafana. Pro ukládání dat přijatých po MQTT do InfluxDB slouží další jednoduchý daemon, tentokrát napsaný v Pythonu (projekt SensoricNet-mqtt-influxdb). Grafana zatím nemá doménové jméno a je dostupná na adrese http://193.84.207.67:3000.
Jelikož mají senzory implementovaný GPS přijímač (který se letos povedlo zprovoznit), tak vznikla i vizualizace umístění senzorů na mapě (projekt SensoricNet-maps), která využívá api aplikačního serveru. Mapa se nachází na adrese https://lightstar.stud.slu.cz/map/.
Zdrojové kódy
Všechny softwarové komponenty jsou umístěny veřejně na serveru github. Konkrétně:
• SensoricNet-udp (překladač UDP packetu z NBIoT na API volání, realizace downstream komunikace) - https://github.com/dron23/SensoricNet-udp • SensoricNet-api (aplikační server) - https://github.com/dron23/SensoricNet-api • SensoricNet-mqtt-influxdb (příjem MQTT zpráv a ukládání dat do InfluxDB) - https://github.com/dron23/SensoricNet-mqtt-influxdb • SensoricNet-maps (vizualizace umístění senzorů na mapě) - https://github.com/daveOVApage/SensoricNet-maps • SensoricNet-ansible (automatizace nasazení aplikačního a InfluxDB/Grafana serveru)
SensoricNet API
učešu později… TODO
obecně zevrubná dokumentace není, protože celé to API je zatím jen nástřel nějaké funkcionality a je implementované jen to nejnutnější. Očekával jsem, že se to bude ještě dost měnit. Teď už to tak nevypadé. Pro přehled o voláních a parametrech nejlépe nahlédnout přímo do zdrojáku.
https://github.com/dron23/SensoricNet-api/blob/master/src/SensoricNetRestApi.php
Vložení dev-id do DB
Dela se to vcelku jednoduse pres api call
PUT https://lightstar.stud.slu.cz/api/sensoricnet/sensors/<dev-id>
(za dev-id je treba dosadit napr. nbiot-0030)
samozrejme je k tomu potreba znat api kredence.
pouziva se basic auth
ja pouzivam RESTED plugin ve firefoxu, ale klidne staci curl
curl -i --user "cyberian:***password***" -H "Content-Type: application/json" -H "Accept: application/json" -X PUT https://lightstar.stud.slu.cz/api/sensoricnet/sensors/nbiot-0022
HTTP/1.1 200 OK Date: Wed, 10 Jul 2019 20:26:38 GMT Server: Apache/2.4.39 (IUS) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 X-Powered-By: PHP/7.0.33 Pragma: no-cache Cache-Control: no-cache, must-revalidate Expires: 0 Transfer-Encoding: chunked Content-Type: application/json { "status": "ok" }
no a to je vlastne cele. Vytvarej jen senzory co opravdu potrebujes, at se to zbytecne nezasira… Nove vytvoreni existujiciho senzoru nic nerozbije (ale prepise dashboard v grafane, pokud si v nem delal nejake custom zmeny)
api na vypis zavedenych senzoru existuje, ale vypisuje vsechny merene hodnoty, tak takhle si to muzes grepnout zhustene…
curl -i --user "cyberian:***password***" -H "Accept: application/json" -X GET https://lightstar.stud.slu.cz/api/sensors | grep devId | sort | uniq
ale existuje vlastne i API call
GET https://lightstar.stud.slu.cz/api/sensors/simple
kterej ti vrati primo zavedene senzory, delal sem ho kvuliva zabbix monitorovani a uz sem racil pozapomenout
Money + Project
- Mailing List: https://lists.webdroid.cz/mailman/admin/sensoric_net
- IRC channel: chat.freenode.net / #sensoric_net / pwd: KazdoPicoPadne23 [/MODE #sensoric_net +k KazdoPicoPadne23; /join #sensoric_net KazdoPicoPadne23; v konfiguraku irssi: { name = “#sensoric_net”; chatnet = “freenode”; password = “KazdoPicoPadne23” autojoin = “yes”; } ]
Contacts + 3rd party
ToDo + Help Needed
* Enviro Hackaton : internet mrtvych veci
Database- pekopat zvlast data-model, zvlast infrastruktura, tedy typ databaze, serverova cast…
* [[http://webcache.googleusercontent.com/search?q=cache:Qjx60gNk0wsJ:www.wellnessair.cz/mereni-koncentrace-co2-ve-skolni-tride-v-zs-polna+&cd=1&hl=en&ct=clnk&gl=uk|http://webcache.googleusercontent.com/search?q=cache:Qjx60gNk0wsJ:www.wellnessair.cz/mereni-koncentrace-co2-ve-skolni-tride-v-zs-polna+&cd=1&hl=en&ct=clnk&gl=uk
Debug
Ke čtení debug informací je vyhrazen seriový port vyvedený na konektoru J17, piny 13(TX) a 14(RX). Pokud nemáte v počítači sériový port, pak je potřeba převodník z USB na sériový port s TTL úrovněmi např. FTDI USB to TTL serial converter module. Jumper máme přehozený na 3,3V. Piny RX, TX se samozřejmě připojují křížem: RX←TX, TX→RX. K tomu je potřeba připojit ještě GND pin.
Nastavení portu, jak je vidět z minicomu (použít můžete jakýkoliv telnetový program) je 57600 baudů, 8 bitů bez parity, 1 stop bit. Název portu zjistíte z výpisu jádra příkazem dmesg. V našem případě je to /dev/ttyUSB0. Parametr -s u minicomu spustí nastavení.
apt install minicom dmesg minicom -s +-----------------------------------------------------------------------+ | A - Sériové zařízení : /dev/ttyUSB0 | | B - Umístění zámku : /var/lock | | C - Program pro příchozí volání: | | D - Program pro odchozí volání : | | E - Bps/Par/Bity : 57600 8N1 | | F - Hardwarová kontrola toku : Ne | | G - Softwarová kontrola toku : Ne | | | | Vyberte písmeno: | +-----------------------------------------------------------------------+
DEBUG: tady DEBUG: IoT module hw reset DEBUG: IoT module hw reset done DEBUG: NBIoT site connect AT+CFUN=1 ERROR AT+CFUN=1 ERROR AT+CFUN=1 ERROR AT+CFUN=1 ERROR