save restore einzelner readings oder devices

Begonnen von Hackstall, 17 Mai 2019, 22:54:15

Vorheriges Thema - Nächstes Thema

justme1968

da steht nichts von fest. du kannst mit dem lightscene save den aktuellen zustand speichern und später wieder herstellen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Hackstall

Hallo nochmals etwas näher mein Use Case mit meiner derzeitigen Implementierung:

a) Den Mode selektiere ich via SmartVisu per Zimmer oder fürs ganze Haus (siehe Code1)

b) In meiner Util habe ich für jedes Zimmer folgende Implementierung (siehe Code 2)

c) Wie ihr seht steuere ich meinen Wochenplan mit UZSU aus SmartVisu heraus und
eigentlich ist diese Konfiguration zu sichern, da Sie sich ändern könnte.
Ich nutze UZSU für Heizung, FB Heizung, Rollos und Licht.

d) Urlaubs Mode wäre (ev Auto oder Off) Wenn Auto dann möchte ich zufällig immer
mal wieder ein Licht einschalten oder ein Rollo hochfahren um zu suggerieren dass jemand zuhause ist.

Hoffe das hilft.

Gruss Andreas


Code1:

define ntfy_Haus_Mode notify Haus_Mode_Select:(EG|OG|DG).+?Mode:.* {\
   my @myModeEvent = split(":",$EVENT);;\
   my $myModeName = $myModeEvent[0];;\
   my $myModePrevName = $myModeEvent[0]."Prev";;\
   my $myMode = ReadingsVal("Haus_Mode_Select",$myModeName,"Norm");;\
   my $myPrevMode = ReadingsVal("Haus_Mode_Select",$myModeName."Prev","Norm");;\
\
       if ($myModeName eq "EG.Wz.Mode") \
          { \
            EG_Wz_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "EG.Ez.Mode") \
          { \
            EG_Ez_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "EG.Ku.Mode") \
          { \
            EG_Ku_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "EG.Fl.Mode") \
          { \
            EG_WC_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "EG.WC.Mode") \
          { \
            EG_WC_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "OG.KiA.Mode") \
          { \
            OG_KiA_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "OG.KiM.Mode") \
          { \
            OG_KiM_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "OG.AzA.Mode") \
          { \
            OG_AzA_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "OG.AzS.Mode") \
          { \
            OG_AzS_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "OG.Bad.Mode") \
          { \
            OG_Bad_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "DG.Sz.Mode") \
          { \
            DG_Sz_ModeControl($myPrevMode,$myMode);;\
          } \
       if ($myModeName eq "DG.Bad.Mode") \
          { \
            DG_Bad_ModeControl($myPrevMode,$myMode);;\
          } \
\
    fhem ("sleep 0.1;;setreading Haus_Mode_Select $myModePrevName $myMode");;\
}
setuuid ntfy_Haus_Mode 5cd34c13-f33f-b8ba-b838-5a3d17af43523744
attr ntfy_Haus_Mode DbLogExclude .*
attr ntfy_Haus_Mode group Grp-System-Notify
attr ntfy_Haus_Mode icon remotecontrol/black_btn_PLAYgreen
attr ntfy_Haus_Mode room 9.6_System


define ntfy_Haus_Alle_Zimmer notify Haus_Mode_Select:Haus.Mode:.* {\
   my @myModeEvent = split(":",$EVENT);;\
   my $myModeName = $myModeEvent[0];;\
   my $myModePrevName = $myModeEvent[0]."Prev";;\
   my $myMode = ReadingsVal("Haus_Mode_Select",$myModeName,"Norm");;\
   my $myPrevMode = ReadingsVal("Haus_Mode_Select",$myModeName."Prev","Norm");;\
\
       if ($myModeName eq "Haus.Mode") \
          { \
fhem ("sleep 0.1;;setreading Haus_Mode_Select EG.Wz.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select EG.Ez.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select EG.Ku.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select EG.Fl.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select EG.WC.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select OG.KiA.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select OG.KiM.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select OG.AzA.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select OG.AzS.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select OG.Bad.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select DG.Sz.Mode $myMode");;\
fhem ("sleep 0.1;;setreading Haus_Mode_Select DG.Bad.Mode $myMode");;\
          } \
}
setuuid ntfy_Haus_Alle_Zimmer 5cddd813-f33f-b8ba-857c-505a5f0159b2a4eb
attr ntfy_Haus_Alle_Zimmer DbLogExclude .*
attr ntfy_Haus_Alle_Zimmer group Grp-System-Notify
attr ntfy_Haus_Alle_Zimmer icon remotecontrol/black_btn_PLAYgreen
attr ntfy_Haus_Alle_Zimmer room 9.6_System



Code2:

sub EG_Wz_ModeControl ($$) {
my ($from,$to) = @_;
fhem("set teleBotAK msg \@Andreas_Krause EG_Wz_ModeControl $from $to");    
    if ($from eq "Norm")
       {
     #save current configuration
#read Wochenplan Setting Heizung
#read Wochenplan Setting Rollo
#save Config
       }
    if ($to eq "Norm")
       {
         #restore saved configuration
#read saved Config and restore
       }
    if ($to eq "Auto")
       {
         #configure auto mode
       }
    if ($to eq "off")
       {
         #configure off mode
#disable Heizung Wochenplan
fhem ("set wdt_uzsu_EG.Wz.Heizung.uzsuicon_0 disable 1");
#set temperature to 14deg
fhem ("set Tado_EG.Wz.Heizungsthermostat temperature 14.0");
#disable Rollo Wochenplan
fhem ("set wdt_uzsu_EG.Wz.Rollo.RechtsLinks.uzsuicon_0 disable 1");
#set Rollo down
fhem ("EG.Wz.Rollo.RechtsLinks.UpDwn dn");
       }
}

sub EG_Ez_ModeControl ($$) {
   my ($from,$to) = @_;
   fhem("set teleBotAK msg \@Andreas_Krause EG_Ez_ModeControl  $from $to");    
   if ($from eq "Norm")
       {
     #save current configuration
       }
    if ($to eq "Norm")
       {
         #restore saved configuration
       }
    if ($to eq "Auto")
       {
         #configure auto mode
       }
    if ($to eq "off")
       {
         #configure off mode
#disable Heizung Wochenplan
fhem ("set wdt_uzsu_EG.Ez.Heizung.uzsuicon_0 disable 1");
#set temperature to 14deg
fhem ("set Tado_EG.Ez.Heizungsthermostat temperature 14.0");
       }
}

Beta-User

Hmmm,

also irgendwie habe ich den Eindruck, dass du unbedingt das Rad nochmal erfinden willst ??? .

Ich sehe da Ansätze, structure nochmal neu zu erfinden (oder ggf. die RESIDENTS-Geschichte)...

Aber mal ein konkreter Vorschlag; an sich ist alles, was wir dazu bisher gesehen haben ja Pseudocode (der dazu auch noch weiter generalisiert werden könnte, wenn er denn Sinn macht, was ich immer noch nicht glaube).
In Code 2 steht ziemlich am Ende:
fhem ("set wdt_uzsu_EG.Ez.Heizung.uzsuicon_0 disable 1");Der Name klingt danach, als wäre es ein WeekdayTimer. Bedingung, dass er nicht aktiv sein soll, scheint "EG_Ez_ModeControl off" zu sein?
Das kann direkt im WeekdayTimer hinterlegt werden, entweder in der DEF oder als "delayedExecutionCond" (Beipspiele sind in der cref). (K.A., wie man das in der ViSu ggf. visualisiert, aber m.E. braucht es gar nicht visualisiert zu werden, es soll ja einfach "so sein"...)


Server: HP-elitedesk@Debian 12, 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

DasQ

#18
Das Problem ist ... wenn man nicht weis, das Rad schon erfunden ist, aber dringend was in der Art Rad braucht, erfindet man eben kurz Rad neu.
Geht mir ständig so. ;) ::)

Aber oft scheiterts  einfach nur am passenden Suchbegriff.

Btw. @TE, mir hat mal mein Dozent gesagt, wenn du 3 mal fast das gleich schreibst, bau ne schleife
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Hackstall

Hallo,

ihr habt alle in gewisser Weise Recht und mit den bisherigen Hinweisen kann ich auch mein Problem (so glaube ich) lösen.

Structure oder anderes hat nur ein Nachteil es ist irgendwie statisch.
Ich möchte einem Mode eine sich ändernde (vom Benutzer) Configuration zuordnen und bei Bedarf wieder restaurieren.

In meinem Fall sind die Auto und Off Modes statisch und ändern sich nicht (hardcoded).
Die Temperature, WochenPlanungen, Settings etc von zBsp Heizungen, Rollos (Winkel) wird von meiner geliebten Familie im
Norm Betrieb immer wieder mal geändert. Somit möchte ich wenn ich im Urlaub auf Auto umstelle gerne wieder alle alten/neuen
Einstellungen des Norm Betriebs wiederhaben.

Ihr habt Recht Kopie oder Speichern aber speichern finde ich irgend wie besser und nachhaltiger. Ich speichere ja nur die Settings
des Norm Mode. Ich sehe noch etwas Arbeit bei meinen vielen wdt Settings die mal weniger mal mehr sind. Hier müsste ich (sofern
Norm Mode aktiviert wird sicherlich erst alle Zeilen löschen und dann den Norm wieder includieren.

Gruss Andreas und vielen Dank für Eure Hilfe

Gruss Andreas