[gelöst] attr setList state:on,off Problem

Begonnen von holle75, 06 Februar 2020, 18:33:30

Vorheriges Thema - Nächstes Thema

holle75

Hallo Ihr, habe eine Nodemcu mit Arduino Code gespeist und rede über MQTT2 Server und MQTT2-Device mit fhem. Das funktioniert bidirektional mit Anzeige der entsprechenden Readings auf beiden Seiten.

Was ich gerade nicht verstehe ist, warum mir fhem "unknown argument on" (resp off) sagt, wenn ich state schalte. LED lässt sich mit fast identischen Code so schalten

defmod MQTT2_sensornode1 MQTT2_DEVICE sensornode1
attr MQTT2_sensornode1 IODev MQTT2_FHEM_Server
attr MQTT2_sensornode1 readingList sensornode1:sensornode1/state:.* { json2nameValue($EVENT) }
attr MQTT2_sensornode1 room MQTT2_DEVICE
attr MQTT2_sensornode1 setList state:on,off sensornode1/set {"state":"$EVTPART1"}\
hdm_LED:on,off sensornode1/set {"relay":"$EVTPART1"}\
brightness:colorpicker,BRI,0,15,255 sensornode1/set {"state":"on","$EVTPART0":"$EVTPART1"}\
rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;;if($1 ne $2 || $2 ne $3){"sensornode1/set {\"color\":{\"r\":".hex($1).",\"g\":".hex($2).",\"b\":".hex($3)."}}"}else{"sensornode1/set {\"brightness\":".hex($1)."}"}}
attr MQTT2_sensornode1 webCmd state:hdm_LED:brightness:rgb
attr MQTT2_sensornode1 webCmdLabel state\
:\
LED\
:\
Brightness\
:\
RGB

setstate MQTT2_sensornode1 on
setstate MQTT2_sensornode1 2020-02-06 18:25:39 brightness 150
setstate MQTT2_sensornode1 2020-02-06 18:25:39 color_b 103
setstate MQTT2_sensornode1 2020-02-06 18:25:39 color_g 255
setstate MQTT2_sensornode1 2020-02-06 18:25:39 color_r 92
setstate MQTT2_sensornode1 2020-02-06 18:25:39 hdm_LED off
setstate MQTT2_sensornode1 2020-02-06 18:25:39 heatIndex -10.30
setstate MQTT2_sensornode1 2020-02-06 18:25:39 humidity 0.00
setstate MQTT2_sensornode1 2020-02-06 18:25:39 ldr 0
setstate MQTT2_sensornode1 2020-02-06 18:25:39 motion motion detected
setstate MQTT2_sensornode1 2020-02-06 18:25:39 state on
setstate MQTT2_sensornode1 2020-02-06 18:25:39 temperature 0.00



Danke für eure Hilfe

Gisbert

Hallo holle75,

ZitatWas ich gerade nicht verstehe ist, warum mir fhem "unknown argument on" (resp off) sagt, wenn ich state schalte.
Bei dem, was du angehängt hast, findet man aber kein "unknown argument on" - muss man das jetzt glauben?
Und was meinst du mit "LED lässt sich fast mit dem gleichen Code schalten"?

Offtopic: Was von dem anghängten Code kommt von MQTT2_DEVIC, bzw. was nicht?
Hintergrund meiner Frage ist, dass ich mich bisher noch davor gedrückt habe auf MQTT2_DEVICE umzustellen.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Beta-User

Getrennte Befehle für on und off, dazu setStateList auf on oft...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

holle75

Hallo Gisbert, siehe angehängtes Bild. Das erscheint, wenn ich state von on auf off schalte oder umgekehrt. Ohne das irgendwas ausgeführt wird.

Das RAW ist das MQTT2 Device.

im attr setList im RAW findest du die Zeilen

state:on,off sensornode1/set {"state":"$EVTPART1"}\
hdm_LED:on,off sensornode1/set {"relay":"$EVTPART1"}\


sprich hdm_LED wird genauso geschaltet, ohne Fehler, wie state.

Wahrscheinlich ist state hier besonders, das hätte ich nur gerne verifiziert.

holle75

RAW
defmod MQTT2_sensornode1 MQTT2_DEVICE sensornode1
attr MQTT2_sensornode1 IODev MQTT2_FHEM_Server
attr MQTT2_sensornode1 readingList sensornode1:sensornode1/state:.* { json2nameValue($EVENT) }
attr MQTT2_sensornode1 room MQTT2_DEVICE
attr MQTT2_sensornode1 setList on:noArg sensornode1/set {"state":"on"}\
off:noArg sensornode1/set {"state":"off"}\
hdm_LED:on,off sensornode1/set {"relay":"$EVTPART1"}\
brightness:colorpicker,BRI,0,15,255 sensornode1/set {"state":"on","$EVTPART0":"$EVTPART1"}\
rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;;if($1 ne $2 || $2 ne $3){"sensornode1/set {\"color\":{\"r\":".hex($1).",\"g\":".hex($2).",\"b\":".hex($3)."}}"}else{"sensornode1/set {\"brightness\":".hex($1)."}"}}
attr MQTT2_sensornode1 setStateList on off
attr MQTT2_sensornode1 webCmd state:hdm_LED:brightness:rgb
attr MQTT2_sensornode1 webCmdLabel state\
:\
LED\
:\
Brightness\
:\
RGB

setstate MQTT2_sensornode1 on
setstate MQTT2_sensornode1 2020-02-06 18:57:05 brightness 225
setstate MQTT2_sensornode1 2020-02-06 18:57:05 color_b 31
setstate MQTT2_sensornode1 2020-02-06 18:57:05 color_g 117
setstate MQTT2_sensornode1 2020-02-06 18:57:05 color_r 148
setstate MQTT2_sensornode1 2020-02-06 18:57:05 hdm_LED on
setstate MQTT2_sensornode1 2020-02-06 18:57:05 heatIndex -10.30
setstate MQTT2_sensornode1 2020-02-06 18:57:05 humidity 0.00
setstate MQTT2_sensornode1 2020-02-06 18:57:05 ldr 0
setstate MQTT2_sensornode1 2020-02-06 18:57:05 motion motion detected
setstate MQTT2_sensornode1 2020-02-06 18:57:05 state on
setstate MQTT2_sensornode1 2020-02-06 18:57:05 temperature 0.00



Mmh, dann zerschießts mir das Layout. Wüßte jetzt nicht spontan, wie ich WebCmd anpassen müßte.
Auf dem icon kann man klicken und es wird geschaltet, auf state direkt ähnlicher Fehler nur anders. siehe Bilder.

Und es wäre so hübsch gewesen ;)

holle75

Habs jetzt so modifiziert. Nur das klickbare icon reicht ja aus. Wobei ich mir nicht ganz klar darüber bin, was in diesem Setup hier das setStateList genau macht.

defmod MQTT2_sensornode1 MQTT2_DEVICE sensornode1
attr MQTT2_sensornode1 IODev MQTT2_FHEM_Server
attr MQTT2_sensornode1 readingList sensornode1:sensornode1/state:.* { json2nameValue($EVENT) }
attr MQTT2_sensornode1 room MQTT2_DEVICE
attr MQTT2_sensornode1 setList on:noArg sensornode1/set {"state":"on"}\
off:noArg sensornode1/set {"state":"off"}\
hdm_LED:on,off sensornode1/set {"relay":"$EVTPART1"}\
brightness:colorpicker,BRI,0,15,255 sensornode1/set {"state":"on","$EVTPART0":"$EVTPART1"}\
rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;;if($1 ne $2 || $2 ne $3){"sensornode1/set {\"color\":{\"r\":".hex($1).",\"g\":".hex($2).",\"b\":".hex($3)."}}"}else{"sensornode1/set {\"brightness\":".hex($1)."}"}}
attr MQTT2_sensornode1 setStateList on off
attr MQTT2_sensornode1 webCmd hdm_LED:brightness:rgb
attr MQTT2_sensornode1 webCmdLabel LED\
:\
Brightness\
:\
RGB

setstate MQTT2_sensornode1 off
setstate MQTT2_sensornode1 2020-02-06 19:15:06 brightness 225
setstate MQTT2_sensornode1 2020-02-06 19:15:06 color_b 31
setstate MQTT2_sensornode1 2020-02-06 19:15:06 color_g 117
setstate MQTT2_sensornode1 2020-02-06 19:15:06 color_r 148
setstate MQTT2_sensornode1 2020-02-06 19:15:06 hdm_LED off
setstate MQTT2_sensornode1 2020-02-06 19:15:06 heatIndex -10.30
setstate MQTT2_sensornode1 2020-02-06 19:15:06 humidity 0.00
setstate MQTT2_sensornode1 2020-02-06 19:15:06 ldr 0
setstate MQTT2_sensornode1 2020-02-06 19:15:06 motion motion detected
setstate MQTT2_sensornode1 2020-02-06 19:15:06 state off
setstate MQTT2_sensornode1 2020-02-06 19:15:06 temperature 0.00


Beta-User

Löschen+brightness ändern sollte zeigen, was das bewirkt. Dann gibt es noch ein interessantes Attribut, zu state schau mal in die commandref...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

holle75

#7
... du meinst, dass das Gezappel vom icon mit setstatelist weg ist ? :D ... dafür hat man jetzt als Zwischenschritt beim Schalten auf dem Icon die andere Birne  ::)

Zitat von: Beta-User am 06 Februar 2020, 19:56:50
Dann gibt es noch ein interessantes Attribut, zu state schau mal in die commandref...

... habe jetzt geschätzte 10 Stunden (mal wieder) mit setlist, webcmd, devstateicon, stateformat, etc zugebracht. Maximale Einwirkungsmöglichkeit ist eine schöne Sache, aber in Bezug auf diese Attribute, besonders die Interaktion untereinander, ist mir der Spaß mittlerweile flöten gegangen. Von daher werde ich jetzt nicht raten, welches du mit dem interessanten Attribut meinst :D ;)

Beta-User

#8
Sorry für die mobile Kurzfassung...

Etwas mehr jetzt:
Nein, ich meine, dass dann die Dinge mit setStateList da landen, wo sie hingehören: set-Befehle auf "state-relevantes" (on/off) im state, alles andere in den jeweiligen Readings. Und zwar - bis die Verarbeitung bestätigt wird - auch erkennbar an einem vorangestellten "set_", was z.B. mit der "Ausrufezeichen-Birne" anzeigt, wenn ein Befehl mal nicht angekommen sein sollte...

Das andere Attribut ist "setExtensionsEvent": Damit solltest du ggf. auch noch laufende Timer visualisieren können...

Zu der ganzen Konfiguriererei kannst du auch mal in die file mqtt2.attrtemplate schauen, da sind "einige" Beispiel als Referenz drin... (auch einige farbige Leuchtenvarianten).

Und wenn du on+off-Knöpfchen haben willst, ergänze einfach webCmd mit on:off:...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

holle75

#9
... mich würde mal interessieren warum ich keine Benachrichtigungen über neue Beiträge bekomme. Seltsam.

Zitat von: Beta-User am 06 Februar 2020, 23:14:56
Nein, ich meine, dass dann die Dinge mit setStateList da landen, wo sie hingehören: set-Befehle auf "state-relevantes" (on/off) im state, alles andere in den jeweiligen Readings.

ich verstehe das nicht ganz. Auch schon in der commandref und im help wenn man das attr wählt nicht. So wie ich es verstehe, macht setstatelist doch nichts anderes, als die Schalt-Zwischenschritte auch ins state zu schreiben? Ich konnte auch kein anderes Verhalten (außer, dass zB beim Schalten von Brightness, etc. der Wert nicht mehr kurz im state steht bis state dann wieder vom Client (nodemcu) gepublisht und überschrieben wird) mit oder ohne "attr setStateList on off" feststellen.

Commands not in the list will set a reading named after the command, with the word set and the command parameters as its value.

If this attribute is not defined, then a set command will set the state reading to the name of the command.


Mein Englisch ist nicht großartig, aber trotzdem finde ich diesen Part verwirrend.  ;D


Zitat von: Beta-User am 06 Februar 2020, 23:14:56
Das andere Attribut ist "setExtensionsEvent": Damit solltest du ggf. auch noch laufende Timer visualisieren können...

werde ich mir anschauen

Zitat von: Beta-User am 06 Februar 2020, 23:14:56
Zu der ganzen Konfiguriererei kannst du auch mal in die file mqtt2.attrtemplate schauen, da sind "einige" Beispiel als Referenz drin... (auch einige farbige Leuchtenvarianten).

da habe ich den colorpicker RGB zu r g b Code her. Ein Fundus. Leider eben für die Standards. Wenn ich meine Nodemcu dann mal fertig habe, stell ich das Template für ein MQTT2 Device mit arduino-code mit Json ein.

Zitat von: Beta-User am 06 Februar 2020, 23:14:56
Und wenn du on+off-Knöpfchen haben willst, ergänze einfach webCmd mit on:off:...

hätte sie eben gerne als Dropdown so wie im ersten Beitrag im Bild. Das bekomme ich, egal wie, nicht hin.... und wahrscheinlich aber auch unwichtig, da es mit allen anderen "schaltbaren Readings" funktioniert und ich das icon für state schalten nutzen kann.

Beta-User

Zitat von: holle75 am 07 Februar 2020, 16:20:25
hätte sie eben gerne als Dropdown so wie im ersten Beitrag im Bild. Das bekomme ich, egal wie, nicht hin.
Dann kannst du zusätzlich noch "state:on,off ..." setzen  ;) . Dass es "besser" (bzw. auch) "on:noArg" usw. heißen sollte, hat damit zu tun, dass sonst die setExtensions nicht wollen und das insgesamt nicht so funktioniert, wie du das denkst...

Die übrigen Sachen werden eher klar, wenn man ein "normal" konfiguriertes Tasmota nimmt, wo es erst mal gar keine Rückmeldung auf "state" gibt, sondern z.B. nach POWER bzw. POWERn. Dann wandern die jeweils "irgendwo" gesetzten Dinge in state und bleiben da bis zur nächsten Anweisung...
setExtensionsEvent ist leider nicht ganz so, wie ich das gerne hätte, weil da die Rückmeldung vom Aktor dazu führt, dass das wieder überschrieben wird (das macht z.B. MySensors-Device etwas anders, wenn die Rückmeldung/Ack zeitnah kommt (musst du nicht verstehen, aber da kam der Gedanke ursprünglich her))...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

holle75

Zitat von: Beta-User am 07 Februar 2020, 16:36:14
Dann kannst du zusätzlich noch "state:on,off ..." setzen  ;)
Ah, nice ... im SetList

plus im webCmd plus im WebCmdLabel

aber warum muß on off im SetList doppeltgemoppelt sein? ... weil jetzt ist es genau wie ich es am Anfang hatte plus on off nochmal extra im SetList

state:on,off sensornode1/set {"state":"$EVTPART1"}\
on:noArg sensornode1/set {"state":"on"}\
off:noArg sensornode1/set {"state":"off"}\


RAW ganzes Device
defmod MQTT2_sensornode1 MQTT2_DEVICE sensornode1
attr MQTT2_sensornode1 IODev MQTT2_FHEM_Server
attr MQTT2_sensornode1 readingList sensornode1:sensornode1/state:.* { json2nameValue($EVENT) }
attr MQTT2_sensornode1 room MQTT2_DEVICE
attr MQTT2_sensornode1 setList state:on,off sensornode1/set {"state":"$EVTPART1"}\
on:noArg sensornode1/set {"state":"on"}\
off:noArg sensornode1/set {"state":"off"}\
hdm_LED:on,off sensornode1/set {"relay":"$EVTPART1"}\
brightness:colorpicker,BRI,0,15,255 sensornode1/set {"state":"on","$EVTPART0":"$EVTPART1"}\
rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;;if($1 ne $2 || $2 ne $3){"sensornode1/set {\"color\":{\"r\":".hex($1).",\"g\":".hex($2).",\"b\":".hex($3)."}}"}else{"sensornode1/set {\"brightness\":".hex($1)."}"}}
attr MQTT2_sensornode1 setStateList on off
attr MQTT2_sensornode1 webCmd state:hdm_LED:brightness:rgb
attr MQTT2_sensornode1 webCmdLabel state\
:\
LED\
:\
Brightness\
:\
RGB

setstate MQTT2_sensornode1 off
setstate MQTT2_sensornode1 2020-02-07 16:44:53 brightness 210
setstate MQTT2_sensornode1 2020-02-07 16:44:53 color_b 255
setstate MQTT2_sensornode1 2020-02-07 16:44:53 color_g 255
setstate MQTT2_sensornode1 2020-02-07 16:44:53 color_r 255
setstate MQTT2_sensornode1 2020-02-07 16:44:53 hdm_LED off
setstate MQTT2_sensornode1 2020-02-07 16:44:53 heatIndex -10.30
setstate MQTT2_sensornode1 2020-02-07 16:44:53 humidity 0.00
setstate MQTT2_sensornode1 2020-02-07 16:44:53 ldr 0
setstate MQTT2_sensornode1 2020-02-07 16:44:53 motion motion detected
setstate MQTT2_sensornode1 2020-02-06 21:32:01 rgb set 5257ff
setstate MQTT2_sensornode1 2020-02-07 16:44:53 state off
setstate MQTT2_sensornode1 2020-02-07 15:50:05 subscriptions sensornode1/set
setstate MQTT2_sensornode1 2020-02-07 16:44:53 temperature 0.00


Beta-User

"doppeltgemoppelt"
Zitat von: Beta-User am 07 Februar 2020, 16:36:14
hat damit zu tun, dass sonst die setExtensions nicht wollen
(Nicht weiter darüber nachdenken, einfach akzeptieren/abspeichern/hinnehmen... ;) )
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

holle75

Danke dir!

Aber schön, dass es keine Erklärung gibt, weil dann hat man nix falsch gemacht  ;D

holle75

#14
@Gisbert.

Ja, es sieht alles am Anfang sehr erschreckend aus. Besonders im Zusammenspiel mit den ganzen Einstellungen/Möglichkeiten die du im Arduino-Code hast. Aber wenn man mal ein bißchen reinschnuppert geht das ganz gut. Zum Teil bißchen komplexer für die ein oder andere Herausforderung, aber da gibt es hier ja nette Menschen, die sich auskennen.

Worauf will ich hinaus? Warum beendest du nicht einfach probeweise mal deinen Mosquitto Broker, speicherst deine fhem.cfg und fhem.save separat wo hin, definierst einen MQTT2-Server und trägst bei deinen Arduinos die IP/Port von fhem ein? Die Hälfte läuft dann schon automatisch ab ....

.... sagt einer, der letzte Woche noch absolut keinen Plan hatte (nicht dass er den jetzt hätte ...)

edit: Ach so, attr setList really sucks. Da hilft das von Beta genannte mqtt2.template. Das liegt in \FHEM\lib\AttrTemplate falls du es dir mit einem Editor anschauen möchtest.

edit2: hier http://mqtt-explorer.com/ gibts den MQTT Explorer als Portable für Win (und auch alle anderen OS). Da kann man schön sehen, was man in setList (falsches) zusammenschustert.