Neues Modul YAAHM - Yet Another Auto Home Module

Begonnen von Prof. Dr. Peter Henning, 09 August 2017, 08:01:55

Vorheriges Thema - Nächstes Thema

RoBra81

Hier mal ein List von meinem Zeitprofile:

Internals:
   CFGFN     
   NAME       Zeitprofile
   NOTIFYDEV  global,Zeitprofile
   NR         745
   STATE      Initialized
   TYPE       YAAHM
   VERSION    1.32
   DATA:
     DD:
       HASH(0xbd4bd478)
       HASH(0xbd896928)
     DT:
       aftermidnight:
         00:01
         00:01
         undef
         ;
       afternoon:
         14:00
         undef
         undef
         ;
       aftersunrise:
         undef
         00:30
         setreading AU.ho.MS.Multisensor brightness 100, set Dunkel off
         ;
       aftersunset:
         undef
         01:00
         undef
         ;
       beforemidnight:
         undef
         00:05
         undef
         ;
       beforesunrise:
         undef
         01:00
         undef
         ;
       beforesunset:
         undef
         00:30
         setreading AU.ho.MS.Multisensor brightness 0, set Dunkel on
         ;
       evening:
         18:30
         undef
         undef
         ;
       morning:
         05:30
         undef
         set ......WB..* on
         ;
       night:
         22:00
         undef
         set ......WB..* off
         ;
       noon:
         13:00
         undef
         undef
         ;
       sleep:
         22:30
         undef
         undef
         undef
       sunrise:
         undef
         undef
         set ......WB..* off
         ;
       sunset:
         undef
         undef
         set ......WB..* on
         ;
       wakeup:
         06:15
         undef
         undef
         undef
     HSM:
     WT:
       HASH(0xbd7c17e8)
       HASH(0xbd7c5930)
   READINGS:
     2017-12-12 12:02:11   housephase      daytime
     2017-12-12 08:58:00   housetime       aftersunrise
     2017-11-26 08:07:15   lockstate       0
     2017-12-12 12:00:48   next_0         
     2017-12-12 12:00:49   next_1         
     2017-12-12 08:58:00   next_housetime  aftersunrise
     2017-12-12 08:58:00   prev_housetime 
     2017-12-12 12:00:48   ring_0          06:15
     2017-12-12 12:00:48   ring_0_1        06:15
     2017-12-12 12:00:49   ring_1          22:30
     2017-12-12 12:00:49   ring_1_1        22:30
     2017-12-08 07:07:58   ring_2          06:15
     2017-12-08 07:07:58   ring_2_1        off
     2017-12-12 12:00:48   s_aftermidnight 00:01
     2017-12-12 12:00:48   s_afternoon     14:00
     2017-12-12 12:00:48   s_aftersunrise  08:28
     2017-12-12 12:00:48   s_aftersunset   16:55
     2017-12-12 12:00:48   s_beforemidnight 23:55
     2017-12-12 12:00:48   s_beforesunrise 06:58
     2017-12-12 12:00:48   s_beforesunset  15:25
     2017-12-12 12:00:48   s_evening       18:30
     2017-12-12 12:00:48   s_morning       05:30
     2017-12-12 12:00:48   s_night         22:00
     2017-12-12 12:00:48   s_noon          13:00
     2017-12-12 12:00:48   s_sleep         22:30
     2017-12-12 12:00:48   s_sunrise       07:58
     2017-12-12 12:00:48   s_sunset        15:55
     2017-12-12 12:00:48   s_wakeup        06:15
     2017-12-12 12:02:13   savedate        Tue Dec 12 12:02:13 2017
     2017-12-12 09:18:13   state           Initialized
     2017-11-26 08:04:45   todayDesc       --
     2017-12-11 00:00:33   todayType       workday
     2017-12-12 12:00:48   today_0         06:15
     2017-12-12 12:00:48   today_0_e       enabled
     2017-12-12 12:00:49   today_1         22:30
     2017-12-12 12:00:49   today_1_e       enabled
     2017-12-08 07:07:58   today_2         06:15
     2017-12-08 07:07:58   today_2_e       enabled
     2017-11-26 08:04:45   tomorrowDesc    --
     2017-12-10 00:00:33   tomorrowType    workday
     2017-12-12 12:00:48   tomorrow_0      06:15
     2017-12-12 12:00:48   tomorrow_0_e    enabled
     2017-12-12 12:00:49   tomorrow_1      22:30
     2017-12-12 12:00:49   tomorrow_1_e    enabled
     2017-12-08 07:07:58   tomorrow_2      off
     2017-12-08 07:07:58   tomorrow_2_e    enabled
     2017-12-12 12:02:11   tr_housephase   Tageszeit
     2017-12-12 08:58:00   tr_housetime    Nach Sonnenaufgang
     2017-12-11 00:00:33   tr_todayType    Arbeitstag
     2017-12-10 00:00:33   tr_tomorrowType Arbeitstag
     2017-12-12 12:00:49   tr_wake_0       6:15 morgen
     2017-12-12 12:00:49   tr_wake_1       22:30 heute
     2017-12-08 07:07:58   tr_wake_2       off morgen
   TIMER:
     Zeitprofile_aftermidnight:
       HASH       Zeitprofile
       MODIFIER   aftermidnight
       NAME       Zeitprofile_aftermidnight
     Zeitprofile_check:
       HASH       Zeitprofile
       MODIFIER   check
       NAME       Zeitprofile_check
     Zeitprofile_daytime:
       HASH       Zeitprofile
       MODIFIER   daytime
       NAME       Zeitprofile_daytime
     Zeitprofile_nighttime:
       HASH       Zeitprofile
       MODIFIER   nighttime
       NAME       Zeitprofile_nighttime
Attributes:
   room       ProfileRoom

Prof. Dr. Peter Henning

Wer hat denn danach gefragt  ::) ?


Was ist der Wert des Readings savedate ?
Bitte mal die Routine YAAHM_save ersetzen durch
#########################################################################################
#
# YAAHM_save
#
# Parameter hash = hash of the YAAHM device
#
#########################################################################################

sub YAAHM_save($) {
  my ($hash) = @_;
  $hash->{DATA}{"savedate"} = localtime(time);
  readingsSingleUpdate( $hash, "savedate", $hash->{DATA}{"savedate"}, 1 );
  my $json   = JSON->new->utf8;
  my $jhash0 = eval{ $json->encode( $hash->{DATA} ) };
  Log 1, "===========> JSON data is ".Dumper($jhash0);
  my $error  = FileWrite("YAAHMFILE",$jhash0);
  Log 1,"[YAAHM_save] error=$error";
  return;
}


und den Log-Output posten.

LG

pah

UweH


Bei mir funktioniert es jetzt übrigens mit der Version 1.32. Auch nach einem restart ist alles wieder da.  :)


Gruß
Uwe

Prof. Dr. Peter Henning

Der Unterschied zwischen 1.31 und 1.32 hat aber damit gar nichts zu tun...

LG

pah

UweH


Die Antwort habe ich bereits befürchtet, als ich es geschrieben habe. War schon in der Schule so...  :(

Es ist aber nun so, dass es bei mir auf einer FHEM-Installation (raspbian) seit dem Update funktioniert (warum nun auch immer), auf einer anderen Installation (Ubuntu) nicht. Da wird nach dem Befehl
Zitat{(FileRead("YAAHMFILE"))[1]}
lediglich die aktuelle Seite refresht. Das war's. Die Geschichte mit dem Testfile funktioniert aber.

Gruß
Uwe

Prof. Dr. Peter Henning

#140
Wie sagte Odoaker zu Wulfila im Film "Die letzte Legion":
ZitatFalsche Antwort. Bring ihn weg und schneid ihm die Kehle durch.

Es ist nicht der Lesebefehl, der nicht funktioniert - sondern offenbar geht der Schreibbefehl in die Hose. Mit
configDB fileshow YAAHMFile
kann man sich auch ohne "FileRead" die Datei anzeigen lassen. Mit
configDB info
kann man sehen, wie groß die eigene configdb ist, und
configDB
alleine zeigt noch ein paar weitere Möglichkeiten.

Ersetz doch bitte mal die Schreibroutine YAAHM_save durch die oben gepostete Version, und setz bei dem YAAHM-Device verbose auf 5. Ich tippe auf irgendein Problem mit der JSON-Erzeugung aus dem Datenhash.

LG

pah

UweH

Moin,


Danke erst mal für die Tipps, komme leider erst morgen oder am Wochenende dazu.


Gruß
Uwe

RoBra81

Zitat von: Prof. Dr. Peter Henning am 12 Dezember 2017, 13:59:39
Wer hat denn danach gefragt  ::) ?

Da die Frage im Forum des öfteren kommt, habe ich einfach mal im vorauseilendem Gehorsam gepostet...

Zitat von: Prof. Dr. Peter Henning am 12 Dezember 2017, 13:59:39
und den Log-Output posten.

Hier der Output:

2017.12.13 09:56:57.306 1: [YAAHM_save] error=
2017.12.13 09:56:57.305 1: PERL WARNING: Use of uninitialized value $error in concatenation (.) or string at ./FHEM/95_YAAHM.pm line 957.

2017.12.13 09:56:57.290 1: ===========> JSON data is $VAR1 = undef;


Ronny

UweH

So, hab's doch heute noch geschafft. Bei mir sieht es aus ähnlich aus wie bei RoBra81:

save:
2017.12.13 16:13:24 1: ===========> JSON data is undef

2017.12.13 16:13:24 1: PERL WARNING: Use of uninitialized value $error in concatenation (.) or string at ./FHEM/95_YAAHM.pm line 957.
2017.12.13 16:13:24 1: [YAAHM_save] error=


restore:
2017.12.13 16:16:27 1: [YAAHM_restore] read error=Error on reading YAAHMFILE from database!

JSON ist die aktuelle Version.

Gruß
Uwe

Prof. Dr. Peter Henning

Was steht denn beim Systemstart im Log ?
ZitatYAAHM_Define] data hash restored from save file with date ...
oder
Zitat[YAAHM_Define] data hash is initialized
?

LG

pah

UweH

Beim letzten restart habe ich folgenden Eintrag gefunden:

2017.12.10 12:21:55 1: [YAAHM_restore] read error=Error on reading YAAHMFILE from database!
2017.12.10 12:21:55 1: [YAAHM_Define] data hash is initialized


Gruß
Uwe

Prof. Dr. Peter Henning

So sollte es ja auch sein. Es ist mir deshalb schleierhaft, wieso die JSON-Erzeugung aus dem Hash fehlschlägt. Bitte noch eine weitere Logzeile in die Save-Funktion einbauen, also insgesamt
sub YAAHM_save($) {
  my ($hash) = @_;
  $hash->{DATA}{"savedate"} = localtime(time);
  readingsSingleUpdate( $hash, "savedate", $hash->{DATA}{"savedate"}, 1 );
  my $json   = JSON->new->utf8;
  my $jhash0 = eval{ $json->encode( $hash->{DATA} ) };
  Log 1, "===========> hash data is ".Dumper($hash->{DATA});
  Log 1, "===========> JSON data is ".Dumper($jhash0);
  my $error  = FileWrite("YAAHMFILE",$jhash0);
  Log 1,"[YAAHM_save] error=$error";
  return;
}


LG

pah

UweH

#147


Hallo pah,


damit wird dann diese Logausgabe generiert.


Gruß
Uwe


EDIT: Übrigens wird YAAHMFILE in der configdb angelegt...gelesen wird's aber wohl nicht.

Prof. Dr. Peter Henning

Sieh mal einer an.

Denn in den Hash-Daten ist etwas auffällig: Der letzte Teil davon, da wird statt eines Datums ein Datumsobjekt eingetragen (Beginnt mit bless( ... und endet mit der Klassenbezeichnung Time::Piece). Die JSON-Erzeugung geht dann in die Hose.

Was liefert auf diesem System denn das Kommando "{localtime(time)}" ?

LG

pah

RoBra81

Zitat von: Prof. Dr. Peter Henning am 15 Dezember 2017, 06:47:42
Was liefert auf diesem System denn das Kommando "{localtime(time)}" ?


Fri Dec 15 09:34:10 2017


Ronny