Hallo,
ich wäre interessiert an einem Modul welches ähnlich wie LightScene funktioniert.
Soweit ich Lightscene verstehe werden hier die States in Abhängigkeit eines Namens gespeichert.
Meine Frage wäre ob es ein ähnliches Modul gibt welches nicht nur den State speichert, sondern auch
den Inhalt aller Readings eines Devices. Bei Wiederherstellung einer Scene sollten dann auch nicht
nur der State entsprechend geschaltet werden, sondern auch die Inhalte aller Readings (Attribute optional).
Gibt es etwas ähnliches oder kann man das aufbohren.
Danke Andreas
Zitat von: Hackstall am 08 Januar 2023, 19:22:50
Gibt es etwas ähnliches oder kann man das aufbohren.
Mit "list -r <deviceName>" bekommst Du das jetzt schon für jedes beliebige device.
Mit AnalyzeCommandChain() kannst Du diesen Output umgekehrt wieder in FHEM einspielen.
In der 99_myUtils.pm sind das maximal 10 Zeilen Code.
Dafür braucht man kein Modul.
Edit:
sub deviceTest {
my $device = shift;
return "please provide one device!" unless $device;
# array mit attr und readings erzeugen
my @lines = split(/\n/,CommandList(undef,"-r $device"));
shift @lines; # sicherheitshalber die Zeile mit defmod entfernen
# hier werden die Werte für attr und readings wieder verarbeitet
return AnalyzeCommandChain(undef,join(";",@lines).";");
}
Hi danke,
gemäss Deiner Beschreibung ist es genau das was ich suche.
Derzeit mache ich folgendes, welches auch scheinbar funktionierte.
Lediglich bei den UZSU{} readings gab es Probleme.
Die Funktion "analyzeCommandChain" war mir ungekannt.
Meine Frage ist wie baue ich dieses denn in meine Funktionen
ein. Das list -r liefert mir ja alle Devices und Inhalte. In Deinem
Algorithms restaurierst du per Device. Mir wäre es Recht
wenn alle Devices einer Gruppe in einem File liegen und
von dort aus wieder restauriert werden. Wäre das viel Arbeit?
Bin nicht der Perl Profi.
1) MEin Save
sub saveDeviceConfig ($$) {
my ( $Device, $ConfigMode ) = @_;
my $devcontent = fhem( "list -r .*" . $Device . "_*?.*" );
#fhem ("trigger $Device 16");
my $fileName = "config/" . $ConfigMode . "_" . $Device . ".txt";
FileWrite( $fileName, $devcontent );
}
2) Mein RestoreDevice
sub restoreDeviceConfig ($$) {
my ($Device, $configMode) = @_;
#my $devcontent=FileRead("/config/$Device.txt");
#fhem("$devcontent");
my $fileName = "config/" . $configMode . "_" . $Device . ".txt";
my ( $err, @Line ) = FileRead($fileName);
foreach (@Line) {
my $string = $_;
if ( $string =~ m/define/ ) {
$string =~ s/define/defmod/;
}
fhem($string);
Log 1, "$Device: $string";
}
#fhem("trigger $Device 16");
fhem("save");
sendMsg( "TELEGRAM", "Andreas", "restoreDeviceConfig $Device" );
#fhem("set teleBotAK msg \@Andreas_Krause restoreDeviceConfig $Device");
}
Danke hat sich erledigt.
Dein Vorschlag pass in meinen Algorithmus mit dem Aufruf der Routine "AnalyzeCommand".
Super vielen Dank für den Tip.
Gruss Andreas
Hallo
es ergibt sich doch noch ein Problem.
Das Rücklesen scheint zu funktionieren jedoch scheinbar nicht für alle Readings.
zBsp habe ich ein reading:
uzsu im Device OG.AzAnd.Heizung.uzsuicon welches anscheinend nicht restauriert wird.
Es beinhaltet ja auch alle möglichen Sonderzeichen. Muss ich ev hier noch "\" voranstellen?
Gibt es hier eine Lösung für uzsu?
Internals:
DEF
FUUID 62228c85-f33f-4db7-50fa-9bd7322bdc9f3d1a
FVERSION 98_dummy.pm:0.256060/2022-02-01
NAME OG.AzAnd.Heizung.uzsuicon
NR 3447
STATE 18
STILLDONETIME 0
TYPE dummy
eventCount 63
OLDREADINGS:
READINGS:
2023-01-09 10:49:23 state 18
2023-01-09 10:44:00 uzsu {"list":[{"time":"02:00","value":"18","timeCron":"02:00","delayedExec":{"value":"","type":"String","active":false,"deviceString":""},"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","timeOffset":"","condition":{"deviceString":"","value":"","type":"String","active":false},"timeMin":"","active":true,"holiday":{"weekend":false,"workday":false},"event":"time","timeOffsetType":"m","timeMax":""}],"active":true}
Attributes:
DbLogExclude .*
deviceName 15
group Grp-GUI
icon it_network
readingList uzsu {}
room 9.6.5_UZSU
userattr deviceName
Die Datei die mit list -r erzeugt wurde enthält folgende Einträge:
define OG.AzAnd.Heizung.uzsuicon dummy
attr OG.AzAnd.Heizung.uzsuicon userattr deviceName lightSceneParamsToSave lightS
ceneRestoreOnlyIfChanged:1,0
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.uzsuic
on en MO,TU,WE,TH,FR,SA,SU|01:00|17
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
setstate OG.AzAnd.Heizung.uzsuicon 17
setstate OG.AzAnd.Heizung.uzsuicon 2023-01-09 10:44:54 state 17
setstate OG.AzAnd.Heizung.uzsuicon 2023-01-09 10:44:00 uzsu {"list":[{"time":"02
:00","value":"18","timeCron":"02:00","delayedExec":{"value":"","type":"String","
active":false,"deviceString":""},"rrule":"FREQ=WEEKLY;;BYDAY=MO,TU,WE,TH,FR,SA,S
U","timeOffset":"","condition":{"deviceString":"","value":"","type":"String","ac
tive":false},"timeMin":"","active":true,"holiday":{"weekend":false,"workday":fal
se},"event":"time","timeOffsetType":"m","timeMax":""}],"active":true}
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 17
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:54 currValue 17
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:54 nextUpdate 202
3-01-10 01:00:00
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:54 nextValue 17
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:54 state 17
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:00 weekdays MO,TU
,WE,TH,FR,SA,SU|02:00|18
Anmerkung: auch der folgende Eintrag wurde nicht restauriert.
Reading weekdays wurde nicht überschrieben.
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:00 weekdays MO,TU
,WE,TH,FR,SA,SU|02:00|18
Danke für Eure Hilfe.
Gruss Andreas
Kann es sein, dass du in der datei "ungewollte" CR/LF in spalte 80 hast?
ein "list -r <device>" macht das nicht, muss entweder beim speichern oder beim händischen editieren passiert sein..
l.g. erwin
Hallo,
danke für den Tip aber leider sind in der Datei wirklich keine CR/LFs oder CRs.
Das war es leider nicht.
Mich wundert aber auch vornehmlich dass nicht einmal so ein kleines setstate:
setstate wdt_uzsu_OG.AzAnd.Heizung.uzsuicon_0 2023-01-09 10:44:00 weekdays MO,TU,WE,TH,FR,SA,SU|02:00|18
genommen wird.
Liegt es denn dann doch an den Sonderzeichen innerhalb des Strings wie: | oder , oder :
Muss das in HochKommas und per BackSlash verarbeitet werden.
ZitatDas war es leider nicht.
Naja, in deinem post:
ZitatDie Datei die mit list -r erzeugt wurde enthält folgende Einträge:
...
ist komischerweise in spalte 81 immer ein zeilenumbruch...
Ich denke der kommt von dem Copy Paste Vorgang hier vom Editor hier in das Forum.
Gruss Andreas