Seite 1 von 2

Werte an MQTT senden

Verfasst: 4. Mär 2026 19:36
von iTob
Hallo,
ich habe ein thing definiert:

Code: Alles auswählen

Thing topic gaszaehler "Gaszaehler"{
        Channels:
        Type string:wert "Gaszaehler Wert" [stateTopic="Gaszaehler/Wert", commandTopic="Gaszaehler/Wert", retained=true]
    }
}
und dazu ein Item:

Code: Alles auswählen

Number gz_mqtt_wert "Gaszaehler" {channel="mqtt:topic:MQTTBrokerGZ:gaszaehler:wert" [profile="transform:DSL", toItemScript="| input.replace(' ','')"]}
Ein Arduino liest diesen Wert immer am MQTT Server aus und zählt bei der Umdrehung des Gaszählers eines hoch.

Ich hatte den Wert im Openhab immer nachts in der Influxdb gespeichert und zurück auf 0 gesetzt:

Code: Alles auswählen

gz_mqtt_wert.sendCommand(0)
Seit geraumer Zeit kommt diese Wertänderung nicht mehr auf dem MQTT Mosquitto Server an. Nur innerhalb vom Openhab wird der Wert auf 0 gesetzt, sobald der Server die Zahl ändert, dann kommt der geänderte Wert wieder vom Server im Openhab an.

Der Arduino kann den Wert nach wie vor ändern und per mqtt-spy kann ich auch manuell den Wert einstellen.

Ich finde einfach keine Ursache für das Phänomen, warum openhab die Änderung nicht an den Server sendet. Kann mir jemand helfen?

VG, Tobais

Re: Werte an MQTT senden

Verfasst: 5. Mär 2026 05:09
von Harka
Moin,
commandTopic Ist nie gleich stateTopic.

Re: Werte an MQTT senden

Verfasst: 5. Mär 2026 17:44
von iTob
OK,
und wie kann ich dann den Wert an den MQTT Server senden?
Er soll mir hier den Inhalt MQTT vom Pfad Gaszaehler/Wert anzeigen und ggf genau diesen Wert auch setzen.
VG, Tobias

Re: Werte an MQTT senden

Verfasst: 5. Mär 2026 20:34
von Harka
Moin,
habe mir jetzt mal die Zeit genommen und ein wenig rum gespielt. Das mit dem gleichem Topic ist zwar falsch aber hier nicht die Ursache. Sieht so aus als wenn hier im Profil noch ein commandFromItemScript hin muß. Versuch mal

Code: Alles auswählen

[profile="transform:DSL", toItemScript="| input.replace(' ','')", commandFromItemScript="| input" ]
PS: so richtig kapier ich Deine ganze Herangehensweise aber nicht.

Re: Werte an MQTT senden

Verfasst: 6. Mär 2026 15:52
von iTob
Vielen Dank.
Ich glaube, das funktioniet so wirklich. Wo bzw wie finde ich denn dazu eine Anleitung im Internet?

Kurz zur Erklärung:
Der Gaszähler hat keinen digitalen Ausgang. Er kann bei jeder Umdrehung einen reed-Kontakt auslösen. Dazu habe ich einen Arduino verwendet. Der liest einen mqtt Wert und rechnet immer eins dazu. Im openhab speicher ich nachts immer den Tagesverbrauch und setze diesen Wert zurück. So ist das enstanden.
Daher kommt auch der Gedanke, den Wert zu lesen, zu speichern und zurückzusetzen. Und das ist dann eben immer der eine Wert.

Re: Werte an MQTT senden

Verfasst: 6. Mär 2026 17:16
von Harka
Super
War eine Lösungssuche nach Schema Versuch und Irrtum. Info: https://www.openhab.org/docs/configurat ... igurations
Ich fand den Weg mit dem Zurücksetzen des Zählers einfach zu aufwändig. Mit der Persistenz kann man den Tagesverbrauch ja auch so bestimmen. Wichtig ist, dass du erreicht hast, was du wolltest.

Re: Werte an MQTT senden

Verfasst: 6. Mär 2026 19:10
von udo1toni
iTob hat geschrieben: 6. Mär 2026 15:52 Der Gaszähler hat keinen digitalen Ausgang. Er kann bei jeder Umdrehung einen reed-Kontakt auslösen.
Viel digitaler als ein Impulsausgang geht es nicht. ;)

Du zählst Impulse, wobei ein Impuls einer vollen Umdrehung der letzten Stelle des Zählwerks entspricht, also üblicherweise 10 Litern Gas (die dritte Nachkommastelle zeigt Liter an, eine Umdrehung entspricht also 10 Liter)
Durch das tägliche Zurücksetzen des Zählers kannst Du (ohne zusätzlichen Aufwand) nur die tägliche Gasmenge anzeigen (und für den aktuellen Tag die seit 0 Uhr kumulierte Gasmenge).
Sinnvoller wäre vermutlich, den Zähler gar nicht, oder nur selten zurückzusetzen. Dazu muss der Zähler in BigInteger zählen, oder Long oder so was in der Richtung. Dafür kannst Du aber auch den aktuellen Zählerstand direkt im Arduino hinterlegen, und vorausgesetzt, der Impuls wird zuverlässig erkannt, erhältst Du die korrekte Zähleranzeige. Der Arduino braucht nur wenig Energie, Du kannst ihn also auch bequem mit einer Batterie puffern, so dass selbst bei einem längeren Stromausfall der Zählerstand nicht verloren geht, lediglich die zeitliche Auflösung funktioniert dann nicht, aber wenn der Strom wieder da ist (und der mqtt-Server und openHAB wieder laufen) bekommst Du den aktuellen Zählerstand übermittelt und alles passt.

Nun musst Du in openHAB nur den Zahlenwert mit everyChange persistieren und kannst danach ab dem ersten erfassten Zeitpunkt beliebige Zeiträume betrachten, also z.B. Monatsverbrauch letzter Februar verglichen mit Monatsverbrauch dieser Februar, oder auch den durchschnittlichen stündlichen Verbrauch der letzten 7 Tage usw.

Re: Werte an MQTT senden

Verfasst: 7. Mär 2026 17:46
von iTob
Das wäre durchaus auch sinnvoll, aber ich hatte von Anfang an gelegentlich Probleme mit dem Reed-Kontakt und wenn nicht jede Umdrehung mitgezählt wird, dann müsste ich meinen gespeicherten Zählerstand ja immer wieder "nachstellen".
Deshalb hatte ich mich erst mal für den täglichen Wert entschieden.

PS: Ich glaube, ich sollte mir doch mal die Zeit nehmen, blockly anzusehen... :-)

Re: Werte an MQTT senden

Verfasst: 8. Mär 2026 17:28
von udo1toni
Hast Du einen "Eigenbau" Reed Kontakt?
Damit hatte ich auch immer wieder Probleme.
Ich habe (auch wenn das Modul unverschämt teuer ist... damals knapp 20 €) einen "Original" Reedkontakt erworben, damit läuft der Zähler perfekt.
Ich hatte tatsächlich nicht den Nerv, meine wackelige Eigenkonstruktion mechanisch perfekt auszurichten.
Das Modul enthält zwar auch nur den Reedkontakt und "ein bisschen Draht", aber dafür ist der Kontakt exakt an der richtigen Position und exakt ausgerichtet (und das Kunststoffgehäuse bietet mechanischen Schutz)

Hätte ich einen 3D-Drucker, hätte ich vielleicht mehr Arbeit investiert :)

Re: Werte an MQTT senden

Verfasst: 8. Mär 2026 19:02
von mad-mike
Moin zusammen,

Frage zu der Einbindung: kann man den reedkontakt am gaszähler auch mit dem:
Serial Button Binding
which emits PRESSED events (no RELEASED events though) whenever data is available on the serial port
unter obenHAB auslesen? :?: