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

patator

Danke, sorry für die Verwirrung.

Besteht die Möglichkeit, dass YAAHM nach einem Fhem Restart, die hinterlegten Befehle wieder beim Profil anzeigt? Nach jedem Reboot verliert die Profilanzeige die Action Befehle.

Viele Grüße

Prof. Dr. Peter Henning

Dafür gibt es die Befehle "save" und "restore". Das funktioniert derzeit noch nicht automatisch.

LG

pah

ToKa

Hallo zusammen,

mache gerade die ersten Gehversuche mit dem Modul, weil ich den Ansatz, alles zentral in einem Modul zu automatisieren, sehr gut finde. Nach dem heutigen Update, habe ich folgende Fehlermeldung im Log:

PERL WARNING: Use of uninitialized value in string comparison (cmp) at ./FHEM/95_YAAHM.pm line 247.

Des weiteren würde mich interessieren, mit welchem Browser bzw. welchem fhem style Ihr z.B. die Profilseite anzeigt? Ich nutze Chrome und ios6 als Style. Habe aber auch die anderen schon ausprobiert und bei keiner gefällt mir die Profilseite wirklich gut. So sind z.B. bei den Wochenprofilen die Checkboxen versetzt.

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Prof. Dr. Peter Henning

Ich habe gestern abend eine neue Version eingecheckt, mit deutlicher Komfortsteigerung bei der Anzeige der Weckzeiten und der Möglichkeit, die nächste Weckzeit in einem für Sprachausgabe geeigneten Format zu erhalten.

Außerdem einem neuen Hausmode donotdisturb

LG

pah

UweH

Prima, wird getestet.
Danke


Den neuen Housemode finde ich gut...  :D


Gruß
Uwe

LuBeDa

Hallo,
bei get YYY template gab es ein fehlerhaftes Template mit einigen Syntax-Fehler. Hier die bereinigte Version:

sub HouseTimeHelper(@){
  my ($event,$param1,$param2) = @_;

  Log 1,"[HouseTimeHelper] event=$event";

  my $time    = ReadingsVal("Wochenplaner","housetime","");
  my $phase   = ReadingsVal("Wochenplaner","housephase","");
  my $state   = ReadingsVal("Wochenplaner","housestate","");
  my $party   = (ReadingsVal("Wochenplaner","housemode","") eq "party") ? 1 : 0;
  my $absence = (ReadingsVal("Wochenplaner","housemode","") eq "absence") ? 1 : 0;
  my $todaytype = ReadingsVal("Wochenplaner","tr_todayType","");
  my $todaydesc = ReadingsVal("Wochenplaner","todayDesc","");
  my $tomorrowtype = ReadingsVal("Wochenplaner","tr_tomorrowType","");
  my $tomorrowdesc = ReadingsVal("Wochenplaner","tomorrowDesc","");
 
  if( $event eq "aftermidnight" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "sunset" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "beforesunrise" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "beforesunset" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "aftersunrise" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "beforemidnight" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "midnight" ){

  #--------------------------------------------------------------------- 
  }elsif( $event eq "aftersunset" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "sunrise" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "wakeup" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "morning" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "noon" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "afternoon" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "evening" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "night" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "sleep" ){

  }
}
sub HouseStateHelper(@){
  my ($event,$param1,$param2) = @_;

  Log 1,"[HouseStateHelper] event=$event";

  my $time    = ReadingsVal("Wochenplaner","housetime","");
  my $phase   = ReadingsVal("Wochenplaner","housephase","");
  my $state   = ReadingsVal("Wochenplaner","housestate","");
  my $party   = (ReadingsVal("Wochenplaner","housemode","") eq "party") ? 1 : 0;
  my $absence = (ReadingsVal("Wochenplaner","housemode","") eq "absence") ? 1 : 0;
  #---------------------------------------------------------------------
  if( $event eq "unsecured" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "secured" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "protected" ){

  #---------------------------------------------------------------------
  }elsif( $event eq "guarded" ){

  }
}

Prof. Dr. Peter Henning

Bitte künftig besser einfach mitteilen, wo die Syntaxfehler sind.

Ist behoben und bei einem der nächsten Updates dabei.

LG

pah

LuBeDa

Bekommen eine Fehlermeldung seit dem Update heute:

2017.11.12 12:30:22 1: [YAAHM_Define] data hash restored from save file with date Sun Nov 12 12:30:22 2017
2017.11.12 12:30:22 1: [YAAHM] finds 1 Astro devices, module not loaded separately
2017-11-12_12:30:22 global DEFINED Wochenplaner
Can't use an undefined value as an ARRAY reference at ./FHEM/95_YAAHM.pm line 863.

Prof. Dr. Peter Henning

#83
Bitte genauer mit get..version.

"Seit dem heuitigen Update" ist nichts, mit dem ich etwas anfangen kann.

Außerdem kann das sicher nicht beim Start kommen, sondern nur bei einem fehlerhaften get-Befehl.

LG

pah

LuBeDa

Der Fehler kam nach dem heutigen Update nachdem ich mein YAAHM Device (Version 1.16) neu angelegt hatte.

Die Fehlermeldung hing wahrscheinlich mit der Datei YAAHMFILE (Größe: 1 Byte) zusammen. Die wahrscheinich meinen Versuchen mit der Version 1.15 übrig geblieben ist.

Nach dem ich diese Datei löschte startete FHEM auch wieder.



LuBeDa

Hallo,
auf meinem Host
Linux opi 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l GNU/Linux

funktioniert das speichern der Konfiguration mit dem save Befehl nicht. Es wird immer nur eine ein Byte große YAAHMFILE Datei angelegt. Nach einem FHEM neustart crashed FHEM dann weil der automatische Restore aus der Datei nicht funktioniert.

Selbst mit verbose 5 wird bei speichern kein Fehler angezeigt.

Ich habe gerade alle Perl-Module auf dem Host aktualisiert. Hat keine Verbeserung gebracht.

Ludger


Prof. Dr. Peter Henning

Bitte im Unterprogramm YAAHM_save das Kommentarzeichen vor dem Log-befehl entfernen

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} ) };
  my $error  = FileWrite("YAAHMFILE",$jhash0);
  Log 1,"[YAAHM_save] error=$error";
  return;
}


LG

pah

LuBeDa

Ich war so frei und habe noch ein weiteres Log eingefügt. Also dieser Programabschnitt erzeugt untenstehendes Log.

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


Logs:
2017.11.15 16:38:48 1: [YAAHM_json] json=JSON=SCALAR(0x80bf730)
2017.11.15 16:38:48 1: PERL WARNING: Use of uninitialized value $error in concatenation (.) or string at ./FHEM/95_YAAHM.pm line 886.
2017.11.15 16:38:48 1: [YAAHM_save] error=


Ist der eval Befehl überhaupt notwendig?

Prof. Dr. Peter Henning

1. Der erste "ich bin so frei" Log-Befehl wird natürlich nur Müll liefern, $json ist kein Text.

2. Dass $error keinen Wert hat, ist auch ok - es liegt eben kein Fehler beim Schreiben vor.

3. Der Fehler passiert im Aufruf der "encode"-Methode. Und aus genau dem Grund braucht es die eval{}-Klammer.

Ich tippe mal auf ein nicht ordnungsgemäß installiertes JSON-Modul.

LG

pah

adn77

Ich bin ein wenig überwältigt von den verschiedenen Möglichkeiten der Automatisierung, neben dem HOMEMODE Modul schaue ich mir deshalb auch YAAHM an.

Beim installieren "auf der grünen Wiese" bekam ich mit der Version 1.17 gleich folgende Fehlermeldung

define AutoHome YAAHM
--- snip ---
2017.11.18 11:39:49 1: PERL WARNING: Subroutine YAAHM_restore redefined at ./FHEM/95_YAAHM.pm line 897.
2017.11.18 11:39:49 1: PERL WARNING: Subroutine YAAHM_sayWeeklyTime redefined at ./FHEM/95_YAAHM.pm line 1771.
2017.11.18 11:39:50 1: [YAAHM_restore] read error=Can't open YAAHMFILE: No such file or directory
2017.11.18 11:39:50 1: [YAAHM_Define] data hash is initialized
2017.11.18 11:39:50 1: [YAAHM] does not find an Astro device, loading module Astro separately
2017.11.18 11:39:50 1: PERL WARNING: "my" variable $radius masks earlier declaration in same scope at FHEM/95_Astro.pm line 1223.
2017.11.18 11:39:50 1: PERL WARNING: "my" variable $axis masks earlier declaration in same scope at FHEM/95_Astro.pm line 1224.
2017.11.18 11:39:58 1: [YAAHM_updater] on device AutoHome called for this day
2017.11.18 11:39:58 1: [YAAHM_sun] Error, no proper sunrise today return from Astro module in 5 attempts
2017.11.18 11:39:58 1: PERL WARNING: Argument "[Astro_Get] AutoHome has improper time specification, us..." isn't numeric in sprintf at ./FHEM/95_YAAHM.pm line 2437.
2017.11.18 11:39:58 1: PERL WARNING: Argument "MM" isn't numeric in sprintf at ./FHEM/95_YAAHM.pm line 2437.
2017.11.18 11:39:58 1: PERL WARNING: Argument "[Astro_Get] AutoHome has improper time specification, us..." isn't numeric in array or hash lookup at ./FHEM/95_YAAHM.pm line 2440.
2017.11.18 11:39:58 1: [YAAHM_sun] Error, no proper sunrise tomorrow return from Astro module in 5 attempts
2017.11.18 11:39:58 1: PERL WARNING: Argument "[Astro_Get] AutoHome has improper time specification, us..." isn't numeric in sprintf at ./FHEM/95_YAAHM.pm line 2461.
2017.11.18 11:39:58 1: PERL WARNING: Argument "MM" isn't numeric in sprintf at ./FHEM/95_YAAHM.pm line 2461.
2017.11.18 11:39:58 1: PERL WARNING: Argument "[Astro_Get] AutoHome has improper time specification, us..." isn't numeric in array or hash lookup at ./FHEM/95_YAAHM.pm line 2464.
2017.11.18 11:39:58 1: PERL WARNING: Use of uninitialized value in string comparison (cmp) at ./FHEM/95_YAAHM.pm line 259.
2017.11.18 11:39:58 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/95_YAAHM.pm line 1650.
2017.11.18 11:39:58 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/95_YAAHM.pm line 1669.
2017.11.18 11:39:59 1: PERL WARNING: Use of uninitialized value $ton in pattern match (m//) at ./FHEM/95_YAAHM.pm line 1796.
Undefined subroutine &main::tolower called at ./FHEM/95_YAAHM.pm line 1812.


Zunächst beendet sich FHEM wegen der fehlenden Routine "tolower", was ich über ein Ersetzen beheben konnte:
perl -pi -e 's/tolower/lc/g' FHEM/95_YAAHM.pm

Dann scheint aber auch die Abhängigkeit zu einem Astro-Modul zu fehlen... Mein Sonnenuntergang ist momentan um 23:00 (für Berlin Mitte November!!!). Die global Koordinaten sind richtig gesetzt - ich benutze für meine Notifys schon eine Weile isday("REAL").

Bin gespannt, was diese vielversprechende Modul so alles kann...

Alex