[Gelöst] Wie lese ich ALLE Werte der THZ in ein LOGFile zu einer best. Tageszeit

Begonnen von wla, 14 April 2018, 15:29:37

Vorheriges Thema - Nächstes Thema

wla

Hi,

Vorhanden und funktioniert:

attr Mythz event-on-change-reading sGlobal,sHistory,sLast10errors,sHC1
attr Mythz interval_sGlobal 300
attr Mythz interval_sHC1 300
attr Mythz interval_sHistory 600
attr Mythz interval_sLast10errors 600
attr Mythz room Heizung
define FileLog_Mythz FileLog ./log/Mythz-%Y.log Mythz

define Mythz_Power dummy
define FileLog_Mythz_Power FileLog ./log/Mythz_Power-%Y.log Mythz_Power
attr FileLog_Mythz_Power logtype text
attr Mythz_Power room Heizung
define Mythz_Power_anDummy at *23:55:00 {\
  my $d1="sHeatHCDay: "    . ReadingsVal("Mythz","sHeatHCDay",0);;\
  my $d2="sElectrHCDay: "  . ReadingsVal("Mythz","sElectrHCDay",0);;\
  my $d3="sHeatDHWDay: "   . ReadingsVal("Mythz","sHeatDHWDay",0);;\
  my $d4="sElectrDHWDay: " . ReadingsVal("Mythz","sElectrDHWDay",0);;\
  fhem("set Mythz_Power $d1 $d2 $d3 $d4");;\
}

Ähnlich wie die Leistungswerte, will ich ALLE Werte (wirklich alle Register) einmal täglich in ein eigenes Logfile webschreiben (zu Dokumentationszwecken).
Ich will nicht alle einzeln mit Namen angeben müssen ...
Wie heißt das richtige Konstrukt? So gehts jedenfalls nicht, das mit dem * nur zur Verdeutlichung:
...  my alles="Alles: "    . ReadingsVal("Mythz",*,0);; ...

Für die richtige Zeile, danke ich im voaus!

Gruß
Walter


Byte09

zumindest kannst du so alle readings eines devices auslesen , die in ein array packen oder was auch immer und dann kannst du sie in einer schleife auslesen und in ein log schreiben.

my $hash = $defs{$name};
my $readings = $hash->{READINGS};
foreach my $a ( keys %{$readings} ) {
Log3( $name, 0,"Reading : $a" . __LINE__ );
}


$name = Name des audzulesenden Devices


ausgabe ist in diesem Fall :

2018.04.14 16:05:06 0: Reading : .Trigger_cmd_off588
2018.04.14 16:05:06 0: Reading : .Trigger_off588
2018.04.14 16:05:06 0: Reading : .V_Check588
2018.04.14 16:05:06 0: Reading : state588
2018.04.14 16:05:06 0: Reading : .Trigger_cmd_on588
2018.04.14 16:05:06 0: Reading : Trigger_log588
2018.04.14 16:05:06 0: Reading : .Device_Events588
2018.04.14 16:05:06 0: Reading : .First_init588
2018.04.14 16:05:06 0: Reading : .Trigger_on588
2018.04.14 16:05:06 0: Reading : .Device_Affected588
2018.04.14 16:05:06 0: Reading : .Device_Affected_Details588


habe das nur eben aus meinem modul kopiert, sollte deine frage aber beantworten

gruss Byte09

wla


wla

Noch eine Frage dazu:
define Mythz_All dummy
define FileLog_Mythz_All FileLog ./log/Mythz_All-%Y.log Mythz_All
attr FileLog_Mythz_All logtype text
attr Mythz_All room Heizung
define Mythz_All_anDummy at *14:00:00 {\
  my $hash=$defs{"Mythz"};;\
  my $readings=$hash->{READINGS};;\
  foreach my $a ( keys %{$readings} ) {\
#    my $d="$a: " . ReadingsVal("Mythz","$a",0);;\
#    fhem("set Mythz_All $d");;\
     fhem("set Mythz_All $a");;\
  }\
}

Warum ist die Ausgabe immer unterschiedlich?
Es kommen zwar die Namen aller Register, aber jedesmal in einer anderen Reihenfolge?

Byte09

tausche :

foreach my $a ( keys %{$readings} )
gegen:
foreach my $a ( sort keys %{$readings} )

dann hast du sie in alphabetischer reihenfolge .

hättest du aber auch googeln können  ;)
https://perlmaven.com/how-to-sort-a-hash-in-perl

gruss Byte09