Probleme nach Update von Calendar-Modul?

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

Vorheriges Thema - Nächstes Thema

Otto123

Zu Deiner ersten Frage. Dein notify triggert auf einen Event genau von Deinem Termin. Eigentlich kann der nicht undef sein.
Zum Serientermin
Damit Du das bildlich verstehst ist es gut das interactive mit Abfragen zu testen. Das geht in der Weboberfläche mit einem String sehr gut!

Du kannst in einem Serientermin ja trotzdem im Betreff/Inhalt ändern, Du kannst auch einen einzelnen Termin terminlich ändern. Mit Deiner Abfrage fragst Du immer den ersten Termin der Serie ab, nicht den Termin der Serie heute.
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

#31
Natürlich sollte es eigentlich so sein, dass das Notify genau auf das Event von einem Termin triggert. Leider hat das in der Vergangenheit nicht so funktioniert, wie mein Beitrag aus längst vergangenen Zeiten zeigt:

Zitat von: juelich am 01 Januar 2016, 11:55:55

ch habe es mit Hilfe aus dem Forum nun selber hinbekommen:

Das Problem liegt im Calendar-Modul selber. Laut Commandref sollte das Notify eigentlich wie beschrieben nur aktiv werden, wenn ein Termin beginnt. Dem ist aber nicht so, das Notify wird bei jedem Aktualisieren des Kalender aktiviert - mit der Folge, dass ein leeres $EVENT mitgeliefert wird (es ist ja kein aktiver Termin vorhanden) und damit $EVTPART1 nicht definiert ist.

juelich

Das Abfragen auf der Weboberfläche klappt bei mir nicht so direkt - was meinst Du mit String? Die Abfrage in Anführungszeichen setzen?
Natürlich könnte ich bei einem Serientermin auch den Betreff ändern. Das würde ich bei meiner Heizungssteuerung aber nicht tun. Höchstens mal einen Termin aussetzen, aber dann wird mein Notify ja auch nicht getriggert. Und wenn ich manuell mal die Uhrzeit eines Termins ändern sollte hat das m.E. ja auch bloß Einfluß auf das Triggern des Notifys und nicht auf die Abfrage des Betreffs oder sehe ich das aus?

Otto123

Wenn im Betreff deine Temperatur drin steht und Du heute 21 und 17 drin stehen hast, in einem Jahr auf 22 und 15 änderst, bei der Änderung sagst: alle zukünftigen Termine ändern - dann wunderst Du Dich wenn du anschließend immer noch den Inhalt von heute bekommst.

Also ich würde zwingend Wert darauf legen, exakt den Termineintrag zu lesen, der zum Trigger geführt hat!
Für die FHEM Kommandozeile
Zur Abfrage (String):
get Wohnzimmer events format:custom="$S" limit:count=1 sollte Dir doch was zurück geben?

get Wohnzimmer events format:full limit:count=1
get Wohnzimmer events format:full limit:count=1,from=0 gibt dir nur einen Eintrag von heute.
get Wohnzimmer events format:full limit:count=1,from=+1d gibt dir was von morgen.

Du kannst auch in der Weboberfläche im Kalenderdevice bis events alles auswählen und im Feld dahinter
nur den Rest reinkopieren (ein String) :)
format:full

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

Vielen Dank für die viele Mühe.
Ich hatte schon überalle "from=0" ergänzt. Sicher ist sicher, Du hast recht, auch wenn ich es für unwahrscheinlich finden würde, die Termine in der von Dir beschriebenen Form zukünftig zu ändern.
Aber es wird. Das schöne an FHEM ist: Es gibt immer wieder was zu tun  :D :D :D
Dir noch einen schönen Sonntag

juelich

So super,

jetzt hatte ich Gelegenheit, alle meine Notifys mit der neuen Nomenklatur zu test - und es funktioniert super, auch mit Wiederholungsterminen. Das spart viel Arbeit.

Vielen Dank und viele Grüße

Markus

juelich

Leider zu früh gefreut,

seit Dienstag dieser Woche funktioniert das Ausschalten der Heizung im Kinderzimmer nicht mehr. Und das, ohne, dass ich irgendetwas geändert hätte.
Jetzt ist für mich wieder guter Rat teuer:
Um 20 Uhr sollte die Heizung ausgeschaltet werden, dass Notify hat offensichtlich auch getriggert, aber nichts geschaltet:

2019.04.07 20:00:01 4: Kinder_aus exec {
my $reading="$EVTPART0";;
my $uid= "$EVTPART1";;
my $dtemp;;
my $termin= fhem('get Kinder events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1,from=0');;
if (defined($termin)) {
my (undef,$dtemp)= split(/ /,$termin);;
fhem("set hz.kinder desired-temp $dtemp");;
Log 1, "Temperatur Kinderzimmer $dtemp";;}
}


Ich gehe also davon aus, dass die if-Abfrage nicht korrekt abgearbeitet wurde. Ihr habe hier geschrieben, dass die Abfrage, ob der Termin "defined" ist, überflüssig ist (früher war das unbedingt notwendig!).
Also habe ich versucht, dass wegzulassen:

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


Das führt jetzt aber zu folgender Fehlermeldung:

2019.04.07 20:44:01 1: PERL WARNING: "my" variable $dtemp masks earlier declaration in same scope at (eval 14789) line 7.
2019.04.07 20:44:01 1: PERL WARNING: Use of uninitialized value $termin in split at (eval 14789) line 7.
2019.04.07 20:44:01 1: PERL WARNING: Use of uninitialized value $dtemp in concatenation (.) or string at (eval 14789) line 8.
2019.04.07 20:44:01 1: PERL WARNING: Use of uninitialized value $dtemp in concatenation (.) or string at (eval 14789) line 9.
2019.04.07 20:44:01 1: Temperatur Kinderzimmer


Ich verstehe nicht, was plötzlich anders sein könnte, bis Dienstag hat alles problemlos mit meinem Urspungscode funktioniert, im WOhnzimmer ohne Wiederholungstermine tut es das auch heute noch. Bloß die Kinderzimmer schalten nicht mehr aus.

Viele Grüße

Markus

Dr. Boris Neubert

Bitte logge mal $termin mit, damit man sieht, was ankommt.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

juelich

Ich konnte den Fehler noch weiter eingrenzen:

Noch einmal mein Code:

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,from=0');
Log 1, "Kalender $termin";
my (undef,$dtemp)= split(/ /,$termin);
fhem("set hz.kinder desired-temp $dtemp");
Log 1, "Temperatur Kinderzimmer $dtemp";
}


führt zu folgendem Log:

2019.04.07 21:02:01 4: Kinder_aus exec {
my $reading="$EVTPART0";;
my $uid= "$EVTPART1";;
my $dtemp;;
my $termin= fhem('get Kinder events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1,from=0');;
Log 1, "Kalender $termin";;
my (undef,$dtemp)= split(/ /,$termin);;
fhem("set hz.kinder desired-temp $dtemp");;
Log 1, "Temperatur Kinderzimmer $dtemp";;
}
2019.04.07 21:02:01 1: PERL WARNING: "my" variable $dtemp masks earlier declaration in same scope at (eval 15067) line 7.
2019.04.07 21:02:01 1: PERL WARNING: Use of uninitialized value $termin in concatenation (.) or string at (eval 15067) line 6.
2019.04.07 21:02:01 1: Kalender
2019.04.07 21:02:01 1: PERL WARNING: Use of uninitialized value $termin in split at (eval 15067) line 7.
2019.04.07 21:02:01 1: PERL WARNING: Use of uninitialized value $dtemp in concatenation (.) or string at (eval 15067) line 8.
2019.04.07 21:02:01 1: PERL WARNING: Use of uninitialized value $dtemp in concatenation (.) or string at (eval 15067) line 9.
2019.04.07 21:02:01 1: Temperatur Kinderzimmer


Es ist also offensichtlich, dass der Get ... events -Befehl (der derselbe ist wie beim Terminstart) hier ein leeres Ergebnis bringt und nicht mehr den Betreff des Termins. Warum weiß ich nicht

juelich

Zeitlich sieht man alles schön im Log:

2019.04.02 04:30:01 1: Temperatur Kinderzimmer 22
2019.04.02 06:00:01 1: Temperatur Kinderzimmer 18
2019.04.02 12:30:01 1: Temperatur Kinderzimmer 21
2019.04.02 14:00:02 1: Temperatur Wohnzimmer 21
2019.04.02 16:55:07 1: fenster.wz: Batteriewarnung battery: low
2019.04.02 17:00:00 3: Abendbrot: Temperatur Wintergarten ist 22 Grad
2019.04.02 18:55:22 1: HMLAN_Parse: HMLAN new condition Warning-HighLoad
2019.04.02 18:57:32 1: HMLAN_Parse: HMLAN new condition ok
2019.04.02 19:00:01 1: Temperatur Kinderzimmer off
2019.04.02 19:00:03 1: HMLAN_Parse: HMLAN new condition Warning-HighLoad
2019.04.02 19:01:21 1: HMLAN_Parse: HMLAN new condition ok
2019.04.02 19:04:06 1: HMLAN_Parse: HMLAN new condition Warning-HighLoad
2019.04.02 19:10:24 1: HMLAN_Parse: HMLAN new condition ok
2019.04.02 22:00:02 1: Temperatur Wohnzimmer 18
2019.04.03 04:30:01 1: Temperatur Kinderzimmer 22
2019.04.03 08:10:02 1: Temperatur Wohnzimmer 21


Am 04.02. um 19:00 Uhr tauchte zum ersten Mal ein "off" statt der Temperatur 18 Grad auf. Der gehörte da schon nicht hin.
Danach wurde die Kinderzimmertemperatur zwar erhöht, aber nicht mehr abgesenkt - ab dem 03.04. Uhr 6:00 wurde das Kinderzimmer nicht einmal ausgeschaltet. WIe man im Log sieht ist aber dazwischen nichts meinerseits verändert worden. Nun bin ich etwas ratlos

Dr. Boris Neubert

Würde auf der FHEM-Kommandozeile weiter debuggen, indem Du Dir den Output von

get Kinder events format:custom="$S" filter:uid=="'.UID.'" limit:count=1,from=0

anguckst, wobei Du UID durch die UID des Events ersetzt. Was machen die beiden Punkte eigentlich da?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

juelich

Zitat von: Otto123 am 10 März 2019, 16:00:37
Da werden doch aber die Variablen wie $uid nicht aufgelöst.
Ich mach es  mit concatenation
my $actor = fhem('get '.$NAME.' events format:custom="$S" filter:uid=="'.$EVTPART1.'" limit:count=1')


Da kommen die Punkte her...

Ohne die Punkte habe ich das nicht hinbekommen

Dr. Boris Neubert

Du wolltest vielleicht den Match-Operator statt des Gleich-Operators verwenden (siehe Commandref)?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Otto123

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.

Es ist besser ein list des Gerätes zu posten, dass ist für alle eindeutiger.

Dieses my Variable in der nächsten Zeile wieder mit my Variable zu wiederholen für zur ersten Warnung.

Die Punkte sind String concatenation .

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

Otto123

#44
Zitat von: Dr. Boris Neubert am 07 April 2019, 21:28:15
Du wolltest vielleicht den Match-Operator statt des Gleich-Operators verwenden (siehe Commandref)?
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
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