FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: toxic-tonic am 20 Februar 2018, 22:22:14

Titel: Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 20 Februar 2018, 22:22:14
Hier das Ergebnis: https://forum.fhem.de/index.php/topic,84705.msg770655.html#msg770655
__________________________________________________________________________________
Hi,

stehe grade echt auf dem Schlauch!!! Mit folgendem Befehl will ich den Titel und die Lokation eines Temins (Google-Kalender) per Telegram schicken lassen. Das ist nur ein Test, eigentlich werde ich die Werte danach zum Steuern verwenden.

define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { my $uid=$EVTPART1 ;; my $actor={fhem("get FHEM_Kalender summary $uid")} ;; my $value={fhem("get FHEM_Kalender location $uid")} ;; {fhem ("set Toxic_Telegram_Bot message Setze $actor auf $value")} }

Leider ist das Ergebnis in Telegram "Setze HASH(0xBLAHBLAH) auf HASH(0xFOBAR)". Bitte erleuchtet mich, ich schnall's nicht!!! Woher kommt dieser HASH-Quatsch?

Das Log sagt dazu folgendes:
2018.02.20 20:58:00 3: get FHEM_Kalender summary 0jm01qqtdkercp63dnt2gm94nqgooglecom : EG_Wohnzimmer_T01
2018.02.20 20:58:00 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 329) line 2.
2018.02.20 20:58:00 3: eval: my $EVTPART1='0jm01qqtdkercp63dnt2gm94nqgooglecom';my $NAME='FHEM_Kalender';my $SELF='FHEM_Kalender_Notify';my $EVENT='start: 0jm01qqtdkercp63dnt2gm94nqgooglecom ';my $TYPE='Calendar';my $EVTPART0='start:';{
my $uid=$EVTPART1 ; my $actor={fhem("get FHEM_Kalender summary $uid")} ; my $value={fhem("get FHEM_Kalender location $uid")} ;
{fhem ("set Toxic_Telegram_Bot message Setze $actor auf $value")} }
2018.02.20 20:58:00 3: get FHEM_Kalender location 0jm01qqtdkercp63dnt2gm94nqgooglecom : 21


Danke schon mal!

Tobias
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: Phill am 21 Februar 2018, 07:54:31
Zitat von: toxic-tonic am 20 Februar 2018, 22:22:14
my $actor={fhem("get FHEM_Kalender summary $uid")} ;; my $value={fhem("get FHEM_Kalender location $uid")} ;;

Du erzeugst mit deinem {fhem...} einen anonymen Hash. Die {} müssen weg gelassen werden.

define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { my $uid=$EVTPART1 ;; my $actor=fhem("get FHEM_Kalender summary $uid") ;; my $value=fhem("get FHEM_Kalender location $uid") ;; fhem ("set Toxic_Telegram_Bot message Setze $actor auf $value") }
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 21 Februar 2018, 11:21:54
Spitze, wieder was gelernt!  ;) Vielen Dank!!!

Aber womit muss ich dann diese if-Bedingungen kapseln:
define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem("get FHEM_Kalender summary $UID") ;;\
if ($EVTPART0 eq "end:") my $MYVALUE=eco else my $MYVALUE=fhem("get FHEM_Kalender location $UID") ;;\
fhem ("set Toxic_Telegram_Bot message Setze $MYACTOR auf $MYVALUE") }
attr FHEM_Kalender_Notify room Z_-_System


:-[

Danke und Gruß

Tobias

Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: rabehd am 21 Februar 2018, 11:37:14
wie hier beschrieben:https://de.wikibooks.org/wiki/Perl-Programmierung:_Kontrollstrukturen (https://de.wikibooks.org/wiki/Perl-Programmierung:_Kontrollstrukturen)
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 21 Februar 2018, 12:03:44
OK, das habe ich schon versucht:

define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem("get FHEM_Kalender summary $UID") ;;\
if ($EVTPART0 eq "start:") \
  { my $MYVALUE= fhem("get FHEM_Kalender location $UID") }\
else \
  { my $MYVALUE= 10 } ;;\
fhem ("set Toxic_Telegram_Bot message Setze $MYACTOR auf $MYVALUE") }


Ergebnis:

2018.02.21 12:00:00 1: ERROR evaluating my $NAME='FHEM_Kalender';my $EVTPART1='0jm01qqtdkercp63dnt2gm94nqgooglecom';my $EVENT='start: 0jm01qqtdkercp63dnt2gm94nqgooglecom ';my $TYPE='Calendar';my $EVTPART0='start:';my $SELF='FHEM_Kalender_Notify';{
my $UID=$EVTPART1 ;
my $MYACTOR=fhem("get FHEM_Kalender summary $UID") ;
if ($EVTPART0 eq "start:")
  { my $MYVALUE= fhem("get FHEM_Kalender location $UID") }
else
  { my $MYVALUE= 10 } ;
fhem ("set Toxic_Telegram_Bot message Setze $MYACTOR auf $MYVALUE") }: Global symbol "$MYVALUE" requires explicit package name at (eval 340) line 8.

2018.02.21 12:00:00 3: FHEM_Kalender_Notify return value: Global symbol "$MYVALUE" requires explicit package name at (eval 340) line 8.


:-\
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: Phill am 21 Februar 2018, 12:46:04
Problem, deine Variable MYVALUE steht dir nur lokal innerhalb der geschweiften klammer zur Verfügung. Das musst du so schreiben.
define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem("get FHEM_Kalender summary $UID") ;;\
my $MYVALUE;;\
if ($EVTPART0 eq "start:") \
  { $MYVALUE= fhem("get FHEM_Kalender location $UID") }\
else \
  { $MYVALUE= 10 } ;;\
fhem ("set Toxic_Telegram_Bot message Setze $MYACTOR auf $MYVALUE") }

Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 21 Februar 2018, 13:56:05
Es wird wärmer!  ;)

Fehlermeldung:
2018.02.21 13:45:00 3: get FHEM_Kalender summary 0jm01qqtdkercp63dnt2gm94nqgooglecom : EG_Wohnzimmer_T01
2018.02.21 13:45:00 3: get FHEM_Kalender location 0jm01qqtdkercp63dnt2gm94nqgooglecom : 21.5
2018.02.21 13:45:00 1: PERL WARNING: Use of uninitialized value $MYVALUE in concatenation (.) or string at (eval 346) line 7.
2018.02.21 13:45:00 3: eval: my $EVTPART0='start:';my $EVENT='start: 0jm01qqtdkercp63dnt2gm94nqgooglecom ';my $NAME='FHEM_Kalender';my $TYPE='Calendar';my $EVTPART1='0jm01qqtdkercp63dnt2gm94nqgooglecom';my $SELF='FHEM_Kalender_Notify';{
my $UID=$EVTPART1;
my $MYACTOR=fhem("get FHEM_Kalender summary $UID");
my $MYVALUE;
if ($EVTPART0 eq "start:") { my $MYVALUE=fhem("get FHEM_Kalender location $UID") }
else { my $MYVALUE="eco" };
fhem ("set Toxic_Telegram_Bot message Setze $MYACTOR auf $MYVALUE") }


Als Meldung bekomme ich dann nur $MYACTOR gefüllt, $MYVALUE ist leer! 

Wenn ich die Zeile my $MYVALUE="";;\ ändere kommt kein Fehler, aber der Wert ist immer noch leer!

???
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: Phill am 21 Februar 2018, 14:32:31
Naja ist ja auch nicht das was ich dir vorgeschlagen habe. Du darfst die Variablen nicht erneut initialisieren mit "my".
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 21 Februar 2018, 14:40:10
Wer lesen kann.....  ::) Sorry!! Ich sehe den Wald vor lauter Bäumen nicht!
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 21 Februar 2018, 20:47:45
Hier die finale Version:
define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem("get FHEM_Kalender summary $UID") ;;\
$MYACTOR=~ s/\\//g;;\
my $MYVALUE=fhem("get FHEM_Kalender location $UID") ;;\
if ($MYVALUE ne "on") {$MYVALUE="desiredTemperature $MYVALUE"} ;;\
if ($EVTPART0 eq "end:") { if ($MYVALUE eq "on") {$MYVALUE="off"} else {$MYVALUE="desiredTemperature eco"} } ;;\
fhem ("set  $MYACTOR $MYVALUE") }


Funktioniert einfach indem man einen Termin mit dem  Namen eines Actors als Titel und einem Wert im Feld Ort anlegt. Wenn der Wert on ist folgt ein off am Ende des Termins, ist es etwas anderes schicke ich das als Temperatur und am Ende des Termins ein eco. Man kann auch mehrere Aktoren, mit Kommas getrennt angeben. Vielleicht kann es wer gebrauchen... 
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 22 Februar 2018, 14:10:05
Moin!

Noch mal eine andere Frage, wenn ich serientermine benutze, dann ist der rückgemeldetet Wert x mal in der Variabelen:
....
EG_Badezimmer_T01
EG_Badezimmer_T01
EG_Badezimmer_T01
EG_Badezimmer_T01
EG_Badezimmer_T01
EG_Badezimmer_T01
EG_Bad....


Wie kann ich denn das auf quasi eine Zeile reduzieren?  :o

Danke und Gruß

Tobias
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 22 Februar 2018, 14:49:59
Das ist meine vorläufige Lösung! Finde ich aber unschön...

define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem("get FHEM_Kalender summary $UID") ;;\
my @MYACTORARRAY=split(/\n/,$MYACTOR);;\
$MYACTORARRAY[0]=~ s/\\//g;;\
my $MYVALUE=fhem("get FHEM_Kalender location $UID") ;;\
my @MYVALUEARRAY=split(/\n/,$MYVALUE);;\
if ($MYVALUEARRAY[0] ne "on") {$MYVALUEARRAY[0]="desiredTemperature $MYVALUEARRAY[0]"} ;;\
if ($EVTPART0 eq "end:") { if ($MYVALUEARRAY[0] eq "on") {$MYVALUEARRAY[0]="off"} else {$MYVALUEARRAY[0]="desiredTemperature eco"} } ;;\\
fhem ("set  $MYACTORARRAY[0] $MYVALUEARRAY[0]") }
attr FHEM_Kalender_Notify room Z_-_System


Habe auzerdem die Atribute für den Kalender aktiviert:

attr FHEM_Kalender hideLaterThan 3600
attr FHEM_Kalender hideOlderThan 1d
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 02 August 2018, 14:00:55
Hier die neue Variante mit events. Habe mich hier: https://forum.fhem.de/index.php/topic,87895.0.html inspirieren lassen...

define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem('get FHEM_Kalender events format:custom="$S" filter:uid=="'.$UID.'" limit:count=1') ;;\
my $MYVALUE=fhem('get FHEM_Kalender events format:custom="$L" filter:uid=="'.$UID.'" limit:count=1') ;;\
if ($MYVALUE ne "on") {$MYVALUE="desiredTemperature $MYVALUE"} ;;\
if ($EVTPART0 eq "end:") { if ($MYVALUE eq "on") {$MYVALUE="off"} else {$MYVALUE="desiredTemperature eco"} } ;;\
fhem ("set  $MYACTOR $MYVALUE") }
attr FHEM_Kalender verbose 1
attr FHEM_Kalender_Notify room Z_-_System
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: Otto123 am 02 August 2018, 15:21:12
warum immer in der 6. Zeile zwei \\ stehen, ich würde eines löschen :)
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 10 September 2018, 11:15:46
Geändert! Danke für den Hinweis!
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 04 November 2022, 19:55:44
Hallo zusammen,

habe die Tage festgestellt, dass das Schalten über die Termine nicht mehr funktioniert. Habe mir das angesehen und es scheint, dass zwar das Notify getriggert wird, aber es kann beim Ende des Termins kein Event ausgelesen werden.

Zur Analyse habe ich den Notify etwas reduziert weil ich sehen wollte, was da überhaupt übergeben wird:define FHEM_Kalender_Notify notify FHEM_Kalender:(start|end):.* { \
print "Notify triggered\n";;\
my $UID=$EVTPART1 ;;\
my $MYACTOR=fhem('get FHEM_Kalender events filter:uid=="'.$UID.'" limit:count=1') }
attr FHEM_Kalender_Notify room Z_-_System


Wenn der Termin startet kriege ich folgenden Log-Eintrag:Notify triggered
2022.11.04 19:43:00 3: get FHEM_Kalender events filter:uid=="71cm0conveg8o80tu4ip1l184agooglecom" limit:count=1 : 04.11.2022 19:43 0:01 EG_Deko_innen
2022.11.04 19:43:00 3: FHEM_Kalender_Notify return value: 04.11.2022 19:43 0:01 EG_Deko_innen


Beim Ende kommt dann aber nur das:Notify triggered


Ht jemand das selbe Thema? Gibt es nach dem Termin kein Reading mehr? Liegt das an Google oder an dem Calender-Plugin?

Danke und Gruß

Tobias
Titel: Antw:Auslesen von Werten aus einem Google-Kalender
Beitrag von: toxic-tonic am 04 November 2022, 20:17:23
PS.: Hab's rausbekommen!  ;D

Wenn das Attribut attr FHEM_Kalender hideOlderThan 0d gesetzt ist, geht die Abfrage ins leere. Habe das jetzt auf 120 (Sekunden?) gesetzt, jetzt geht das "Original-Script" wieder.