Auslesen von Werten aus einem Google-Kalender

Begonnen von toxic-tonic, 20 Februar 2018, 22:22:14

Vorheriges Thema - Nächstes Thema

toxic-tonic

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

Phill

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") }
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

toxic-tonic

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


rabehd

Auch funktionierende Lösungen kann man hinterfragen.

toxic-tonic

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.


:-\

Phill

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") }

Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

toxic-tonic

#6
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!

???

Phill

Naja ist ja auch nicht das was ich dir vorgeschlagen habe. Du darfst die Variablen nicht erneut initialisieren mit "my".
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

toxic-tonic

#8
Wer lesen kann.....  ::) Sorry!! Ich sehe den Wald vor lauter Bäumen nicht!

toxic-tonic

#9
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... 

toxic-tonic

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

toxic-tonic

#11
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

toxic-tonic

#12
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

Otto123

warum immer in der 6. Zeile zwei \\ stehen, ich würde eines löschen :)
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

toxic-tonic