Firmware "node-wifi-mqtt" überträgt Sensorwerte als Strings

Mit node-wifi-mqtt (JSON Branch) und kotori 0.11.4 werden nun Daten per MQTT in die InfluxDB geschrieben, allerdings als Strings statt Float. Mit Grafana lässt sich das dann nicht plotten. Jedenfalls bekomme ich Grafana nicht dazu überredet.

> show field keys
name:           pdm_hive1_sensors
fieldKey	    fieldType
airhumidity     string
airtemperature  string

Soweit für heute. Gruß

Hi Matthias,

ja, das ist ein beliebter Stolperstein, über den wir fast alle ausnahmslos schonmal gefallen sind. Darf ich fragen, wie Du die Daten erfasst und auf den MQTT Bus schreibst? Wenn Du mit Python arbeitest, ist "float(value)" das Teil der Wahl, um die Werte vorher passend in das Fließkommaformat zu bringen.

In der Datenbank selbst lassen sich einmal angelegte Felder meines Wissens nicht mehr korrigieren. InfluxDB verfolgt hier aus meiner Sicht etwas ähnliches wie die dynamische Typisierung bei Programmiersprachen: Man muss zwar kein explizites Schema vorab definieren, aber sobald Felder implizit angelegt wurden, behalten sie das Datenformat des erstmaligen Datenpunkts.

Folgende Speicherversuche im richtigen Datenformat (float) in die selbe Datenbank schlagen dann leider fehl und da Kotori an dieser Stelle noch keinen adäquaten Rückmeldemechanismus besitzt, bekommt man diesen edge case leider auch von außen nur sehr schlecht zu sehen.

Solange man im Trockendock unterwegs ist, behelfen wir uns dann meist insofern, nach der Verbesserung des Datenerfassungsprogramms den MQTT Topic zu wechseln (z.B. einfach den “network” identifier geringfügig abändern), damit wird automatisch eine andere Datenbank benutzt, die frei von den falsch abgelegten Daten ist.

Dieses Thema hatten wir w.g. mit anderen Teilnehmern schön öfters und sind anfangs auch selbst schon ein paarmal in den Fehler reingelaufen. Wir hoffen Dir hilft die Erklärung weiter und danken abermals für den Impuls, das nun auch hier im Forum ausformulieren zu können.

Viele Grüße,
Andreas.

P.S.: Siehe dazu auch:

Sorry, Du hattest ja erwähnt, dass Du das aktuelle node-wifi-mqtt verwendest.

Du hast recht, die Daten werden aus den C character arrays heraus vermutlich als Strings auf den MQTT Bus übertragen. Wir werden nachsehen, warum das dann mit den identischen Komponenten überhaupt schon einmal bei @karsten funktioniert haben kann.

Herzlichen Dank für Deine Spürnase mal wieder!

P.S.: Passend zum Thema:

via: Analysis of a production bug (Geek&Poke)

1 Like

Ah, Du nutzt den JSON Branch. Danke für die Info! Ja, den hatte ich vor einiger Zeit mal dort hingelegt, aber meines Wissens nach hat den noch niemand produktiv getestet, sonst wäre uns das Malheur auf Backendseite vermutlich aufgefallen. Please hold on, wir werden sehen, was wir tun können.

Und abermals danke: Sobald das Ding bei Dir fehlerfrei läuft, können wir die - aus meiner Sicht bessere Variante - in den master branch mergen.

Bis morgen,
Andreas.

1 Like

Hab Grafana nun doch überreden können, die Daten zu plotten. Dafür muss das DB Query von den default Klauseln befreit und reduziert werden auf zB. SELECT "airtemperature" FROM "pdm_hive1_sensors"

Ok, wir müssen uns aber natürlich noch um die eigentliche Ursache kümmern. Die Daten sollten schon “ordentlich” in der Datenbank untergebracht werden. Super, dass Du Dir einstweilen selber helfen konntest. Dass Grafana das so beherrscht, wussten wir auch noch nicht.

1 Like

Ist das Problem in der Firmware oder Kotori zu suchen?

Es liegt am Quelltext der Firmware, die ich damals nur im Trockendock (Skiurlaub) überarbeitet hatte und bislang ungetestet war. Deshalb war sie auch noch in einem alternativen Branch untergebracht. In diesem Fall warst Du das Versuchskaninchen, sorry dafür. Bislang habe ich es leider auch noch nicht geschafft, den Quelltext zu verbessern.

Traust Du es Dir vielleicht zu, es unter Anleitung selbst zu versuchen?

Versuchen können wir es. Bevor die Bienensaison mit der Kirschblüte richtig startet, würde ich gerne ein funktionierendes Setup haben ohne die Messreihe bis - sagen wir - August zu unterbrechen.

Hi Matthias,

vielleicht klappt es mit dieser Änderung ja schon:
https://github.com/hiveeyes/arduino/commit/05bf2f94

Hier der Direktlink zur aktualisierten Datei:
https://github.com/hiveeyes/arduino/blob/node-wifi-mqtt-json/node-wifi-mqtt/node-wifi-mqtt.ino

Versuchst Du es? Wir drücken die Daumen!

Herzliche Grüße,
Andreas.

Nachtrag: Wir haben vor kurzem zusammen mit @Alex die MQTT Authentifizierung eingeführt:

Du kannst nun zwar auf “hiveeyes/testdrive/” weiterhin anonym Daten publizieren, für einen eigenen Topic brauchst Du jedoch passende Authentifizierungsdaten. Ich lasse Dir gleich entsprechende zukommen.

P.S.: In Deinem lokalen Setup musst Du natürlich keine Authentifizierung verwenden, wenn Du am Mosquitto Broker keine ACLs konfiguriert hast.

Hui. Das ging ja fix. Ich hoffe, morgen abend Zeit dafür zu finden. Danke schon mal. o/

Das funktioniert nun wunderbar. Mein Feather HUZZAH sendet float Werte an meinen Broker. \o/

Exzellent! Vielen Dank für die positive Rückmeldung. Herzlichen Dank auch an @gtuveri fürs mit anpacken!