[gelöst] Nochmals HMW_LC_BL1_DR und UZSU Smartvisu

Begonnen von Funsailor, 25 April 2022, 15:49:42

Vorheriges Thema - Nächstes Thema

Funsailor

Hallo,

bisher hat das mit dem "commandTemplate set $NAME level $EVENT"gepasst.

Siehe https://forum.fhem.de/index.php/topic,122270.0/

Da gab es zu jedem "blind" einen Eintrag unter
"WeekdayTimer" z.B.:"wdt_uzsu_EG_EsseckeLinksBlind"
Das sah dann z.B.: so aus:
define wdt_uzsu_EG_EsseckeLinksBlind WeekdayTimer EG_EsseckeLinksBlind en   MO,TU,WE,TH,FR,SA,SU|{sunrise_abs("REAL",1800,"07:30","08:00")}|0 MO,TU,WE,TH,FR,SA,SU|{sunset_abs("REAL",3600,,)}|40
setuuid wdt_uzsu_EG_EsseckeLinksBlind 61b3728e-f33f-088a-f7eb-643e5f2fde024f70
attr wdt_uzsu_EG_EsseckeLinksBlind commandTemplate set $NAME level $EVENT
attr wdt_uzsu_EG_EsseckeLinksBlind disable 0
attr wdt_uzsu_EG_EsseckeLinksBlind room UZSU


Seit neustem (ich habe das auf jeden Fall erst jetzt gesehen) werden dies Einträge bei einer Änderung gelöscht und es gibt pro Zeitereigniss einen eigenen Eintrag.
Sieht dann so aus (gekürzte Version):

define rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsGroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.*
setuuid rg_uzsu_EG_WohnzimmerRolloTuerBlind 62603cd3-f33f-088a-aac1-668067546e239980
attr rg_uzsu_EG_WohnzimmerRolloTuerBlind room UZSU
define wdt_uzsu_EG_WohnzimmerRolloTuerBlind_0 WeekdayTimer EG_WohnzimmerRolloTuerBlind en MO,TU,WE,TH,FR,SA,SU|{sunrise_abs("REAL",-1980,"07:30","08:30")}|15
setuuid wdt_uzsu_EG_WohnzimmerRolloTuerBlind_0 6261c2ec-f33f-088a-9027-6027ca6bdd0fe4ff
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_0 commandTemplate set $NAME  $EVENT
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_0 disable 0
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_0 group EG_WohnzimmerRolloTuerBlind
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_0 room UZSU
define wdt_uzsu_EG_WohnzimmerRolloTuerBlind_1 WeekdayTimer EG_WohnzimmerRolloTuerBlind en MO,TU,WE,TH,FR,SA,SU|{sunset_abs("REAL",1920,"22:01","23:00")}|100
setuuid wdt_uzsu_EG_WohnzimmerRolloTuerBlind_1 6261c2ec-f33f-088a-30f2-7daeaef9a952569e
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_1 commandTemplate set $NAME  $EVENT
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_1 disable 0
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_1 group EG_WohnzimmerRolloTuerBlind
attr wdt_uzsu_EG_WohnzimmerRolloTuerBlind_1 room UZSU


Ich habe leider nicht gefunden ob und wenn ja wo man die "commandTemplate" für ein Device vorgeben kann.
Schon bei einem Verändern der Position in der UZSU wird das commandTemplate geändert... und der Rollo bleibt stehen
Ich muss immer in alle wdt_uzsu_EG_WohnzimmerRolloTuerBlind_xyz Device rein und die wieder anpassen. 

Kann mir da jemand auf die Sprünge helfen...
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Beta-User

Hmm, vermutlich bist du im falschen Forenbereich. Das ist mAn. ein USZU-Problem, vielleicht auch eines vom WeekdayTimer (wobei ich im Moment jedenfalls auf die Schnelle nicht erkennen kann, dass eine Änderung der DEF eine automatische Änderung des commandTemplate nach sich ziehen würde).

Vorschlag: Verschiebe das mal.
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

wvhn

#2
Moin Funsailor,

Wir hatten die UZSU-Funktionen für smarthomeNG erweitert und dafür in smartVISU v3.2 das Widget angepasst. Für fhem wurde zwar nichts bewusst verändert, aber vielleicht habe ich da etwas übersehen.

Das UZSU-Widget schreibt ja nur das Dict in das item, aus dem das UZSU-Plugin des Backends die Zeitplanung ableitet. Über das Logging des Websockets sollte sich feststellen lassen, ob es Unterschiede zwischen den Dicts in v3.1 und v3.2 gibt.

Gruß
Wolfram

Funsailor

#3
Hallo Wolfram,
sorry, hat etwas länger gedauert.
Hab das nun mit Smartvisu 3.2, 3.1 und 2.9 versucht, in allen drei Versionen das selbe Problem.

Hier die Infos vom fronthem:

SmartVisu 3.2:
2022.05.12 20:11:13.164 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"connection":"conn-B4VU6RkX","sender":"192.xxx.xxx.xxx","identity":"unknown", "message":{"cmd":"item","id":"EGWzRolloTuerUhr.sw","val":{"list":[{"holiday":{"workday":false,"weekend":false},"active":true,"timeMax":"23:00","timeMin":"22:30","event":"sunset","timeCron":"sunset","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","time":"22:30<sunset+121m<23:00","delayedExec":{"active":false,"type":"String","value":"","deviceString":""},"condition":{"value":"","deviceString":"","active":false,"type":"String"},"timeOffsetType":"m","value":"100","timeOffset":"121"},{"time":"07:30<sunrise-31m<08:30","delayedExec":{"value":"","deviceString":"","active":false,"type":"String"},"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"15","timeOffset":"-31","condition":{"value":"","deviceString":"","type":"String","active":false},"timeOffsetType":"m","timeMax":"08:30","holiday":{"weekend":false,"workday":false},"active":true,"timeCron":"sunrise","timeMin":"07:30","event":"sunrise"}],"active":true}}}
2022.05.12 20:11:13.315 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.12 20:11:13.374 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.12 20:11:13.407 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"log":{"level":4,"text":"ws send to client{\"cmd\":\"item\",\"items\":[\"EGWzRolloTuerUhr.sw\",{\"list\":[{\"delayedExec\":{\"active\":false,\"type\":\"String\",\"value\":\"\",\"deviceString\":\"\"},\"holiday\":{\"weekend\":false,\"workday\":false},\"active\":true,\"timeCron\":\"sunset\",\"event\":\"sunset\",\"time\":\"22:30<sunset+121m<23:00\",\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"timeOffset\":\"121\",\"value\":\"100\",\"timeOffsetType\":\"m\",\"condition\":{\"value\":\"\",\"deviceString\":\"\",\"active\":false,\"type\":\"String\"},\"timeMax\":\"23:00\",\"timeMin\":\"22:30\"},{\"delayedExec\":{\"active\":false,\"type\":\"String\",\"value\":\"\",\"deviceString\":\"\"},\"active\":true,\"holiday\":{\"workday\":false,\"weekend\":false},\"timeCron\":\"sunrise\",\"event\":\"sunrise\",\"time\":\"07:30<sunrise-31m<08:30\",\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"value\":\"15\",\"timeOffset\":\"-31\",\"condition\":{\"active\":false,\"type\":\"String\",\"value\":\"\",\"deviceString\":\"\"},\"timeOffsetType\":\"m\",\"timeMax\":\"08:30\",\"timeMin\":\"07:30\"}],\"active\":true}]}","cmd":"log"}}
2022.05.12 20:11:13.407 4: ipc fronthem:127.0.0.1:33916 (ws): ws send to client{"cmd":"item","items":["EGWzRolloTuerUhr.sw",{"list":[{"delayedExec":{"active":false,"type":"String","value":"","deviceString":""},"holiday":{"weekend":false,"workday":false},"active":true,"timeCron":"sunset","event":"sunset","time":"22:30<sunset+121m<23:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","timeOffset":"121","value":"100","timeOffsetType":"m","condition":{"value":"","deviceString":"","active":false,"type":"String"},"timeMax":"23:00","timeMin":"22:30"},{"delayedExec":{"active":false,"type":"String","value":"","deviceString":""},"active":true,"holiday":{"workday":false,"weekend":false},"timeCron":"sunrise","event":"sunrise","time":"07:30<sunrise-31m<08:30","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"15","timeOffset":"-31","condition":{"active":false,"type":"String","value":"","deviceString":""},"timeOffsetType":"m","timeMax":"08:30","timeMin":"07:30"}],"active":true}]}
2022.05.12 20:11:13.407 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"log":{"cmd":"log","level":4,"text":"ws send to client{\"cmd\":\"item\",\"items\":[\"EG_WzRolladenTerrassenTuer.sw\",\"0\"]}"}}
2022.05.12 20:11:13.407 4: ipc fronthem:127.0.0.1:33916 (ws): ws send to client{"cmd":"item","items":["EG_WzRolladenTerrassenTuer.sw","0"]}

SmartVisu 3.1:
2022.05.12 20:20:24.878 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"connection":"conn-eTW0lhDW","sender":"192.xxx.xxx.xxx","identity":"unknown", "message":{"cmd":"item","id":"EGWzRolloTuerUhr.sw","val":{"list":[{"timeMin":"22:30","event":"sunset","timeCron":"sunset","timeMax":"23:00","active":true,"holiday":{"workday":false,"weekend":false},"timeOffset":"121","value":"100","timeOffsetType":"m","condition":{"active":false,"type":"String","value":"","deviceString":""},"delayedExec":{"type":"String","active":false,"value":"","deviceString":""},"time":"22:30<sunset+121m<23:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU"},{"timeCron":"sunrise","timeMin":"07:30","event":"sunrise","holiday":{"weekend":false,"workday":false},"active":true,"timeMax":"08:30","condition":{"active":false,"type":"String","value":"","deviceString":""},"timeOffsetType":"m","value":"16","timeOffset":"-31","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","time":"07:30<sunrise-31m<08:30","delayedExec":{"type":"String","active":false,"value":"","deviceString":""}}],"active":true}}}
2022.05.12 20:20:25.021 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.12 20:20:25.082 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.12 20:20:25.120 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"log":{"cmd":"log","text":"ws send to client{\"cmd\":\"item\",\"items\":[\"EGWzRolloTuerUhr.sw\",{\"list\":[{\"delayedExec\":{\"value\":\"\",\"deviceString\":\"\",\"type\":\"String\",\"active\":false},\"event\":\"sunset\",\"timeCron\":\"sunset\",\"holiday\":{\"workday\":false,\"weekend\":false},\"active\":true,\"timeOffset\":\"121\",\"value\":\"100\",\"timeOffsetType\":\"m\",\"condition\":{\"type\":\"String\",\"active\":false,\"value\":\"\",\"deviceString\":\"\"},\"time\":\"22:30<sunset+121m<23:00\",\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"timeMin\":\"22:30\",\"timeMax\":\"23:00\"},{\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"time\":\"07:30<sunrise-31m<08:30\",\"delayedExec\":{\"active\":false,\"type\":\"String\",\"deviceString\":\"\",\"value\":\"\"},\"condition\":{\"deviceString\":\"\",\"value\":\"\",\"active\":false,\"type\":\"String\"},\"timeOffsetType\":\"m\",\"value\":\"16\",\"timeOffset\":\"-31\",\"active\":true,\"holiday\":{\"workday\":false,\"weekend\":false},\"timeMax\":\"08:30\",\"timeCron\":\"sunrise\",\"event\":\"sunrise\",\"timeMin\":\"07:30\"}],\"active\":true}]}","level":4}}
2022.05.12 20:20:25.120 4: ipc fronthem:127.0.0.1:33916 (ws): ws send to client{"cmd":"item","items":["EGWzRolloTuerUhr.sw",{"list":[{"delayedExec":{"value":"","deviceString":"","type":"String","active":false},"event":"sunset","timeCron":"sunset","holiday":{"workday":false,"weekend":false},"active":true,"timeOffset":"121","value":"100","timeOffsetType":"m","condition":{"type":"String","active":false,"value":"","deviceString":""},"time":"22:30<sunset+121m<23:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","timeMin":"22:30","timeMax":"23:00"},{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","time":"07:30<sunrise-31m<08:30","delayedExec":{"active":false,"type":"String","deviceString":"","value":""},"condition":{"deviceString":"","value":"","active":false,"type":"String"},"timeOffsetType":"m","value":"16","timeOffset":"-31","active":true,"holiday":{"workday":false,"weekend":false},"timeMax":"08:30","timeCron":"sunrise","event":"sunrise","timeMin":"07:30"}],"active":true}]}
2022.05.12 20:20:25.120 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"log":{"cmd":"log","text":"ws send to client{\"items\":[\"EG_WzRolladenTerrassenTuer.sw\",\"0\"],\"cmd\":\"item\"}","level":4}}
2022.05.12 20:20:25.120 4: ipc fronthem:127.0.0.1:33916 (ws): ws send to client{"items":["EG_WzRolladenTerrassenTuer.sw","0"],"cmd":"item"}


SmartVisu 2.9:
2022.05.12 20:31:23.503 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"connection":"conn-BwupTXFI","sender":"192.xxx.xxx.xxx","identity":"unknown", "message":{"cmd":"item","id":"EGWzRolloTuerUhr.sw","val":{"active":true,"list":[{"delayedExec":{"type":"String","active":false,"deviceString":"","value":""},"timeCron":"sunset","event":"sunset","active":true,"holiday":{"workday":false,"weekend":false},"timeOffset":"121","value":"100","timeOffsetType":"m","condition":{"deviceString":"","value":"","type":"String","active":false},"time":"22:30<sunset+121m<23:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","timeMin":"22:30","timeMax":"23:00"},{"time":"07:30<sunrise-31m<08:30","delayedExec":{"deviceString":"","value":"","active":false,"type":"String"},"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"15","timeOffset":"-31","condition":{"deviceString":"","value":"","active":false,"type":"String"},"timeOffsetType":"m","timeMax":"08:30","holiday":{"workday":false,"weekend":false},"active":true,"timeMin":"07:30","timeCron":"sunrise","event":"sunrise"}]}}}
2022.05.12 20:31:23.649 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.12 20:31:23.709 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.12 20:31:23.743 5: ipc fronthem:127.0.0.1:33916 (ws): receive {"log":{"text":"ws send to client{\"cmd\":\"item\",\"items\":[\"EGWzRolloTuerUhr.sw\",{\"active\":true,\"list\":[{\"timeMin\":\"22:30\",\"timeMax\":\"23:00\",\"timeOffset\":\"121\",\"value\":\"100\",\"timeOffsetType\":\"m\",\"condition\":{\"type\":\"String\",\"active\":false,\"value\":\"\",\"deviceString\":\"\"},\"time\":\"22:30<sunset+121m<23:00\",\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"timeCron\":\"sunset\",\"event\":\"sunset\",\"active\":true,\"holiday\":{\"weekend\":false,\"workday\":false},\"delayedExec\":{\"deviceString\":\"\",\"value\":\"\",\"active\":false,\"type\":\"String\"}},{\"timeOffset\":\"-31\",\"value\":\"15\",\"timeOffsetType\":\"m\",\"condition\":{\"active\":false,\"type\":\"String\",\"deviceString\":\"\",\"value\":\"\"},\"delayedExec\":{\"type\":\"String\",\"active\":false,\"value\":\"\",\"deviceString\":\"\"},\"time\":\"07:30<sunrise-31m<08:30\",\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"timeCron\":\"sunrise\",\"timeMin\":\"07:30\",\"event\":\"sunrise\",\"timeMax\":\"08:30\",\"holiday\":{\"workday\":false,\"weekend\":false},\"active\":true}]}]}","level":4,"cmd":"log"}}



Die letzten Änderungen der Zeiteinstellungen hatte ich im Juli 2021 gemacht, da gab es diese Probleme noch nicht.

Die "31_fronthemDevice.pm, 01_fronthem.pm, fhconverter.pm,99_fronthemUtils.pm und fronthemEditor.js" sind schon seit mindestens 20200611 nicht mehr geändert worden.
Könnte also eher an einem FHEM update liegen...

Wie finde ich da den Verursacher ???? ::)

Edit:
Gefunden  8)
Es liegt an dem Modul "98_WeekdayTimer.pm"
Das von mir beschriebene Verhalten kann ich mit der aktellen Version beobachten:
# $Id: 98_WeekdayTimer.pm 25632 2022-02-05 15:42:57Z Beta-User $
bei einer älteren Version z.B.:
# $Id: 98_WeekdayTimer.pm 23523 2021-01-16 05:44:32Z Beta-User $
funktioniert alles wie erwartet.

Soll ich das Theme jetzt nochmals veschieben oder hoffen das Beta-User hier mitliest? :-\



Edit:
Da war ich doch auf dem Holzweg, ich hatte vergessen den Tab upzudaten....
leider habe ich immer noch das Fehlverhalten, auch mit der "alten" Version von 98_WeekdayTimer.pm

Was mir aber ins Auge fällt sind diese 2 Zeilen im LOG:

2022.05.13 08:36:51.812 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
2022.05.13 08:36:51.875 3: defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind readingsgroup wdt_uzsu_EG_WohnzimmerRolloTuerBlind.* : defmod rg_uzsu_EG_WohnzimmerRolloTuerBlind: Cannot change the TYPE of an existing definition
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Beta-User

Das log liest sich so als würde es u.a. auch deswegen Probleme geben, weil da defmod-Befehle abgefeuert werden, bei denen "readingsgroup" - als TYPE angegeben ist. Vermutlich sollte da "readingsGroup" stehen. Ich kann aber nicht nachvollziehen, wo das herkommt...
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

Funsailor

#6
In meiner Config kann ich kein "defmod" oder "CommandDefMod" finden.

Eine Windoof - Textsuche (Aus der aktuellen Ablage) über das gesamte fhem Verzeichniss bringt mich auch nicht weiter.
Defmod wird nur in der fhem.pl, in der console,js und in fhemweb.js gefunden.

Allerdings bin ich doch noch fündig geworden:

fhem('defmod rg_uzsu_' . $device . ' readingsgroup wdt_uzsu_' . $device . '.*');


Zu finden in der "99_fronthemUtils.pm" in der Funktion "sub UZSU_execute($$;$)"

Ich änder mal das "readingsgroup" in "readingsGroup" und teste das 8)

Edit:
Dann bekomme ich folgende Fehlermeldung:
PERL WARNING: Use of uninitialized value $save in string eq at ./FHEM/99_fronthemUtils.pm line 183.

Der Parameter "level" wird scheinbar nicht gesichert.
Muss jetzt aber leider weg, mal sehen wie ich am WE weiterkomme




- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

Hab mir das nun genauer angeschaut, werde aber nicht wirklich schlau daraus.
Wenn ich mir das Notify der UZSU anschaue, sehe ich bei dem REGEXP ein Ausrufezeichen und folgende Meldung:

Could not optimize the regexp:

    .*:uzsu:.*

How I tried (notifyRegexpCheck):

    .*:uzsu:.*: no match (ignored)


Hier noch der List UZSU:

Internals:
   DEF        .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }
   FUUID      5c5b3836-f33f-088a-aaca-ec751c4259979b8c
   NAME       UZSU
   NR         370
   NTFY_ORDER 50-UZSU
   REGEXP     .*:uzsu:.*
   STATE      2022-05-13 11:43:54
   TYPE       notify
   READINGS:
     2022-05-14 11:47:57   state           active
     2022-05-13 11:43:54   triggeredByDev  EG_EsseckeLinksBlind
     2022-05-13 11:43:54   triggeredByEvent uzsu: {"list":[{"delayedExec":{"deviceString":"","type":"String","active":false,"value":""},"timeCron":"sunrise","holiday":{"workday":false,"weekend":false},"value":"0","event":"sunrise","timeMax":"08:00","timeMin":"07:30","time":"07:30<sunrise+30m<08:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","timeOffsetType":"m","condition":{"deviceString":"","type":"String","active":false,"value":""},"active":true,"timeOffset":"30"},{"active":true,"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","time":"sunset+60m<22:00","timeMin":"","timeMax":"22:00","event":"sunset","timeOffset":"60","condition":{"value":"","active":false,"type":"String","deviceString":""},"timeOffsetType":"m","value":"40","holiday":{"weekend":false,"workday":false},"timeCron":"sunset","delayedExec":{"type":"String","deviceString":"","value":"","active":false}}],"active":false}
     2018-03-29 20:08:15   uzsu            {"active":true,"list":[{"holiday":{"weekend":false,"workday":false},"value":"on","time":"20:09","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","active":true,"event":"time","delayedExec":{"deviceString":"","value":"","active":false,"type":"String"},"timeCron":"20:09","timeMin":"","timeMax":"","timeOffset":"","condition":{"deviceString":"","value":"","active":false,"type":"String"}},{"holiday":{"weekend":false,"workday":false},"value":"off","time":"20:11","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","active":true,"event":"time","delayedExec":{"deviceString":"","value":"","active":false,"type":"String"},"timeCron":"20:11","timeMin":"","timeMax":"","timeOffset":"","condition":{"deviceString":"","value":"","active":false,"type":"String"}}]}
Attributes:
   DbLogExclude .*
   room       UZSU


Ich habe ja den Fehler (wenn das ein Fehler ist) mit dem "readingsgroup" in "readingsGroup" angepasst und erhalte nun die Meldung

PERL WARNING: Use of uninitialized value $save in string eq at ./FHEM/99_fronthemUtils.pm line 183.


Schau ich in der 99_fronthemUtils.pm nach, finde ich folgenden Hinweis:

#
# Nicht vergessen! In FHEM notify definieren!
#
#    define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }
#
# oder wenn Einstellungen gespeichert werden sollen:
#
#    define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1, 'save') }
#
# und folgendes Attribut setzen:
#
#    attr global autosave 1
#
sub UZSU_execute($$;$)


Angeleget hatte ich die UZSU mit

define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }

nach der Änderung in

.*:uzsu:.* { UZSU_execute($NAME, $EVTPART1, 'save') }


Ist die Fehlermeldung weg, aber der Eintrag im commandTemplate ist immer noch falsch:

commandTemplate set $NAME  $EVENT


Wer ist da zuständig und kann hier weiterhelfen?

Im Kopf ist
herrmannj
und
raman
erwähnt...

LG
Michael

- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

Nach dem sich der Sommer dem Ende zu neigt, will ich die Rollladen Steuerzeiten über die SmartVisu-UZSU an die kommende kalte Zeiten anpassen.
Da die Perl Module der HM-LC-BL1PBU-FM Geräte mit "pct" arbeiten funktioniert das bei diesen Geräten ohne Probleme.
In den Modulen der HM485 Rollladen Geräte wird aber "level" verwendet und da wird es dann kompliziert.

In der "99_fronthemUtils" werden beim ändern der Zeiten zuerst alle wdt_uzsu_ Einträge gelöscht um diese im Anschluss mit "defmod rg_uzsu_ ..." mit den neuen Bedingungen neu zu generieren.


sub UZSU_execute($$;$)
{
    my ($device, $uzsu, $save) = @_;
    $uzsu = decode_json($uzsu);
   
    fhem('delete wdt_uzsu_'.$device.'.*');
   
    for (my $i = 0; $i < @{$uzsu->{list}}; $i++) {
        if ($uzsu->{list}[$i]->{active}) {
            my %rrule = UZSU_getRrules($uzsu->{list}[$i]{rrule});
            my $holiday = $uzsu->{list}[$i]{holiday}{weekend} && $uzsu->{list}[$i]{holiday}{workday} ? '' : $uzsu->{list}[$i]{holiday}{weekend} ? $rrule{'BYDAY'} ne '' ? ',$we' : '$we' : $uzsu->{list}[$i]{holiday}{workday} ? $rrule{'BYDAY'} ne '' ? ',!$we' : '!$we' : '';       
            my $time = $uzsu->{list}[$i]{event} eq "time" ?  $uzsu->{list}[$i]{time} : '{'.$uzsu->{list}[$i]->{event} .'_abs("REAL",' . $uzsu->{list}[$i]->{timeOffset} * 60 . ',' . ($uzsu->{list}[$i]->{timeMin} ne '' ? '"' . $uzsu->{list}[$i]->{timeMin} . '"' : '') . ',' . ($uzsu->{list}[$i]->{timeMax} ne '' ? '"' . $uzsu->{list}[$i]->{timeMax} . '"' : '') . ')}';   
            my $condition = UZSU_getCommand($uzsu->{list}[$i]{condition});
           
            my $weekdayTimer = $rrule{'BYDAY'} . $holiday . ($rrule{'BYDAY'} ne '' || $holiday ne '' ? "|" : '') . $time . "|" . $uzsu->{list}[$i]{value};   
            my $delayedExec = UZSU_getCommand($uzsu->{list}[$i]{delayedExec});
           
            fhem('defmod wdt_uzsu_' . $device . '_' . $i . ' WeekdayTimer ' . $device . ' en ' . $weekdayTimer . $condition);
            fhem('attr wdt_uzsu_' . $device . '_' . $i . ' room UZSU');
            fhem('attr wdt_uzsu_' . $device . '_' . $i . ' group ' . $device);
            fhem('setreading wdt_uzsu_' . $device . '_' . $i . ' weekdays ' . $weekdayTimer);
            fhem('defmod rg_uzsu_' . $device . ' readingsGroup wdt_uzsu_' . $device . '.*');
            fhem('attr rg_uzsu_' . $device . ' room UZSU');
            if ($delayedExec) {
                fhem('attr wdt_uzsu_' . $device . '_' . $i . ' delayedExecutionCond ' . $delayedExec);
            }
        }
    }

    if ($uzsu->{active}) {
        fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 0');
    }
    else {
        fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 1');
    }
    fhem('save', 1) if ($save eq 'save');   
}


Dabei wird vom Modul "98_WeekdayTimer" das Attribut

"commandTemplate set $NAME  $EVENT"

erzeugt. Leider funktioniert das so nicht, ich muss das Attribut von Hand in

"commandTemplate set $NAME level $EVENT"

ändern. Erst dann werden die Schaltbefehle ausgeführt. Bei 8 HM-485 Rollladen mit mehreren Schaltbefehlen pro Tag ist das sehr mühselig.

Wie kann ich das am besten umgehen?

  • In den Geräte-Modulen "level" in pct" ändern?
  • In der "99_fronthemUtils" vor dem löschen der  "wdt_uzsu_" das Attribut "CommandTemplate" einmalig einlesen und später wieder setzen? Wie komme ich an dieses Attribut? Und wer ist da im Moment der zuständige Maintainer um das dann einzupflegen?
  • andere Ideen?

Beta-User hat mir hier
https://forum.fhem.de/index.php/topic,122270.msg1168368.html#msg1168368
mitgeteilt, das WDT "level" benötigt. 
Hier noch das Listing eines der Module:

Internals:
   DEF        42000017_01
   FUUID      61aa8f2a-f33f-088a-c57c-995133f12af3168f
   NAME       EG_EsseckeLinksBlind
   NR         708
   STATE      50
   STILLDONETIME 0
   TYPE       HM485
   chanNo     01
   device     EG_EsseckeLinksDevice
   eventCount 81
   peerRole   actuator
   READINGS:
     2022-09-04 14   LevelShEsseckeLinksBlind 0
     2022-08-30 16   R-change_over_delay 0.50
     2022-08-30 16   R-logging       on
     2022-08-30 16   R-reference_run_counter 0
     2022-08-30 16   R-reference_running_time_bottom_top 23.00
     2022-08-30 16   R-reference_running_time_top_bottom 23.00
     2022-09-04 14   direction       none
     2022-09-04 14   level           50
     2022-09-04 14   pct             0
     2022-09-04 14   state           level_50
     2022-09-04 14   uzsu            {"active"
     2022-09-04 14   working         off
   devHash:
     DEF        42000017
     FUUID      61aa8f28-f33f-088a-70d4-931dc2f525d78bb5
     FailedConfigReads 0
     IODev      hm485
     NAME       EG_EsseckeLinksDevice
     NR         706
     RawDeviceType 154
     RawFwVersion 17
     STATE      ACK
     TYPE       HM485


Ein Unterschied fällt mir da auf:
Bei einem HM-LC-BL1PBU-FM Device wird beim Reading "state" 50 angezeigt
Bei dem  EG_EsseckeLinksBlind steht dort "state level_50"








- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Beta-User

Andere Option: cmdalias anlegen für die 8 Geräte, die statt "state"-Befehlen (?!?) ein explizites "level" dazwischen brauchen?
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

raman

#10
Hallo miteinander,
nachdem ich bei meinen alten Herrschaften zwangsweise FHEM neu aufsetzen muss, habe ich mich seit langem mal wieder mit der Kombination aus smartVisu und FHEM auseinandergesetzt, um alles wieder zum laufen zu bringen.
Nur kurz zur Info: Ich persönlich nutze FHEM nicht mehr, kann also nicht ausführlich testen und möchte auch nicht so viel Zeit in FHEM stecken!

@Funsailor:
Das Problem liegt glaube ich an mehreren Stellen. Zum einem werden beim Notify die Events nach Leerzeichen geteilt, was bei der Verwendung von Leerzeichen im Feld "Device/String" der Experteneinstellungen für "Condition" und "DelayedExec" zu einem Fehler in "UZSU_execute" führt. Zum anderen werden für "WeekdayTimer" in dieser Funktion nur "conditions" und keine "commands" generiert, die statt "commandTemplate" ausgeführt wird. Keine Ahnung, ob das jemals in der Kombination "WeekdayTimer" ging!?

Ich habe ein paar Änderungen in der 99_fronthemUtils.pm, um als command z.B. set $NAME level $EVENT für "WeekdayTimer" in UZSU setzen zu können. Als Befehle sind hier set, setstate und setreading gefolgt vom Readings-Namen möglich. Das Feld für Value bleibt leer. (Siehe auch Bild im Anhang)

Zuerst müssen zwei Funktionen irgendwo am Anfang ergänzt werden, die für die Ermittlung von Sonnenauf- und untergang nötig sind:


sub fronthem_sunrise($) {
  my ($hour,$min,$sec) = split(/:/, sunrise_abs($_[0]));
  return $hour . ':' . $min;
}

sub fronthem_sunset($) {
  my ($hour,$min,$sec) = split(/:/, sunset_abs($_[0]));
  return $hour . ':' . $min;
}


Die Funktion UZSU_execute durch folgende ersetzen:


###############################################################################
#
# Umsetzen der UZSU-Settings für ein device
#
###############################################################################
#
# Damit die Einstellungen gespeichert werden können, folgendes Attribut setzen:
#
# attr global autosave 1
#
sub UZSU_execute($$;$)
{
  my ($device, $uzsu, $save) = @_;
  $save = (defined($save) ? $save : "na");
  my $rg = AttrVal('rg_uzsu_'.$device, "room", "na");   
  fhem('delete wdt_uzsu_'.$device.'.*') if($rg ne "na");
  fhem('delete rg_uzsu_'.$device) if($rg ne "na");

  for (my $i = 0; $i < @{$uzsu->{list}}; $i++) {
    if ($uzsu->{list}[$i]->{active}) {
      my %rrule = UZSU_getRrules($uzsu->{list}[$i]{rrule});
      my $holiday = $uzsu->{list}[$i]{holiday}{weekend} && $uzsu->{list}[$i]{holiday}{workday} ? '' : $uzsu->{list}[$i]{holiday}{weekend} ? $rrule{'BYDAY'} ne '' ? ',$we' : '$we' : $uzsu->{list}[$i]{holiday}{workday} ? $rrule{'BYDAY'} ne '' ? ',!$we' : '!$we' : '';

      my $time = $uzsu->{list}[$i]{event} eq "time" ?  $uzsu->{list}[$i]{time} : '{'.$uzsu->{list}[$i]->{event} . '_abs("REAL"' . ($uzsu->{list}[$i]->{timeOffset} ne '' ? ',' . $uzsu->{list}[$i]->{timeOffset} * 60 : '') . ($uzsu->{list}[$i]->{timeMin} ne '' ? ', "' . $uzsu->{list}[$i]->{timeMin} . '"' : '') . ($uzsu->{list}[$i]->{timeMax} ne '' ? ', "' . $uzsu->{list}[$i]->{timeMax} . '"' : '') . ')}';
      my $condition = UZSU_getCommand($uzsu->{list}[$i]{condition});

      my $weekdayTimer = $rrule{'BYDAY'} . $holiday . ($rrule{'BYDAY'} ne '' || $holiday ne '' ? "|" : '') . $time . "|" . $uzsu->{list}[$i]{value};
      my $delayedExec = UZSU_getCommand($uzsu->{list}[$i]{delayedExec});

      fhem('defmod wdt_uzsu_' . $device . '_' . $i . ' WeekdayTimer ' . $device . ' en ' . $weekdayTimer . $condition);
      fhem('attr wdt_uzsu_' . $device . '_' . $i . ' room UZSU');
      fhem('attr wdt_uzsu_' . $device . '_' . $i . ' group ' . $device);
      fhem('setreading wdt_uzsu_' . $device . '_' . $i . ' weekdays ' . $weekdayTimer);
      fhem('defmod rg_uzsu_' . $device . ' readingsGroup wdt_uzsu_' . $device . '.*');
      fhem('attr rg_uzsu_' . $device . ' room UZSU');
  if ($delayedExec) {
        fhem('attr wdt_uzsu_' . $device . '_' . $i . ' delayedExecutionCond ' . $delayedExec);
      }
    }
  }
  if ($uzsu->{active}) {
    fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 0');
  }
  else {
    fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 1');
  }
  fhem('save', 1) if ($save eq 'save');
}


Dann noch UZSU_getCommand ersetzen:

sub UZSU_getCommand($)
{
  my ($command) = @_;
 
  if($command->{active} && $command->{type} ne "String")
  {
    if($command->{deviceString} =~ /^AttrVal|InternalVal|ReadingsVal\("\S+"\s?,\s?"\S+"\s?,\s?"\S*"\)$/)
    {
      return ' (' . $command->{deviceString} . ' ' . $command->{type} . ' "' . $command->{value} . '")';
    }
    elsif($command->{deviceString} =~ /^Value\("\S+"\)$/)
    {
      return ' (' . $command->{deviceString} . ' ' . $command->{type} . ' "' . $command->{value} . '")';
    }
  }
  elsif($command->{active} && $command->{type} eq "String" && $command->{deviceString} ne '')
  {
    if($command->{deviceString} =~ /^fhem ".+"( if\(.+\))?$/)
    {
      return ' {' . $command->{deviceString} . '}';
    }
    elsif($command->{deviceString} =~ /(setstate|setreading|set).([a-zA-Z]+)$/)
    {
      return ' ' . $1 . ' $NAME ' . $2 . ' $EVENT';
    }
    else
    {
      return ' (' . $command->{deviceString} . ')';
    }
  }
  return '';
}


Zum Schluss noch die Funktion UZSU ersetzen:

###############################################################################
# For use with UZSU-Widget in SV and UZSU-notify in fhem
# Setreading a device reading using JSON conversion (gadval => reading=decode_json() => setval => encode_json(reading) )
# The reading ("uzsu") for UZSU-enabled devices should be generated automatically
###############################################################################

sub UZSU(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};

  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
$param->{gadval} = main::fronthem_decodejson(main::ReadingsVal($device, $reading, '{"active": false, "list": []}'));
$param->{gads} = [];

$param->{gadval}->{sunrise} = main::fronthem_sunrise("REAL");
$param->{gadval}->{sunset} = main::fronthem_sunset("REAL");

    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
main::UZSU_execute($device, $gadval, 'save');
$gadval = main::fronthem_encodejson($gadval);
$gadval =~ s/;/;;/ig;
$param->{result} = main::fhem("setreading $device $reading $gadval");
$param->{results} = [];
    return 'done';
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: UZSU';
  }
  return undef;
}


"UZSU_execute" wird nicht mehr per Notify getriggert, sondern wird beim Anfordern der Daten von smartVisu ausgeführt.
Das Reading "uzsu" sollte jetzt für die verwendeten Devices automatisch gesetzt werden und muss nicht mehr manuell gesetzt werden.
Außerdem werden vor dem Senden an smartVisu die Zeiten für Sonnenauf/untergang gesetzt, damit die Warnung, das Plugin upzudaten, in smartVisu nicht ausgelöst wird. Außerdem sind noch ein paar Änderungen enthalten, die einige nervige Fehlermeldungen im Logfile unterdrücken sollten.
Mit uzsuicon sollte alles funktionieren, bei uzsugraph und uzsutable wird es mit Sicherheit zu Problemen kommen, da von FHEM die entsprechenden Daten im Json-Objekt nicht gesendet werden.

Eventuell kann ich damit ein wenig weiterhelfen ;)

wvhn

#11
@raman wärst Du in der Lage, dies als Dateien zur Verfügung zu stellen, wie damals beim Update auf v2.9 (https://forum.fhem.de/index.php/topic,86584.msg790077.html#msg790077) ?

Da hier in den letzten Monaten einige wenige Änderungen im Forum diskutiert und getestet wurden, bin ich gerade dabei, den aktuellsten Stand in einem eigenen Repository zu sammeln - als Interimslösung bis @herrmannj dazu kommt, die Änderungen ins offizielle Repo zu übernehmen.

Deine Änderungen von damals habe ich schon mal mit den zwischenzeitlichen Änderungen im offiziellen Repo abgeglichen, so dass mein Repo aktuell den Stand repräsentiert, der bei den meisten Anwendern laufen sollte, die erst aus dem offiziellen Repo installiert haben und dann Deine Dateien drüber kopiert haben. Zusätzlich habe ich zwei Änderungen eingespielt, die negative Werte in Plots erlauben und das Zuspammen des Logs verhindern - beide hier aus dem Forum. Hier der Link: https://github.com/wvhn/fronthem/tree/develop

Mein Manko ist nur, dass ich das Ergebnis selbst nicht testen kann. Da bin ich auf Mithilfe angewiesen.

Gruß
Wolfram


raman

Hallo Wolfram,

hier meine geänderten Dateien. Als Grundlage habe ich die Versionen aus deinem Repo genommen und mit meinen Änderungen versehen.

Änderungen sind:
- Port und Buffergröße für den websocket sind per Attribut veränderbar (fronthem) - ob das wirklich ohne Probleme läuft, sollte aber genau getestet werden!
- Umlaute im Zusammenhang mit smartVisu sollten funktionieren (schreiben und abrufen), werden aber in FHEM nicht richtig  dargestellt!
- UZSU_execute (und damit die Einstellungen für WeekdayTimer) wird nicht mehr per Notify getriggert, sondern beim Senden der Daten durch smartVisu
- Wie schon beschrieben, lassen sich dem WeekdayTimer commands über die Experteneinstellungen von UZSU "mitgeben"

In der Zip-Datei ist auch noch ein alternativer Treiber für smartVisu enthalten (io_purefhem.js). Eine Version ohne Addontreiber-Funktion. Ich habe das nie genutzt (wahrscheinlich viele andere auch nicht!?) und deshalb für meine Zwecke entfernt.
Der Treiber sollte mit den neuen Versionen von smartVisu laufen.

Alles sollte aber ausführlich getestet werden, bevor es jemand produktiv einsetzt. Damit kann ich leider nicht dienen, da ich FHEM nicht mehr aktiv im Einsatz und nur mit einem minimalen Testsystem alles auprobiert habe.

Gruß
raman



wvhn

Super! Vielen Dank, raman !

Das Repository ist jetzt wie folgt organisiert:

  • im master branch befindet sich die komplette bisherige Version mit Änderungen für smartVISU v2.9 (aktuell am meisten verwendeter Stand). Diese Version sollte ausreichend getestet sein.
  • im develop branch befindet sich die Version mit den neuesten Erweiterungen wie oben beschrieben. Dies ist ein Entwicklungsstand, der noch ausgiebig getestet werden muss.

Hier nochmal der Link: https://github.com/wvhn/fronthem

Gruß
Wolfram


Funsailor

#14
Hallo,
vielen Dank das Ihr das Thema angegangen seit. Bin leider erst jetzt wieder dazu gekommen da ich zur Zeit mit der Planung "energetisch Sanieren" ziemlich eingespannt bin.

Aber zum Thema.
Habe alle Dateien aus dem Develop Branch übernommen, restart FHEM durchgeführt und die Einträge in dem UZSU Widget gemacht.
Bekomme aber folgende Fehlermeldung:

2022.10.01 13:54:15.784 5: ipc fronthem:127.0.0.1:51032 (ws): receive {"connection":"conn-QKdEkeCv","sender":"192.xxx.xxx.xxx","identity":"unknown", "message":{"cmd":"item","id":"EGWzRolloTuerUhr.sw","val":{"list":[{"active":false,"timeMax":"23:00","condition":{"active":true,"type":"String","value":"","deviceString":"set level "},"timeCron":"sunset","holiday":{"workday":false,"weekend":false},"timeMin":"22:30","event":"sunset","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"100","time":"22:30<sunset+121m<23:00","timeOffsetType":"m","delayedExec":{"value":"","type":"String","active":false,"deviceString":""},"timeOffset":"121"},{"timeOffsetType":"m","time":"07:30<sunrise-31m<08:30","timeOffset":"-31","delayedExec":{"deviceString":"","value":"","type":"String","active":false},"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"22","holiday":{"weekend":false,"workday":false},"timeMin":"07:30","timeCron":"sunrise","condition":{"deviceString":"set level","value":"","type":"String","active":true},"event":"sunrise","timeMax":"08:30","active":false},{"delayedExec":{"deviceString":"","value":"","active":false,"type":"String"},"timeOffset":"","time":"sunrise","timeOffsetType":"m","value":"38","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","event":"sunrise","condition":{"value":"","active":true,"type":"String","deviceString":"set level"},"timeCron":"sunrise","holiday":{"workday":false,"weekend":false},"timeMin":"","active":true,"timeMax":""}],"active":true}}}
2022.10.01 13:54:16.029 1: ERROR evaluating my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART2=   $evalSpecials->{'%EVTPART2'};my $EVTPART3=   $evalSpecials->{'%EVTPART3'};my $EVTPART4=   $evalSpecials->{'%EVTPART4'};my $EVTPART5=   $evalSpecials->{'%EVTPART5'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{ UZSU_execute($NAME, $EVTPART1, 'save') }: Can't use string ("{"list":[{"timeOffsetType":"m",""...) as a HASH ref while "strict refs" in use at ./FHEM/99_fronthemUtils.pm line 159.

2022.10.01 13:54:16.029 3: UZSU return value: Can't use string ("{"list":[{"timeOffsetType":"m",""...) as a HASH ref while "strict refs" in use at ./FHEM/99_fronthemUtils.pm line 159.

2022.10.01 13:54:16.033 5: ipc fronthem:127.0.0.1:51032 (ws): receive {"log":{"cmd":"log","level":4,"text":"ws send to client{\"items\":[\"EGWzRolloTuerUhr.sw\",{\"list\":[{\"delayedExec\":{\"active\":false,\"type\":\"String\",\"value\":\"\",\"deviceString\":\"\"},\"timeOffset\":\"121\",\"time\":\"22:30<sunset+121m<23:00\",\"timeOffsetType\":\"m\",\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"value\":\"100\",\"event\":\"sunset\",\"condition\":{\"deviceString\":\"set level \",\"value\":\"\",\"active\":true,\"type\":\"String\"},\"timeMin\":\"22:30\",\"holiday\":{\"weekend\":false,\"workday\":false},\"timeCron\":\"sunset\",\"active\":false,\"timeMax\":\"23:00\"},{\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"value\":\"22\",\"timeOffsetType\":\"m\",\"time\":\"07:30<sunrise-31m<08:30\",\"timeOffset\":\"-31\",\"delayedExec\":{\"deviceString\":\"\",\"value\":\"\",\"active\":false,\"type\":\"String\"},\"timeMax\":\"08:30\",\"active\":false,\"timeCron\":\"sunrise\",\"timeMin\":\"07:30\",\"holiday\":{\"weekend\":false,\"workday\":false},\"condition\":{\"value\":\"\",\"type\":\"String\",\"active\":true,\"deviceString\":\"set level\"},\"event\":\"sunrise\"},{\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\",\"value\":\"38\",\"delayedExec\":{\"type\":\"String\",\"active\":false,\"value\":\"\",\"deviceString\":\"\"},\"timeOffset\":\"\",\"time\":\"sunrise\",\"timeOffsetType\":\"m\",\"active\":true,\"timeMax\":\"\",\"event\":\"sunrise\",\"condition\":{\"deviceString\":\"set level\",\"active\":true,\"type\":\"String\",\"value\":\"\"},\"timeCron\":\"sunrise\",\"holiday\":{\"weekend\":false,\"workday\":false},\"timeMin\":\"\"}],\"active\":true,\"sunrise\":\"07:30\",\"sunset\":\"19:01\"}],\"cmd\":\"item\"}"}}
2022.10.01 13:54:16.033 4: ipc fronthem:127.0.0.1:51032 (ws): ws send to client{"items":["EGWzRolloTuerUhr.sw",{"list":[{"delayedExec":{"active":false,"type":"String","value":"","deviceString":""},"timeOffset":"121","time":"22:30<sunset+121m<23:00","timeOffsetType":"m","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"100","event":"sunset","condition":{"deviceString":"set level ","value":"","active":true,"type":"String"},"timeMin":"22:30","holiday":{"weekend":false,"workday":false},"timeCron":"sunset","active":false,"timeMax":"23:00"},{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"22","timeOffsetType":"m","time":"07:30<sunrise-31m<08:30","timeOffset":"-31","delayedExec":{"deviceString":"","value":"","active":false,"type":"String"},"timeMax":"08:30","active":false,"timeCron":"sunrise","timeMin":"07:30","holiday":{"weekend":false,"workday":false},"condition":{"value":"","type":"String","active":true,"deviceString":"set level"},"event":"sunrise"},{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"38","delayedExec":{"type":"String","active":false,"value":"","deviceString":""},"timeOffset":"","time":"sunrise","timeOffsetType":"m","active":true,"timeMax":"","event":"sunrise","condition":{"deviceString":"set level","active":true,"type":"String","value":""},"timeCron":"sunrise","holiday":{"weekend":false,"workday":false},"timeMin":""}],"active":true,"sunrise":"07:30","sunset":"19:01"}],"cmd":"item"}
2022.10.01 13:54:16.033 5: ipc fronthem:127.0.0.1:51032 (ws): receive {"log":{"cmd":"log","level":4,"text":"ws send to client{\"items\":[\"EG_WzRolladenTerrassenTuer.sw\",\"0\"],\"cmd\":\"item\"}"}}
2022.10.01 13:54:16.034 4: ipc fronthem:127.0.0.1:51032 (ws): ws send to client{"items":["EG_WzRolladenTerrassenTuer.sw","0"],"cmd":"item"}


Die Fehlermeldungen sagen mir nicht wirklich viel... Aber ihr könnt euch bestimmt einen Reim darauf machen.

Gruß
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

#15
Hi Michael,

leider kann ich hier nur bedingt helfen. Was ich sagen kann ist, dass das von smartVISU empfangene Dict für die UZSU korrekt und vollständig ist und dass das an smartVISU zurückgegenene Dict inhaltlich gleich ist, die ergänzten Werte für sunrise und sunset enthält, aber in der Reihenfolge der Attribute unterschiedlich ist. Letzteres ist für die Funktion der UZSU unerheblich, zeigt aber, dass die JSON-Daten in fronthem richtig dekodiert und wieder kodiert werden.

Die Fehlermeldung tritt in der Subroutine "UZSU_execute" auf, die das Dict auswerten soll und dazu über alle Einträge des Attributs "list" iterieren muss. Wenn ich das mit meinen nicht vorhandenen Perl-Kenntnissen richtig interpretiere,  enthält der Parameter "$uzsu" aber nur das Dict (übergeben als $gadval aus der Subroutine UZSU). Die FOR-Schleife benötigt aber ein Array und die Fehlermeldung besagt, dass ein String (das Dict) nicht als Array für das Iterieren verwendet werden kann.

Wenn Du Perl-Kenntnisse hast, könntest Du Dir die Variable $uzsu einmal ausgeben lassen, um zu prüfen, ob die Diagnose stimmt. Alternativ (ohne Gewähr) kannst Du die bisher in der UZSU_execute vorhandene Zeile
$uzsu = decode_json($uzsu);
direkt vor Zeile 159 in die ./FHEM/99_fronthemUtils.pm einfügen. Dies sollte das Dict wieder in ein Array wandeln. Wenn das nicht klappt, probiere es mal mit "fronthem_decodejson" statt "decode_json".

Gruß
Wolfram

Funsailor

#16
Hallo Wolfram,
meine Perl Kenntnisse sind so gut wie nicht vorhanden. Ich programmiere mit C / C++ und leite mir daraus Perl ab, was natürlich nur bei einfachen Programmen funktioniert.

Leider funktioniert dein Vorschlag nicht, mit
$uzsu = decode_json($uzsu);

erhalte ich folgende Fehler im LOG:

2022.10.11 12:42:39.804 1: MyVPN: error doing $result = fronthem::UZSU($param); malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_fronthemUtils.pm line 158.

2022.10.11 12:44:02.404 1: MyVPN: error doing $result = fronthem::UZSU($param); malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_fronthemUtils.pm line 158.

mit
$uzsu = fronthem_decodejson($uzsu);
folgende Meldungen:

2022.10.11 12:52:51.203 1: MyVPN: error doing $result = fronthem::UZSU($param); malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_fronthemUtils.pm line 18.



Ich werde morgen mal versuchen die Variable $uzsu ausgeben zu lassen, mal sehen was ich dann sehe


Edit: Bei diesen Versuchen hatte ich den Eintrage "set level" in den Bedingungen vergessen! Aber die Fehler sollten dann auch nicht vorkommen
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Schade.
Zum Eingrenzen des Fehlers wäre es noch gut zu wissen, ob der Fehler bei einfachen Einträgen mit reinen Zeitangaben auch auftritt, oder nur bei Einträgen mit Bedingungen.

Johann.S

#18
Hallo Funsailer,

kannst du vielleicht einen Screenshot von deinen uzsu Einstellungen zeigen?
Ich versuche dein Problem nach zu stellen!


Habe deine Einstellungen nachgestellt!
Was willst du mitset level machen, ich vermute mal die Rollo schliessen?

Versuche es mal mit:set EGWzRolloTuerUhr level 100
   |         |                      |        |
cmd  device                attr    value

Je nach dem ob 100 zu und 0 auf oder umgekehrt ist!

Wobei Condition eigentlich eine Bedingung ist die abgefragt wird!
Ich habe das bei den Rollos im Device gelöst, so das dass Device auf on/off reagieren kann!
defmod Rollo_WZ_links Dooya 11110....
attr Rollo_WZ_links IODev PI_433MHz
attr Rollo_WZ_links SignalRepeats 10
attr Rollo_WZ_links channel 1
attr Rollo_WZ_links cmdIcon auf:black_up stop:remotecontrol/black_btn_STOP zu:black_down
attr Rollo_WZ_links devStateIcon open:fts_shutter_10@green closed:fts_shutter_100@blue 100:fts_shutter_100 90:fts_shutter_90 80:fts_shutter_80 70:fts_shutter_70 60:fts_shutter_60 50:fts_shutter_50 40:fts_shutter_40 30:fts_shutter_30 20:fts_shutter_20 10:fts_shutter_10 "":fts_shutter_10
attr Rollo_WZ_links drive-down-time-to-100 20.92
attr Rollo_WZ_links drive-down-time-to-close 26.21
attr Rollo_WZ_links drive-up-time-to-100 5.43
attr Rollo_WZ_links drive-up-time-to-open 27.69
attr Rollo_WZ_links event-min-interval .*:300
attr Rollo_WZ_links event-on-change-reading .*
attr Rollo_WZ_links eventMap on:zu off:auf stop:Stop
attr Rollo_WZ_links webCmd auf:stop:zu:pos


Gruß
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Funsailor

#19
Hallo Johannes,
toll das sich noch jemand für diesen Fall interessiert.
Ich habe das Thema wegen der vielen ,,Hausarbeiten" erst mal zurückstellen müssen, ich bin froh das es im Moment Fehlerfrei läuft.
Wenn ich eine Einstellung ändere muss ich nur daran denken das CommandTemplate in den wdt_.xyz anzupassen (set $NAME level $EVENT)

Das Problem tritt ja nur auf, wenn ich auf der SmartVISU Oberfläche mit der UZSU des jeweiligen Rollos Einstellungen ändere. Dann erzeugt das Dict der UZSU einen falschen Eintrag in den zugehörigen wdt_ Attributen. Wenn ich den Eintrag im Attribut CommandTemplate angepasst habe, läuft die Steuerung der Rollos wieder astrein. 
Der Eintrag ,,set level" bezieht sich nur auf dieses Attribut, es geht hier nicht um die direkte Steuerung der Rollos. Letztendlich liegt es daran, dass die Variable des Wertes normalerweise ,,pct" genannt wird, die HM485 Geräte nutzen aber ,,level". Ich habe auch schon mit ,,EventMap" oder ,,cmdalias"  versucht, hat auch nicht funktioniert.

Gruß
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Hallo Johann und Michael,

wir haben aktuell zwei Versionen am Start:

  • die bisherige Umsetzung der UZSU, bei der Michael das Problem mit den Command Templates hat
  • die neue Version im develop branch, in der @raman das Problem von Michael adressiert hat. Diese hat bei Michael nicht funktioniert, so dass wir im Moment keinen Nachweis haben, ob UZSU in dieser Version überhaupt richtig funktioniert. @raman konnte dies nach eigenen Angaben nur in Grundzügen testen, da er fhem selbst nicht mehr verwendet.

Wichtig ist deshalb, dass wir hier immer dokumentieren, auf welche Version sich die Aussagen beziehen. Zudem wäre mein Ziel, dass die neue Version getestet wird und dass nach Möglichkeit die Beschreibung der Konfigurationsschritte vervollständigt wird.

Danke und Gruß
Wolfram

Johann.S

Hallo Wolfram,

ich teste nur im Developer-Branch. ???

Im Aktivsystem ist alles auf aktuelen fhem-Stand!
Dort habe ich Dooya Rollos in kombination mit sunris, sunset und Temperaturwerten und sonoff mit ESPEASY in kompination mit Regenwerten!
funktioniert bei mir reibungslos.

Im Testsystem ist der Developer-Branch plus die neue 99_fronthemUtils.pm von Franz.
In diesem System wird nichts in die Datenbank geschrieben und keine Schalter bedient mit Ausname eines Test-sonoff!

Michaels Problem habe ich im Testsystem nachgestellt und mit meinen Test-sonoff verbunden!
Daran bin ich am werkeln!

Gruß
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Johann.S

Hallo Michael,

kannst du mir bitte noch deine fronthem Einstellungen für den plot, den Aufruf in smartVISU und
deine Änderung im Attribut CommandTemplate schicken?
Hilfreich währe auch ein Screenshot deines Items!

Gruß
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Funsailor

Hallo Wolfgang,
ich habe wieder die bisherige Umsetzung der UZSU installiert, damit geht es wenigstens halbwegs.

Hallo Johannes,
ich kopier die Fronthem Einstellungen des Items aus der Config, das geht schneller:

      "EGEsseckeFensterLinksUhr.sw" : {
         "reading" : "uzsu",
         "type" : "item",
         "device" : "EG_EsseckeLinksBlind",
         "converter" : "UZSU",
         "set" : "uzsu"
      },

Aufruf der UZSU in SmartVisu:
          {{ device.uzsuicon('EGEsseckeFensterLinksUhr', 'EGEsseckeFensterLinksUhr.sw',   'EGEsseckeFensterLinksUhr',      '', '', 'num', [0, 100]) }}



Hier der List des  wdt....

Internals:
   CFGFN     
   COMMAND   
   CONDITION 
   DEF        EG_EsseckeLinksBlind en MO,TU,WE,TH,FR|{sunrise_abs("REAL",900,"07:30","07:03")}|10
   DEVICE     EG_EsseckeLinksBlind
   FUUID      637cccd3-f33f-088a-832c-86113797a3cf1772
   GlobalDaylistSpec
   LANGUAGE   en
   NAME       wdt_uzsu_EG_EsseckeLinksBlind_0
   NR         6870
   Profil 1: Monday 07:02:59 10,
   Profil 2: Tuesday 07:02:59 10,
   Profil 3: Wednesday 07:02:59 10,
   Profil 4: Thursday 07:02:59 10,
   Profil 5: Friday 07:02:59 10,
   STATE      10
   STILLDONETIME 0
   TYPE       WeekdayTimer
   eventCount 9
   setModifier
   READINGS:
     2022-11-23 07:02:59   currValue       10
     2022-11-22 14:21:23   disabled        0
     2022-11-23 07:02:59   nextUpdate      2022-11-24 07:02:59
     2022-11-23 07:02:59   nextValue       10
     2022-11-23 07:02:59   state           10
     2022-11-22 14:21:23   weekdays        MO,TU,WE,TH,FR|{sunrise_abs("REAL",900,"07:30","07:03")}|10
   SWITCHINGTIMES:
     12345|{sunrise_abs("REAL",900,"07:30","07:03")}|10
   TIMER:
     wdt_uzsu_EG_EsseckeLinksBlind_0_midnight:
       HASH       wdt_uzsu_EG_EsseckeLinksBlind_0
       MODIFIER   midnight
       NAME       wdt_uzsu_EG_EsseckeLinksBlind_0_midnight
       SETTIMERATMIDNIGHT 1
   helper:
     daysRegExp (su|mo|tu|we|th|fr|sa|\$we|\!\$we)
     daysRegExpMessage (su|mo|tu|we|th|fr|sa|$we|!$we)
     SWITCHINGTIME:
       0:
       1:
         07:02:59   10
       2:
         07:02:59   10
       3:
         07:02:59   10
       4:
         07:02:59   10
       5:
         07:02:59   10
       6:
     WEDAYS:
       3          1
       4          1
   profil:
     1:
       EPOCH      1669183379
       PARA       10
       TIME       {sunrise_abs("REAL",900,"07:30","07:03")}
       WE_Override 0
       DAYS:
         1
         2
         3
         4
         5
   profile_IDX:
     1:
       07:02:59   1
     2:
       07:02:59   1
     3:
       07:02:59   1
     4:
       07:02:59   1
     5:
       07:02:59   1
Attributes:
   commandTemplate set $NAME level $EVENT
   disable    0
   group      EG_EsseckeLinksBlind
   room       UZSU


Hier die Einstellung für einen plot.... das hat aber nix mit der UZSU zu tun, war das ein Tipp Fehler?

      "AussenTemperaturEingang_Plot" : {
         "interval" : "OnChange",
         "set" : null,
         "mode" : "raw",
         "updatemode" : "additional",
         "reading" : "T",
         "device" : "HausVorderseiteAussentemperatur",
         "end" : "0d",
         "converter" : "Plotfile FileLog_HausVorderseiteAussentemperatur 4",
         "datamode" : null,
         "type" : "plot",
         "start" : "3d"
      },


Ich muss erst wieder mein Testsystem zum laufen bringen, ich will mir nicht noch einmal meine Einstellungen der Rollladen abschießen.... leider ist meine "Banane" defekt, keine Ahnung was der fehlt  :-\ da muss ich auch mal wieder ran.
Wenn du noch etwas brauchst melde dich.
Gruß
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Johann.S

Hallo Michael,

??? ist ein Flüchtigkeitsfehler, ich meinte von deinem uzsu in fronthem und in smartVISU!

Gruß
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Funsailor

Brauchst du noch mehr Infos?
Gruß Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Johann.S

#26
Hallo Michael,

hat etwas gedauert wegen ständigem BSOD!
Kannst du bei dir bitte mal die Änderung im Screenshot 1 durchführen (smartVISU)!
Als Ergebnis bekommst du den delayedExecutionCond (Screenshot 2/fhem).

Erklährung aus der commandoref:
Zitatcommand
    If no condition is set, all the rest is interpreted as a command. Perl-code is setting up by the well-known Block with {}.
    Note: if a command is defined only this command is executed. In case of executing a "set desired-temp" command, you must define the hole command part explicitly by yourself.
    If no explicit command is provided, commandTemplate attribute will indicate the command; this may be a simple set $NAME $EVENT or some variation wrt. to the device beeing recognized as heating type (see WDT_eventMap for even more options!). The following parameters are replaced:
        $NAME => the device to switch
        $EVENT => the new parameter (e.g. a temperature)

Da ich kein HM-Wired habe, kann ich es nicht Testen!

Gruß
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Funsailor

Hallo Johann,
kann ich gerne nochmal probieren, aber mit welcher Version? Ich setzte zur Zeit die Standartumgebung ein.
Wie schön geschrieben ist mein Testaufbau im Moment leider nicht einsetzbar. Mal sehen was sich da machen lässt....
Ich hatte das schon ohne {} (so hatte das Raman in seinem Beitrag gezeigt) probiert, ging leider auch nicht.


Gruß
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Johann.S

Hallo Michael,

sollte in jeder Version funktionieren!
Bei mir erscheint automatisch der delayedExecutionCond und es wird dann nur der ausgeführt!
Die Klammern wurden automatisch hinzugefügt!
Ich habe nur in DelayedExec den String set $NAME level $EVENTeingefügt!

Gruß
Johann
Raspi 3, Sduino 433MHz und 868MHz beide CC1101, Wetterstation TFA Dostmann 35.1119 (WH1080), intertechno PAR1000/PA1500
NOBILY Standard-Minifunkrolladenmotor PR4 13/147-40 ID-98, Homematic CCU3 (homematic-raspi), HmIP-eTRV-2, HmIP-SWDO, HmIP-STH, HmIP-WTH-2, Eigenbau sonoff für Gartenbewässerung

Funsailor

#29
Hi,
endlich konnte ich (nach einigen Problemen) meine Testumgebung mit HMW Devices wieder in Betrieb nehmen.
Habe FHEM aktualisiert, dann die neuste SmartVISU Version (v3.3.1) installiert und meine "Page" auf das notwendigste reduziert. Hab nun nur noch einen Raum mit einem Rollo und der UZSU für dieses Device eingebaut.

Kann damit den "Rollo" bewegen und stoppen, alles funktioniert einwandfrei. Nur das "commandTemplate" wird nicht erzeugt.

Habe das mit dem Master - und Developbranch ausprobiert, immer das gleich.
Allerdings gibt es einen Unterschied, benutze ich den Master-Branch, werden die "wdt_uzsu_" (also die Schaltzeiten) angelegt, nutze ich den Develop-Branch werden die nicht angelegt. Vielleicht hilft der Hinweis weiter.

Edit1: Die Schaltzeiten werden nur hinzugefügt, wenn ich den Eintrag "set $NAME level $EVENT" oder "set level" weglasse, sobald ich in "Condition" einen String eintrage, werden die wdt_ --- Zeiten nicht eingetragen

Das hier ist die Meldung wenn ich die Develop-Branch nutze:

ERROR evaluating my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART2=   $evalSpecials->{'%EVTPART2'};my $EVTPART3=   $evalSpecials->{'%EVTPART3'};my $EVTPART4=   $evalSpecials->{'%EVTPART4'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{ UZSU_execute($NAME, $EVTPART1) }: Can't use string ("{"active":true,"list":[{"time":""...) as a HASH ref while "strict refs" in use at ./FHEM/99_fronthemUtils.pm line 202.


Edit2: Ich habe das nochmals mit allen möglichen und unmöglichen Einstellungen in der UZSU ausprobiert, mit dem Develop-Branch werden überhaupt keine Schaltzeiten angelegt.  :-[

Bin für Fragen und Vorschläge offen....
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

#30
Hallo zusammen,
ich setze mein Monolog fort und berichte ....
Ich habe jetzt auch meine Selbstbau - CUL wieder repariert und damit mein Testsystem um Homematic-Devices erweitert. Desweiteren habe ich ein HM-LC-SW1-BA-PCB - Device (mit Relais, dann höre ich wenigstens wenn das Teil schaltet  8))  als WohnZimmerTestschalter hinzugefügt.
Das Teil dann in SmartVISU eingebaut, UZSU hinzu und ...
Die UZSU geht im Develop-Branch überhaupt nicht, da werden auch für das HM Device keine Schaltzeiten angelegt.

Wieder auf den Master-Branch umgestellt... Alles prima, das Relais klappert in den festgelegten Zeiten.

Irgendwie läuft da beim mir etwas total schief...

Folgendes habe ich gemacht:
Update FHEM .....
Restart FHEM...
Nach der Installation von smartVISU 3.3.1 habe ich lediglich meine Abgespeckt "Wohnungs"-Page hinzugefügt und die Config.ini angepasst.

Zum testen habe ich einfach die beiden Verzeichnisse /opt/fhem/www/ und /opt/fhem/FHEM/ nach /www dev/ bzw. /FHEM dev/ kopiert.
In die kopierten Verzeichnisse habe ich dann die Dateien aus
https://github.com/wvhn/fronthem/tree/develop
hinkopiert.

Rechte gesetzt...
FHEM gestoppt...
Die Verzeichnisse umbenannt: 
                                            /www/ -> /www default/
                                            /www dev/ -> /www/
                                            /FHEM/ -> /FHEM default/
                                            /FHEM dev/ -> /FHEM/
FHEM gestartet...
smartVISU ctrl+F5 (Cache ist aus)


Habe ich irgendetwas vergessen?   :-[










- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

Ich berichte mal weiter...
Wenn ich hier von Master bzw. Develop Spreche, beziehe ich mich auf die entsprechenden Branches von Wolframs GitHub.

Beim Master werden die Zeiten für HM-Devices richtig angelegt:
2023-02-14 14:50:24.406 Global global DELETED wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0
2023-02-14 14:50:24.443 Global global DELETED wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1
2023-02-14 14:50:24.454 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 inactive
2023-02-14 14:50:24.456 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 active
2023-02-14 14:50:24.458 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 nextUpdate: 2023-02-14 22:02:00
2023-02-14 14:50:24.458 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 nextValue: on
2023-02-14 14:50:24.458 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 currValue: on
2023-02-14 14:50:24.503 Global global DEFINED wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0
2023-02-14 14:50:24.505 Global global ATTR wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 room UZSU
2023-02-14 14:50:24.508 Global global ATTR wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 group ActorWeihnachtsBeleuchtung_FlurOG
2023-02-14 14:50:24.510 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 weekdays: MO,TU,WE,TH,FR,SA,SU|{sunset_abs("REAL",960,,"22:02")}|on
2023-02-14 14:50:24.521 Global global MODIFIED rg_uzsu_ActorWeihnachtsBeleuchtung_FlurOG
2023-02-14 14:50:24.524 Global global ATTR rg_uzsu_ActorWeihnachtsBeleuchtung_FlurOG room UZSU
2023-02-14 14:50:24.530 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 inactive
2023-02-14 14:50:24.532 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 active
2023-02-14 14:50:24.534 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 nextUpdate: 2023-02-14 23:30:00
2023-02-14 14:50:24.534 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 nextValue: off
2023-02-14 14:50:24.534 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 currValue: off
2023-02-14 14:50:24.577 Global global DEFINED wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1
2023-02-14 14:50:24.580 Global global ATTR wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 room UZSU
2023-02-14 14:50:24.582 Global global ATTR wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 group ActorWeihnachtsBeleuchtung_FlurOG
2023-02-14 14:50:24.584 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 weekdays: MO,TU,WE,TH,FR,SA,SU|{sunset_abs("REAL",4500,,"23:30")}|off
2023-02-14 14:50:24.594 Global global MODIFIED rg_uzsu_ActorWeihnachtsBeleuchtung_FlurOG
2023-02-14 14:50:24.597 Global global ATTR rg_uzsu_ActorWeihnachtsBeleuchtung_FlurOG room UZSU
2023-02-14 14:50:24.601 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 disabled: 0
2023-02-14 14:50:24.607 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 inactive
2023-02-14 14:50:24.608 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 active
2023-02-14 14:50:24.610 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 nextUpdate: 2023-02-14 22:02:00
2023-02-14 14:50:24.610 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 nextValue: on
2023-02-14 14:50:24.610 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 currValue: on
2023-02-14 14:50:24.613 Global global ATTR wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_0 disable 0
2023-02-14 14:50:24.615 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 disabled: 0
2023-02-14 14:50:24.620 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 inactive
2023-02-14 14:50:24.622 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 active
2023-02-14 14:50:24.624 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 nextUpdate: 2023-02-14 23:30:00
2023-02-14 14:50:24.624 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 nextValue: off
2023-02-14 14:50:24.624 WeekdayTimer wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 currValue: off
2023-02-14 14:50:24.627 Global global ATTR wdt_uzsu_ActorWeihnachtsBeleuchtung_FlurOG_1 disable 0
2023-02-14 14:50:24.627 CUL_HM ActorWeihnachtsBeleuchtung_FlurOG uzsu: {"active":true,"list":[{"timeMin":"","condition":{"value":"","type":"String","active":false,"deviceString":""},"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","time":"sunset+16m<22:02","timeCron":"sunset","value":"on","timeMax":"22:02","holiday":{"weekend":false,"workday":false},"active":true,"event":"sunset","delayedExec":{"type":"String","deviceString":"","active":false,"value":""},"timeOffset":"16","timeOffsetType":"m"},{"timeMin":"","condition":{"active":false,"deviceString":"","type":"String","value":""},"timeMax":"23:30","value":"off","holiday":{"workday":false,"weekend":false},"event":"sunset","timeOffset":"75","timeOffsetType":"m","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","time":"sunset+75m<23:30","timeCron":"sunset","active":true,"delayedExec":{"deviceString":"","active":false,"type":"String","value":""}}]}

Zuerst werden die alten Einträge gelöscht, dann die neuen angelgt.

Beim Develop sieht das so aus:
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 inactive
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 active
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 nextUpdate: 2023-02-14 19:50:00
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 nextValue: on
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 currValue: on
2023-02-14 14:47:24 Global global DEFINED wdt_uzsu_WohnZimmerTestSchalter_0
2023-02-14 14:47:24 Global global ATTR wdt_uzsu_WohnZimmerTestSchalter_0 room UZSU
2023-02-14 14:47:24 Global global ATTR wdt_uzsu_WohnZimmerTestSchalter_0 group WohnZimmerTestSchalter
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 weekdays: MO,TU,WE,TH,FR,SA,SU|19:50|on
2023-02-14 14:47:24 Global global DEFINED rg_uzsu_WohnZimmerTestSchalter
2023-02-14 14:47:24 Global global ATTR rg_uzsu_WohnZimmerTestSchalter room UZSU
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 inactive
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 active
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 nextUpdate: 2023-02-14 19:51:00
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 nextValue: off
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 currValue: off
2023-02-14 14:47:24 Global global DEFINED wdt_uzsu_WohnZimmerTestSchalter_1
2023-02-14 14:47:24 Global global ATTR wdt_uzsu_WohnZimmerTestSchalter_1 room UZSU
2023-02-14 14:47:24 Global global ATTR wdt_uzsu_WohnZimmerTestSchalter_1 group WohnZimmerTestSchalter
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 weekdays: MO,TU,WE,TH,FR,SA,SU|19:51|off
2023-02-14 14:47:24 Global global MODIFIED rg_uzsu_WohnZimmerTestSchalter
2023-02-14 14:47:24 Global global ATTR rg_uzsu_WohnZimmerTestSchalter room UZSU
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 disabled: 0
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 inactive
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 active
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 nextUpdate: 2023-02-14 19:50:00
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 nextValue: on
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_0 currValue: on
2023-02-14 14:47:24 Global global ATTR wdt_uzsu_WohnZimmerTestSchalter_0 disable 0
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 disabled: 0
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 inactive
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 active
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 nextUpdate: 2023-02-14 19:51:00
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 nextValue: off
2023-02-14 14:47:24 WeekdayTimer wdt_uzsu_WohnZimmerTestSchalter_1 currValue: off
2023-02-14 14:47:24 Global global ATTR wdt_uzsu_WohnZimmerTestSchalter_1 disable 0
2023-02-14 14:47:24 Global global DELETED wdt_uzsu_WohnZimmerTestSchalter_0
2023-02-14 14:47:24 Global global DELETED wdt_uzsu_WohnZimmerTestSchalter_1
2023-02-14 14:47:24 Global global DELETED rg_uzsu_WohnZimmerTestSchalter


Seltsamerweise wird hier am Ende alles wieder gelöscht....  :o
Wenn ich mir in der "99_fronthemUtils.pm" die Funktion "UZSU_execute" anschaue, bekomme ich so meine Zweifel was da abgeht.
Eigentlich wird hier zuerst "delete wdt_uzsu..." aufgerufen und danach die ganzen Einträge erzeugt.
Kann mir das jemand erklären?

So sieht das in der Develop Version aus:

sub UZSU_execute($$;$)
{
  my ($device, $uzsu, $save) = @_;
  $save = (defined($save) ? $save : "na");
  my $rg = AttrVal('rg_uzsu_'.$device, "room", "na");   
  fhem('delete wdt_uzsu_'.$device.'.*') if($rg ne "na");
  fhem('delete rg_uzsu_'.$device) if($rg ne "na");

  for (my $i = 0; $i < @{$uzsu->{list}}; $i++) {
    if ($uzsu->{list}[$i]->{active}) {
      my %rrule = UZSU_getRrules($uzsu->{list}[$i]{rrule});
      my $holiday = $uzsu->{list}[$i]{holiday}{weekend} && $uzsu->{list}[$i]{holiday}{workday} ? '' : $uzsu->{list}[$i]{holiday}{weekend} ? $rrule{'BYDAY'} ne '' ? ',$we' : '$we' : $uzsu->{list}[$i]{holiday}{workday} ? $rrule{'BYDAY'} ne '' ? ',!$we' : '!$we' : '';

      my $time = $uzsu->{list}[$i]{event} eq "time" ?  $uzsu->{list}[$i]{time} : '{'.$uzsu->{list}[$i]->{event} . '_abs("REAL"' . ($uzsu->{list}[$i]->{timeOffset} ne '' ? ',' . $uzsu->{list}[$i]->{timeOffset} * 60 : '') . ($uzsu->{list}[$i]->{timeMin} ne '' ? ', "' . $uzsu->{list}[$i]->{timeMin} . '"' : '') . ($uzsu->{list}[$i]->{timeMax} ne '' ? ', "' . $uzsu->{list}[$i]->{timeMax} . '"' : '') . ')}';
      my $condition = UZSU_getCommand($uzsu->{list}[$i]{condition});

      my $weekdayTimer = $rrule{'BYDAY'} . $holiday . ($rrule{'BYDAY'} ne '' || $holiday ne '' ? "|" : '') . $time . "|" . $uzsu->{list}[$i]{value};
      my $delayedExec = UZSU_getCommand($uzsu->{list}[$i]{delayedExec});

      fhem('defmod wdt_uzsu_' . $device . '_' . $i . ' WeekdayTimer ' . $device . ' en ' . $weekdayTimer . $condition);
      fhem('attr wdt_uzsu_' . $device . '_' . $i . ' room UZSU');
      fhem('attr wdt_uzsu_' . $device . '_' . $i . ' group ' . $device);
      fhem('setreading wdt_uzsu_' . $device . '_' . $i . ' weekdays ' . $weekdayTimer);
      fhem('defmod rg_uzsu_' . $device . ' readingsGroup wdt_uzsu_' . $device . '.*');
      fhem('attr rg_uzsu_' . $device . ' room UZSU');
  if ($delayedExec) {
        fhem('attr wdt_uzsu_' . $device . '_' . $i . ' delayedExecutionCond ' . $delayedExec);
      }
    }
  }
  if ($uzsu->{active}) {
    fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 0');
  }
  else {
    fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 1');
  }
  fhem('save', 1) if ($save eq 'save');
}


Hier noch die - UZSU_execute Funktion aus dem Master:
sub UZSU_execute($$;$)
{
my ($device, $uzsu, $save) = @_;
$uzsu = decode_json($uzsu);

fhem('delete wdt_uzsu_'.$device.'.*');

for (my $i = 0; $i < @{$uzsu->{list}}; $i++) {
if ($uzsu->{list}[$i]->{active}) {
my %rrule = UZSU_getRrules($uzsu->{list}[$i]{rrule});
my $holiday = $uzsu->{list}[$i]{holiday}{weekend} && $uzsu->{list}[$i]{holiday}{workday} ? '' : $uzsu->{list}[$i]{holiday}{weekend} ? $rrule{'BYDAY'} ne '' ? ',$we' : '$we' : $uzsu->{list}[$i]{holiday}{workday} ? $rrule{'BYDAY'} ne '' ? ',!$we' : '!$we' : '';
my $time = $uzsu->{list}[$i]{event} eq "time" ?  $uzsu->{list}[$i]{time} : '{'.$uzsu->{list}[$i]->{event} .'_abs("REAL",' . $uzsu->{list}[$i]->{timeOffset} * 60 . ',' . ($uzsu->{list}[$i]->{timeMin} ne '' ? '"' . $uzsu->{list}[$i]->{timeMin} . '"' : '') . ',' . ($uzsu->{list}[$i]->{timeMax} ne '' ? '"' . $uzsu->{list}[$i]->{timeMax} . '"' : '') . ')}';
my $condition = UZSU_getCommand($uzsu->{list}[$i]{condition});

my $weekdayTimer = $rrule{'BYDAY'} . $holiday . ($rrule{'BYDAY'} ne '' || $holiday ne '' ? "|" : '') . $time . "|" . $uzsu->{list}[$i]{value};
my $delayedExec = UZSU_getCommand($uzsu->{list}[$i]{delayedExec});

fhem('defmod wdt_uzsu_' . $device . '_' . $i . ' WeekdayTimer ' . $device . ' en ' . $weekdayTimer . $condition);
fhem('attr wdt_uzsu_' . $device . '_' . $i . ' room UZSU');
fhem('attr wdt_uzsu_' . $device . '_' . $i . ' group ' . $device);
fhem('setreading wdt_uzsu_' . $device . '_' . $i . ' weekdays ' . $weekdayTimer);
fhem('defmod rg_uzsu_' . $device . ' readingsgroup wdt_uzsu_' . $device . '.*');
fhem('attr rg_uzsu_' . $device . ' room UZSU');
if ($delayedExec) {
fhem('attr wdt_uzsu_' . $device . '_' . $i . ' delayedExecutionCond ' . $delayedExec);
}
}
}
if ($uzsu->{active}) {
fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 0');
}
else {
fhem('attr NAME=wdt_uzsu_' . $device . '_.*' . ' disable 1');
}
fhem('save', 1) if ($save eq 'save');
}


Die Ausgaben der Aktionen habe ich aus dem Event Monitor mit Verbose=5 im fronthem-Device herauskopiert...
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Hallo MIchael,

raman hat ja geschrieben, dass die UZSU_Execute bei der Version im develop branch nicht mehr per notify aufgerufen wird, sondern direkt bei Änderung der UZSU-Werte.
Nach meinem laienhaften Verständnis müsste das notify dann gelöscht werden, oder?

Kann es sein, dass Du das notify für die UZSU noch aktiv hast und dies das Löschen der wdts nach dem korrekten Setzen verursacht?

Gruß
Wolfram

Funsailor

#33
Hallo Wolfram,
jeep... das war es. Vielen Dank für das öffnen meiner "Scheuklappen". ::)
Ich hatte den Satz:
"UZSU_execute" wird nicht mehr per Notify getriggert, sondern wird beim Anfordern der Daten von smartVisu ausgeführt.
Das Reading "uzsu" ..... "

Auf das
setreading <device> uzsu {}
bezogen.
Hab mich heute ein wenig mit perl auseinandergesetzt und mir den Ablauf der "UZSU_execute" in eine Datei reingeschrieben. Dabei hatte ich festgestellt, das "UZSU_Execute" 2 mal aufgerufen wird....
Das wäre dann geklärt!

Aber wie sind diese Zeile zu verstehen?

 
  fhem('delete wdt_uzsu_'.$device.'.*') if($rg ne "na");
  fhem('delete rg_uzsu_'.$device) if($rg ne "na");


Das "if" nach dem Funktionsaufruf scheint zu bewirken, das die fhem Anweisung nicht ausgeführt wird (In $rg steht "UZSU")

Ich war gerade dabei in der Perl Doku zu suchen was ein nachgestelltes if bewirkt, von C/C++ etc kenne ich das nicht!

Kann mir jemand diesen Konstrukt erklären?

Die Condition kommt jetzt an:

Internals:
   CFGFN     
   COMMAND   
   CONDITION  (set $NAME level $EVENT)
   DEF        WohnZimmerTestBlind en MO,TU,WE,TH,FR,SA,SU|17:33|89 (set $NAME level  $EVENT)
   DEVICE     WohnZimmerTestBlind
   FUUID      63ebbae4-f33f-8046-00d7-b47e618bdc63aa9c
   GlobalDaylistSpec
   LANGUAGE   en
   NAME       wdt_uzsu_WohnZimmerTestBlind_1
   NR         242
   Profil 0: Sunday 17:33:00 89,
   Profil 1: Monday 17:33:00 89,
   Profil 2: Tuesday 17:33:00 89,
   Profil 3: Wednesday 17:33:00 89,
   Profil 4: Thursday 17:33:00 89,
   Profil 5: Friday 17:33:00 89,
   Profil 6: Saturday 17:33:00 89,
   STATE      active
   STILLDONETIME 0
   TYPE       WeekdayTimer
   eventCount 8
   setModifier
   READINGS:
     2023-02-14 17:46:28   currValue       89


Diese wird im WeekdayTimer aber nicht verarbeitet... Wer ist da jetzt zuständig?

LG
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Für die Condition und DelayedExec wird das Kommando von der Funktion UZSU_getCommand() geparst. Ist der eingestellte Typ "string", sind 3 Möglichkeiten vorgesehen:

  • ein Kommando, das mit "fhem" startet und ggfls. noch eine if-Bedingung enthält, wird in geschweifte Klammern gesetzt und zurück gegeben
  • Kommandos, die auf setstate, setreading oder set mit einem nachfolgenden string lauten, werden mit "$NAME" und "$EVENT" ergänzt. Also führt die EIngabe von "set level" im UZSU-Popup zu einer Rückgabe von " set $NAME level $EVENT"
  • jeder andere String wird in eine runde Klammer gepackt
Conditions werden in der genannten Form an den defmod-Befehl angehängt, delayedExec als Attribut "delayedExecutionCond" für das jeweilige Device definiert.

Gruß
Wolfram

Funsailor

Hallo Wolfram,
jeep, die Condition wird ja eingetragen.
Internals:
   CFGFN     
   COMMAND   
   CONDITION  (set $NAME level $EVENT)


Das Problem ist aber, das "set $NAME level $EVENT" in das attribut commandTemplate übertragen werden muss, daran hapert es
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

ich sehe da eine runde Klammer um die condition. Keine Ahnung, ob das etwas zu bedeuten hat, aber ich würde auf einen falschen String im UZSU-Popup tippen. Hast Du "set level" verwendet?

Funsailor

#37
in "Condition" der wdt_uzsu_.... wird genau das eingetragen was ich im Feld "Condition" in der UZSU eintrage. Die Klammer wird von FHEM erweitert...
Ich hatte im obigen Beispiel in der UZSU folgendes eingetragen:

set $NAME level $EVENT

Trage ich in der UZSU
set level
ein, wird in der wdt_uzsu_....

CONDITION (set level )

eingetragen.
Auf das Attribut commandTemplate hat das in keinem Fall eine Auswirkung.

Edit:
Aber Raman hat ja schon darauf hingewiesen:


@Funsailor:
.....
Zum anderen werden für "WeekdayTimer" in dieser Funktion nur "conditions" und keine "commands" generiert, die statt "commandTemplate" ausgeführt wird. Keine Ahnung, ob das jemals in der Kombination "WeekdayTimer" ging!?



Edit2:
Im 98_weekdayTimer wird in der Funktion WDT_Start folgende Abfrage gemacht:


$attr{$name}{commandTemplate} =
'set $NAME '. checkIfDeviceIsHeatingType($hash) .' $EVENT' if !defined attr{$name}{commandTemplate};


Und nur bei einem HeatingDevice wird die Condition auch eingetragen....  :-[

So kann das ja nicht funktionieren, oder?
Da müsste man wahrscheinlich auf ein HMW - Device (in meinem Fall auf ein Rolladendevice) abprüfen um dann die richtige Bedingung enpflegen.

Spaßhalber habe ich die Anweisung geändert:


  $attr{$name}{commandTemplate} =
     'set $NAME '. "level" .' $EVENT' if !defined $attr{$name}{commandTemplate}; 


Dann funktioniert das wie gewünscht. Aber das hat dann Auswirkung bei allen Devices, also nicht Zielführend  ;)

Ich habe mir mal die aktuellen Condition Ausdrucken lassen:

  _Profile ($hash);
  delete $hash->{DELAYED};
  delete $hash->{DELAYED_IDX};

  open(MYLOG1, ">>WeekdayTimer.txt");   
  print(MYLOG1 "WDT_Start\n");
  print(MYLOG1 "conditionOrCommand: $conditionOrCommand\n");
  close(MYLOG1);


  $attr{$name}{commandTemplate} =
     'set $NAME '. checkIfDeviceIsHeatingType($hash) .' $EVENT' if !defined $attr{$name}{commandTemplate};
     
     
##  $attr{$name}{commandTemplate} =
##     'set $NAME '. "level" .' $EVENT' if !defined $attr{$name}{commandTemplate};     

  WDT_SetTimerOfDay({ HASH => $hash});


Dann sehe ich folgende Ausgabe


WDT_Start
conditionOrCommand: set $NAME level $EVENT
WDT_Start
conditionOrCommand: set $NAME level $EVENT


Wenn ich in die im Bild zu sehende Einstellung vornehme:

- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

#38
IMHO funktioniert das Regex in der UZSU_getCommand($) nicht. Kannst Du dem mal auf den Grund gehen?

Die betreffenden Zeilen sind:

elsif($command->{deviceString} =~ /(setstate|setreading|set).([a-zA-Z]+)$/)
    {
      return ' ' . $1 . ' $NAME ' . $2 . ' $EVENT';
    }

Probiere doch mal auf der Kommandozeile folgendes aus:
{"set level" ~= /(setstate|setreading|set).([a-zA-Z]+)$/}

Evtl. kommen in $command->{deviceString} aus UZSU noch Leerzeichen mit?

EDIT: ein oder mehrere Leerzeichen am Ende würden dazu führen, dass ein Befehl ,,set level " nicht erkannt wird. Das kann man ändern, indem man das $ Zeichen am Ende des Regex entfernt.

EDIT 2:
wir diskutieren jetzt gerade 2 Themen:
- kommen die Eingaben im UZSU-Widget via UZSU_Execute in korrekter Syntax bei fhem an?
- was macht fhem mit den Kommandos?

Für dieses Forum hier ist erstmal die erste Frage relevant. Die zweite kann wahrscheinlich besser an anderer Stelle im fhem-Forum geklärt werden.

Aus meiner Sicht widersprechen sich die Informationen in Deinen letzten Posts bzw. sind unter unterschiedlichen Bedingungen zustande gekommen. Oben hast Du geschrieben, dass immer exakt das in der Condition steht, was Du im Widget eingetragen hast.
CONDITION (set level ) Das ist meines Erachtens nach ein Fehler und man sieht auch das überschüssige Leerzeichen hinter "level".

In Deinem letzten Post stimmt die Condition hingegen bei gleicher (?) Eingabe:
conditionOrCommand: set $NAME level $EVENT

Wie passt das zusammen? Mir wäre Aufklärung an dieser Stelle sehr wichtig, um die zuverlässige Funktion des Codes im develop branch nachzuweisen oder durch Änderungen herzustellen. Dazu kann man sich auch die Syntax des fhem-Kommandos ansehen, das die UZSU_Execute zusammen baut und diese Zeile ggfls. durch manuelle Eingabe in die Kommandozeile testen:
bisher (siehe oben 2 Ergebnisse aus Deinen Posts):
fhem('defmod wdt_uzsu_WohnZimmerTestBlind_1 WeekdayTimer WohnZimmerTestBlind en MO,TU,WE,TH,FR,SA,SU|17:33|89 (set $NAME level  $EVENT))
oder
fhem('defmod wdt_uzsu_WohnZimmerTestBlind_1 WeekdayTimer WohnZimmerTestBlind en MO,TU,WE,TH,FR,SA,SU|17:33|89 (set level ))


IMHO wäre korrekt:
fhem('defmod wdt_uzsu_WohnZimmerTestBlind_1 WeekdayTimer WohnZimmerTestBlind en MO,TU,WE,TH,FR,SA,SU|17:33|89 set $NAME level  $EVENT)

Gruß
Wolfram

wvhn

Ich habe jetzt mal folgende Hinweise in die 99_fronthemUtils.pm im develop branch übernommen:

# ACHTUNG: falls von einer vorherigen fronthem-Version noch das notify definiert ist
# " define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) } "
# dann muss dieses gelöscht werden, da UZSU_Execute sonst doppelt ausgeführt wird
# und die Einstellungen wieder löscht!!
#
# Bei den Angaben für Conditions und delayedExec muss darauf geachtet werden, dass
# am Ende der jeweiligen Strings keine überzähligen Leerzeichen vorkommen.


Für eine Rückmeldung / Bestätigung durch Tests zu meinen diversen letzten EDITs im letzen Post (sorry) wäre ich noch dankbar.

Gruß
Wolfram

Funsailor

#40
Zitat von: wvhn am 14 Februar 2023, 22:05:41
IMHO funktioniert das Regex in der UZSU_getCommand($) nicht. Kannst Du dem mal auf den Grund gehen?

Okay, habe den "Fehler" gefunden. Bin mal wieder über eine Flüchtigkeit gestolpert.
Ich hatte am Anfang immer 2 Zeiten eingetragen und beide wdt_uzsu_ in je einem TAB im Firefox offen. Nach einer Änderung im Widget habe ich dann immer nur in einem Tab CTRL+F5 gemacht... im andere TAB wurde dann das Cache nicht gelöscht :( .

Die Datenübertragung der UZSU zu FHEM funktioniert!

Sobald ein falsches Zeichen nach set kommt, wird die Condition in Klammer gesetzt.

  • Ein Blank vor dem set ist OK.
  • Ein Blank (oder anderes Zeichen) nach dem set erzeugt den Fehler
  • Ein Blank (oder anderes Zeichen) nach dem level erzeugt den Fehler

Sorry das ich gestern für Verwirrung gesorgt hatte :-[ ich hoffe ich habe das jetzt soweit klargestellt.  :)

Praktisch wäre es, wenn der String "set level" und die Aktivierung der Condition beim Neuanlegen einer weiteren Zeit automatisch eingefügt wird.  8)

Ich würde in deinem Hinweis erwähnen, das auch nach dem set nur ein Blank erlaubt ist!
Zitat# Bei den Angaben für Conditions und delayedExec muss darauf geachtet werden, dass
# am Ende der jeweiligen Strings keine überzähligen Leerzeichen vorkommen.

Wenn ich das richtig gesehen habe, kümmert sich Beta-User um die98_WeekdayTimer.pm... glaube aber nicht, das er hier noch mitliest.

Anpingen oder neues Thema?
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Moin Michael,

ich hab einige Erfahrung mit Regex, wenn auch in anderen Programmiersprachen. Ich versuche mich mal schlau zu machen, was in Perl möglich ist, um dies etwas fehlertoleranter zu machen.
Ich melde mich nochmal bei Dir, wenn ich was zum Testen habe.

Parallel kannst Du in einem dafür geeigneten Forum das Thema Weekdaytimer ansprechen.

Gruß
Wolfram

wvhn

Probiere mal Zeile 286:
elsif($command->{deviceString} =~ /(setstate|setreading|set)\s+([a-zA-Z]+)\s*$/)

Gruß
Wolfram

Funsailor

Hi Wolfram,
jetzt werden Leerzeichen ignoriert!  8)
Prima...
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

#44
Hi Wolfram,
im Weekday Modul wird ja hier das Attribut "commandTemplate" gesetzt:

  $attr{$name}{commandTemplate} =
     'set $NAME '. checkIfDeviceIsHeatingType($hash) .' $EVENT' if !defined $attr{$name}{commandTemplate};


Ich habe mal alle Readings der HMW - ausgelesen, damit könnte man erkennen das ein HMW-Rollladenantrieb angesprochen wird.
Oder man erzeugt das Template auf jeden Fall sobald eine gültige Condition eingetragen ist.
Wenn ich das hier richtig interpreiere, muss ich mich aber bis Ende nächste Woche gedulten:

Zitat von: Beta-User am 03 Februar 2023, 21:23:59
Hmmm, sieht in der Tat komisch aus. Ich hoffe, in der nächsten Woche mal dazu zu kommen, das mal intensiv anzusehen. Sonst bitte in 3 Wochen nochmal nachhaken!

Ich pass das mal in meiner Testumgebung folgendermaßen an und kläre das dann nächste Woche mit Beta-User ...


...
...
  my $isHeating         = checkIfDeviceIsHeatingType($hash);
...
...
  if ($isHeating)
  {
   $attr{$name}{commandTemplate} =
     'set $NAME '. checkIfDeviceIsHeatingType($hash) .' $EVENT' if !defined $attr{$name}{commandTemplate};
  }
  else
  {
   $attr{$name}{commandTemplate} = "$conditionOrCommand"; 
  }   
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

#45
Hallo Wolfram,
ich war da auf der falschen Fährte, es funktioniert alles!
Kurze Erklärung kannst du hier nachlesen:
Zitat
https://forum.fhem.de/index.php/topic,114168.msg1267519.html#msg1267519

LG
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -