MQTT Befehle senden

Begonnen von eckhard scholz, 27 November 2023, 17:58:21

Vorheriges Thema - Nächstes Thema

eckhard scholz

Ein Hallo an`s Forum,

seit einigen Tagen versuche ich zu meiner Heizungstherme Befehle zu senden.
Lieder ohne wesentlichen Erfolg. Die vielen Beschreibungen im Forum und im Netz haben mich nicht so richtig weiter gebtacht.
Ich bin auch nicht gerade der MQTT-Profi ...

Also was funktioniert, ich kann alles von der Heizung über das EMS_ESP Modul in Fhem lesen. MQTT2_Fhem_Server läuft also ohne Fehler
Nun habe ich versucht mit einem Slider und mit Zahleneingabe die Warmwasser Temperatur als Sollwert vorzugeben und das funktioniert bei mir nicht.
Kann mir jemand verständlich erklären was ich falsch mache oder fehlt vieleicht noch was?
Fehlermeldungen kommen keine, außer beim benutzen des Sliders "n_SliderWw return value: Please define ems_esp:wwseltemp:.* first"
und so ist das EMS_ESP modul definiert

define MQTT2_ems_esp MQTT2_DEVICE ems_esp
setuuid MQTT2_ems_esp 64ef8ffb-f33f-8e99-c971-10680689cfbd9e5f
attr MQTT2_ems_esp icon sani_boiler_temp
attr MQTT2_ems_esp readingList ems_esp:ems-esp/boiler_data_ww:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/boiler_data:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/heartbeat:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/dallassensor_data:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/tapwater_active:.* tapwater_active\
ems_esp:ems-esp/shower_active:.* shower_active\
ems_esp:ems-esp/shower_data:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/info:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/status:.* status\
ems_esp:ems-esp/heating_active:.* heating_active\
ems_esp:ems-esp/temperaturesensor_data:.* { json2nameValue($EVENT) }\
ems_esp:ems-esp/wwsettemp:.* { json2nameValue($EVENT) }
attr MQTT2_ems_esp room 03.03_Da_Heizung,08.03_MQTT2
attr MQTT2_ems_esp setList WwSollT:46,48,50,52,54 ems_esp:ems-esp/wwsettemp set $EVTPART1
attr MQTT2_ems_esp stateFormat HzgVlT: heatingactive curflowtemp °C  /  WwIstT: tapwateractive wwcurtemp °C / WwSollT: wwseltemp °C

define SliderWw dummy
setuuid SliderWw 64ebb78f-f33f-8e99-c9eb-76b7788c9c71e748
attr SliderWw group Therme
attr SliderWw room 03.03_Da_Heizung
attr SliderWw setList state:slider,20.0,1.00,65.0,1
attr SliderWw stateFormat {sprintf("%.2f",ReadingsVal($name,"state",0))." real"}
attr SliderWw webCmd state

define n_SliderWw notify SliderWw set ems_esp/wwseltemp:.* $EVENT
setuuid n_SliderWw 64ebb78f-f33f-8e99-1ced-9a3c702056262e32
attr n_SliderWw group Therme
attr n_SliderWw room 03.03_Da_Heizung,09.09_Notifys

Speziell geht es um die Variable "wwsettemp" die wird gelesen und darf auch im ESM_ESP beschrieben werden. (siehe Unten)

{
  "name": "wwseltemp",
  "fullname": "WW gewählte Temperatur",
  "circuit": "ww",
  "value": 51,
  "type": "number",
  "min": 0,
  "max": 254,
  "uom": "°C",
  "readable": true,
  "writeable": true,
  "visible": true
}

Irgend wo habe ich gelesen, es ist ganz einfach.  8)
Vieleicht sehe ich auch wieder mal den Wald vor lauter Bäumen nicht. :o

Gruß
Eckhard
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

betateilchen

#1
In Deinem notify n_SliderWw versuchst Du mit

set ems_esp/wwseltemp:.* $EVENT
einen Wert zu setzen. Das funktioniert halt nicht, weil ems_esp/wwseltemp kein device ist, sondern maximal ein reading. Und an der Stelle macht auch die regexp keinen Sinn.

Vermutlich hast Du hier einfach vergessen, den Namen des device anzugeben, in dem Du das (ebenfalls nicht korrekt angegebene) reading beschreiben möchtest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

eckhard scholz

Danke für die Hilfe erstmal  :D

Ich dachte aber das doch das "ems_esp" das Device ist und "wwseltemp" die Variable die gelesen und beschrieben werden kann.
So wie du das beschreibts denke ich, dass ich da irgend wo noch einen Denkfehler habe.
Nur weiß ich nocht wo.
Was muß ich noch machen das ich "wwseltemp" beschreiben kann?
Und die Wertvorgabe funktioniert ja auch nicht.
attr MQTT2_ems_esp setList WwSollT:46,48,50,52,54 ems_esp:ems-esp/wwsettemp set $EVTPART1Gibt es da noch ein generelles Problem?
 
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

schwatter

Außerdem falscher typo?

wwseltemp zu wwsettemp
Gruß schwatter

eckhard scholz

Hallo schatter,

ja es gibt beises in dem ems-esm Modul, nur einer von beiden ist beschreibbar.
Meiner Meinung nach ist das "wwseltemp"
{
  "name": "wwseltemp",
  "fullname": "WW gewählte Temperatur",
  "circuit": "ww",
  "value": 51,
  "type": "number",
  "min": 0,
  "max": 254,
  "uom": "°C",
  "readable": true,
  "writeable": true,
  "visible": true
}
{
  "name": "wwsettemp",
  "fullname": "WW Solltemperatur",
  "circuit": "ww",
  "value": 55,
  "type": "number",
  "uom": "°C",
  "readable": true,
  "writeable": false,
  "visible": true
}

Was mir dabei aber aufgefallen ist das ich bei grad gemerkt habe das diese Einstellungen in
http://192.168.xxx.yyy/api/boiler/wwseltempangezeigt werden.
Stimmt da was in meinen Sendebefehlen nicht?
attr MQTT2_ems_esp setList WwSollT:46,48,50,52,54 ems_esp:ems-esp/wwseltemp set $EVTPART1

define n_SliderWw notify SliderWw set ems_esp/wwseltemp:.* $EVTPART1

F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

passibe

Zitat von: eckhard scholz am 29 November 2023, 09:07:41Stimmt da was in meinen Sendebefehlen nicht?
Ja. Dein Sendebefehl soll einfach nur aus dem Topic und der Message, die du senden willst, bestehen.
Wahrscheinlich müsste dein Sendebefehl irgendwie so aussehen (achtung, das stimmt vermutlich nicht, siehe unten):
attr MQTT2_ems_esp setList WwSollT:46,48,50,52,54 ems_esp:ems-esp/boiler/wwseltemp $EVTPART1
Du musst rausfinden, welches das Topic ist, wo du wwseltemp publishen kannst und wie die Message, die du sendest, formatiert sein muss. Kann sein, dass du das irgendwie in ein JSON packen musst (also z.B. {"wwseltemp": "$EVTPART1"} statt nur $EVTPART1) oder so.

Vielleicht gibt es hier im Forum irgendwo noch mehr infos speziell zu EMS-ESP, kann dir da nicht direkt weiterhelfen, weil ich EMS-ESP selbst nicht benutze.
Vielleicht hilft aber der relevante Abschnitt der Dokumentation: https://emsesp.github.io/docs/Commands/#mqtt

Was auf jeden Fall sinnvoll ist, ist z.B. mit MQTT Explorer mal zu lauschen, was da so gepublished wird bzw. bevor du in FHEM versuchst Werte zu publishen das erst über MQTT Explorer machst und dann evtl. etwas nachvollziehbarer siehst, ob dein Befehl ankommt usw.

eckhard scholz

#6
Hallo passibe,

Die Hilfe zum ESM-ESP habe ich auch schon durchgeforstet.
Die Modulsoftware verweist auch auf die Hilfe.

Wenn ich den Wert in der HTML-Seite ändere zeigt das LOG mir
2023-11-29 10:14:19.058 WARNING 1689:   [command]    Calling command 'boiler/wwseltemp' (gewählte Temperatur) with value 52
2023-11-29 10:14:45.458 WARNING 1690:   [command]    Calling command 'boiler/wwseltemp' (gewählte Temperatur) with value 54
und der Wert wir übernommen.

In EMS-ESP Hilfen hab ich auch schon rein geguckt aber die haben wieder kein FHEM .
Wie muß eigentlich beim senden von Fhem-Befehlen mit Benutzername und Passwort vom EMS-ESP umgegangen werden?
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

passibe

Ah, ich glaube ich habe es gefunden: https://emsesp.github.io/docs/Commands/#publishing-commands

Dann müsstest du mal das hier probieren, könnte sein, dass das schon reicht:
attr MQTT2_ems_esp setList WwSollT:46,48,50,52,54 ems_esp:ems-esp/boiler {"cmd":"wwseltemp", "data":$EVTPART1, "id":<n>}
Bei der id müsstest du mal schauen, was das bei dir ist. In der Doku steht:
id can be replaced with hc for some devices that use heating circuits, and represented either as a string or a number.Wenn die id ein string ist, dann müsstest du das oben noch in "" setzen.

Genauso kann es sein, dass du $EVTPART1 noch in "" setzen musst, einfach mal ausprobieren.

Wegen Authentifizierung: Sehe in der Doku nichts dazu, theoretisch ist MQTT ja schon authentifiziert, weil man sich schon authentifiziert, wenn man sich mit dem Broker verbindet.

eckhard scholz

#8
Hallo passible,

sieht irgend wie plausiebel aus. Bei der "id" bin ich mir nicht sicher wo ich die finde, denke aber, ich mal gelesen habe das es mit den Heitzkreisen zu tun hat. Ich will nur die WarmwasserTemperatur im Boiler verändern.
MQTT traffic bringt als Meldung das hier:
20:03:26.178 SENT ems_esp_ems-esp/boiler {"cmd":"wwseltemp", "data":52, "id":1}
20:04:01.103 SENT ems_esp_ems-esp/boiler {"cmd":"wwseltemp", "data":50, "id":1}
leider hat es das ESM_ESP es nicht übernommen.
Mich macht das hier bisschen stutzig: "ems_esp_ems-esp/boiler" muss das nicht "ems_esp/ems-esp/boiler" heißen?
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

fz55

Zitat von: eckhard scholz am 29 November 2023, 20:15:22Mich macht das hier bisschen stutzig: "ems_esp_ems-esp/boiler" muss das nicht "ems_esp/ems-esp/boiler" heißen?

Oder ems_esp:ems-esp/boiler

eckhard scholz

Danke für die Hinweise,

mit noch etwas probieren und passible´s Erklärung funktioniert es so
attr MQTT2_ems_esp setList WwSollT:46,48,50,52,54 ems-esp/boiler {"cmd":"wwseltemp", "data":$EVTPART1}

alleine ohne eure Hinweise wäre ich nicht daruf gekommen. Zumal die ESM-ESP Hilfe bisschen verwirrend ist, wenn man nicht so der große Programmierer ist.

Gruß
Eckhard
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

passibe

Uff, sorry, habe blind aus deiner readingList kopiert für das Topic.
Schön, dass es jetzt klappt!

eckhard scholz

Hallo passibe,

kein Problem, du hast mich mit deiner gezeigten Version in eine andere Denkrichtung gebracht.
Und ich habe ein bisschen die EMS-ESP Hilfe verstanden.
ems-esp/thermostat   {\"cmd\":\"mode\",\"value\":\"heat\",\"id\":1} sets the thermostat mode to heat for hc1
Die bacslash`s sind schon verwirrend, ich habe immer noch gedacht es sind Steuerzeichen.
Das Beispiel von dir war damit schon OK.

Gruß
Eckhard
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,