save restore einzelner readings oder devices

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

Vorheriges Thema - Nächstes Thema

Hackstall

Hallo,
ich würde gern zur Laufzeit einige readings oder auch devices speichern und spaeter per command wieder einlesen.

Zwischen speichern und restore würde ich operationell andere Werte benutzen.

ich habe bereits gegoogelt bin aber nicht so richtig schlüssig.

Hat hier jemand einen Tip.




Otto123

Hi,

list -r device liefert Dir die Raw Definition. Da ist alles drin.
Du müsstest also irgendwie den Befehl absetzen und die Ausgabe speichern.

Wie willst Du das machen? Extern? In FHEM? Automatisch? Interaktiv?
Kann leicht aufwendig werden.  ;)
Nur Idee, nicht getestet: {my $devcontent=fhem("list -r device");FileWrite("DevContent.txt", $devcontent)}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Hackstall

Danke fuer die Antwort.

Ich benoetige das speichern und einlesen aus Fhem heraus.

Gruss Andreas

Frank_Huber

Bescbreibe doch mal den use case.
Damit wird es einfacher dir zu helfen.

Gesendet von meinem Doogee S60 mit Tapatalk


Hackstall

Der use case ist wie folgt:

ich habe meine Haussteuerung auf Haus, Zimmer und Device Basis via SmartVisu implementiert.

Bei der Zimmersteuerung und Haussteuerung selektiere ich zwischen:
Auto, Norm und Off.

Fuer alle Steuerungen (Auto, Off und Norm) habe ich verschiedene Settings. Fuer Auto und off sind diese statisch.
Die Normstellung moechte ich mir bei jeder Auto oder Off Selektion zwischenspeichern und diese moechte ich daher nicht verlieren. Daher wird vor umkonfiguration auf auto oder off  die norm-konfiguration gespeichert. wenn dann wieder von auto oder off wieder auf norm geschaltet wird würde ich ein restore machen.

Ueber alles moechte ich zum Beispiel wenn ich in Urlaub fahre einfach Haus auf off konfigurieren und
wenn ich wiederkomme auf norm zurückkonfigurieren.

Hackstall

Hallo,

habe mir mal dein Vorschlag bzgl save angeschaut und bin der Meinung, dass das genau das ist was ich brauche.

Aber wie sieht der restore aus?

Danke Andreas

MadMax-FHEM

Eine andere Variante (ohne Datei) wäre:

mittels ReadingsVal die Originalwerte abzufragen und dann per setreading auf einen (Zwischenspeicher)Dummy zu übertragen.

Beim Zurückstellen dann eben andersrum:

auslesen per ReadingsVal aus dem (Zwischenspeicher)Dummy und setzen per setreading beim Original-Device

Wenn es keine Readings, sondern Attribute sind: AttrVal (abfragen) bzw. attr ("setzen")

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Moin,

fürs restore fällt mir auf die Schnelle eine shell Variante ein:
{qx(cat DevContent.txt|nc localhost 7072)}
In Perl kannst Du natürlich einfach umkehren, ich weiß nicht ob das funktioniert.
{my $devcontent=FileRead("DevContent.txt");fhem("$devcontent")}

Ansonsten muss man den String zeilenweise zerlegen und in fhem("") ausführen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Mobil, daher kurz:Im heating_control-Modul habe ich jüngst was eingecheckt, das so ähnlich ist.
ABER: mir kommt das ganze Konzept suboptimal vor.  Bei unbedachten save-Anweisungen kann auch mal was verloren gehen...
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

Hackstall

Hallo was meinst du mit unbedachten Save.
Der save erfolgt automatisch durch fhem wenn ich
aus dem Norm Mode hinausgehen. Der restore soll
nur dann wieder erfolgen wenn ich in den Norm
Mode wieder reingehe.

Gruss Andreas

Beta-User

Hmmm,

also: "früher" gab es Module, die automatisch save-Anweisungen ausgeführt haben, wenn sie z.B. neue Hardware entdeckt hatten. Dabei sind einigen Leuten schon mal Definitionen "verloren" gegangen, z.B. weil bestimmte Dinge beim Neustart von FHEM nicht verfügbar waren, der Modul-Code kaputt usw....

Daher hat Rudi irgendwann das Speichern der Konfiguration aus FHEM heraus jedenfalls in den Fällen unterbunden, in denen nicht alles geladen werden konnte (autosave müßte das Suchwort dazu sein).

Meine persönliche Schlußfolgerung aus dem ganzen war, dass es eben ganz grundsätzlich ein gefährliches Konzept ist, die Konfiguration zwischendurch automatisch zu speichern. Ich vermeide daher auch "rote Fragezeichen" wo es geht, und käme gar nicht mehr auf die Idee, die Konfig zwischendurch automatisiert speichern zu wollen.

M.E. ist das auch nicht notwendig. Viele Module beinhalten z.B. Optionen, auf An- oder Abwesenheit zu reagieren (AutoShuttersControl, WeekdayTimer), auch notify lassen sind mit disabled-"Zeiten" (de-)aktivieren oder man kann Bedingungen bei Ausführung prüfen etc.. Manche Module scheinen gerade den Zweck zu haben, auf den Bewohnerstatus zu reagieren (YAAHM nach meiner Lesart).

Aber zurück zu deiner Ausgangsfrage: list nutzt intern zwei Funktionen, die Arrays mit aktuellen cfg und statefile-Auszügen liefern. Die kann man wegspeichern mit filewrite und mit fileread wieder einlesen. Dann einfach zeilenweise anwenden.

Kurzauszug (ohen die fileanweisungen):
    my @a = GetDefAndAttr($hcName);
    my @b = GetAllReadings($hcName);

    foreach my $linesa  ( @a ){
       AnalyzeCommand(undef, "$linesa");
    }
    foreach my $linesb  ( @b ){
       AnalyzeCommand(undef, "$linesb");
    }
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

Hackstall

sorry aber ich bin mit Deinem Kurzauszug überfordert. Anfänger halt.
Könntst Du mir bitte dennoch noch kurz Dein Weg erläutern.

Danke Andreas

Beta-User

Zitat von: Hackstall am 17 Mai 2019, 23:41:01
Der use case ist wie folgt:

ich habe meine Haussteuerung auf Haus, Zimmer und Device Basis via SmartVisu implementiert.

Bei der Zimmersteuerung und Haussteuerung selektiere ich zwischen:
Auto, Norm und Off.

Fuer alle Steuerungen (Auto, Off und Norm) habe ich verschiedene Settings. Fuer Auto und off sind diese statisch.
Die Normstellung moechte ich mir bei jeder Auto oder Off Selektion zwischenspeichern und diese moechte ich daher nicht verlieren. Daher wird vor umkonfiguration auf auto oder off  die norm-konfiguration gespeichert. wenn dann wieder von auto oder off wieder auf norm geschaltet wird würde ich ein restore machen.

Ueber alles moechte ich zum Beispiel wenn ich in Urlaub fahre einfach Haus auf off konfigurieren und
wenn ich wiederkomme auf norm zurückkonfigurieren.
...das sah irgendwie nicht nach "Anfängerlevel" aus...

Jetzt weiß ich nicht, wo anfangen ??? .

Generell: irgendwie klingt das auch nach "Lightscene", vielleicht solltest du dir das mal ansehen ("Light" ist m.E. irreführend, da geht es um das Abspeichern von ganzen Schaltungsszenarien, was nicht auf Licht beschränkt ist).

Also mal ein konkretes Beispiel: Es ist ein Ferientag, alle sind zuhause, es soll daher mollig warm sein:
defmod Heizung_Ferienmodus notify BW_Ferientag  { Value("BW_Ferientag") ? \
fhem "set Thermostat_Wohnzimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Wohnzimmer_Ferien,\\
set Thermostat_Esszimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Esszimmer_Ferien,\\
set Thermostat_Buero_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Buero_Ferien,\\
set Thermostat_EssZi_Climate regSet weekPrgSel prog2"\
: fhem "set Thermostat_Wohnzimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Wohnzimmer,\\
set Thermostat_Esszimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Esszimmer,\\
set Thermostat_Buero_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Buero,\\
set Thermostat_EssZi_Climate regSet weekPrgSel prog1" }

Damit wird beim Wechsel von Ferien auf nicht-Ferien und andersrum auf alle Thermostate eine andere Temperaturliste geschrieben.

Dann habe ich notify, die bei (längerer) Abwesenheit der Kinder eben die desiredTemp ändern und auf manual stellen, selbst wenn Ferien sind...

Es gibt aber viele Wege, sowas umzusetzen (schau mal z.B. im Wiki nach Heating_Control, ist zwar veraltet, geht aber ganz genauso mit WeekdayTimer), es wäre daher gut, du würdest deine konkreten use-cases noch etwas konkreter darstellen.
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

justme1968

warum möchtest du readings speichern und wieder herstellen? das hätte keinerlei auswirkung ausser in der anzeige. das überschreiben eines readings bewirkt nichts. ausser vielleicht das device durcheinander zu bringen.

möchtest du nach dem urlaub wirklich den zustand wieder herstellen der vor dem urlaub vorhanden war? oder vielleicht doch eher einen definierten 'default' zustand?

beides wäre aber mit LightScene möglich. entweder mit dem LightScene save eine temporäre szene mit dem aktuellen zustand speichern und dann wieder herstellen, oder bestimmte default szenen anlegen die sich dann gezielt wieder herstellen lassen.


aber: ist das wirklich was du willst? es geht doch um hausautomation. nicht darum von hand so viel wie möglich zu machen. schau dir mal an ob du es nicht hin bekommst das fhem automatisch erkennt das keiner da ist und entsprechend reagiert. und wenn jemand zurück kommt ebenfalls.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Hackstall

Ja das moechte ich.
Im urlaub moechte ich auf off gehen und nach dem Urlaub wieder auf norm.
Der Knackpunkt ist die Speicherung des Norm- Wochenplans der sich doch
bei Norm Betrieb immer wieder mal aendert je nachdem wie die Familie drauf
Ist. Daher sind die festen lightscenes nicht optimal fuer mich

Gruss Andreas