[gelöst] DOIF Bedingung mit Devicenamen aus Reading

Begonnen von bismosa, 23 Mai 2018, 11:22:47

Vorheriges Thema - Nächstes Thema

bismosa

Hallo,

ich bin gerade dabei mir ein DOIF für die Beschattungssteuerung zu basteln.
Um das ganze möglichst generisch zu halten, habe ich ein Reading im DOIF hinzugefügt, das mein zu steuernden Rolladen enthält.
(Das ganze ist noch lange nicht fertig!)

([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max
and [$SELF:ElevationMin1] < [twilight:elevation] ##Elevation min
and [$SELF:ElevationMax1] > [twilight:elevation] ##Elevation max
)({
my $RolloDevice=ReadingsVal("$SELF","RolloName","");
my $RolloPos=ReadingsVal("$SELF","Rollo_Position1","");
Log 1, "Fall1: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;
})

Soweit kein Problem.
Jetzt möchte ich jedoch noch die Bedingung hinzufügen, das mein Rollo nicht verfahren werden soll, wenn es bereits tiefer steht als die anzufahrende Position.
Also in etwa so:

and [[$SELF:RolloName]:position] >= [$SELF:Rollo_Position1]

Wie kann ich den DeviceNamen ($SELF:RolloName) als reading einbauen? Bisher konnte ich nirgends einen Hinweis finden...und alle Versuche sind mit der Fehlermeldung "di_Rollo1 DOIF: wrong time format: :position" gescheitert.

Bestimmt nur ein ganz einfaches Problem  ;)

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Per

a: $SELF:RolloName entspricht $DEVICE
b: in Perl wäre es $device
c: FILTER in der Ausführung ginge auch, aber dran denken, dass dann der DOIF-Status gewechselt hat (do always-Thema)

bismosa

Hallo,

danke für den Wink mit dem Zaunpfahl! Dabei stelle ich gerade fest, das es so gar nicht funktionieren kann. Da ich einen DOELSE Zweig habe, bei dem der Rolladen wieder geöffnet wird, sobald die Bedingungen nicht mehr erfüllt sind würde nach dem einmaligem Fahren sofort der DOELSE Zweig zum tragen kommen. Und der Rolladen würde immer wieder hin und herfahren.

Somit kommt eigentlich nur "c:" in Frage. Wenn die Bedingung einmalig eintritt.

Dennoch würde mich die Lösung interessieren. Leider verstehe ich den Hint nicht ganz.
a: So nutze ich es mit den anderen Werten, die ich ebenfalls als Reading habe (z.B: [$SELF:aktiv] eq "Ja" )
Habe ich als Reading "RolloName Rolladen_Wohnzimmer" habe ich in $SELF:RolloName = "Rolladen_Wohnzimmer". Ich möchte nun jedoch auf das Reading Rolladen_Wohnzimmer:position kommen.

Danke!
Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Per

OK, RolladenName ist kein von DOIF erzeugtes Reading. Daher nicht identisch mit $DEVICE. Mein Fehler.

Für eine doppelte Auflösung des Readings kannst du
[[$SELF:RolloName]:Position]
versuchen.

Interessant wäre, das "Gesamtkonstrukt" zu sehen. Denn in der DOIF-Abfrage steht ja nix von "RolladenName", es scheint also unabhängig davon zu sein. Aber irgendwie auch nicht :?

Zitat von: bismosa am 23 Mai 2018, 12:27:49der DOELSE Zweig
Welcher DOELSE Zweig? Ich sehe keinen!

bismosa

#4
Hallo,

ich hatte nicht das gesamte DOIF kopiert. Sonst wird es so unübersichtlich.

Hier mal mein komplettes konstrukt. Ist noch nicht fertig und vor allem noch nicht getestet! Es fehlt auch noch das Wetter...

Ziel:
- Komfortable Rolladensteuerung mit Parametereingaben (schnelle Änderung und WAF Faktor!)
- Wenn die Sonne in der richtigen Position steht die Rolläden auf Sonnenschutz (da Bäume vor den Fenster auf der Norseite sind, möchte ich mehrere Positionen haben)
- Wenn die sonne weg ist, Rolläden wieder hoch fahren
- Wenn es dunkel wird bzw. bei einer festen Zeit Rolläden ganz runter (option: Wenn Fenster offen nicht fahren)
- Wenn zwischendurch manuell verfahren wurde -> Nichts mehr machen
- Nur in einem bestimmten Zeitraum die Beschattung fahren
- Nur bei bestimmten Temperaturen (innen/außen) fahren
- ...bestimmt fällt mir noch mehr ein :)

Um nicht zig Geräte zu definieren für meine derzeit 7 zu steuernden Rolläden habe ich alles in ein "generisches" DOIF gepackt. Ich brauche nur noch dieses DOIF zu kopieren und den Rolladen-Namen anpassen.

RAW-Definition:

defmod di_Rollo1 DOIF \
##1 Zeitsteuerung vor allen anderen: Wenn schließzeit früher, wird die Bedingung sonst nicht wahr!\
([$SELF:SchliessenAktiv] eq "Ja" \
and [[$SELF:SchliessenUm]|012345678]\
and [$SELF:twilight] eq "Nein"\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
##Nur, wenn nicht ganz unten\
Log 1, "Rollo $RolloDevice soll schließen (Zeit)";;\
my $RolloPos=ReadingsVal("$RolloDevice", "position", 0);;\
if ("$RolloPos" < 100){\
Log 1, "Rollo $RolloDevice wird geschlossen!";;\
##TODO: Rollo schließen!\
}\
})\
\
##2 Zeitsteuerung nach Dämmerung\
DOELSEIF\
([$SELF:SchliessenAktiv] eq "Ja" \
and [$SELF:twilight] eq "Ja"\
and [([twilight:ss_weather]+[$SELF:Offset]*60)|012345678]\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
##Nur, wenn nicht ganz unten\
Log 1, "Rollo $RolloDevice soll schließen (Dämmerung)";;\
my $RolloPos=ReadingsVal("$RolloDevice", "position", 0);;\
if ("$RolloPos" < 100){\
Log 1, "Rollo $RolloDevice wird geschlossen!";;\
##TODO: Rollo schließen!\
}\
})\
\
##3 Dämmerung 1\
DOELSEIF ([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv\
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum\
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen\
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen\
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min\
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max\
and [$SELF:ElevationMin1] < [twilight:elevation] ##Elevation min\
and [$SELF:ElevationMax1] > [twilight:elevation] ##Elevation max\
## and [{$SELF:RolloName}:position] >= [$SELF:Rollo_Position1] ##Wenn = oder weiter unten nicht fahren!\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
my $RolloPos=ReadingsVal("$SELF","Rollo_Position1","");;\
Log 1, "Fall1: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;;\
}) \
\
##4 Dämmerung 2\
DOELSEIF \
([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv\
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum\
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen\
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen\
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min\
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max\
and [$SELF:ElevationMin2] < [twilight:elevation] ##Elevation min\
and [$SELF:ElevationMax2] > [twilight:elevation] ##Elevation max\
\
##Position des Rolladen\
##WETTER\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
my $RolloPos=ReadingsVal("$SELF","Rollo_Position2","");;\
Log 1, "Fall2: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;;\
}) \
\
##5 Dämmerung 3\
DOELSEIF \
([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv\
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum\
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen\
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen\
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min\
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max\
and [$SELF:ElevationMin3] < [twilight:elevation] ##Elevation min\
and [$SELF:ElevationMax3] > [twilight:elevation] ##Elevation max\
\
##Position des Rolladen\
##WETTER\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
my $RolloPos=ReadingsVal("$SELF","Rollo_Position3","");;\
Log 1, "Fall3: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;;\
}) \
\
##6 Ausgeschaltet -> Nix mehr machen!\
DOELSEIF ([$SELF:aktiv] eq "Nein" \
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
Log 1, "Rollo $RolloDevice abgeschaltet.";;\
})\
\
##7 Wenn keine Bedingung war ist, zurücksetzen!\
DOELSE ({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
Log 1, "Rollo $RolloDevice DOELSE";;\
##Prüfen, ob automatisch wieder geöffnet werden soll\
my $RolloAutoHoch=ReadingsVal("$SELF","AutoHoch","");;\
if ("$RolloAutoHoch" eq "Ja"){\
##Nur, wenn nicht ganz unten\
Log 1, "Rollo $RolloDevice soll hochfahren";;\
my $RolloPos=ReadingsVal("$RolloDevice", "position", 0);;\
if ("$RolloPos" < 99){\
Log 1, "Rollo $RolloDevice ist nicht geschlossen";;\
##Nur, wenn nicht bereits oben\
if ("$RolloPos" > 0){\
Log 1, "Rollo $RolloDevice wird hoch gefahren!";;\
##TODO: Rollo fahren!\
}\
}\
}\
\
})\

attr di_Rollo1 readingList aktiv,RolloName,\
AzimutMin,AzimutMax,\
ElevationMin1,ElevationMax1,Rollo_Position1,\
ElevationMin2,ElevationMax2,Rollo_Position2,\
ElevationMin3,ElevationMax3,Rollo_Position3,\
ZeitVon,ZeitBis,\
MinTempInnen,MinTempAussen,\
AutoHoch,\
SchliessenAktiv,SchliessenUm,twilight,Offset,FensterOffen
attr di_Rollo1 room Rolläden
attr di_Rollo1 setList aktiv:Ja,Nein RolloName:textFieldNL\
AzimutMin:textFieldNL AzimutMax:textFieldNL \
ElevationMin1:textFieldNL ElevationMax1:textFieldNL Rollo_Position1:selectnumbers,0,10,100,0,lin\
ElevationMin2:textFieldNL ElevationMax2:textFieldNL Rollo_Position2:selectnumbers,0,10,100,0,lin\
ElevationMin3:textFieldNL ElevationMax3:textFieldNL Rollo_Position3:selectnumbers,0,10,100,0,lin\
ZeitVon:time ZeitBis:time \
MinTempInnen:selectnumbers,0,1,30,0,lin MinTempAussen:selectnumbers,0,1,30,0,lin \
AutoHoch:Ja,Nein \
SchliessenAktiv:Ja,Nein SchliessenUm:time FensterOffen:Nichts#unternehmen,Schließen \
twilight:Ja,Nein Offset:selectnumbers,-180,5,180,0,lin
attr di_Rollo1 userReadings aktiv RolloName\
AzimutMin AzimutMax \
ElevationMin1 ElevationMax1 Rollo_Position1 \
ElevationMin2 ElevationMax2 Rollo_Position2 \
ElevationMin3 ElevationMax3 Rollo_Position3 \
ZeitVon ZeitBis \
MinTempInnen MinTempAussen \
AutoHoch \
SchliessenAktiv SchliessenUm twilight Offset FensterOffen
attr di_Rollo1 webCmd aktiv:RolloName\
:AzimutMin:AzimutMax:ElevationMin1:ElevationMax1:Rollo_Position1\
:ElevationMin2:ElevationMax2:Rollo_Position2\
:ElevationMin3:ElevationMax3:Rollo_Position3\
:ZeitVon:ZeitBis\
:MinTempInnen:MinTempAussen\
:AutoHoch\
:<br>:SchliessenAktiv:SchliessenUm:twilight:Offset:FensterOffen
attr di_Rollo1 webCmdLabel Aktiv:RolloName\
:AzimutMin:AzimutMax\
:ElevationMin1:ElevationMax1:Rollo_Position1\
:ElevationMin2:ElevationMax2:Rollo_Position2\
:ElevationMin3:ElevationMax3:Rollo_Position3\
:ZeitVon:ZeitBis\
:MinTempInnen:MinTempAussen\
:Auto hochfahren\
:<br> \
:SchliessenAktiv:SchliessenUm\
:Bei Dämmerung:Zeit-Offset\
:Wenn Fenster offen

setstate di_Rollo1 initialized
setstate di_Rollo1 2018-05-23 11:37:48 AutoHoch Ja
setstate di_Rollo1 2018-05-23 10:43:33 AzimutMax 160
setstate di_Rollo1 2018-05-23 10:10:32 AzimutMin 0
setstate di_Rollo1 2018-05-23 10:43:38 ElevationMax1 80
setstate di_Rollo1 2018-05-23 10:11:18 ElevationMax2 30
setstate di_Rollo1 2018-05-23 10:11:51 ElevationMax3 80
setstate di_Rollo1 2018-05-23 10:43:37 ElevationMin1 10
setstate di_Rollo1 2018-05-23 10:11:15 ElevationMin2 20
setstate di_Rollo1 2018-05-23 10:11:19 ElevationMin3 30
setstate di_Rollo1 2018-05-23 08:59:34 FensterOffen Nichts unternehmen
setstate di_Rollo1 2018-05-23 09:39:57 MinTempAussen 20
setstate di_Rollo1 2018-05-23 09:39:45 MinTempInnen 20
setstate di_Rollo1 2018-05-23 13:52:08 Offset -180
setstate di_Rollo1 2018-05-23 10:10:31 RolloName RolloHinten
setstate di_Rollo1 2018-05-23 08:59:22 Rollo_Position 40
setstate di_Rollo1 2018-05-23 09:39:20 Rollo_Position1 10
setstate di_Rollo1 2018-05-23 09:39:28 Rollo_Position2 20
setstate di_Rollo1 2018-05-23 09:39:37 Rollo_Position3 30
setstate di_Rollo1 2018-05-23 12:02:24 SchliessenAktiv Ja
setstate di_Rollo1 2018-05-23 12:02:31 SchliessenUm 12:03
setstate di_Rollo1 2018-05-23 08:59:12 ZeitBis 17:00
setstate di_Rollo1 2018-05-23 10:12:13 ZeitVon 08:30
setstate di_Rollo1 2018-05-23 13:46:23 aktiv Ja
setstate di_Rollo1 2018-05-23 14:17:29 cmd 0
setstate di_Rollo1 2018-05-23 14:17:29 mode enabled
setstate di_Rollo1 2018-05-23 14:17:29 state initialized
setstate di_Rollo1 2018-05-23 14:17:30 timer_01_c01 24.05.2018 12:03:00|012345678
setstate di_Rollo1 2018-05-23 14:17:30 timer_02_c02 23.05.2018 18:07:54|012345678
setstate di_Rollo1 2018-05-23 14:17:30 timer_03_c03 24.05.2018 08:30:00
setstate di_Rollo1 2018-05-23 14:17:30 timer_04_c03 23.05.2018 17:00:00
setstate di_Rollo1 2018-05-23 14:17:30 timer_05_c04 24.05.2018 08:30:00
setstate di_Rollo1 2018-05-23 14:17:30 timer_06_c04 23.05.2018 17:00:00
setstate di_Rollo1 2018-05-23 14:17:30 timer_07_c05 24.05.2018 08:30:00
setstate di_Rollo1 2018-05-23 14:17:30 timer_08_c05 23.05.2018 17:00:00
setstate di_Rollo1 2018-05-23 10:12:32 twilight Ja


Im Anhang sieht man, wie es bisher aussieht. Richtig hübsch finde ich es (noch) nicht. Ich weiß aber nicht, warum sich die Spalten so blöd verschieben. Auch ist es mir bisher nicht gelungen die Textfelder in der Größe anzupassen...

Noch habe ich die Position der Rolläden nicht berücksichtigt!

Ich hoffe nun ist es klarer :)

Gruß
Bismosa

[edit]
Ich habe zusätzlich noch einen dummy "AutoRolladen" mit dem Reading "aktiv", um die Automatik bei allen Rolläden gleichzeitig abzuschalten.
[/edit]
[edit2]
Jetzt habe ich vor lauter tipperei vergessen, worum es eigentlich ging:
Zitat von: Per am 23 Mai 2018, 13:20:37
Für eine doppelte Auflösung des Readings kannst du
[[$SELF:RolloName]:Position]
versuchen.
Leider geht das nicht. Fehler: "di_Rollo1 DOIF: wrong time format: :position"
[/edit2]
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Per

Ich (!) würde die min-max-Werte nicht im DOIF, sondern im "Rollo" speichern. Außerdem würde ich keinen Dummy für den Rollo-Namen im DOIF verwenden, sondern aus dem DOIF-Namen selbst ableiten. Denn umbenennen musst du die DOIF eh. Oder ganz generisch und ein DOIF für alle Rollos verwenden. Dann aber mit # arbeiten.

Auch in dem Fall könnte ich mir das neue Perl-DOIF vorstellen.

bismosa

Hallo,

über die Option die Readings in die einzelnen Rollos zu packen hatte ich auch bereits nachgedacht. (Ich bastel schon seit Tagen dran rum...)
Allerdings habe ich die Idee verworfen, da ich die Anzeige von "ROLLO" (https://wiki.fhem.de/wiki/ROLLO) nicht ändern wollte, aber die Einstellmöglichkeit haben möchte.
Auch den Weg ein Dummy für die Einstellungen zu machen habe ich verworfen, da ich dann für jedes Rollo ein dummy + DOIF benötige.
Daher finde ich den Weg eigentlich ganz praktisch alles im DOIF zu haben. Schon kann ich mit $SELF alles bedienen.
Auch nur meine Meinung. Vermutlich bin ich damit zwar recht alleine...man findet kaum Beispiele wo dies so umgesetzt wurde...aber wie geschrieben...ich finde das gut :)

Zitat von: Per am 23 Mai 2018, 15:02:40
Dann aber mit # arbeiten.
Was meinst du damit?

Ich setzte das jetzt mal auf gelöst, da sich meine Frage ja eigentlich erübrigt hat. Festhalten können wir:
Mit dem DOIF geht es so nicht (es wird auch nicht mehr gebraucht) mit dem Perl-DOIF könnte es gehen.
Aber ich bin erstmal froh, es bereits so weit zu haben und beschäftige mich ein anderes Mal mit dem Perl-DOIF.

Vielen Dank!

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Per

Zitat von: bismosa am 23 Mai 2018, 15:45:51über die Option die Readings in die einzelnen Rollos zu packen hatte ich auch bereits nachgedacht. (Ich bastel schon seit Tagen dran rum...)
Allerdings habe ich die Idee verworfen, da ich die Anzeige von "ROLLO" (https://wiki.fhem.de/wiki/ROLLO) nicht ändern wollte, aber die Einstellmöglichkeit haben möchte.
Du kannst zu jedem Devicetype Userreadings hinzufügen.

Zitat von: bismosa am 23 Mai 2018, 15:45:51
Zitat von: Per am 23 Mai 2018, 15:02:40Dann aber mit # arbeiten.
Was meinst du damit?
Die Aggregatsfunktion

bismosa

Hallo,

Alles mit einem DOIF mit der Aggregatsfunktion scheint mir etwas zu kompliziert für mein Kleinhirn  :o Das lass ich mal lieber. Ich bin froh, wenn es funktioniert.

Zitat von: Per am 24 Mai 2018, 11:52:52
Du kannst zu jedem Devicetype Userreadings hinzufügen.
Das ist mir klar. Jedoch wollte ich auch die schöne Funktion nutzen, die Einstellungen bequem im Frontend zu machen. Siehe Bild oben.

Gruß
Bismsoa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Per

Zitat von: bismosa am 24 Mai 2018, 14:29:43die Einstellungen bequem im Frontend zu machen
Halte ich für überbewertet. Nach ein paarmal dran Schrauben in der Anfangszeit wird es nur noch wenig Bedarf für Feintuning geben. Eher mal für das Übersteuern der Automatik. Zumindest habe ich diese Erfahrungen gemacht.

bismosa

Hallo,
Zitat von: Per am 24 Mai 2018, 14:43:31
Halte ich für überbewertet. Nach ein paarmal dran Schrauben in der Anfangszeit wird es nur noch wenig Bedarf für Feintuning geben.
Sehe ich eigentlich genau so. Aber der WAF (der ist bei mir echt wichtig!) steigt enorm. Gerade auch was die Zeiten zum automatischen schließen angeht. Das wird bestimmt häufiger mal geändert.
Vielleicht sehe ich das in ein paar Monaten ja anders. Dann kann ich es viellecht nochmal anpassen  :)

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Per

Zitat von: bismosa am 24 Mai 2018, 15:34:12Gerade auch was die Zeiten zum automatischen schließen angeht.
Genau dann fängt das Problem an: wenn man die Zeiten zu oft wechseln muss, ist die Automatik dann an der falschen stelle und man macht es lieber manuell. Ein "gut erreichbarer" Knopf zum Bedienen ist da mehr Wert (WAF!) als ein schönes Menü. Ich habe einige Automaten wieder entfernt und durch EnOcean-Buttons ersetzt.

bismosa

Hallo,
nein...so oft wird nicht gewechselt. Mal für ne Woche, wenn wir Urlaub haben...oder niemand zu Hause ist...nicht im Normalbetrieb.
Ich habe heute mein "konstrukt" mal laufen lassen. Scheint bisher gut zu funktionieren. Daher die Aktuelle Version unten (falls es mal jemanden interessiert).
Habe das auch gerade mit dem WAF geprüft. War nicht so begeistert. Zu viele Knöppe. Also muss  ich da noch "kürzen".

Ich komme immer mehr ins überlegen, ob es nicht doch sinnvoll ist, die Werte gleich in die Rolläden zu packen. Man sieht das ja immer wieder so.
Zitat von: Per am 23 Mai 2018, 15:02:40
Ich (!) würde die min-max-Werte nicht im DOIF, sondern im "Rollo" speichern. Außerdem würde ich keinen Dummy für den Rollo-Namen im DOIF verwenden, sondern aus dem DOIF-Namen selbst ableiten. Denn umbenennen musst du die DOIF eh. Oder ganz generisch und ein DOIF für alle Rollos verwenden. Dann aber mit # arbeiten.
Kannst Du mir bitte verraten, wie ich aus dem DOIF-Namen den Rolladen mit den Readings ableiten kann? Ich stehe da gerade auf dem Schlauch.

Ich habe auch gerade probiert, ob ich nicht die wichtigen Einstellungen (Aktiv,Position,AutoHoch,Schließen,Uhrzeit) über eine ReadingsGroup abbilden kann. Meine Frau muss die Einstellungen auch setzen können. D.h. mit einem "setreading" kommt sie einfach nicht klar. Leider ist mir das bisher nicht gelungen. Ich schaffe es nicht mit der ReadingsGroup die Userreadings zu setzen.
Gibt es da vielleicht noch ein anderes Modul mit dem das machbar ist?

Hier also nochmal mein bisheriger Stand:

defmod di_Rollo1 DOIF
\
##1 Zeitsteuerung vor allen anderen: Wenn schließzeit früher, wird die Bedingung sonst nicht wahr!\
([$SELF:SchliessenAktiv] eq "Ja" \
and [AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [[$SELF:SchliessenUm]|012345678]\
and [$SELF:twilight] eq "Nein"\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
##Nur, wenn nicht ganz unten\
Log 1, "Rollo $RolloDevice soll schließen (Zeit)";;\
my $RolloPos=ReadingsVal("$RolloDevice", "position", 0);;\
if ("$RolloPos" < 100){\
Log 1, "Rollo $RolloDevice soll geschlossen werden!";;\
##Je nachdem ob Fenster offen und welche Einstellung:\
my $FOA=ReadingsVal("$SELF", "FensterOffen", "");; ##Aktion bei Fenster offen\
if ("$FOA" eq "Nichts unternehmen"){\
Log 1, "Rollo $RolloDevice muss runter gefahren werrden. Aber nur Wenn Fenster zu sind!";;\
##Nur wenn Fenster zu sind!\
my $FKName=ReadingsVal("$SELF", "Fensterkontakte", "keineangegeben");;\
my @FK=devspec2array("NAME=$FKName.*:FILTER=STATE=Offen|Kaputt");;\
if (scalar(@FK) == 0){\
Log 1, "Rollo $RolloDevice wird geschlossen!";;\
fhem("sleep 1;;set $RolloDevice closed");; \
} else {\
Log 1, "Rollo $RolloDevice wird nicht zu gefahren, da noch ein Fenster offen ist";;\
}\
} else {\
##Egal, ob Fenster offen...immer Fahren!\
Log 1, "Rollo $RolloDevice wird geschlossen!";;\
fhem("sleep 1;;set $RolloDevice closed");;\
}\
}\
})\
\
##2 Zeitsteuerung nach Dämmerung\
DOELSEIF\
([$SELF:SchliessenAktiv] eq "Ja" \
and [AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:twilight] eq "Ja"\
and [([twilight:ss_weather]+[$SELF:Offset]*60)|012345678]\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
##Nur, wenn nicht ganz unten\
Log 1, "Rollo $RolloDevice soll schließen (Dämmerung)";;\
my $RolloPos=ReadingsVal("$RolloDevice", "position", 0);;\
if ("$RolloPos" < 100){\
Log 1, "Rollo $RolloDevice soll geschlossen werden!";;\
##Je nachdem ob Fenster offen und welche Einstellung:\
my $FOA=ReadingsVal("$SELF", "FensterOffen", "");; ##Aktion bei Fenster offen\
if ("$FOA" eq "Nichts unternehmen"){\
Log 1, "Rollo $RolloDevice muss runter gefahren werden. Aber nur Wenn Fenster zu sind!";;\
##Nur wenn Fenster zu sind!\
my $FKName=ReadingsVal("$SELF", "Fensterkontakte", "keineangegeben");;\
my @FK=devspec2array("NAME=$FKName.*:FILTER=STATE=Offen|Kaputt");;\
if (scalar(@FK) == 0){\
Log 1, "Rollo $RolloDevice wird geschlossen!";;\
fhem("sleep 1;;set $RolloDevice closed");; \
} else {\
Log 1, "Rollo $RolloDevice wird nicht zu gefahren, da noch ein Fenster offen ist";;\
}\
} else {\
##Egal, ob Fenster offen...immer Fahren!\
Log 1, "Rollo $RolloDevice wird geschlossen!";;\
fhem("sleep 1;;set $RolloDevice closed");; \
}\
}\
})\
\
##3 Dämmerung 1\
DOELSEIF ([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv\
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum\
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen\
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen\
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min\
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max\
and [$SELF:ElevationMin1] < [twilight:elevation] ##Elevation min ##K!\
and [$SELF:ElevationMax1] > [twilight:elevation] ##Elevation max ##K!\
##Dann eben solarradiation! ist gelegentlich 0 ! Also bei null nicht beachten!\
and ( [WUweather:solarradiation] > [$SELF:solarradiation] or [WUweather:solarradiation] == 0)\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
my $RolloPos=ReadingsVal("$SELF","Rollo_Position1","");; ##K!\
##Wenn beriets in Position oder Tiefer nicht mehr fahren!\
my $RolloIstPos=ReadingsVal("$RolloDevice","position","0");;\
Log 1, "Fall1: Rollo $RolloDevice soll in Beschattungsposition $RolloPos" ;; ##K!\
if ("$RolloIstPos" < "$RolloPos"){\
Log 1, "Fall1: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;; ##K!\
fhem("sleep 1;;set $RolloDevice position $RolloPos");;\
}\
}) \
\
##4 Dämmerung 2\
DOELSEIF ([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv\
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum\
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen\
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen\
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min\
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max\
and [$SELF:ElevationMin2] < [twilight:elevation] ##Elevation min ##K!\
and [$SELF:ElevationMax2] > [twilight:elevation] ##Elevation max ##K!\
##Dann eben solarradiation! ist gelegentlich 0 ! Also bei null nicht beachten!\
and ( [WUweather:solarradiation] > [$SELF:solarradiation] or [WUweather:solarradiation] == 0)\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
my $RolloPos=ReadingsVal("$SELF","Rollo_Position2","");; ##K!\
##Wenn beriets in Position oder Tiefer nicht mehr fahren!\
my $RolloIstPos=ReadingsVal("$RolloDevice","position","0");;\
Log 1, "Fall2: Rollo $RolloDevice soll in Beschattungsposition $RolloPos" ;; ##K!\
if ("$RolloIstPos" < "$RolloPos"){\
Log 1, "Fall2: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;; ##K!\
fhem("sleep 1;;set $RolloDevice position $RolloPos");;\
}\
}) \
\
##5 Dämmerung 3\
DOELSEIF ([AutoRolladen:aktiv] eq "Ja" ##Alle An/Aus\
and [$SELF:aktiv] eq "Ja" ##Dieser Rolladen aktiv\
and [[$SELF:ZeitVon]-[$SELF:ZeitBis]] ##Zeitraum\
and [wetter_syke:temperature] >= [$SELF:MinTempAussen] ##Temperatur Außen\
and [Max_WT_Wohnzimmer:temperature] >= [$SELF:MinTempInnen] ##Temperatur Außen\
and [$SELF:AzimutMin] < [twilight:azimuth] ##Azimuth min\
and [$SELF:AzimutMax] > [twilight:azimuth] ##Azimut max\
and [$SELF:ElevationMin3] < [twilight:elevation] ##Elevation min ##K!\
and [$SELF:ElevationMax3] > [twilight:elevation] ##Elevation max ##K!\
##Dann eben solarradiation! ist gelegentlich 0 ! Also bei null nicht beachten!\
and ( [WUweather:solarradiation] > [$SELF:solarradiation] or [WUweather:solarradiation] == 0)\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
my $RolloPos=ReadingsVal("$SELF","Rollo_Position3","");; ##K!\
##Wenn beriets in Position oder Tiefer nicht mehr fahren!\
my $RolloIstPos=ReadingsVal("$RolloDevice","position","0");;\
Log 1, "Fall3: Rollo $RolloDevice soll in Beschattungsposition $RolloPos" ;; ##K!\
if ("$RolloIstPos" < "$RolloPos"){\
Log 1, "Fall3: Rollo $RolloDevice fährt in Beschattungsposition $RolloPos" ;; ##K!\
fhem("sleep 1;;set $RolloDevice position $RolloPos");;\
}\
}) \
\
##6 Ausgeschaltet -> Nix mehr machen!\
DOELSEIF ([$SELF:aktiv] eq "Nein" \
or [AutoRolladen:aktiv] eq "Nein" ##Alle An/Aus\
)({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
Log 1, "Rollo $RolloDevice abgeschaltet.";;\
})\
\
##7 Wenn keine Bedingung war ist, zurücksetzen!\
DOELSE ({\
my $RolloDevice=ReadingsVal("$SELF","RolloName","");;\
Log 1, "Rollo $RolloDevice DOELSE";;\
##Prüfen, ob automatisch wieder geöffnet werden soll\
my $RolloAutoHoch=ReadingsVal("$SELF","AutoHoch","");;\
if ("$RolloAutoHoch" eq "Ja"){\
##Nur, wenn nicht ganz unten\
Log 1, "Rollo $RolloDevice soll hochfahren";;\
my $RolloPos=ReadingsVal("$RolloDevice", "position", 0);;\
if ("$RolloPos" < 99){\
Log 1, "Rollo $RolloDevice ist nicht geschlossen";;\
##Nur, wenn nicht bereits oben\
if ("$RolloPos" > 0){\
Log 1, "Rollo $RolloDevice wird hoch gefahren!";;\
fhem("sleep 1;;set $RolloDevice open");;\
}\
}\
}\
\
})
attr di_Rollo1 cmdpause 900:900:900:900:900:900:900
attr di_Rollo1 readingList aktiv,RolloName,\
AzimutMin,AzimutMax,\
ElevationMin1,ElevationMax1,Rollo_Position1,\
ElevationMin2,ElevationMax2,Rollo_Position2,\
ElevationMin3,ElevationMax3,Rollo_Position3,\
ZeitVon,ZeitBis,\
MinTempInnen,MinTempAussen,\
AutoHoch,solarradiation\
SchliessenAktiv,SchliessenUm,twilight,Offset,FensterOffen,Fensterkontakte
attr di_Rollo1 room Rolläden
attr di_Rollo1 setList aktiv:Ja,Nein RolloName:textFieldNL\
AzimutMin:textFieldNL AzimutMax:textFieldNL \
ElevationMin1:textFieldNL ElevationMax1:textFieldNL Rollo_Position1:selectnumbers,0,10,100,0,lin\
ElevationMin2:textFieldNL ElevationMax2:textFieldNL Rollo_Position2:selectnumbers,0,10,100,0,lin\
ElevationMin3:textFieldNL ElevationMax3:textFieldNL Rollo_Position3:selectnumbers,0,10,100,0,lin\
ZeitVon:time ZeitBis:time \
MinTempInnen:selectnumbers,0,1,30,0,lin MinTempAussen:selectnumbers,0,1,30,0,lin \
AutoHoch:Ja,Nein solarradiation:selectnumbers,0,10,800,0,lin\
SchliessenAktiv:Ja,Nein SchliessenUm:time FensterOffen:Nichts#unternehmen,Schließen \
twilight:Ja,Nein Offset:selectnumbers,-180,5,180,0,lin Fensterkontakte:textFieldNL
attr di_Rollo1 userReadings aktiv RolloName\
AzimutMin AzimutMax \
ElevationMin1 ElevationMax1 Rollo_Position1 \
ElevationMin2 ElevationMax2 Rollo_Position2 \
ElevationMin3 ElevationMax3 Rollo_Position3 \
ZeitVon ZeitBis \
MinTempInnen MinTempAussen \
AutoHoch solarradiation\
SchliessenAktiv SchliessenUm twilight Offset FensterOffen Fensterkontakte
attr di_Rollo1 webCmd aktiv:RolloName:\
:AzimutMin:AzimutMax:\
:ElevationMin1:ElevationMax1:Rollo_Position1\
:ElevationMin2:ElevationMax2:Rollo_Position2\
:ElevationMin3:ElevationMax3:Rollo_Position3\
:ZeitVon:ZeitBis:\
:MinTempInnen:MinTempAussen:\
:AutoHoch:solarradiation:\
:<br>::\
:SchliessenAktiv:SchliessenUm:\
:twilight:Offset:\
:FensterOffen:Fensterkontakte:
attr di_Rollo1 webCmdLabel Aktiv:RolloName:\
:AzimutMin:AzimutMax:\
:ElevationMin1:ElevationMax1:Rollo_Position1\
:ElevationMin2:ElevationMax2:Rollo_Position2\
:ElevationMin3:ElevationMax3:Rollo_Position3\
:ZeitVon:ZeitBis:\
:MinTempInnen:MinTempAussen:\
:Auto hochfahren:Solar-Wert:\
:<br>::\
:SchliessenAktiv:SchliessenUm:\
:Bei Dämmerung:Zeit-Offset:\
:Wenn Fenster offen:Fensterkontakte:

setstate di_Rollo1 cmd_7
setstate di_Rollo1 2018-05-23 11:37:48 AutoHoch Ja
setstate di_Rollo1 2018-05-23 21:58:33 AzimutMax 123
setstate di_Rollo1 2018-05-23 22:01:20 AzimutMin 0
setstate di_Rollo1 2018-05-24 17:56:40 Device WUweather
setstate di_Rollo1 2018-05-23 08:59:03 ElevationMax 3
setstate di_Rollo1 2018-05-23 21:59:03 ElevationMax1 30
setstate di_Rollo1 2018-05-23 21:59:09 ElevationMax2 40
setstate di_Rollo1 2018-05-23 21:59:16 ElevationMax3 90
setstate di_Rollo1 2018-05-23 08:59:02 ElevationMin 2
setstate di_Rollo1 2018-05-23 21:59:02 ElevationMin1 20
setstate di_Rollo1 2018-05-23 21:59:07 ElevationMin2 30
setstate di_Rollo1 2018-05-23 21:59:11 ElevationMin3 40
setstate di_Rollo1 2018-05-23 08:59:34 FensterOffen Nichts unternehmen
setstate di_Rollo1 2018-05-23 22:02:33 Fensterkontakte Fenster_EG_Buero
setstate di_Rollo1 2018-05-23 21:59:43 MinTempAussen 16
setstate di_Rollo1 2018-05-23 21:59:38 MinTempInnen 19
setstate di_Rollo1 2018-05-23 22:06:05 Offset 5
setstate di_Rollo1 2018-05-23 22:01:14 RolloName Rolladen_Hinten
setstate di_Rollo1 2018-05-23 08:59:22 Rollo_Position 40
setstate di_Rollo1 2018-05-23 09:39:20 Rollo_Position1 10
setstate di_Rollo1 2018-05-23 09:39:28 Rollo_Position2 20
setstate di_Rollo1 2018-05-23 09:39:37 Rollo_Position3 30
setstate di_Rollo1 2018-05-23 21:59:57 SchliessenAktiv Nein
setstate di_Rollo1 2018-05-23 22:00:07 SchliessenUm 18:00
setstate di_Rollo1 2018-05-23 21:59:32 ZeitBis 20:00
setstate di_Rollo1 2018-05-23 10:12:13 ZeitVon 08:30
setstate di_Rollo1 2018-05-23 21:55:36 aktiv Ja
setstate di_Rollo1 2018-05-24 10:56:25 cmd 7
setstate di_Rollo1 2018-05-24 10:56:25 cmd_event twilight
setstate di_Rollo1 2018-05-24 10:56:25 cmd_nr 7
setstate di_Rollo1 2018-05-24 17:55:15 e_Max_WT_Wohnzimmer_temperature 24.7
setstate di_Rollo1 2018-05-24 17:56:40 e_WUweather_solarradiation 454
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_AzimutMax 123
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_AzimutMin 0
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_ElevationMax1 30
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_ElevationMax2 40
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_ElevationMax3 90
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_ElevationMin1 20
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_ElevationMin2 30
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_ElevationMin3 40
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_MinTempAussen 16
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_MinTempInnen 19
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_SchliessenAktiv Nein
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_aktiv Ja
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_solarradiation 10
setstate di_Rollo1 2018-05-23 22:06:05 e_di_Rollo1_twilight Nein
setstate di_Rollo1 2018-05-24 17:56:39 e_twilight_azimuth 266.69
setstate di_Rollo1 2018-05-24 17:56:39 e_twilight_elevation 29.84
setstate di_Rollo1 2018-05-24 17:56:01 e_wetter_timbuktu_temperature 28.7
setstate di_Rollo1 2018-05-23 21:34:58 mode enabled
setstate di_Rollo1 2018-05-23 21:59:49 solarradiation 10
setstate di_Rollo1 2018-05-24 10:56:25 state cmd_7
setstate di_Rollo1 2018-05-23 22:00:07 timer_01_c01 24.05.2018 18:00:00|012345678
setstate di_Rollo1 2018-05-24 04:34:40 timer_02_c02 24.05.2018 21:27:11|012345678
setstate di_Rollo1 2018-05-23 21:34:58 timer_03_c03 24.05.2018 08:30:00
setstate di_Rollo1 2018-05-23 21:59:32 timer_04_c03 24.05.2018 20:00:00
setstate di_Rollo1 2018-05-23 21:34:58 timer_05_c04 24.05.2018 08:30:00
setstate di_Rollo1 2018-05-23 21:59:32 timer_06_c04 24.05.2018 20:00:00
setstate di_Rollo1 2018-05-23 21:34:58 timer_07_c05 24.05.2018 08:30:00
setstate di_Rollo1 2018-05-23 21:59:32 timer_08_c05 24.05.2018 20:00:00
setstate di_Rollo1 2018-05-23 21:46:07 twilight Nein


Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Ellert

#13
ZitatGibt es da vielleicht noch ein anderes Modul mit dem das machbar ist?
DOIF hat eine eigene Benutzerschnittstelle, die mit Attribut uiTable realisiert wird, siehe:
https://fhem.de/commandref_DE.html#DOIF_uiTable
https://wiki.fhem.de/wiki/DOIF/uiTable
https://forum.fhem.de/index.php/topic,77690.0.html

bismosa

Hallo!
Danke für den Tipp! Ich hab mich zwar extrem schwer getan das zumindest halbwegs zu verstehen...aber mein erster Test sieht schonmal sehr gut aus.

defmod di_UI DOIF []
attr di_UI room Rolläden
attr di_UI uiTable {\
  $ATTRIBUTESFIRST=1;;\
  $SHOWNOSTATE=1;;\
\
  $TPL{txt1} = "textFieldNL";;\
  $TPL{Auswahl} = "Ja,Nein";;\
  $TPL{zeit} = "time";;\
  $TPL{select} = "selectnumbers,0,10,100,0,lin";;\
  $TPL{fenster} = "Nichts#unternehmen,Schließen";;\
  $TPL{azimut} = "knob,min:0,max:360,width:50,height:50,step:1,lineCap:round,angleOffset:180,cursor:3,thickness:.3";;\
  $TPL{elevation} = "knob,min:-50,max:90,width:50,height:50,step:1,lineCap:round,angleOffset:180,cursor:3,thickness:.3";;\
  $TPL{azimutSL} = "slider,0,1,360,0";;\
\
\
  ##$TD{row}{col}="<HTML-Attribute>"\
  ##$TD{0,1,2,3,4,5,6,7,8,9}{0}="width=10px"\
  $TPL{style2}="<div style=text-align:left>";;\
##Klappt leider nicht richtig. Die Textbox bleibt genauso groß\
$TPL{style3}="<div style=width:20px size='20'>";;\
\
}\
\
"Name"|"Aktiv"|"Von"|"Bis"|"Position"|"|"|"Auto ZU"|"Zeit"|"Bei Dämmerung"|"Wenn Fenster ofen"|"AziMin"|"AziMax"|"ElevMin"|"ElevMax"\
\
"Rollo1"|WID([Rollo_Automatik1:Autom_aktiv],$TPL{Auswahl})|\
WID([Rollo_Automatik1:Autom_von],$TPL{zeit})|\
WID([Rollo_Automatik1:Autom_bis],$TPL{zeit})|\
WID([Rollo_Automatik1:Autom_pos],$TPL{select})|\
$TPL{style2}."|"."</div>"|\
WID([Rollo_Automatik1:Autom_zu],$TPL{Auswahl})|\
WID([Rollo_Automatik1:Autom_zu_zeit],$TPL{zeit})|\
WID([Rollo_Automatik1:Autom_zu_sonne],$TPL{Auswahl})|\
WID([Rollo_Automatik1:Autom_zu_fenster_offen],$TPL{fenster})|\
WID([Rollo_Automatik1:Autom_azimutMin],$TPL{azimut})|\
WID([Rollo_Automatik1:Autom_azimutMax],$TPL{azimut})|\
WID([Rollo_Automatik1:Autom_elevationMin],$TPL{elevation})|\
WID([Rollo_Automatik1:Autom_elevationMax],$TPL{elevation})\
\
"Rollo2"|WID([Rollo_Automatik1:Autom_aktiv],$TPL{Auswahl})|\
WID([Rollo_Automatik1:Autom_von],$TPL{zeit})|\
WID([Rollo_Automatik1:Autom_bis],$TPL{zeit})|\
WID([Rollo_Automatik1:Autom_pos],$TPL{select})|\
$TPL{style2}."|"."</div>"|\
WID([Rollo_Automatik1:Autom_zu],$TPL{Auswahl})|\
WID([Rollo_Automatik1:Autom_zu_zeit],$TPL{zeit})|\
WID([Rollo_Automatik1:Autom_zu_sonne],$TPL{Auswahl})|\
WID([Rollo_Automatik1:Autom_zu_fenster_offen],$TPL{fenster})|\
WID([Rollo_Automatik1:Autom_azimutMin],$TPL{azimut})|\
WID([Rollo_Automatik1:Autom_azimutMax],$TPL{azimut})|\
WID([Rollo_Automatik1:Autom_elevationMin],$TPL{elevation})|\
WID([Rollo_Automatik1:Autom_elevationMax],$TPL{elevation})\
\

setstate di_UI initialized
setstate di_UI 2018-05-25 10:59:59 Test1 1234
setstate di_UI 2018-05-25 09:47:31 mode enabled
setstate di_UI 2018-05-25 09:47:31 state initialized

(Ja...ist nur ein erster test...ohne richtige Funktion. Die Werte sind in beiden Zeieln gleich! Auch mit den Styles habe ich nur probiert das TextField anzupassen. Das klappte aber nicht.)

Soweit also kein Problem. Ein bisschen Feintuning und gut.
Jetzt muss ich noch mein DOIF anpassen, damit dann nicht mehr das eigene Reading, sondern mit den Readings aus den Rolladen gearbeitet wird.
Bisher nutze ich z.B.:

and [$SELF:AzimutMin] < [twilight:azimuth]

Und brauchte mein DOIF nur zu kopieren, die Attribute (Einstellungen des Rolladen) anzupassen und fertig.
Jetzt benötige ich:

and [[b]RolladenName[/b]:AzimutMin] < [twilight:azimuth]

D.h. ich muss zwingend alle DOIF fest mit den Namen programmieren? Oder kann ich auf einfache Weise vom DOIF Namen den RolladenNamen in den Bedingungen ableiten?

Vielen Dank für die ganzen Tipps!

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...