FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: rallye am 20 Februar 2022, 11:27:34

Titel: Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: rallye am 20 Februar 2022, 11:27:34
Trotz intensivem Studium der Commandref und Beispielen hier im Forum schaffe ich es einfach nicht den gewünschten Erfolg zu erzielen. Ich möchte die Anzahl der eingeschalteten Lampen wissen und habe zu diesem Zweck folgendes DOIF
defmod Anz_Lichter_Ein DOIF ([#]) ()
attr Anz_Lichter_Ein do always
attr Anz_Lichter_Ein group Licht-Steuerung
attr Anz_Lichter_Ein room Server
attr Anz_Lichter_Ein state [#:"^Licht[.].*(?<!till)$"::$STATE ne "off"]

Das hat mal funktioniert, aber seit einiger Zeit geht es nicht mehr. Ich habe die Nomenklatur im Haus, dass alle Lichter mit "Licht." beginnen. Um zu verhindern, dass Lichter, die mit "on-till" bis zu einem gewissen Zeitpunkt eingeschaltet sind als Lampen gezählt erden darf das Device nicht mit "till" enden. Und da die Dimmer nicht nur State on|off haben gilt bei meiner Zählung eben alles was nicht "off" ist als "on".

Wenn ich der Literatur folge müsste eigentlich folgendes klaglos funktionieren:
defmod Anz_Lichter_Ein_1 DOIF ##
attr Anz_Lichter_Ein_1 group Licht-Steuerung
attr Anz_Lichter_Ein_1 room Server
attr Anz_Lichter_Ein_1 state [#:"^Licht[.].*(?<!till)$"::$STATE ne "off"]

setstate Anz_Lichter_Ein_1 initialized
setstate Anz_Lichter_Ein_1 2022-02-20 11:20:48 cmd 0
setstate Anz_Lichter_Ein_1 2022-02-20 11:20:48 mode enabled
setstate Anz_Lichter_Ein_1 2022-02-20 11:20:48 state initialized

tut es aber nicht, sondern bleibt im Status initialized obwohl ich das Nicht am Küchentisch eingeschaltet habe
defmod Licht.Kuechentisch MQTT2_DEVICE shelly1_F4CFA27685AD
attr Licht.Kuechentisch userattr floor floor_map haus haus_map structexclude
attr Licht.Kuechentisch alias Licht Küchentisch
attr Licht.Kuechentisch comment Abgesehen vom richtigen Template (shelly1) müssen noch folgende Attribute "per Hand" gesetzt werden:\
- icon\
- room\
- group\
- alias\
- sortby\
Weiters für die structures: userattr floor floor_map haus haus_map structexclude\
\
Darüber hinaus:\
- event-on-change-reading .*\
- timestamp-on-change-reading state\
damit der Shelly nicht alle 30 Sekunden das Reading state incl. timestamp aktualisiert und somit die echte Ein- bzw. Ausschaltdauer berechnet werden kann\

attr Licht.Kuechentisch devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $light = ReadingsVal($name,"state","off");; my $show = '<a href="';;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';; $show .= FW_makeImage("10px-kreis-".$onl)."</a>";; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>" }
attr Licht.Kuechentisch event-on-change-reading .*
attr Licht.Kuechentisch genericDeviceType switch
attr Licht.Kuechentisch group Straßenebene
attr Licht.Kuechentisch icon light_dinner_table
attr Licht.Kuechentisch model shelly1
attr Licht.Kuechentisch readingList shellies/SH-Kuechentisch/relay/0:.* state\
  shellies/SH-Kuechentisch/relay/0:.* relay0\
  shellies/SH-Kuechentisch/input/0:.* input0\
  shellies/SH-Kuechentisch/online:.* online\
  shellies/SH-Kuechentisch/announce:.* { json2nameValue($EVENT) }\
  shellies/announce:.* { $EVENT =~ m,..id...SH-Kuechentisch...mac.*, ? json2nameValue($EVENT) : return }\
shelly1_F4CFA27685AD:shellies/SH-Kuechentisch/info:.* { json2nameValue($EVENT) }\
shelly1_F4CFA27685AD:shellies/SH-Kuechentisch/online:.* online\
shelly1_F4CFA27685AD:shellies/SH-Kuechentisch/input_event/0:.* { json2nameValue($EVENT) }
attr Licht.Kuechentisch room HomeBridge
attr Licht.Kuechentisch setList off:noArg shellies/SH-Kuechentisch/relay/0/command off\
  on:noArg shellies/SH-Kuechentisch/relay/0/command on\
  x_update:noArg shellies/SH-Kuechentisch/command update_fw\
  x_mqttcom shellies/SH-Kuechentisch/command $EVTPART1
attr Licht.Kuechentisch siriName Küchentisch
attr Licht.Kuechentisch sortby 5
attr Licht.Kuechentisch timestamp-on-change-reading state

setstate Licht.Kuechentisch on
setstate Licht.Kuechentisch 2022-02-20 11:14:34 IODev MQTT_Shellies
setstate Licht.Kuechentisch 2022-02-20 11:14:45 actions_stats_skipped 0
setstate Licht.Kuechentisch 2022-01-08 14:57:54 attrTemplateVersion 20211030
setstate Licht.Kuechentisch 2022-02-20 11:14:45 cfg_changed_cnt 0
setstate Licht.Kuechentisch 2022-02-20 11:14:45 cloud_connected false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 cloud_enabled false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 event
setstate Licht.Kuechentisch 2022-02-20 11:14:45 event_cnt 0
setstate Licht.Kuechentisch 2022-02-20 11:14:45 fs_free 149345
setstate Licht.Kuechentisch 2022-02-20 11:14:45 fs_size 233681
setstate Licht.Kuechentisch 2022-02-20 11:14:45 fw_ver 20220209-092750/v1.11.8-g8c7bb8d
setstate Licht.Kuechentisch 2022-02-20 11:14:45 has_update false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 id SH-Kuechentisch
setstate Licht.Kuechentisch 2022-02-20 11:24:14 input0 1
setstate Licht.Kuechentisch 2022-02-20 11:14:45 inputs_1_event
setstate Licht.Kuechentisch 2022-02-20 11:14:45 inputs_1_event_cnt 0
setstate Licht.Kuechentisch 2022-02-20 11:14:45 inputs_1_input 1
setstate Licht.Kuechentisch 2022-02-20 11:14:45 ip 192.168.57.222
setstate Licht.Kuechentisch 2022-02-20 11:14:45 mac F4CFA27685AD
setstate Licht.Kuechentisch 2022-02-20 11:14:45 meters_1_is_valid true
setstate Licht.Kuechentisch 2022-02-20 11:14:45 meters_1_power 0.00
setstate Licht.Kuechentisch 2022-02-20 11:14:45 model SHSW-1
setstate Licht.Kuechentisch 2022-02-20 11:14:45 mqtt_connected true
setstate Licht.Kuechentisch 2022-02-20 11:14:45 new_fw false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 online true
setstate Licht.Kuechentisch 2022-02-20 11:14:45 ram_free 38156
setstate Licht.Kuechentisch 2022-02-20 11:14:45 ram_total 50864
setstate Licht.Kuechentisch 2022-02-20 11:24:14 relay0 on
setstate Licht.Kuechentisch 2022-02-20 11:14:45 relays_1_has_timer false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 relays_1_ison false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 relays_1_source mqtt
setstate Licht.Kuechentisch 2022-02-20 11:14:45 relays_1_timer_duration 0
setstate Licht.Kuechentisch 2022-02-20 11:14:45 relays_1_timer_remaining 0
setstate Licht.Kuechentisch 2022-02-20 11:14:45 relays_1_timer_started 0
setstate Licht.Kuechentisch 2022-02-20 11:14:45 serial 112
setstate Licht.Kuechentisch 2022-02-20 11:22:33 state on
setstate Licht.Kuechentisch 2022-02-20 11:14:45 time 11:14
setstate Licht.Kuechentisch 2022-02-20 11:14:45 unixtime 1645352084
setstate Licht.Kuechentisch 2022-02-09 13:26:46 update_beta_version 20220126-171950/v1.11.8-rc2-g9861f53
setstate Licht.Kuechentisch 2022-02-20 11:14:45 update_has_update false
setstate Licht.Kuechentisch 2022-02-20 11:14:45 update_new_version 20220209-092750/v1.11.8-g8c7bb8d
setstate Licht.Kuechentisch 2022-02-20 11:14:45 update_old_version 20220209-092750/v1.11.8-g8c7bb8d
setstate Licht.Kuechentisch 2022-02-20 11:14:45 update_status idle
setstate Licht.Kuechentisch 2022-02-20 11:14:45 uptime 766122
setstate Licht.Kuechentisch 2022-02-20 11:14:45 wifi_sta_connected true
setstate Licht.Kuechentisch 2022-02-20 11:14:45 wifi_sta_ip 192.168.57.222
setstate Licht.Kuechentisch 2022-02-20 11:14:45 wifi_sta_rssi -67
setstate Licht.Kuechentisch 2022-02-20 11:14:45 wifi_sta_ssid Internet



Was mache ich falsch ? Danke

So nebenbei: so, wie es in den Beispielen geschrieben ist mit
defmod Anz_Lichter_Ein_1 DOIF
bringe ich es auch nicht hin. die beiden "##" werden immer automatisch hinzugefügt.
Titel: Antw:Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: Damian am 20 Februar 2022, 11:58:48
Offenbar kommt der NOTIFYDEV-Filter mit  (?<!till) nicht klar:

Das kannst du mit list testen:

list .*(<deine Bedingung>).*

list .*(^Licht[.].*(?<!till)$).*

bzw.

list .*(^Licht[.].*$).*
Titel: Antw:Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: betateilchen am 20 Februar 2022, 12:39:43
in der Befehlszeile "count state!=off" eingeben  8)


Siehe auch:
help count
Titel: Antw:Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: Damian am 20 Februar 2022, 13:06:55
Zitat von: betateilchen am 20 Februar 2022, 12:39:43
in der Befehlszeile "count state!=off" eingeben  8)


  • Es kann jeder reguläre devspec-Filter verwendet werden.
  • will man nur die Zahl haben, ergänzt man das Ganze mit "raw" am Ende

Siehe auch:
help count

Offenbar kommt aber devspec-Filter mit Licht[.].*(?<!till) nicht klar
Titel: Antw:Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: rudolfkoenig am 20 Februar 2022, 20:09:24
ZitatOffenbar kommt aber devspec-Filter mit Licht[.].*(?<!till) nicht klar
Im devspec haben die Zeichenfolgen =, !, =~, !~, <=, >=, < und > eine Sonderbedeutung.
Im obigen Beispiel sucht die Funktion nach einer Eigenschaft (Internal, Reading oder Attribut) mit dem Namen Licht[.].*(?, was kleiner ist als !till.
Bzw. wuerde suchen, wenn !till eine Zahl waere.
Titel: Antw:Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: Damian am 20 Februar 2022, 20:28:07
Zitat von: rudolfkoenig am 20 Februar 2022, 20:09:24
Im devspec haben die Zeichenfolgen =, !, =~, !~, <=, >=, < und > eine Sonderbedeutung.
Im obigen Beispiel sucht die Funktion nach einer Eigenschaft (Internal, Reading oder Attribut) mit dem Namen Licht[.].*(?, was kleiner ist als !till.
Bzw. wuerde suchen, wenn !till eine Zahl waere.

Tja, das habe ich befürchtet. Es sind natürlich Sonderfälle. Wenn die Kompatibilitätsprobleme aber weiterhin zunehmen, dann sehe ich mich gezwungen, das Setzen des  NOTIFYDEV-Filters wieder auszubauen und den alten Mechanismus wieder zu reaktivieren.
Titel: Antw:Anzahl eingeschalteter Lampen mittels DOIF
Beitrag von: Damian am 20 Februar 2022, 21:51:39
Lösungsvorschlag für die Definition:

statt:
attr Anz_Lichter_Ein state [#:"^Licht[.].*(?<!till)$"::$STATE ne "off"]

definieren:
attr Anz_Lichter_Ein state [#:"^Licht"::$name !~ /till$/ and $STATE ne "off"]