Kann man mit Mosquitto die Werte der Parameter mit der Kommandozeile (bash Skript) ändern?
Zum Thema "Werte an p4 schreiben " hat horchi nun ja diese Super-MQTT-Erweiterung geschrieben, hier meine Erfahrungen damit:
- es funktioniert super.
- man kann damit über jedes MQTT Interface Werte schicken, muss sich halt allerdings einmal grundsätzlich mit der Philosophie dieses Protokolls beschäftigen. Da dieses aber momentan immer weitere Verbreitung findet, ist der Aufwand sicher nicht umsonst.
- Ich verwender bekanntlich Openhab für meine Steuerung, und hab inzwischen mit dieser erweiterten Funktionaliät das ganze P4-Modul auf MQTT umgestellt (man muss sich dann tatsächlich kein extra Binding mehr für Openhab wünschen).
- Entscheidend ist, dass die Syntax der state- und command topics korrekt geschrieben ist, und die Abfrage-Kanäle im p4-Interface auswgewählt sind. Dies ist unten beispielhaft in den Openhab-Code eingebettet, für andere Programme geht das entsprechend. Code
Alles anzeigen//Openhab Thing p4 (bei mir läuft der Mosquitto-Dämon auf einer Synology, sonst hier die raspi-Adresse, wenn Mosquitto lokal installiert): Bridge mqtt:broker:mymqttbroker "Synology MQTT Broker" [ host="192.168.2.xxx", secure=false, clientID="openhab_mosquitto", reconnectTime=300000 ] { Thing topic P4_MQTT "P4 MQTT Thing" { Channels: // Werte abfragen (müssen vorher im p4d Interface zum Logging ausgewählt werden (hier ist als Item-Name die Hex-Kanal-Nummer gewählt: Type string : 0xS "P4-Status" [retained="NO", stateTopic="p4d2mqtt/Status/state", transformationPattern="JSONPATH:$.value"] Type number : 0x1 "Abgas-T" [retained="NO", stateTopic="p4d2mqtt/Abgastemperatur_0x1/state", transformationPattern="JSONPATH:$.value"] Type number : 0x4 "Aussen-T" [retained="NO", stateTopic="p4d2mqtt/Aussentemperatur_0x4/state", transformationPattern="JSONPATH:$.value"] Type number : 0x13 "Abgas-Soll-T" [retained="NO", stateTopic="p4d2mqtt/Abgas-Solltemperatur_0x13/state", transformationPattern="JSONPATH:$.value"] Type number : 0x15 "Vorlauf-Ist-T" [retained="NO", stateTopic="p4d2mqtt/Vorlauf-Isttemperatur_0x15/state", transformationPattern="JSONPATH:$.value"] Type number : 0x16 "Vorlauf-Soll-T" [retained="NO", stateTopic="p4d2mqtt/Vorlauf-Solltemperatur_0x16/state", transformationPattern="JSONPATH:$.value"] Type number : 0x76 "Puffer_oben" [retained="NO", stateTopic="p4d2mqtt/Puffertemperaturoben_0x76/state", transformationPattern="JSONPATH:$.value"] Type number : 0x78 "Puffer_unten" [retained="NO", stateTopic="p4d2mqtt/Puffertemperaturunten_0x78/state", transformationPattern="JSONPATH:$.value"] // …. // hier können beliebig weitere Kanäle definiert werden, die man haben will // Werte setzen (als Adress-Wert muss den dezimal-Wert gesetzt werden, so ist auch er Name gewählt): Type number : 88 "Vorlauf +10" [commandTopic="mqtt2p4d/command", formatBeforePublish = "{ \"command\" : \"parstore\", \"address\" : 88 , \"value\" : \"%s\"}"] Type number : 449 "Puffer_Schwelle_ein" [commandTopic="mqtt2p4d/command", formatBeforePublish = "{ \"command\" : \"parstore\", \"address\" : 449 , \"value\" : \"%s\"}"] Type number : 450 "Puffer_Schwelle_aus" [commandTopic="mqtt2p4d/command", formatBeforePublish = "{ \"command\" : \"parstore\", \"address\" : 450 , \"value\" : \"%s\"}"] // Openhab-Items: Number:Temperature p4Vorlauf_ist "Vorlauf Isttemperatur" <heating> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0x15"} Number:Temperature p4Vorlauf_soll "Vorlauf Solltemperatur" <heating> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0x16"} Number:Temperature p4Puffer_oben "Puffer oben" <heating> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0x76"} Number:Temperature p4Puffer_unten "Puffer unten" <heating> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0x78"} String p4Status "P4-Status" <heating> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0xS"} Number:Temperature p4AbgasT "Abgas-T" <temperature> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0x1"} Number:Temperature p4AussenT "Aussen-T" <temperature> (gHeizraum) ["Measurement", "Temperature"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:0x4"} Number p4cVorlaufbei10 "VorlaufT bei +10°" <heating> (gHeizraum) ["Setpoint", "Temperature"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:88"} Number:Temperature p4cPuffer_Schwelle_ein "Puffer-ein-Schwelle" <heating> (gHeizraum) ["Boiler"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:449"} Number:Temperature p4cPuffer_Schwelle_aus "Puffer-aus-Schwelle" <heating> (gHeizraum) ["Boiler", "Setpoint", "Temperature"] {channel="mqtt:topic:mymqttbroker:P4_MQTT:450"}
Nur noch eine Frage / Verbesserungsvorschlag an Horchi: warum wird der "parstore: command" gebraucht?. Nach meinem Verständnis ist der Command-Charakter schon über den command-topic "p4d2mqtt/command" abgedeckt, man könnte das in der Paload also auch weglassen.
Aber ansonsten alles super!
Viele Grüße
Wilfried