Jalousie-Steuerung Status angleichen

Begonnen von ingo46, 19 März 2023, 14:26:35

Vorheriges Thema - Nächstes Thema

ingo46

Hallo,

ich habe die 'Beschattung' aus https://wiki.fhem.de/wiki/DOIF/Automatisierung als Vorlage für eine Jalousie-Steuerung genommen.

define TagNacht dummy
attr TagNacht room TEST
attr TagNacht webCmd on:off

#
define JAL_Archiv FS20 c573 50
attr JAL_Archiv IODev MapleCUL_0_868
attr JAL_Archiv devStateIcon auf:fts_shutter_10@green zu:fts_shutter_100@green .*:fts_shutter_50@green
attr JAL_Archiv eventMap /off:zu/off-for-timer 10:halb/on:auf/
attr JAL_Archiv group JALOUSIE
attr JAL_Archiv model fs20rsu
attr JAL_Archiv room TEST
attr JAL_Archiv webCmd auf:halb:zu

#
# Jalousie-Steuerung --------------------------------------------------------------------------------------------------------
#
define di_jalousie DOIF subs {\
@{$_params}= qw(Szene   TagNachtSensor   Rollladen    runter hoch   von bis  Status       aktiv);;\
## Definition einzelner Datensätze pro Szene, Szenen können zeilenweise gelöscht bzw. hinzugefügt werden\
\
push (@{$_sc},[qw(Archiv  TagNacht      JAL_Archiv      zu    auf   7:00 22:00  off   auto )]);;\
\
  if ($::init_done) {                        ## Bei Änderung der Definition werden alle erfoderlichen Readings erstellt und vorbelegt\
    fhem("deletereading $SELF .*");;        ## alle Readings des Moduls löschen\
    set_State("initialized");;              ## Status setzen\
    for (my $i=0;;$i < @{$_sc};;$i++) {\
      for (my $j=6;;$j < @{$_sc[$i]};;$j++) { ## für Parameter 7 bis 10 Readings anlegen\
        set_Reading ($_sc[$i][0].".".$_params[$j],$_sc[$i][$j]);;\
      }\
    }\
  }\
}\
## Definition des Templates namens TPL_shutter, Parameter: \
## $1:Szenenname, $2:TagNacht, $3:Rollläden, $4:runter, $5:hoch, $6:von, $7:bis, $8:Status, $9:aktiv \
DEF TPL_shutter ( \
shutter_$1 {  \
  if ($9 eq "auto") {                    ## wenn Szene im 'auto'-Modus\
                                         ## Wenn Tag/Nacht on, innerhalb des Zeitfensters und der Rollläden noch nicht heruntergefahren wurden\
    if ([$2] eq "on" and [$6-$7] and get_Reading("$3") eq "off") { \
    fhem_set("$3 $4");;               ## Rollläden herunterfahren  (zu/off)\
        set_State("Szene: $1 $4");;       ## Status setzen\
        set_Reading("$1.Status","on",1);; ## Status für Szene im Reading ablegen\
\
    } elsif ([$2] eq "off" and get_Reading("$3") eq "on") { \
    fhem_set("$3 $5");;               ## Rollläden hochfahren  (auf/on)\
        set_State("Szene: $1 $5");;       ## Status mit letzer Szene belegen\
        set_Reading("$1.Status","off",1);;## Status für Szene im Reading ablegen\
    }\
  } \
  \
}\
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Szene mit Hilfe des obigen Templates\
FOR (@{$_sc},TPL_shutter($_$1,$_$2,$_$3,$_$4,$_$5,[$SELF:$_$1.von],[$SELF:$_$1.bis],$_$1.Status,[$SELF:$_$1.aktiv]))

attr di_jalousie alias Jalousie-Steuerung
attr di_jalousie room TEST
attr di_jalousie uiTable { package ui_Table;;\
  $TC{1..10}="style='padding-left: 10px;; padding-right: 10px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
## Überschrift der Parameter\
"Szene"|"Tag/Nacht"|"von"|"bis"|"Status"|"aktiv"\
\
## Pro Datensatz einer Szene wird eine Zeile mit Werten und Widgets generiert\
FOR (@{$VAR{sc}},"$_$1"|icon([$_$2:state],"weather_night\@green","weather_sun\@yellow")|WID([$SELF:$_$1.von],"select,6:00,7:00,8:00,9:00,10:00")|WID([$SELF:$_$1.bis],"select,16:00,17:00,18:00,19:00,20:00,21:00,22:00")|icon([$SELF:$_$1.Status],"fts_shutter_10","fts_shutter_90").substr(::ReadingsTimestamp("$SELF","$_$1.Status",0),11,5)|WID([$SELF:$_$1.aktiv],"select,auto,off") )

#
#
# Ende Jalousie-Steuerung ---------------------------------------------------------------------------------------------------
#

In der Visualisierung von JAL_Archiv kann ist den Zustand erkennen. Wie kann ich nun diesen Status in die Steuerung übernehmen? Es sollen somit JAL_Archiv.state mit Archiv.Status vereint werden - oder besser eine gemeinsame Status-Variable verwendet werden.

Ingo

ingo46

Zur Veranschauung habe ich noch mal einen Screeenshot angehängt. Hat keiner eine Idee, die Statusausgabe zu syncronisieren?