GRANT : Sensoric Net

Project status: ACTIVE Language:
Project owner[S]: OverdriveIvan_AhepjukDronCyberian
Interested: Dave@PageM. BargoDucharruzarainbofadelajka
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
DeviceIPRoleCredentialsLocationNotes
Database RAW data
Database AI post-product
Graphana
Sensor #VersionFunctionalContact to ownerTesting/ProductionNotes
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
  • To be addded by MICHAL

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)

https://github.com/dron23/SensoricNet-ansible

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

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                                                                          
  • sensenet.txt
  • Last modified: 2019/09/04 11:04
  • by over23