Probleme nach Update von Calendar-Modul?

Begonnen von juelich, 09 März 2019, 17:02:58

Vorheriges Thema - Nächstes Thema

juelich

Zitat von: Otto123 am 07 April 2019, 21:29:07
Hallo Markus,

genaugenommen keine Fehler sondern Warnungen, aber irgendwas ist an deinem Code Mist.
Ich verstehe nicht, was Du da gepostet hast? Ist das die DEF?

Es ist offensichtlich, dass er diese Zeile 7
my (undef,$dtemp)= split(/ /,$termin);
nicht ausführt gar nicht ausführt.


Er führt das deshalb nicht aus, weil $termin offensichtlich leer ist. Es wird einfach nichts zurück geliefert.
Ich verwende obigen Code schon seit vielen Jahren. Die Betreffs meine Termine haben die Form "Anfangstemperatur Endtemperatur". Mit dem Split wird zum Terminende die Endtemperatur eingestellt.
Aber wie gesagt - der Get-Befehl scheint nichts zu liefern, obwohl derselbe Get-Befehl zu Terminbeginn den Betreff zurückliefert.

Von welchem Gerät soll ich denn ein List liefern - es ist doch ein Notify?

juelich

Zitat von: Otto123 am 07 April 2019, 21:31:01
Was meinst Du damit?

So steht es doch in der commandref, Zitat:
my $actor= fhem('get MyCalendar filter:uid=="'.$uid.'" format:custom="$S"');; \


Gruß Otto

Und es hat ja offensichtlich auch bis zum 02.04. funktioniert (siehe mein Log). Ich habe nichts seitdem geändert!

Otto123

Zitat von: juelich am 07 April 2019, 21:33:34
Von welchem Gerät soll ich denn ein List liefern - es ist doch ein Notify?
Naja das notify ist auch im Sinne FHEM ein "Gerät", Device, Define wie auch immer.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juelich

Internals:
   DEF        Kinder:end:.* {
my $reading="$EVTPART0";
my $uid= "$EVTPART1";
my $dtemp;
my $termin= fhem('get Kinder events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');
Log 1, "Kalender $termin";
my (undef,$dtemp)= split(/ /,$termin);
fhem("set hz.kinder desired-temp $dtemp");
Log 1, "Temperatur Kinderzimmer $dtemp";
}
   FUUID      5c8527a8-f33f-82e1-53a7-882a4814dfb7bf85
   NAME       Kinder_aus
   NOTIFYDEV  Kinder
   NR         245
   NTFY_ORDER 50-Kinder_aus
   REGEXP     Kinder:end:.*
   STATE      2019-04-07 21:30:00
   TRIGGERTIME 1554665401.27008
   TYPE       notify
   READINGS:
     2019-04-07 21:28:06   state           active
Attributes:
   room       Notify
   verbose    5


besser?

Otto123

viel besser :)

Bist Du sicher, das Du nicht weiter Termine drin stehen hast?
Ich meine: Du triggerst nur auf end:.* und Du machst keinerlei weitere Prüfung.
Hast Du mal %uid mit geloggt? und dann mal explizit in der commandline diese $uid abgefragt?
Oder hast Du mal alle Termine des Tages abgefragt?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juelich

Ich hatte mich ja bei Dir bedient, OttO:

Zitat von: Otto123 am 10 März 2019, 13:11:44
Du musst die get Abfrage ändern. Das musst Du nicht immer im notify testen, das kannst Du in der Oberfläche machen!
get Wohnzimmer summary $uid liefert Dir eben bei einem Serientermin viel zu viel, Du musst das einschränken auf den einen Termin.
z.B. limit:count=1
oder Zeit
limit:count=1,from=0,to=12h

Oder so etwas in der Art :)

Und daher sah meine Terminabfrage bis eben so aus:

my $termin= fhem('get Kinder events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1,from=0')

Jetzt habe ich vor 5 MInuten das "from=0" weggelassen - und plötzlich funktioniert es wieder!

2019.04.07 21:41:01 1: PERL WARNING: "my" variable $dtemp masks earlier declaration in same scope at (eval 15284) line 7.
2019.04.07 21:41:01 1: Kalender 16 18
2019.04.07 21:41:01 1: Temperatur Kinderzimmer 18


Wenn es so bleiben würde wäre ja alles gut. Aber warum hat es bitteschön mit meinem alten Code bis Anfang der Woche funktioniert und jetzt nicht mehr? Ich habe nichts geändert, die Termine sind Wiederholungstermine, also auch nicht verändert und ein Update oder Neustart habe ich bis dahin auch nicht gemacht.
Zauberei?

Viele Grüße

Markus

Otto123

#51
Markus, Du verstehst es nicht. Nichts ist gut. Du fragst jetzt wahrscheinlich alte Termine ab.

Frag doch einfach mal in der Oberfläche alles ab. get Kinder events wählst Du aus und dahinter kommt noch format:full

Und dann ein zweite Abfrage  und Du ergänzt noch limit:from=0

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juelich

Hallo Otto,

das ist ja blöd. Aber ich muss jetzt leider ins Bett. Morgen 24-Stunden Dienst. Ich werde mich Dienstag Ran setzen.
Aber hast Du eine Erklärung dafür, was am 02.04. passiert sein könnte? Auch dieses "Off" muss ja irgendwo hergekommen sein. Danach ging nichts mehr.
Ich habe das Notify ja mit Deiner Hilfe gut hinbekommen.
Alles funktioniert, zum Beispiel auch im Wohnzimmer.
Nicht verändert. Und plötzlich nur noch Mist...

juelich

Ach und noch etwas - die Abfrage lieferte definitiv keine alten Termine:
Ich hatte ja extra etwas ausgefallenes als Betreff gewählt, was ich nie nehmen würde.
Und das wurde auch zurück geliefert...

Otto123

#54
Gut, aber ohne den Inhalt der Abfragen hab ich keine Idee.
Du verwendest doch aber Serientermine?

Mir fällt allerdings ein: Beim Event am Terminende könnte die Abfrage mit from=0 vielleicht wirklich ein Problem sein. Immerhin ist der Termin in dem Moment zu Ende.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juelich

Ja, für die Kinderzimmer nehme ich Serientermine, für das Wohnzimmer nicht. Aber Du hast recht - mein Testtermin eben war keiner. Also könnte es bei einem Serientermin anders sein...
Aber offensichtlich hat das Weglassen von "from=0" dazu geführt, dass überhaupt mal wieder etwas zurück geliefert wurde.
Das gibt mir zu denken.

Otto123

#56
Zitat von: juelich am 07 April 2019, 22:37:47
Ja, für die Kinderzimmer nehme ich Serientermine, für das Wohnzimmer nicht. Aber Du hast recht - mein Testtermin eben war keiner. Also könnte es bei einem Serientermin anders sein...
Aber offensichtlich hat das Weglassen von "from=0" dazu geführt, dass überhaupt mal wieder etwas zurück geliefert wurde.
Das gibt mir zu denken.
Du sollst doch die Abfrage nicht mit irgendwelchen Faketerminen machen? Warum fragst Du nicht die normalen ab?

Mein Abfragevorschlag war doch nicht für bestimmte Termine sondern für alle? Wie kommt dann Deine Aussage zustande?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juelich

Welche Aussage meinst Du?
Ich verstehe immer noch nicht, wie unveränderter Code und unveränderte Termine zu so einer plötzlichen Fehlfunktion führen...


Aber ich muss jetzt wirklich ins Bett.
Ich mache Dienstag weiter.

Bis dahin vielen Dank und gute Nacht

Otto123

Zitat von: juelich am 07 April 2019, 22:55:41
Welche Aussage meinst Du?
Diese:
Zitat von: juelich am 07 April 2019, 22:25:20
Ach und noch etwas - die Abfrage lieferte definitiv keine alten Termine:
Zitat von: juelich am 07 April 2019, 22:37:47
Aber Du hast recht - mein Testtermin eben war keiner. Also könnte es bei einem Serientermin anders sein...
Deine Antworten sagen mir eigentlich Du hast nicht das gemacht um was ich gebeten hatte. Also poste bitte beim nächsten mal, was Du gemacht hast und die Ergebnisse.

Zitat von: juelich am 07 April 2019, 22:55:41
Ich verstehe immer noch nicht, wie unveränderter Code und unveränderte Termine zu so einer plötzlichen
Ganz einfach, weil manchmal etwas funktioniert obwohl man einen Fehler / eine Unzulänglichkeit eingebaut hat.  ;)
Und weil man keinen Anspruch darauf hat, dass etwas immer funktioniert obwohl ein Fehler enthalten ist. ;D

Gute Nacht
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juelich

Zitat von: Otto123 am 07 April 2019, 23:27:00
Ganz einfach, weil manchmal etwas funktioniert obwohl man einen Fehler / eine Unzulänglichkeit eingebaut hat.  ;)
Und weil man keinen Anspruch darauf hat, dass etwas immer funktioniert obwohl ein Fehler enthalten ist. ;D

Ganz so sehe ich das nicht, Otto. Eigentlich sollte ein Programm bei unveränderte Umgebung doch bei jedem Lauf dieselben Ergebnisse bringen - egal, ob diese nun richtig oder falsch sind  ;)

Ich habe jetzt mal die gewünschten Abfragen gemacht. Ich habe dazu einen Testermin angelegt, der als Serientermin den Betreff "13 11" hat. Speziell für heute habe ich ihn geändert auf "15 16", damit man differenzieren kann welche Werte ausgelesen werden:

get Kinder events format:full

0ahea04o1lki07l58lonidaeapgooglecom       end  09.04.2019 10:14-09.04.2019 10:15 15 16 
0ahea04o1lki07l58lonidaeapgooglecom  upcoming  16.04.2019 10:09-16.04.2019 10:10 13 11


jetzt das Ganze nochmal mit limit:from=0:

0ahea04o1lki07l58lonidaeapgooglecom  upcoming  16.04.2019 10:09-16.04.2019 10:10 13 11 
0ahea04o1lki07l58lonidaeapgooglecom  upcoming  23.04.2019 10:09-23.04.2019 10:10 13 11


Erwartungsgemäß werden hier nur die zukünftigen Events angezeigt.

Interessant ist aber, was in dem Moment passiert, wenn der Termin endet, also das Notify Terminende getriggert wird. Ich habe dazu ein Testnotify geschrieben, was ein paar Daten mitloggt:

Internals:
   CFGFN     
   DEF        Kinder:end:.* {
my $uid= "$EVTPART1";
Log 1, "UID $uid";
my $termin= fhem('get Kinder events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');
my $termin1= fhem('get Kinder events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1,from=0');
Log 1, "Kalender $termin";
Log 1, "Kalender aktuell $termin1";
my (undef,$dtemp)= split(/ /,$termin);
fhem("set hz.kinder desired-temp $dtemp");
Log 1, "Temperatur Kinderzimmer $dtemp";
}


Und jetzt das Log dazu:

2019.04.09 10:15:02 1: UID 0ahea04o1lki07l58lonidaeapgooglecom
2019.04.09 10:15:02 1: Kalender 15 16
2019.04.09 10:15:02 1: Kalender aktuell 13 11
2019.04.09 10:15:02 1: Temperatur Kinderzimmer 16


Und da sieht man meines Erachtens schon das Problem:

In dem Moment, wo der Termin gerade beendet wird, also das Notify triggert, wird, wenn man from=0 verwendet nicht der gerade beendete Termin ausgelesen, sondern bereits der Nächste!

Also habe ich weiter experimentiert:

Der Serientermin (begonnen letzten Dienstag mit dem Betreff "13 11" wurde für heute geändert auf "a b" und für nachsten Dienstag auf "c d".

Das Notify geändert auf from=-10s. Und jetzt kommt das Log

2019.04.09 10:41:02 1: UID 0ahea04o1lki07l58lonidaeapgooglecom
2019.04.09 10:41:02 1: Kalender a b
2019.04.09 10:41:02 1: Kalender aktuell a b


Es scheint also zu funktionieren, es wird tatsächlich der Betreff des gerade beendeten Termins angezeigt. Aber noch ein zweiter Punkt ist erstaunlich:

Läßt man den Parameter "from" weg wird auch der richtige Betreff angezeigt - das steht im Widerspruch zu Deinen Aussagen über das angebliche AUslesen veralteter Daten!

Hast Du dazu eine Erklärung?

Viele Grüße

Markus