Autor Thema: Einschaltdauer Shelly 1  (Gelesen 342 mal)

Offline rallye

  • Full Member
  • ***
  • Beiträge: 186
Einschaltdauer Shelly 1
« am: 21 November 2021, 15:18:21 »
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, Funkmodul: HM-LGW, 3x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE RemoteControl, 5x Hue White and Color Ambiance, 15xHue White Ambiance, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 11x Shelly

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18378
Antw:Einschaltdauer Shelly 1
« Antwort #1 am: 21 November 2021, 15:25:52 »
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-T620@Debian 11, 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
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline jkriegl

  • Full Member
  • ***
  • Beiträge: 336
Antw:Einschaltdauer Shelly 1
« Antwort #2 am: 21 November 2021, 17:41:11 »
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.
« Letzte Änderung: 21 November 2021, 17:44:26 von jkriegl »
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly