Int und float per MQTT mit nodeMCU publishen?

  • Mahlzeit zusammen,

    aktuell bin ich in der Testphase für mein Smarthome Projekt.
    Ich hänge gerade ganz gewaltig an dem Punkt, dass ich Int und Float Werte per MQTT an den Broker schicken will, aber leider wohl nur Char und String gehen.

    Ich nutze einen nodeMCU V2 programmiert über die Arduino IDE und nutze die Bibliothek EspMQTTClient die auf der PubSubClient.h aufbaut.
    bei den ersten Werten die einfach nur im Dashboard angezeigt werden sollte habe ich die DAten nach dem Auslesen einfach in einen String umgewandelt und da war das auch erstmal ok.
    Nun habe ich aber Werte (aus einem Gewächshaus) welche ich als Zahlen (int und float zunot nur int) übertragen möchte, da diese auch als Graph angezeigt und vergleichen werden sollen.

    Beim übertragen der Daten mit client.publish(<channel>,<payload>) wird als Payload so nur eine Zeichenkette in " oder eine Variable die einen String enthält angenommen.

    Hat jemand eine Idee wie ich die Zahlenwerte übermittelt bekomme?

    Danke und Gruß
    Mario

  • Hallo Mario,

    ich sende den aktuellen Stromverbrauch der Waschmaschiene so zum Broker.

    Code
    float Ieff0 = 1.23;
    mqtt.publish(mqttTopicCurrent0, String(Ieff0).c_str());

    NodeRed schreibt das dann in eine Datenbank (InfluxDB) und Grafana visualisiert das ganze.


    Hoffe ich konnte weiterhelfen

    Gruß
    Daniel

  • Mahlzeit open-electronics
    Erstmal danke für den Hinweis. c_str() macht doch "nur" aus dem C++ String einen C String.
    Mein Problem hier ist wohl, dass ich bisher kein NodeRed habe und mich damit nicht auskenne.

    Ich habe gerade die InfluxDB und Grafana nach der Anleitung von ST33YZ Media installiert. Und sollte soweit auch laufen, aber im Graphen bekomme ich halt die Meldung "No Data".

    Nutzt Du dann NodeRed um den String in einen Int umzuwandeln und dann in die DB zu schreiben?

    Hier das Video nachdem ich vorgegangen bin:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • richtig, c_str() macht aus einem String Objekt eine einfache Zeichenkette die mit '/0' endet. Damit kann client.publish erst was anfangen.

    Das "no Data" in Grafana lag bei mir mal an dem Eintrag bei "Group by", ich kann aber grad nicht sagen was man da alles einstellen kann.

    Ich denke das der Influx Node das zu nem float oder int konvertiert, wissen tu ichs aber nicht. Ich kann später mal nen Screenshot machen.

    Wie man das in openHab anstellt kann ich dir leider nicht sagen.

    Gruß

    Daniel

  • Hallo,


    MQTT kennt doch gar keine verschiedenen Datentypen beim Payload. Sprich: du musst dich wohl beim Empfänger selber um die Konvertierung kümmern.

    Gruß, noisefloor

    Das Problem liegt hier bei der Bibliothek zu MQTT, wie schon im Eingangspost geschrieben wird beim Publish nur ein String oder ConstChar akzeptiert.
    Man muss hier die Payload entweder in "" schreiben, oder eine Variable aufrufen welche eine Zeichenkette enthält.

  • Mahlzeit noisefloor

    Ok, dann muss ich wohl weiter suchen, zunot wie oben angesprochen mit NodeRed oder so.

    Gerade schon geschaut, aber influxdb kann nur float zu int convertieren, keine string zu int oder float.
    Hab schon versucht den Channel neu zu erstellen und als Valure halt Number zu nutzen. Im Dashboard werden weiter die Zahlen angezeigt, aber in grafana bekomme ich noch immer die Meldung "No Data".

  • Hallo Mario,

    so sieht bei mir die Einstellung für den Graphen aus, da ich Sonntag zum letzten mal gewaschen habe stand bei mir auch "no Data", weil die letzten 24 Stunden keine Werte gepublisht wurden. Der Graph ist von letztem Sonntag, man sieht schön das die Maschiene um 10:10Uhr fertig war und dann noch 5 mal die Wäsche umgedreht hat bis ich sie ausgeräumt habe.


    Auch wenns für dich nicht relevant ist, so siehts in NodeRed aus, aktiv muss man die Werte nicht zu float wandeln, das scheint der Influx Node zu machen, denn wenn ich mich recht erinnere musste ich in InfluxDB nichts dazu installieren oder einstellen.

    Ich bin jetzt nicht sicher wie weit das jetz bei dir läuft, aber zerlege das in Teilprobleme.

    Werden dir Werte angezeigt wenn du direkt in die Datenbank gehtst ohne Grafana?

    Ich finde mqttSpy sehr nützlich, da kann man vom Laptop aus Topics lesen und schreiben, würde z.b. mögliche Probleme mit dem Arduino aufdecken.


    Gruß
    Daniel

  • Es läuft !
    Die Lösung ist so verdammt einfach... das ist schon wieder peinlich.
    Aber ich schreibe es trotzdem hier mal, vielleicht hilft es mal wem anders.

    Wie noisefloor schon schrieb kennt MQTT eigentlich nur Zeichenketten.
    Daher muss man einfach nur den Channel auf Number und nicht auf Text einrichten.
    Ich musste die Datenbank dann nochmals leeren. Als diese wieder gefüllt wurde ging es.

    Also am besten schon vorher auf Number.
    Ich hatte halt den Channel auf Text gemacht, weil ich ja nen String übergebe.

    Jetzt habe ich nur gerade das Problem, dass im FF das Frame nicht angezeigt wird mit der Meldung "Blockiert durch X-Frame-Options-Richtlinie"

    Aber das bekommt man wohl auch noch hin, denn wenn ich es im Fullscreen anzeigen lasse geht es, es mag also nur das frame als solches nich!

    // EDIT
    Problem gelöst.
    In der /etc/grafana/grafana.ini ist der Eintrag allow_embedding den man auf true setzten muss.
    Dann nur noch grafana neu starten und alles ist fine.

    An dieser Stelle aber nochmals besten Dank an auch alle!

    Einmal editiert, zuletzt von Mario Be (16. April 2020 um 19:17) aus folgendem Grund: Nachtrag wegen gelösten Problem

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!