Probleme nach Update von Calendar-Modul?

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

Vorheriges Thema - Nächstes Thema

juelich

#15
Ja, so sieht es aus, aber wo kommt das her? Ich habe meinen Testtermin nicht verändert, er besteht aus einer Zeile mit durch Space getrennten Temperaturen. Ich hatte lediglich zum Testen einen Wiederholungstermin daraus gemacht. Da scheint aber zu bewirken, dass der Termin-Betreff falsch ausgelesen wird...

Es scheint bit dem von Otto beschriebenen Verhalten zusammen zu hängen:

Ich habe mir den ausgelesenen Termin mal loggen lassen - er besteht aus etlichen Wiederholungen von "18 21", jeweils in einer neuen Zeile. Dann ist auch klar, dass die Splitfunktion Ärger macht.
Leider reichen meine Perl-Kenntnisse nicht so weit, vielleicht hat ja einer eine Idee, wie ich aus diesem langen Text die Zahl nach dem ersten Space bis zum Zeilenende herausfiltern kann? Das würde für mein  Problem ja schon reichen und ich müßte nicht alles umprogrammieren...

Vielen Dank für die tolle Hilfe

Markus

2019.03.10 12:56:02 1: 18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21
18 21


Zitat von: Dr. Boris Neubert am 10 März 2019, 12:43:36
Du hast die Temperaturen in zwei Zeilen und Dein split() greift darauf nicht. Du musst an Whitespace splitten oder /[\s\n]/.

/\s/


Otto123

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 get <name> summary taucht in der commandref nicht mehr auf und man bekommt das hier im Log:
2019.03.10 13:10:50 2: get AbfallKalender summary is deprecated and will be removed soon. Use get AbfallKalender events instead.

Das ist doch eindeutig oder kommt das bei Dir nicht?

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

Nein,

in der Tat kam diese Meldung bei mir noch nie. Ich hatte ja heute ein Log vom Notify machen lassen, da kam nichts dergleichen:

2019.03.10 12:32:02 4: Wohnzimmer_aus exec {
my $reading="$EVTPART0";;
my $uid= "$EVTPART1";;
my $dtemp;;
my $termin= fhem("get Wohnzimmer summary $uid");;
if (defined($termin)) {
my (undef,$dtemp)= split(/ /,fhem("get Wohnzimmer summary $uid"));;
fhem("set hz.wohnzimmer desired-temp $dtemp");;
Log 1, "Temperatur Wohnzimmer $dtemp";;}
}
2019.03.10 12:32:02 1: PERL WARNING: Argument "21\n23" isn't numeric in multiplication (*) at ./FHEM/10_CUL_HM.pm line 5468.


Gucke Dir bitte das Beispiel mit den Actoren aus der Commandref an, da steht die Syntax mit Get <name< summary genau wie auch von mir verwendet. Auch weiter oben in der commandref steht doch ausdrücklich get <name< summary - sogar ausführlich mit Beispielen.  Hingegen finde ich das Get <name> events nicht, obwohl es natrülich funktioniert...

Viele Grüße

Markus

Dr. Boris Neubert

Zitat von: juelich am 10 März 2019, 14:51:41
Gucke Dir bitte das Beispiel mit den Actoren aus der Commandref an, da steht die Syntax mit Get <name< summary genau wie auch von mir verwendet. Auch weiter oben in der commandref steht doch ausdrücklich get <name< summary - sogar ausführlich mit Beispielen.  Hingegen finde ich das Get <name> events nicht, obwohl es natrülich funktioniert...

Dann ist bei Dir etwas faul und Du hast nicht die aktuelle Commandref. Lass mal ein volles Update über Dein FHEM laufen, damit auch die Commandref aktualisiert wird.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

juelich

In der englischen Commandref steht es tatsächlich so drin - aber nicht in der deutschen.
Ein Update habe ich gestern erst gemacht, auch ein shutdown restart.
Dann werde ich meine Notifys mal auf die neue Nomenklatur umbasteln...
Viele Grüße

Markus

Otto123

Aber wenn im FHEM Log die Meldung nicht kommt?  :o
Wirft Dir version wirklich die Aktuelle aus?
57_Calendar.pm        18535 2019-02-08 20:59:50Z betateilchen
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

#21
Ich habe jetzt versucht zu basteln, allerdings scheinbar nicht korrekt:

Um auf die Summary des aktuellen Termins zuzugreifen verwende ich:

my $termin= fhem("get Wohnzimmer events format:custom='$S' filter:uid==$uid limit:count=1")

Was zu einem Global symbol "$S" requires explicit package name führt.

Wie kriege ich das maskiert?

ALs Version habe ich offensichtlich doch noch die Januar-Version 57_Calendar.pm 18138 2019-01-05 07:59:07Z neubert

Dr. Boris Neubert

 Tip: use single quotes as outer quotes.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

juelich

"Single quotes (') can be used instead of double quotes (") in the custom format."

So steht es in der Referenz. Aber was heißt denn nun "Tip: use single quotes as outer quotes."? Es tut mir leid, ich bin Amateur und kein Profi...

Dr. Boris Neubert

geht

my $termin= fhem('get Wohnzimmer events format:custom="$S" filter:uid==$uid limit:count=1')

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

Otto123

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')
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

Fast  ;)

Das mit $uid geht so auch nicht.

Wohnzimmer:start:.* {
my $reading="$EVTPART0";
my $uid= "$EVTPART1";
my $dtemp;
my $termin= fhem('get Wohnzimmer events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');
Log 1,$termin;
if (defined($termin)) {
my ($dtemp,undef)= split(/ /,fhem('get Wohnzimmer events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1'));
fhem("set hz.wohnzimmer desired-temp $dtemp");
Log 1, "Temperatur Wohnzimmer $dtemp";}
;;}


Das klappt zumindest jetzt bei mir. Schwierige Geburt.
Jetzt werde ich mal die Notifys fürs Kinderzimmer umstricken und die Termine für die Kiddys in Serientermine umwandeln.
Und dann bin ich mal gespannt, was passiert  :D :D :D

Vielen Dank für die Hilfe hier und Euch noch einen schönen Sonntag

Viele Grüße

Markus

juelich

Jetzt hat sich das überschnitten, hatte meine Antwort nicht abgeschickt,

deckte sich ja mit der von Otto.

Ich habe jetzt alle meine Kindertermine umgemodelt auf Serientermine und bin mal sehr gespannt, ob das jetzt klappt. Wäre ja super.

Ich habe noch inen dritten Kalender im ANgebot. Mit dem kann ich FHEM beliebige Befehle erteilen, die dann zum Terminzeitpunkt ausgeführt werden.
Das sollte klappen. Es gibt allerdings einige Sondertermine:

Zum Beispiel "Urlaub". Hier wird dann der Terminstart und das Terminende ausgelesen. Nach einer gewissen Zeit die Alarmanlage aktiviert und vor allem die Thermostate, auf denen ein regelmäßiges Programm läuft in den Partymodus gesetzt.

Hierzu müßte ich den Starttermin des Termins auslesen - sehe ich das richtig, dass ich über timeFormat glich steuern kann, dass ich z.B. nur die Uhrzeit oder den Tag bekomme?
Das wäre natürlich super, auch wenn es wederheiß, alles umzustricken.

Aber FHEM ist ja nun mal eine Bastellösng...

Viele Grüße

Markus

Otto123

#28
Du hast noch das mit dem Filter noch nicht komplett. Im Serientermin bekommst Du immer alle. Bei deinem Konstrukt bekommst Du jetzt den ersten Eintrag. Heute klappt das, morgen bekommst Du aber dann wieder den von Gestern.
Also das wäre glaub ich das minimum an Filter was bei einem Serientermin geht:
limit:count=1,from=0

Und in Zeile 5 hast DU doch das in $termin stehen, was Du in Zeile 8 wieder brauchst, das musst Du doch nicht 2x abfragen.
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

Mit dem $termin hast Du natürlich Recht.
Mich wundert, dass in dem Beispiel in der Commandref die Abfrage nach dem "defined" nicht mehr auftaucht. Früher war das Problem, dass bei jedem Kalenderupdate mein Notify getriggert hat, auch wenn gar kein Termin aktuell gestartet ist. Dadurch war mein $termin dann leer und es ga einen Haufen Fehler im Log. Das habe ich mit meiner Abfrage abgefangen...

Aber vielleicht ist das ja jetzt auch kein Problem mehr. Dann könnte diese Abfrage auch aus und ich ein bißchen Code sparen...

Zu den Serienterminen:

Ich frage doch nur den Betreff ab. Dieser ist doch bei allen Serienterminen einer Serie gleich. Oder bekomme ich mit meiner Abfrage den ersten Termin IRGENDEINER Serie? Das geht natürlich nicht.
Ich habe zum Beispiel Morgen früh einen Termin von 04.30 bis 06:00 mit dem Betreff  "21 16", der sich 14tägig wiederholt.

Wenn also Montag in 14 Tagen getriggert wird, soll er doch genau diesen Betreff wieder als Ergebnis haben.

Dienstag habe ich allerdings einen Serientermin 12.30 bis 20:00 mit "21 18". Diesen Betreff möchte ich natürlich in 14 Tagen auslesen.

Und das klappt mit meiner Abfrage nicht?