Daten über MQTT an solaranzeige und InfluxDB zur Anzeige mit Grafana passt nicht sauber

Die Verbindung zum Smart Home und Internet der Dinge (IoT)
Antworten
PFu
Beiträge: 4
Registriert: Di 30. Jun 2020, 13:43

Daten über MQTT an solaranzeige und InfluxDB zur Anzeige mit Grafana passt nicht sauber

Beitrag von PFu »

Mehrere Nodes senden Temperaturen und Luftfeuchtigkeit an das TheThingsNetwork. Über ein Python-Script hole ich die Messwerte dort per MQTT-Protokoll ab und schicke sie angepasst mit den richtigen Topics per MQTT an den Mosquitto der solaranzeige.
Das klappt insoweit, dass die Werte dort richtig ankommen.
Was nicht klappt, dass auf wundersame Weise zwischen den Meldungen die ich schicke, weitere Datensätze in die InfluxDB geschrieben werden. Leider weiss ich nicht woher diese kommen. Was ich feststellen kann, sie werden jede Minute geschrieben. Alle 5 Minuten kommt dann mein richtiger Datensatz an.
Hier mal zur Info und zum Nachvollziehen ein paar Zusatzinfos wie ich vorgehe.


Python Script holt Daten aus TheThingsNetwork und schiebt diese an den MQTT der solaranzeige

Code: Alles auswählen

('log: ', u"Received PUBLISH (d0, q0, r0, m0), 'pfu_badnode_weiherhuette/devices/pfu_bad_weiherhuette_node5/up', ...  (617 bytes)")
Messwerte gefunden
Taupunkt im Bad  :  7.5 °C
Luftfeuchtigkeit : 45.2 
Temperatur Bad OG: 19.7 °C
Temperatur Kammer: 25.5 °C
Wohlfühlfaktor   :  3
Übertragung Freq : 868.3



Hier die Anzeige des lokalen MQTT vo solaranzeige

Code: Alles auswählen

mosquitto_sub -h localhost -v -t solaranzeige/anzeige/box1/#
solaranzeige/anzeige/box1/wh_bad_og_taupunkt 10.6
solaranzeige/anzeige/box1/wh_bad_og_humidity 46.5
solaranzeige/anzeige/box1/wh_bad_og_wff 1
solaranzeige/anzeige/box1/wh_temp_technikkammer 13.0
solaranzeige/anzeige/box1/wh_bad_og_temp 22.7
solaranzeige/anzeige/box1/wh_bad_og_taupunkt 7.2
solaranzeige/anzeige/box1/wh_bad_og_humidity 46.2
solaranzeige/anzeige/box1/wh_bad_og_wff 3
solaranzeige/anzeige/box1/wh_temp_technikkammer 25.0
solaranzeige/anzeige/box1/wh_bad_og_temp 19.0
solaranzeige/anzeige/box1/wh_bad_og_taupunkt 7.2
solaranzeige/anzeige/box1/wh_bad_og_humidity 46.2
solaranzeige/anzeige/box1/wh_bad_og_wff 3
solaranzeige/anzeige/box1/wh_temp_technikkammer 25.4
solaranzeige/anzeige/box1/wh_bad_og_temp 19.1
solaranzeige/anzeige/box1/wh_bad_og_taupunkt 7.4
solaranzeige/anzeige/box1/wh_bad_og_humidity 46
solaranzeige/anzeige/box1/wh_bad_og_wff 3
Abfrage vom MQTT-Client an TheThingsNetwork holt die selben Daten

Code: Alles auswählen

mosquitto_sub -u pfu_badnode_weiherhuette -P ttn-account-v2.JxHuouIQPaK3gr3JK241L9blFqk4zGtP6YEE2ZDrlAI -h eu.thethings.network -d  -t 'pfu_badnode_weiherhuette/devices/pfu_bad_weiherhuette_node5/up'
Client mosq-dx21AZn8QMXBptUULC received PUBLISH (d0, q0, r0, m0, 'pfu_badnode_weiherhuette/devices/pfu_bad_weiherhuette_node5/up', ... (617 bytes))
{"app_id":"pfu_badnode_weiherhuette","dev_id":"pfu_bad_weiherhuette_node5","hardware_serial":"00347F943C4DA8AD","port":1,"counter":987,"payload_raw":"AgKPAlUBxAHbAw==","payload_fields":{"BadOG_Taupunkt":"7.5","DHT22_Humidity":45.2,"DHT22_Temperatur":"19.7","Externfuehler":"25.5","Wohlfuehlfaktor":3,"comfort":"es ist zu kalt","node":2},"metadata":{"time":"2020-09-01T20:48:23.38357292Z","frequency":868.3,"modulation":"LORA","data_rate":"SF7BW125","airtime":61696000,"coding_rate":"4/5","gateways":[{"gtw_id":"eui-c0ee40ffff297979","timestamp":3938987147,"time":"","channel":1,"rssi":-119,"snr":-4.8,"rf_chain":0}]}}
im user.config.php sind die topics angelegt:

Code: Alles auswählen

//  $MQTTTopic[1] = "solaranzeige/befehl/1/#";
//  Es können so viele Topics wie benötigt aufgeführt werden. Sie müssen nur
//  durch nummeriert werden [1] bis [n]
//  Bei Multi-Regler-Versionen muss zusätzlich noch die Gerätenummer angegeben
//  werden. Weitere Informationen finden Sie auf dem Support Forum.
$MQTTTopic[1] = "solaranzeige/befehl/1/#";
$MQTTTopic[2] = "solaranzeige/anzeige/box1/balkonsolar_leistung";
$MQTTTopic[3] = "solaranzeige/anzeige/box1/balkonsolar_strom";
$MQTTTopic[4] = "solaranzeige/anzeige/box1/balkonsolar_summe";
$MQTTTopic[5] = "solaranzeige/anzeige/box1/wh_ww_oben";
$MQTTTopic[6] = "solaranzeige/anzeige/box1/wh_ww_mitte";
$MQTTTopic[7] = "solaranzeige/anzeige/box1/wh_ww_unten";
$MQTTTopic[8] = "solaranzeige/anzeige/box1/wh_raum";
$MQTTTopic[9] = "solaranzeige/anzeige/box1/wh_bad_og_taupunkt";
$MQTTTopic[10] = "solaranzeige/anzeige/box1/wh_bad_og_humidity";
$MQTTTopic[11] = "solaranzeige/anzeige/box1/wh_bad_og_wff";
$MQTTTopic[12] = "solaranzeige/anzeige/box1/wh_temp_technikkammer";
$MQTTTopic[13] = "solaranzeige/anzeige/box1/wh_bad_og_temp";
//
Aber wenn ich checke mit
influx
use solaranzeige
select * from MQTT
bekomme ich immer die selben Daten, ohne Veränderung, jede Minute

Code: Alles auswählen

1598993655000000000                                                      1             
1598993657000000000                                                                    13.0
1598993659000000000                                       22.7                         
1598993711000000000                    10.6                                            
1598993713000000000 46.5                                                               
1598993715000000000                                                      1             
1598993717000000000                                                                    13.0
1598993719000000000                                       22.7                         
1598993770000000000                    10.6                                            
1598993772000000000 46.5                                                               
1598993774000000000                                                      1             
1598993776000000000                                                                    13.0
1598993778000000000                                       22.7                         
1598993830000000000                    10.6                                            
1598993832000000000 46.5                                                               
1598993834000000000                                                      1             
1598993836000000000                                                                    13.0
1598993838000000000                                       22.7                         
1598993890000000000                    10.6                                            
1598993892000000000 46.5                                                               
1598993894000000000                                                      1             
1598993896000000000                                                                    13.0
1598993898000000000                                       22.7                         
Allerdings, in der 5. Minute, wenn echte Daten vom TTN kommen, dann stimmt der Datensatz

Code: Alles auswählen

1598993912000000000                    7.5                                             
1598993913000000000 44.7                                                               
1598993914000000000                                                      3             
1598993915000000000                                                                    26.1
1598993916000000000                                       19.8                         

Warum wird jede Minute ein Fake-Datensatz geschrieben ?
Ohne Veranlassung wird ständig dieser Datensatz in die Influx Datenbank geschrieben:

Code: Alles auswählen

name: MQTT
time                wh_bad_og_humidity wh_bad_og_taupunkt wh_bad_og_temp wh_bad_og_wff wh_temp_technikkammer
----                ------------------ ------------------ -------------- ------------- ---------------------
1598994370000000000                    10.6                                            
1598994372000000000 46.5                                                               
1598994374000000000                                                      1             
1598994376000000000                                                                    13.0
1598994378000000000                                       22.7                         
Dabei ist durch die diversen subscribe_clients zu sehen, dass kein Datenverkehr stattfindet. Die in der Influx-DB ankommenden Daten werden nicht über das MQTT-Protokoll empfangen oder gesendet.


das geht über das MQTT PRotokoll:

Code: Alles auswählen

('log: ', u"Received PUBLISH (d0, q0, r0, m0), 'pfu_badnode_weiherhuette/devices/pfu_bad_weiherhuette_node5/up', ...  (617 bytes)")
Messwerte gefunden
Taupunkt im Bad  :  7.4 °C
Luftfeuchtigkeit : 43.7 
Temperatur Bad OG: 20.1 °C
Temperatur Kammer: 26.5 °C
Wohlfühlfaktor   :  3
Übertragung Freq : 868.1
------------------------

das steht in der INflux-Datenbank:

Code: Alles auswählen

1598994370000000000                    10.6                                            
1598994372000000000 46.5                                                               
1598994374000000000                                                      1             
1598994376000000000                                                                    13.0
1598994378000000000                                       22.7                         
1598994430000000000                    10.6                                            
1598994432000000000 46.5                                                               
1598994434000000000                                                      1             
1598994436000000000                                                                    13.0
1598994438000000000                                       22.7                         
1598994490000000000                    10.6                                            
1598994492000000000 46.5                                                               
1598994495000000000                                                      1             
1598994497000000000                                                                    13.0
1598994499000000000                                       22.7                         
1598994518000000000                    7.4                                             
1598994519000000000 43.7                                                               
1598994520000000000                                                      3             
1598994521000000000                                                                    26.5
1598994522000000000                                       20.1                         
1598994551000000000                    10.6                                            
1598994553000000000 46.5                                                               
1598994555000000000                                                      1             
1598994557000000000                                                                    13.0
1598994559000000000                                       22.7                         
Danach kommen wieder mehrere Fake-Datensätze.

Ich werd' zum Hirsch. Die Grafik in Grafana sieht natürlich entsprechend blöd aus.

Wo kann ich anfangen mit suchen ?

Gruss aus dem Hotzenwald
Peter

Benutzeravatar
Ulrich
Administrator
Beiträge: 1488
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Kontaktdaten:

Re: Daten über MQTT an solaranzeige und InfluxDB zur Anzeige mit Grafana passt nicht sauber

Beitrag von Ulrich »

Hallo Peter,

ich glaube du musst dich noch etwas mehr mit MQTT beschäftigen. Wenn Du Daten zur Solaranzeige sendest, dann sollten die Topics nicht gerade die selben Topic Namen haben, wie die Solaranzeige sie verwendet. Die Einträge die du minütlich im Broker siehst, sind die Daten die die Solaranlage aus dem Gerät ausliest. Die Übertragung zum Broker könntest du stoppen, macht aber nichts aus wenn sie gesendet werden. Der Broker löscht die sowieso, wenn sie nicht gebraucht werden. Sie beginnen mit dem Topic Namen solaranzeige/box1/....
Daran kannst Du sie erkennen.

D.h. aber, dass du deine Daten nicht solaranzeige/box1/... nennen darft, sondern solaranzeige/irgendwas/....
und in die user.config.php musst du dann eintragen:

$MQTTTopic[1] = "solaranzeige/anzeige/irgendwas/balkonsolar_leistung";
$MQTTTopic[2] = "solaranzeige/anzeige/irgendwas/balkonsolar_strom";
$MQTTTopic[3] = "solaranzeige/anzeige/irgendwas/balkonsolar_summe";

Weitere Informationen findes du im Dokument: download/MQTT%20Informationen%20zur%20Solaranzeige.pdf
--------------------------------------
Ulrich [Admin]

PFu
Beiträge: 4
Registriert: Di 30. Jun 2020, 13:43

Re: Daten über MQTT an solaranzeige und InfluxDB zur Anzeige mit Grafana passt nicht sauber

Beitrag von PFu »

Danke Ulrich,
ich habe es wie vorgeschlagen geändert.
Statt

Code: Alles auswählen

solaranzeige/anzeige/box1/
nutze ich jetzt

Code: Alles auswählen

solaranzeige/anzeige/wh/
Das habe ich in er

Code: Alles auswählen

user.config.php
unter

Code: Alles auswählen

$MQTTTopic[n]
und in meinen Scripten so angepasst.
Funktioniert und sieht gut aus.
Danke für deine Hilfe.
Gruss
Peter

Benutzeravatar
Ulrich
Administrator
Beiträge: 1488
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Kontaktdaten:

Re: Daten über MQTT an solaranzeige und InfluxDB zur Anzeige mit Grafana passt nicht sauber

Beitrag von Ulrich »

Auch positive Antworten sind immer willkommen. SUPER! :D :D
--------------------------------------
Ulrich [Admin]

Antworten