Erweiterung LightScene oder Neues Modul

Begonnen von Hackstall, 08 Januar 2023, 19:22:50

Vorheriges Thema - Nächstes Thema

Hackstall

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


betateilchen

#1
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).";");
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Hackstall

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");
}

Hackstall

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

Hackstall

#4
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

erwin

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
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Hackstall

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.

erwin

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...
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Hackstall

Ich denke der kommt von dem Copy Paste Vorgang hier vom Editor hier in das Forum.
Gruss Andreas