Aus "True" und "False" Toggle machen

Begonnen von homeuser2003, 12 Juni 2022, 22:15:34

Vorheriges Thema - Nächstes Thema

homeuser2003

Zitat von: Beta-User am 13 Juni 2022, 14:46:01
So sollte das klappen:
define MQTT2_zigbee_RMTest MQTT2_DEVICE zigbee_RMTest
attr MQTT2_zigbee_RMTest devStateIcon false:secur_smoke_detector@green true:secur_smoke_detector_blink@red
attr MQTT2_zigbee_RMTest devicetopic zigbee2mqtt/RMTest
attr MQTT2_zigbee_RMTest model zigbee2mqtt_smokeDetector
attr MQTT2_zigbee_RMTest readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }\
  $DEVICETOPIC/set/silence_siren:.* silence\
  $DEVICETOPIC/set/alarm:.* alarm\
  $DEVICETOPIC/availability:.* availability
attr MQTT2_zigbee_RMTest room MQTT2_DEVICE
attr MQTT2_zigbee_RMTest setList alarm:toggle,on,off {my $cmd = $EVTPART1 eq 'on' ? 'true' : $EVTPART1 eq 'off' ? 'false' : ReadingsVal($NAME,'alarm','') eq 'false' ? 'true' : 'false';;return qq($DEVICETOPIC/set { "alarm": "$cmd" } )}\
silence:toggle,on,off {my $cmd = $EVTPART1 eq 'on' ? 'true' : $EVTPART1 eq 'off' ? 'false' : ReadingsVal($NAME,'alarm','') eq 'false' ? 'true' : 'false';;return qq($DEVICETOPIC/set { "silence_siren": "$cmd" } )}
attr MQTT2_zigbee_RMTest stateFormat smoke
attr MQTT2_zigbee_RMTest webCmd alarm toggle:silence toggle

Komisch finde ich die "set"-Zweige in der readingList, aber das scheint wirklich das Ergebnis zu sein und nicht die Anweisung...
Die TÜV-Rheinland-Geschichte war der mich interessierende Punkt gewesen (falls das nicht hinreichend ist, wird sich schon erfahrungsgemäß jemand melden...).

Falls du das messen kannst, wäre der effektive Energieverbrauch von den Dingern noch interessant, ansonsten ist die Kombi 230V, separate Kabelvernetzung, ZigBee + aktive Alarmierung auch nach meiner (vermutlich nicht vollständigen) Kenntnis des Marktes ziemlich unique... (Der Preis ist aber auch nicht ganz so klein, wie man das von China-ZigBee-Gadgets so allgemein gewohnt ist, und man müßte am Einbauort 230V anliegen haben.).

Öhm ja. Da bekomme ich sowohl beim Setzen der Readinglist als auch der Setlist einen Sytaxfehler... Probiere nun die andere Variante aus, denn schön ist die in der Tat ;)

homeuser2003

Zitat von: supernova1963 am 13 Juni 2022, 15:08:31
Ich finde es schöner, wenn ein "toggle button" auch den aktuellen Wert anzeigt, deswegen nutze ich i.d.R. devStateIcon.

Ungetestet und nur zur Verdeutlichung meiner Vorgehensweise:
defmod MQTT2_zigbee_RMTest MQTT2_DEVICE zigbee_RMTest
attr MQTT2_zigbee_RMTest devStateIcon false:secur_smoke_detector@green \
true:secur_smoke_detector_blink@red \
alarmon:control_standby@red:Alarm_off \
alarmoff:control_standby@lightgrey:Alarm_on \
silenceon:rc_MUTE@red:Silence_off \
silenceoff:rc_VOLUP@lime:Silence_on
attr MQTT2_zigbee_RMTest devStateStyle style="text-align:right"
attr MQTT2_zigbee_RMTest devicetopic zigbee2mqtt/RMTest
attr MQTT2_zigbee_RMTest model zigbee2mqtt_smokeDetector
attr MQTT2_zigbee_RMTest readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }\
zigbee2mqtt/RMTest/set/silence_siren:.* silence_siren\
zigbee2mqtt/RMTest/set/alarm:.* alarm\
zigbee2mqtt/RMTest/set/silence_siren:.* { $EVENT =~ m,.*true, ? {"silenceState" => "silenceon"} : {"silenceState" => "silenceoff"} }\
zigbee2mqtt/RMTest/set/alarm:.* { $EVENT =~ m,.*true, ? {"alarmState" => "alarmon"} : {"alarmState" => "alarmoff"} }
attr MQTT2_zigbee_RMTest setList Alarm_on:noArg $DEVICETOPIC/set {"alarm":"true"}\
Alarm_off:noArg $DEVICETOPIC/set {"alarm":"false"}\
Silence_on:noArg $DEVICETOPIC/set {"silence_siren":"true"}\
Silence_off:noArg $DEVICETOPIC/set {"silence_siren":"false"}
attr MQTT2_zigbee_RMTest stateFormat silenceState\
alarmState\
smoke
attr MQTT2_zigbee_RMTest webCmd :


Nimmt er bis auf ReadingList alles an. Da bekomme ich aber:
MQTT2_zigbee_RMTest: bad reading name { json2nameValue($EVENT) }\ (contains not A-Za-z/\d_\.- or is too long)

Himmel ich glaube vom Anspruch es möglichst verstanden zu haben muss ich mich verabschieden und zufrieden sein, wenn es klappt :-(

Beta-User

? wie versuchst du das einzugeben?

Die Codes sind zum "RAW-Import" gedacht, und zumindest mein Testsystem hat das eigentlich auch so anstandslos "gefressen"...
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

homeuser2003

Zitat von: supernova1963 am 13 Juni 2022, 15:08:31
Ich finde es schöner, wenn ein "toggle button" auch den aktuellen Wert anzeigt, deswegen nutze ich i.d.R. devStateIcon.

Ungetestet und nur zur Verdeutlichung meiner Vorgehensweise:
defmod MQTT2_zigbee_RMTest MQTT2_DEVICE zigbee_RMTest
attr MQTT2_zigbee_RMTest devStateIcon false:secur_smoke_detector@green \
true:secur_smoke_detector_blink@red \
alarmon:control_standby@red:Alarm_off \
alarmoff:control_standby@lightgrey:Alarm_on \
silenceon:rc_MUTE@red:Silence_off \
silenceoff:rc_VOLUP@lime:Silence_on
attr MQTT2_zigbee_RMTest devStateStyle style="text-align:right"
attr MQTT2_zigbee_RMTest devicetopic zigbee2mqtt/RMTest
attr MQTT2_zigbee_RMTest model zigbee2mqtt_smokeDetector
attr MQTT2_zigbee_RMTest readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }\
zigbee2mqtt/RMTest/set/silence_siren:.* silence_siren\
zigbee2mqtt/RMTest/set/alarm:.* alarm\
zigbee2mqtt/RMTest/set/silence_siren:.* { $EVENT =~ m,.*true, ? {"silenceState" => "silenceon"} : {"silenceState" => "silenceoff"} }\
zigbee2mqtt/RMTest/set/alarm:.* { $EVENT =~ m,.*true, ? {"alarmState" => "alarmon"} : {"alarmState" => "alarmoff"} }
attr MQTT2_zigbee_RMTest setList Alarm_on:noArg $DEVICETOPIC/set {"alarm":"true"}\
Alarm_off:noArg $DEVICETOPIC/set {"alarm":"false"}\
Silence_on:noArg $DEVICETOPIC/set {"silence_siren":"true"}\
Silence_off:noArg $DEVICETOPIC/set {"silence_siren":"false"}
attr MQTT2_zigbee_RMTest stateFormat silenceState\
alarmState\
smoke
attr MQTT2_zigbee_RMTest webCmd :


Bin ich froh, dass ich ins Anfängerforum gepostet habe - ja inzwischen kann ich auch RAW importieren und siehe da, das klappt auch!

Die Variante von Supernova lässt sich auch importieren, funktioniert aber - anders als die "Beta" Variante leider nicht - Ergebnis siehe unten.

Die States sind auch gar nicht klickbar. Über den Set-Button gehen die States aber, so dass es nur ein Thema der Darstellung on FHEMWEB zu sein scheint?

Hab ich schon DANKE gesagt? :-)

Beta-User

Na ja, habe eben nochmal etwas rumgetestet, und das sieht zumindest plausibel aus:
defmod MQTT2_zigbee_RMTest MQTT2_DEVICE zigbee_RMTest
attr MQTT2_zigbee_RMTest devStateIcon false:secur_smoke_detector@green true:secur_smoke_detector_blink@red 1.false:rc_MUTE@red:silence+on 1.true:rc_MUTE@lightgrey:silence+off 2.true:control_standby@red:alarm+off 2.false:control_standby@green:alarm+on
attr MQTT2_zigbee_RMTest devicetopic zigbee2mqtt/RMTest
attr MQTT2_zigbee_RMTest model zigbee2mqtt_smokeDetector
attr MQTT2_zigbee_RMTest readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }\
  $DEVICETOPIC/set/silence_siren:.* silence\
  $DEVICETOPIC/set/alarm:.* alarm\
  $DEVICETOPIC/availability:.* availability
attr MQTT2_zigbee_RMTest room MQTT2_DEVICE
attr MQTT2_zigbee_RMTest setList alarm:toggle,on,off {my $cmd = $EVTPART1 eq 'on' ? 'true' : $EVTPART1 eq 'off' ? 'false' : ReadingsVal($NAME,'alarm','') eq 'false' ? 'true' : 'false';;return qq($DEVICETOPIC/set { "alarm": "$cmd" } )}\
silence:toggle,on,off {my $cmd = $EVTPART1 eq 'on' ? 'true' : $EVTPART1 eq 'off' ? 'false' : ReadingsVal($NAME,'alarm','') eq 'false' ? 'true' : 'false';;return qq($DEVICETOPIC/set { "silence_siren": "$cmd" } )}
attr MQTT2_zigbee_RMTest stateFormat smoke\
1:silence\
2:alarm
attr MQTT2_zigbee_RMTest webCmd :

true/false in on/off zu mappen finde ich ok, aber was darüber rausgeht, ist m.E. "too much" - aber jedem das seine...
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

supernova1963

Zitat von: homeuser2003 am 13 Juni 2022, 17:27:35
...
Die Variante von Supernova lässt sich auch importieren, funktioniert aber - anders als die "Beta" Variante leider nicht - Ergebnis siehe unten.

Die States sind auch gar nicht klickbar. Über den Set-Button gehen die States aber, so dass es nur ein Thema der Darstellung on FHEMWEB zu sein scheint?

Hab ich schon DANKE gesagt? :-)

Nach der nächsten Aktualisierung der readings: alarm und silence_siren erhalten die neuen readings ihren Wert und werden gem. defStateIcon angezeigt.

Die Lösung von Beta-User zur Differenzierung der 3 true/false Werte ohne neue readings ist sicher besser.