WeekdayTimer zurückspielen und in SmartVISU unter UZSU sichtbar machen

Begonnen von Hackstall, 25 Dezember 2022, 19:55:07

Vorheriges Thema - Nächstes Thema

Hackstall

Hi,

ich möchte gerne verschiedene UZSU Profile für meine Heizungsteuerung verwalten.
Somit stelle ich mir eine Winter, Herbst und Frühjahrkonfiburation vor.

Soweit ich es verstanden habe passiert ja folgendes:
Über meine USZU Einstellungen werden via fronte WeekdayTimer angelegt.
Hierbei werden soviel Geräte angelegt wie ich Einträge unter UZSU in Smartvisu angelegt habe
Das funktioniert auch perfekt.

Nun meine Frage:
Ich speichere nun diese WeekdayTimer unter einem Synonym Frühjahr oder Sommer ab.
Wenn ich nun die HerbstSettings wieder einlese so habe ich alle weekdaytimer in FHEM wieder verfügbar
jedoch NICHT IN SMARTVISU.

Gibt es hier eine Möglichkeit so dass "neuen/anderen" die Einstellungen auch in SMARTVISU sichtbar werden?

Vielen lieben Dank und noch frohe Weihnachten weiterhin.

Danke Andreas

wvhn

Moin Andreas,

Weil hier noch niemand geantwortet hat, versuche ich es mal:
Das UZSU-Widget von smartVISU benötigt für jedes Gerät ein item, in dem alle Schaltzeiten in Form eines JSON-Objekts übertragen werden. Dieses wird wie alle items beim Aufruf einer Visu-Seite abonniert. Das Widget liest das JSON-Objekt ein, füllt die Eingabefelder im Popup und speichert die Änderungen des Anwenders wieder ab.

Beim Abspeichern des items wird in fronthem die Routine uzsu_execute aufgerufen, die aus dem item die entsprechenden Timer erzeugt. Es gibt aber keinen ,,Rückweg", der aus den Timern wieder ein item für die UZSU erzeugt. Wenn Du jetzt die Timer neu einliest, bleibt das item auf dem alten Stand und die Zeiten passen nicht mehr zusammen. Deshalb musst Du vermutlich die uzsu-items mit abspeichern und zurück lesen.

Gruß
Wolfram

Hackstall

Vielen Dank für die Antwort. Bringt etwas Licht in die Thematik.

Ich habe jetzt verstanden, dass bei Änderung in SMARTVISU die UZSU Routine aufgerufen wird,
die dann das UZSU Json Objekt in WeekdayTimer wandelt.

Mit ist noch nicht ganz klar wer denn die UZSU Daten verwaltet wenn ich wieder in SMARTVISU
das Object öffne und da meine Einstellungen sehe "Stichwort: abonniert".
Werden diese Daten dann in SMARTVISU gespeichert oder holt sich SMARTVISU via fronthem die Daten.
Wenn die Daten wieder geholt werden welche Routine (Stichwort: abonniert) wird denn da innerhalb
von Fronthem aufgerufen.

Das wäre dann mein Einstiegspunkt für meine Modesteuerung um die Daten dann an SMARTVISU
"jahreszeitengerecht" zu übertragen. Richtig?

Danke schonmal für die Rückantwort.

wvhn

Moin Andreas,

SmartVISU speichert nichts selbst.  Alle Daten kommen aus dem Backend. Beim Aufruf einer Visu-Seite werden die benötigten items (,,listener") ermittelt und als Liste mit dem Kommando ,,monitor" an fhem geschickt. Fhem übermittelt die aktuellen Werte, überwacht von da an diese items und sendet bei jeder Änderung ein Update. Dies wird als ,,abonnieren" bezeichnet.

Alle items einer Seite werden dabei temporär in einem Array namens ,,widget.buffer" gespeichert, das man sich in der Konsole des Browsers anzeigen lassen kann.

Bei den items für die UZSU ist das auch so. In fhem muss das item anfangs einmal initialisiert werden, damit das UZSU-Widget dieses als zulässiges UZSU-item erkennt und die Daten für die Timer eintragen kann (https://forum.fhem.de/index.php/topic,131241.msg1254359.html#msg1254359). Fhem verwaltet das item, um es dem UZSU-Widget auf Anforderung wieder zur Verfügung zu stellen, macht aber selbst nichts mit dem item. Deshalb hatte ich oben vorgeschlagen, dass Du das item ausliest und mit den Timern gemeinsam abspeicherst.

Der typische Inhalt eines UZSU-Items sieht so aus:
{"active":true, "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":"","value":"","active":false,"type":"String"},"timeMin":"22:30","holiday":{"weekend":false,"workday":false},"timeCron":"sunset","active":false,"timeMax":"23:00"}]}


Gruß
Wolfram

Hackstall

Danke für Deine Rückmeldung.

Leider verstehe ich folgendes noch nicht:

1) Du schreibst:
"Alle items einer Seite werden dabei temporär in einem Array namens ,,widget.buffer" gespeichert, das man sich in der Konsole des Browsers anzeigen lassen kann."
Wie kann ich mir das anzeigen lassen?

2)
"Fhem verwaltet das item, um es dem UZSU-Widget auf Anforderung wieder zur Verfügung zu stellen, macht aber selbst nichts mit dem item. "
Wie und wo verwaltet denn Fhem das Item?


Sind das ev. diese hier (Die habe ich als dummy mit ...uzsuicon angelegt:

{"list":[{"delayedExec":{"type":"String","value":"","deviceString":"","active":false},"timeMax":"","timeMin":"","timeOffset":"","event":"time","timeCron":"01:00","holiday":{"weekend":false,"workday":false},"timeOffsetType":"m","time":"01:00","condition":{"type":"String","active":false,"deviceString":"","value":""},"active":true,"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"18"},{"timeCron":"04:45","holiday":{"weekend":false,"workday":false},"timeOffsetType":"m","time":"04:45","condition":{"value":"","active":false,"deviceString":"","type":"String"},"active":false,"delayedExec":{"type":"String","active":false,"deviceString":"","value":""},"timeMax":"","timeMin":"","timeOffset":"","event":"time","rrule":"FREQ=WEEKLY;BYDAY=MO,WE,FR","value":"22"},{"rrule":"FREQ=WEEKLY;BYDAY=TU,TH","value":"22","delayedExec":{"deviceString":"","active":false,"value":"","type":"String"},"timeMax":"","timeMin":"","timeOffset":"","event":"time","timeCron":"06:30","holiday":{"workday":false,"weekend":false},"condition":{"type":"String","active":false,"deviceString":"","value":""},"timeOffsetType":"m","time":"06:30","active":false},{"timeCron":"08:00","active":true,"holiday":{"weekend":false,"workday":false},"timeOffsetType":"m","condition":{"type":"String","deviceString":"","active":false,"value":""},"time":"08:00","timeOffset":"","delayedExec":{"deviceString":"","active":false,"value":"","type":"String"},"timeMin":"","timeMax":"","event":"time","value":"22","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU"},{"timeCron":"12:00","holiday":{"weekend":false,"workday":false},"time":"12:00","timeOffsetType":"m","condition":{"deviceString":"","active":false,"value":"","type":"String"},"active":true,"delayedExec":{"deviceString":"","active":false,"value":"","type":"String"},"timeMax":"","timeMin":"","timeOffset":"","event":"time","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"18"},{"timeCron":"21:30","time":"21:30","condition":{"type":"String","value":"","active":false,"deviceString":""},"timeOffsetType":"m","holiday":{"workday":false,"weekend":false},"active":true,"timeMin":"","timeMax":"","delayedExec":{"type":"String","active":false,"deviceString":"","value":""},"timeOffset":"","event":"time","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"22"},{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"18","event":"time","timeMax":"","timeMin":"","delayedExec":{"value":"","active":false,"deviceString":"","type":"String"},"timeOffset":"","timeOffsetType":"m","time":"23:00","condition":{"active":false,"deviceString":"","value":"","type":"String"},"holiday":{"weekend":false,"workday":false},"active":true,"timeCron":"23:00"}],"active":true}


Derzeit speichere ich folgendes in einer Datei:
Da müsste doch alles drin sein. Dennoch wird beim Lesen und Neuanlegen das SmartVisu
mit den alten Werten belegt:

Meine Datei: Winter_OG.AzAnd.Heizung.uzsuicon.txt:

define OG.AzAnd.Heizung.uzsuicon dummy
attr OG.AzAnd.Heizung.uzsuicon userattr deviceName
attr OG.AzAnd.Heizung.uzsuicon DbLogExclude .*
attr OG.AzAnd.Heizung.uzsuicon deviceName 15
attr OG.AzAnd.Heizung.uzsuicon group Grp-GUI
attr OG.AzAnd.Heizung.uzsuicon icon it_network
attr OG.AzAnd.Heizung.uzsuicon readingList uzsu {}
attr OG.AzAnd.Heizung.uzsuicon room 9.6.5_UZSU

define rg_uzsu_OG.AzAnd.Heizung.uzsuicon readingsGroup wdt_uzsu_OG.AzAnd.Heizung.uzsuicon.*
attr rg_uzsu_OG.AzAnd.Heizung.uzsuicon DbLogExclude .*
attr rg_uzsu_OG.AzAnd.Heizung.uzsuicon room UZSU

define wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 WeekdayTimer OG.AzAnd.Heizung.uzsuicon en MO,TU,W
E,TH,FR,SA,SU|01:00|18
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 DbLogExclude .*
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 WDT_Group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 commandTemplate set $NAME  $EVENT
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 room 9.6.5_UZSU
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 switchInThePast 1

define wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 WeekdayTimer OG.AzAnd.Heizung.uzsuicon en MO,TU,W
E,TH,FR,SA,SU|17:15|22 (ReadingsVal("Haus_Mode_Select","OG.AzA.Mode","Norm") eq "Norm")
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 DbLogExclude .*
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 WDT_Group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 commandTemplate set $NAME  $EVENT
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 room 9.6.5_UZSU
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 switchInThePast 1

define wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 WeekdayTimer OG.AzAnd.Heizung.uzsuicon en MO,TU,W
E,TH,FR,SA,SU|22:00|18
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 DbLogExclude .*
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 WDT_Group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 commandTemplate set $NAME  $EVENT
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 room 9.6.5_UZSU
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 switchInThePast 1

define wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 WeekdayTimer OG.AzAnd.Heizung.uzsuicon en TH|06:0
0|23
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 DbLogExclude .*
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 WDT_Group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 commandTemplate set $NAME  $EVENT
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 group OG.AzAnd.Heizung.uzsuicon
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 room 9.6.5_UZSU
attr wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 switchInThePast 1

setstate OG.AzAnd.Heizung.uzsuicon 23
setstate OG.AzAnd.Heizung.uzsuicon 2022-12-15 11:47:03 state 23
setstate OG.AzAnd.Heizung.uzsuicon 2022-12-15 11:46:58 uzsu {"list":[{"holiday":{"weekend":fa
lse,"workday":false},"active":true,"rrule":"FREQ=WEEKLY;;BYDAY=MO,TU,WE,TH,FR,SA,SU","delayed
Exec":{"active":false,"type":"String","value":"","deviceString":""},"event":"time","time":"01
:00","timeOffsetType":"m","timeCron":"01:00","value":"18","condition":{"active":false,"value"
:"","type":"String","deviceString":""},"timeOffset":"","timeMax":"","timeMin":""},{"holiday":
{"weekend":false,"workday":false},"active":true,"delayedExec":{"active":false,"value":"","typ
e":"String","deviceString":""},"rrule":"FREQ=WEEKLY;;BYDAY=MO,TU,WE,TH,FR,SA,SU","event":"tim
e","time":"17:15","timeOffsetType":"m","timeCron":"17:15","value":"22","condition":{"active":
true,"deviceString":"ReadingsVal(\"Haus_Mode_Select\",\"OG.AzA.Mode\",\"Norm\") eq \"Norm\"",
"value":"","type":"String"},"timeOffset":"","timeMax":"","timeMin":""},{"timeMax":"","timeOff
set":"","timeMin":"","value":"18","condition":{"active":false,"value":"","type":"String","dev
iceString":""},"timeCron":"22:00","event":"time","timeOffsetType":"m","time":"22:00","holiday
":{"workday":false,"weekend":false},"active":true,"delayedExec":{"value":"","type":"String","
deviceString":"","active":false},"rrule":"FREQ=WEEKLY;;BYDAY=MO,TU,WE,TH,FR,SA,SU"},{"timeMin
":"","time":"06:00","timeOffsetType":"m","timeOffset":"","event":"time","timeMax":"","rrule":
"FREQ=WEEKLY;;BYDAY=TH","delayedExec":{"type":"String","value":"","deviceString":"","active":
false},"active":true,"holiday":{"weekend":false,"workday":false},"timeCron":"06:00","conditio
n":{"active":false,"value":"","type":"String","deviceString":""},"value":"23"}],"active":true
}


setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2022-12-15 11:47:03 currValue 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2022-12-15 11:47:03 nextUpdate 2022-12-16 01:00
:00
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2022-12-15 11:47:03 nextValue 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2022-12-15 11:47:03 state 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2022-12-15 11:46:58 weekdays MO,TU,WE,TH,FR,SA,
SU|01:00|18

setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 22
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 2022-12-15 11:47:03 currValue 22
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 2022-12-15 11:47:03 nextUpdate 2022-12-15 17:15
:00
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 2022-12-15 11:47:03 nextValue 22
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 2022-12-15 11:47:03 state 22
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_1 2022-12-15 11:46:58 weekdays MO,TU,WE,TH,FR,SA,
SU|17:15|22

setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 2022-12-15 11:47:03 currValue 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 2022-12-15 11:47:03 nextUpdate 2022-12-15 22:00
:00
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 2022-12-15 11:47:03 nextValue 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 2022-12-15 11:47:03 state 18
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_2 2022-12-15 11:46:58 weekdays MO,TU,WE,TH,FR,SA,
SU|22:00|18

setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 23
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 2022-12-15 11:47:03 currValue 23
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 2022-12-15 11:47:03 nextUpdate 2022-12-22 06:00
:00
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 2022-12-15 11:47:03 nextValue 23
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 2022-12-15 11:47:03 state 23
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_3 2022-12-15 11:46:58 weekdays TH|06:00|23


Danke Andreas

wvhn

Zitat von: Hackstall am 02 Januar 2023, 15:22:03
1) Du schreibst:
"Alle items einer Seite werden dabei temporär in einem Array namens ,,widget.buffer" gespeichert, das man sich in der Konsole des Browsers anzeigen lassen kann."
Wie kann ich mir das anzeigen lassen?
Developer-Tools des Browsers aufrufen (F12), auf Tab "Konsole" gehen und in der Eingabezeile (>>) "widget.buffer" eingeben.

Zitat von: Hackstall am 02 Januar 2023, 15:22:03
2)
"Fhem verwaltet das item, um es dem UZSU-Widget auf Anforderung wieder zur Verfügung zu stellen, macht aber selbst nichts mit dem item. "
Wie und wo verwaltet denn Fhem das Item?
Da wo fhem alle items / readings hält. Das kannst Du als Anwender von fhem sicherlich besser beurteilen, als ich (Nicht-fhem-Anwender).

Zitat von: Hackstall am 02 Januar 2023, 15:22:03
Derzeit speichere ich folgendes in einer Datei: ...
Jetzt begebe ich mich echt auf dünnes Eis. Was ich hier schreibe, sind Vermutungen aus meinem angelesenen Halbwissen, die Du bitte kritisch prüfen solltest:

Erster Block: das sind vermutlich die Daten für den item-Editor. Wird die readingList dort mit einem leeren Objekt ( "{}" ) befüllt? Wozu werden diese Daten benötigt? Das item existiert doch schon.

Dritter bis sechster Block: das sind die Weekday-Timer, die Du sicherlich so abspeichern musst.

Siebter Block: die ersten beiden setstate-Anweisungen sind m.E. obsolet. Im dritten setstate hast Du das UZSU-item, das Du benötigst. Die dort enthaltenen Zeiten entsprechen genau den Zeiten, die in den Weekday-Timern stehen. Ich frage mich allerdings, ob Datum und Uhrzeit ("2022-12-15 11:46:58")  an dieser Stelle richtig sind. Du willst dies ja im Frühjahr zurücklesen und dann ist das Datum überholt.

Achter bis elfter Block: auch hier passen IMHO die Datumsangaben nicht, da sie in der Vergangenheit liegen. Das gilt auch für das "nextUpdate". Die Daten müsstest Du vor dem Rücklesen anpassen, oder versuchen, so viel wie möglich davon ganz wegzulassen. Aus meiner Sicht ist in jedem Block nur die letzte Zeile ausschlaggebend, wobei die Daten mit denen aus den Blöcken 6-8 übereinstimmen. Die Frage wird sein, welche Daten die Weekdaytimer unbedingt brauchen, um korrekt mit den neuen Einstellungen weiter zu laufen.

Ich fürchte, mehr kann ich dazu nicht sagen.

Gruß
Wolfram


Hackstall

Vielen vielen Dank. Du hast mir sehr weitergeholfen.
Ich werde auf dieser Badis weitermachen und berichten
Wenn es funktioniert.

Danke nochmals
VG Andreas