Modulfamilie für Bewohner / 10_RESIDENTS 20_ROOMMATE 20_GUEST

Begonnen von Loredo, 19 Januar 2014, 23:12:34

Vorheriges Thema - Nächstes Thema

justme1968

der ärgert sich glaube ich das er vielleicht nicht genug gedacht hat und es nicht mehr ändern kann ohne das es kompatibilitätsprobleme gibt :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Urga

Ok. Das ist mir für heute Abend zu kompliziert. ;)

Das obige Beispiel funktioniert bei mir leider auch nicht. Vielleicht mach ich mich da noch mal dran wenn ich etwas Ruhe habe. Mein Code macht ja das, was er soll.

Trotzdem danke.

Loredo


Zitat von: justme1968 am 04 März 2014, 22:00:50
der ärgert sich glaube ich das er vielleicht nicht genug gedacht hat und es nicht mehr ändern kann ohne das es kompatibilitätsprobleme gibt :)

Das ist die typische MS Denke, die wir Mac Jünger so gar nicht verstehen ^^
Altlasten gehören raus, auf Teufel komm raus. Scheiß auf die Abwärtskompatibilität ^^
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zephyr

Puuuuhh, ich fühle mich so langsam wie die Nervensäge vom Dienst...
Ich habe hier 'ne Konfiguration, die reproduzierbar zu einem Absturz von FHEM führt.

Zuerst einmal meine Config:

# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
define rgrBewohner RESIDENTS
attr rgrBewohner alias Residents
attr rgrBewohner devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home
attr rgrBewohner group Home State
attr rgrBewohner icon control_building_filled
attr rgrBewohner room Residents
attr rgrBewohner webCmd state
define rr_Karsten ROOMMATE rgrBewohner
attr rr_Karsten alias Karsten
attr rr_Karsten devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown
attr rr_Karsten group Karsten
attr rr_Karsten icon people_sensor
attr rr_Karsten room Residents
attr rr_Karsten rr_showAllStates 1
attr rr_Karsten sortby 0
attr rr_Karsten webCmd state:mood
define rg_Dominik GUEST rgrBewohner
attr rg_Dominik alias Dominik
attr rg_Dominik devStateIcon .*home:user_available:absent .*absent:user_away:home .*none:control_building_empty:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown
attr rg_Dominik group Guests
attr rg_Dominik icon scene_visit_guests
attr rg_Dominik rg_realname alias
attr rg_Dominik rg_showAllStates 1
attr rg_Dominik room Residents
attr rg_Dominik sortby 1
attr rg_Dominik webCmd state:mood
define logLastDurSleep FileLog ./log/logLastDurSleep.log rr_.*:lastDurSleep:.*
define notiKarstenLastDurSleep notify rr_Karsten:lastDurSleep.* {Log 1, $NAME.":".$EVENT}


Mir ist klar, dass es eigentlich so gedacht ist, dass die Guests in eine eigene RESIDENTSGROUP gehören. Mir kam es aber darauf an, dass ich Licht und Heizung in Abhängigkeit des Status der gesamten Wohnung -in diesem Fall der rgrBewohner- schalten kann. Und wenn alle Gäste und so im Bett sind, geht die Wohnung in einen bestimmten Status über.

Der Fehler tritt immer dann auf, wenn ich beim GUEST Dominik den Status auf "asleep" umstelle.

Im Terminal des Linuxservers erhalte ich dann folgende Fehlermeldung:

Month '-1' out of range 0..11 at ./FHEM/20_GUEST.pm line 839

Und zwar zum einen auf meinem Produktivsystem und zum anderen auf meiner Debian Testinstallation.

Hab ich was kaputt gemacht? ^^
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Loredo

Zitat von: Zephyr am 05 März 2014, 21:17:31
Mir ist klar, dass es eigentlich so gedacht ist, dass die Guests in eine eigene RESIDENTSGROUP gehören.


Keineswegs, wie kommst du denn darauf?


Zitat von: Zephyr am 05 März 2014, 21:17:31Der Fehler tritt immer dann auf, wenn ich beim GUEST Dominik den Status auf "asleep" umstelle.Im Terminal des Linuxservers erhalte ich dann folgende Fehlermeldung:Month '-1' out of range 0..11 at ./FHEM/20_GUEST.pm line 839


Ich kann den Fehler bei mir nicht reproduzieren. Sicher, dass du die aktuelle Version aus dem SVN verwendest?
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zephyr

Hmmmmm... Auf dem Debian Testrechner sollte sie aktuell sein.
1.0.2 steht in dem Perldateien der Module.
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Loredo

Zitat von: Zephyr am 06 März 2014, 21:38:44
Hmmmmm... Auf dem Debian Testrechner sollte sie aktuell sein.
1.0.2 steht in dem Perldateien der Module.


Ich kann nur vermuten, dass es mit deiner Perl Version zu tun hat.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zephyr

An Zeile 839 findet sich folgende. Prozedur:

sub GUEST_Datetime2Timestamp($) {                                                                                                                                                                       
    my ($datetime) = @_;                                                                                                                                                                               
                                                                                                                                                                                                       
    my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp );                                                                                                                                     
                                                                                                                                                                                                       
    ( $date, $time ) = split( ' ', $datetime );                                                                                                                                                         
    ( $y,    $m,   $d )   = split( '-', $date );                                                                                                                                                       
    ( $hour, $min, $sec ) = split( ':', $time );                                                                                                                                                       
    $m -= 01;                                                                                                                                                                                           
    $timestamp = timelocal( $sec, $min, $hour, $d, $m, $y );                                                                                                                                           
                                                                                                                                                                                                       
    return $timestamp;                                                                                                                                                                                 
}


Ich habe mit ein paar Zeilen Perl mal nachgestellt, was passiert:

my ($datetime) = @_;
my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp );
( $date, $time ) = split( ' ', $datetime );
( $y,    $m,   $d )   = split( '-', $date );
print "Datum: ".$date."\n";
print "Vorher: ".$m."\n";
$m -= 01;
print "nachher: ".$m."\n";


Als Ergebnis bekomme ich folgendes:

Datum:
Vorher:
nachher: -1


Sieht mir verdächtig nach dem "Month '-1'" aus der Fehlermeldung aus. Kann es sein, dass die Variable $date nicht gesetzt worden ist?

Meine Perlversion ist 5.14.2 auf dem Debian.


P.S. Die Rechtschreibkorrektur von OS X macht aus "Perlversion" konsequent "Perversion". :D
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Loredo

Zitat von: Zephyr am 07 März 2014, 23:24:32
Ich habe mit ein paar Zeilen Perl mal nachgestellt, was passiert:

my ($datetime) = @_;
my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp );
( $date, $time ) = split( ' ', $datetime );
( $y,    $m,   $d )   = split( '-', $date );
print "Datum: ".$date."\n";
print "Vorher: ".$m."\n";
$m -= 01;
print "nachher: ".$m."\n";


Als Ergebnis bekomme ich folgendes:

Datum:
Vorher:
nachher: -1

Dein Test ist fehlerhaft.

Mach es so und du stellst wirklich nach, was passiert:

my ($datetime) = "2014-03-07 23:31:23";
my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp );
( $date, $time ) = split( ' ', $datetime );
( $y,    $m,   $d )   = split( '-', $date );
print "Datum: ".$date."\n";
print "Vorher: ".$m."\n";
$m -= 01;
print "nachher: ".$m."\n";
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zephyr

Ah, ich verstehe. :)

Jetzt wo $datetime einen Wert erhalten hat, funktioniert's natürlich. An der Funktion an sich scheint alles gut zu sein.
Heißt das nicht im Umkehrschluss, dass $datetime innerhalb der Funktion keinen Wert hat, wenn als Monat "-1" herauskommt? Da muss doch irgendwo das Problem liegen, oder?

Versteh mich nicht falsch, ich möchte hier nicht klugscheißen oder so.
Ich habe von Programmieren im Allgemeinen nur noch Informatikunterrichtskenntnisse und versuche so gut wie es geht mein Problem einzukreisen.

Woher bekommt denn $datetime seinen Wert, wenn der Status eines Gastes von "home" auf "asleep" wechselt?
Vielleicht  finde ich dort ja das Problem.

Verzeih, wenn ich so nervig bin. :-/
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Loredo

Zitat von: Zephyr am 08 März 2014, 00:21:45
Woher bekommt denn $datetime seinen Wert, wenn der Status eines Gastes von "home" auf "asleep" wechselt?
Vielleicht  finde ich dort ja das Problem.


Zeile 778-790 wird der Sleeptimer gesetzt.


Ich bin mir eigentlich ganz sicher, dass kein Fehler im Code ist. Vielleicht ist deine Datei nur irgendwie korrupt. Lade sie doch mal neu von hier:
http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/20_GUEST.pm?format=raw
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zephyr

Hallo,

ich habe die Datei nochmal runtergeladen. Leider besteht das Problem nach wie vor.

Ich schätze, dass die Zeilen, in denen der Sleeptimer gesetzt wird nicht ausschlaggebend sind.
Nach wie vor gehe ich davon aus, dass die Variable $datetime in der Funktion Datetime2Timestamp keinen Wert erhält und daher die gesamte Funktion als Monatsangabe "-1" ausspuckt.
In den Zeilen 778-790 keinen Wert.
Die Variable $datetime erhält nur ein einziges Mal im gesamten Script einen Wert zugewiesen.
Und zwar so:
my $datetime = TimeNow();

Ich habe versucht diese Funktion in einer Testdatei zu benutzen. Aber Perl bricht mit der Fehlermeldung ab, dass es die Subroutine nicht kennt:
Undefined subroutine &main::TimeNow called at

Vermutlich wird TimeNow an einer ganz anderen Stelle in FHEM definiert und daher funktioniert es in einem Testscript nicht.

Na ich suche mal weiter...

Viele Grüße
Zephyr
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Zephyr

Man möge mich bitte steinigen.
Aus welchem Grund auch immer funktioniert es inzwischen auf der Debiantestinstallation. Nach noch zweimaligem Herunterladen der 20_GUEST.pm, einfügen von Logzeilen in der Hoffnung, zu erfahren was genau im Script passiert, versauen der 20_GUEST.pm und so weiter und so fort... funktioniert es einfach.  ???

Entschuldige den Aufwand.

#edit vom 09.03.2014, 14:06

Nein, zu früh gefreut. Auch die Debiantestinstallation hat immernoch die gleichen Probleme. :(

In VirtualBox erhalte ich stattdessen beim Login die Absturzmeldung von unten:
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Loredo

Zitat von: Zephyr am 09 März 2014, 11:50:19
Nein, zu früh gefreut. Auch die Debiantestinstallation hat immernoch die gleichen Probleme. :(


Auch wenn das von dir beschriebene Verhalten bei mir absolut nicht reproduzierbar ist, so habe ich nach langem Suchen doch noch was entdeckt. Ich lade es gleich als Update ins SVN.


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zephyr

Ist es der fehlende Start des sleep timers bei den Guests? :D
Bei Roommate die Zeilen 400 - 416 und bei Guest fehlt der Teil ab Zeile 405? ;)

Das habe ich nämlich gerade in diesen Minuten bei mir hinzugefügt. Und im Moment funktioniert es erst mal. Aber mal abwarten.

FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433