Einschaltdauer Shelly 1

Begonnen von rallye, 21 November 2021, 15:18:21

Vorheriges Thema - Nächstes Thema

rallye

Hallo !

Ich habe rund 15 Shelly 1 & Sonoff TH16 verbaut und mittels MQTT in meine FEHM-Installation eingebunden. Ich versuche nun einen Weg zu finden eine Nachricht an unsere Familienmitglieder zu senden wenn vergessen wurde das Licht auszuschalten. Und zwar initial nach 15 Minuten, dann alle 5 Minuten. In Anlehnung an diesen Thread https://forum.fhem.de/index.php/topic,58603.msg499626.html#msg499626 habe ich folgende Definition vorgenommen:

defmod warning_Licht_Wirtschaftsraum DOIF ([Licht.WR] eq "on")\
(set TelegramBot message @#FHEM_Gruppe Das Licht im Wirtschaftsraum ist seit {(int([Licht.WR:state:sec] / 60))} eingeschaltet !)

attr warning_Licht_Wirtschaftsraum group warnings
attr warning_Licht_Wirtschaftsraum repeatcmd 300
attr warning_Licht_Wirtschaftsraum room Server
attr warning_Licht_Wirtschaftsraum wait 900

setstate warning_Licht_Wirtschaftsraum cmd_2
setstate warning_Licht_Wirtschaftsraum 2021-11-21 11:40:29 Device Licht.WR
setstate warning_Licht_Wirtschaftsraum 2021-11-20 16:18:56 cmd 2
setstate warning_Licht_Wirtschaftsraum 2021-11-20 16:18:56 cmd_event Licht.WR
setstate warning_Licht_Wirtschaftsraum 2021-11-20 16:18:56 cmd_nr 2
setstate warning_Licht_Wirtschaftsraum 2021-11-21 11:40:29 e_Licht.WR_STATE off
setstate warning_Licht_Wirtschaftsraum 2021-11-20 16:13:03 mode enabled
setstate warning_Licht_Wirtschaftsraum 2021-11-20 16:18:56 state cmd_2
setstate warning_Licht_Wirtschaftsraum 2021-11-21 11:40:29 wait_timer no timer

Der zugehörige Shelly ist so definiert:
defmod Licht.WR MQTT2_DEVICE shelly1_40F5202D3847
attr Licht.WR userattr floor floor_map haus haus_map structexclude
attr Licht.WR IODev MQTT_Shellies
attr Licht.WR alias Wirtschaftsraum
attr Licht.WR 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.WR event-on-change-reading .*
attr Licht.WR group Straßenebene
attr Licht.WR icon light_ceiling
attr Licht.WR model shelly1
attr Licht.WR readingList shellies/shelly1-40F5202D3847/relay/0:.* state\
  shellies/shelly1-40F5202D3847/relay/0:.* relay0\
  shellies/shelly1-40F5202D3847/input/0:.* input0\
  shellies/shelly1-40F5202D3847/online:.* online\
  shellies/shelly1-40F5202D3847/announce:.* { json2nameValue($EVENT) }\
  shellies/announce:.* { $EVENT =~ m,..id...shelly1-40F5202D3847...mac.*, ? json2nameValue($EVENT) : return }\
shelly1_40F5202D3847:shellies/shelly1-40F5202D3847/info:.* { json2nameValue($EVENT) }\
shelly1_40F5202D3847:shellies/shelly1-40F5202D3847/input_event/0:.* { json2nameValue($EVENT) }
attr Licht.WR room GoogleAssistant
attr Licht.WR setList off:noArg shellies/shelly1-40F5202D3847/relay/0/command off\
  on:noArg shellies/shelly1-40F5202D3847/relay/0/command on\
  x_update:noArg shellies/shelly1-40F5202D3847/command update_fw\
  x_mqttcom shellies/shelly1-40F5202D3847/command $EVTPART1

setstate Licht.WR off
setstate Licht.WR 2021-11-20 14:39:54 IODev MQTT_Shellies
setstate Licht.WR 2021-11-20 14:40:00 actions_stats_skipped 0
setstate Licht.WR 2021-01-24 12:54:16 attrTemplateVersion 20200831
setstate Licht.WR 2021-11-20 14:40:00 cfg_changed_cnt 0
setstate Licht.WR 2021-11-20 14:40:00 cloud_connected false
setstate Licht.WR 2021-11-20 14:40:00 cloud_enabled false
setstate Licht.WR 2021-11-20 14:40:00 event
setstate Licht.WR 2021-11-20 14:40:00 event_cnt 0
setstate Licht.WR 2021-11-20 14:40:00 fs_free 150098
setstate Licht.WR 2021-11-20 14:40:00 fs_size 233681
setstate Licht.WR 2021-11-20 14:40:00 fw_ver 20211109-124958/v1.11.7-g682a0db
setstate Licht.WR 2021-11-20 14:40:00 has_update false
setstate Licht.WR 2021-11-20 14:40:00 id shelly1-40F5202D3847
setstate Licht.WR 2021-11-21 15:00:10 input0 0
setstate Licht.WR 2021-11-20 14:40:00 inputs_1_event
setstate Licht.WR 2021-11-20 14:40:00 inputs_1_event_cnt 0
setstate Licht.WR 2021-11-20 14:40:00 inputs_1_input 0
setstate Licht.WR 2021-11-20 14:40:00 ip 192.168.1.225
setstate Licht.WR 2021-11-20 14:40:00 mac 40F5202D3847
setstate Licht.WR 2021-11-20 14:40:00 meters_1_is_valid true
setstate Licht.WR 2021-11-20 14:40:00 meters_1_power 0.00
setstate Licht.WR 2021-11-20 14:40:00 model SHSW-1
setstate Licht.WR 2021-11-20 14:40:00 mqtt_connected true
setstate Licht.WR 2021-11-20 14:40:00 new_fw false
setstate Licht.WR 2021-11-20 14:40:00 online true
setstate Licht.WR 2021-11-20 14:40:00 ram_free 38772
setstate Licht.WR 2021-11-20 14:40:00 ram_total 50880
setstate Licht.WR 2021-11-21 15:00:10 relay0 off
setstate Licht.WR 2021-11-20 14:40:00 relays_1_has_timer false
setstate Licht.WR 2021-11-20 14:40:00 relays_1_ison false
setstate Licht.WR 2021-11-20 14:40:00 relays_1_source mqtt
setstate Licht.WR 2021-11-20 14:40:00 relays_1_timer_duration 0
setstate Licht.WR 2021-11-20 14:40:00 relays_1_timer_remaining 0
setstate Licht.WR 2021-11-20 14:40:00 relays_1_timer_started 0
setstate Licht.WR 2021-11-20 14:40:00 serial 13
setstate Licht.WR 2021-11-21 15:00:10 state off
setstate Licht.WR 2021-11-20 14:40:00 time 14:40
setstate Licht.WR 2021-11-20 14:40:00 unixtime 1637415600
setstate Licht.WR 2021-01-24 12:54:16 update_beta_version 20210122-154556/v1.10.0-rc1@00eeaa9b
setstate Licht.WR 2021-11-20 14:40:00 update_has_update false
setstate Licht.WR 2021-11-20 14:40:00 update_new_version 20211109-124958/v1.11.7-g682a0db
setstate Licht.WR 2021-11-20 14:40:00 update_old_version 20211109-124958/v1.11.7-g682a0db
setstate Licht.WR 2021-11-20 14:40:00 update_status idle
setstate Licht.WR 2021-11-20 14:40:00 uptime 79722
setstate Licht.WR 2021-11-20 14:40:00 wifi_sta_connected true
setstate Licht.WR 2021-11-20 14:40:00 wifi_sta_ip 192.168.1.225
setstate Licht.WR 2021-11-20 14:40:00 wifi_sta_rssi -67
setstate Licht.WR 2021-11-20 14:40:00 wifi_sta_ssid WLAN



Ohne dem attr Licht.WR event-on-change-reading .* updated der Shelly die Readings

  • input0
  • relay0
  • state
alle 30 Sekunden und schreibt einen aktuellen Timestamp für das Reading (die 3 Readingszeilen werden rot).
Mit dem attr Licht.WR event-on-change-reading .* updated der Shelly die Readings

  • input0
  • relay0
  • state
ebenfalls alle 30 Sekunden und schreibt ebenfalls einen aktuellen Timestamp für die Readings (die 3 Readingszeilen bleiben weiss).
Somit ist das {(int([Licht.WR:state:sec] / 60))} zur Berechnung der Zeit seit der Shelly "on" ist nicht geeignet. Auch das ReadingsTimestamp ist wegen dem Update für die Berechnung der Einschaltdauer ungeeignet.

Ich habe mir innerhalb und ausserhalb des Forums die Augen wund gelesen, bin jedoch zu keinem befriedigenden Ergebnis gekommen um mein Problem zu lösen. Wahrscheinlich handelt es sich um einen einfachen Trick den ich nicht kenne oder übersehe.

Bitte um einen kleinen "Gedankenschubs"

Danke
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Beta-User

Mobiles Stichwort: timestamp-on-change-reading.

OT: ich schreibe mir seit gefühlten Ewigkeiten die Finger wund, dass sich für diesen Themenkreis ein Freiwilliger für Vorschläge findet....


Ein weiterer Vorschlag ist im wiki zu finden ;) . firmware-Konfiguration...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

jkriegl

#2
Habe ein userReading "seit", das aufzeichnet seit wann etwas ein/ausgeschaltet ist. (mit event-onchange-reading)
seit:relay:.* {sprintf("%s", substr(ReadingsTimestamp($NAME,"relay","--?--"),8,8))}
Dann periodisch abfragen wie alt dieses reading ist bzw. die Zeitdiffernz ermitteln.
Oder über ein DOIF kann man die Dauer ermitteln, z.B. wie lange war der Fernseher eingeschaltet.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly