(gelöst) Google Calendar DOIF Fehler

Begonnen von timtom, 08 April 2023, 23:54:15

Vorheriges Thema - Nächstes Thema

timtom

Hallo zusammen,

Ich hatte mir vor längerer Zeit mal ein DOIF geschrieben, um aus dem Google Calendar heraus, set Befehle an fhem zu senden
define di_fhemGoogleCalendar DOIF ([fhemGoogleCalendar:"^start:"]) {fhem("set ".fhem('get fhemGoogleCalendar events format:custom="$S" filter:uid=="'.ReadingsVal('fhemGoogleCalendar','modeChanged','').'" limit:count=1',1)." ")}
setuuid di_fhemGoogleCalendar xxx
attr di_fhemGoogleCalendar do always

Irgendwie funktioniert das aber nicht mehr und es kommt folgende Fehlermeldung
error
{fhem("set ".fhem('get fhemGoogleCalendar events format:custom="$S" filter:uid=="'.ReadingsVal('fhemGoogleCalendar','modeChanged','').'" limit:count=1',1)." ")}: Please define fhemGoogleCalendar: first

Hat jemand eine Idee? Ich möchte bspw. einen Kalendereintrag "LichtABC on" erstellen. Fhem soll dann zum Start des Kalendereintrags das LichtABC anschalten.

Lieben Dank im Voraus

betateilchen

ZitatPlease define fhemGoogleCalendar: first

Wo kommt der Doppelpunkt am Ende des Kalendernamens her?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

timtom

#2
Zitat von: betateilchen am 09 April 2023, 09:06:00Wo kommt der Doppelpunkt am Ende des Kalendernamens her?
Gute Frage. Der Doppelpunkt kommt ja erstmal aus der Fehlermeldung :(

Ich werde langsam wahnsinnig. Ich habe mittlerweile das gesamte Statement auseinander genommen und finde den Fehler trotzdem nicht. Außerdem war ich immer davon überzeugt, dass das genau so alles immer funktioniert hatte.

betateilchen

#3
Zitat von: timtom am 09 April 2023, 11:12:49Der Doppelpunkt kommt ja erstmal aus der Fehlermeldung

Nein, das glaube ich nicht.
Die Fehlermeldung weist darauf hin, dass irgendwo auf ein device zugegriffen werden soll, das "fhemGoogleCalendar:" heißen soll - und das dürfte schlichtweg ein Tippfehler oder eine falsche Syntax sein.

Die Verarbeitung in Deinem DOIF macht für mich ohnehin wenig Sinn. Du prüfst erst auf "start" und dann machst Du eine Abfrage auf modeChanged. Abfragen auf modeChanged sollte man nicht mehr verwenden, da diese deprecated sind. Du mischt also neue und alte Syntax beim Zugriff auf den Calendar.

Schau doch mal im Unterforum zum Calendar Modul. Dort habe ich in einem angepinnten Beitrag genau das Beispiel beschrieben, das Du umsetzen wolltest. Und zwar ohne Mischmasch bei der Syntax.

Außerdem würde ich so eine Aufgabe immer mit einem simplen notify lösen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

timtom

Irgendwie hatte ich "damals" mit DOIF angefangen und bin ganz gut damit zurecht gekommen. Also habe ich auf notify verzichtet ;)

Der folgende Code funktioniert, allerdings nur, wenn ich die uid manuell eingebe. Ich bekomme es aber irgendwie nicht hin, die aus dem Eventmonitor herauszulesen bzw. hier einzubauen. Hat jemand ein Stichwort für mich? $EVTPART1 habe ich gefunden, erkennt fhem aber so in dem Statement nicht.
([fhemGoogleCalendar:"^start:"]) {fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="xxxxxxxgooglecom" format:custom="$S" limit:count=1')." ")}

TomLee

Zitat von: timtom am 09 April 2023, 17:06:46Irgendwie hatte ich "damals" mit DOIF angefangen und bin ganz gut damit zurecht gekommen.

Dann nochmal der Vorschlag es evtl. doch mit einem notify anzugehen (ohne den Code auszulagern, abgeleitet von deinem Beispiel aus dem ersten Post):

defmod notify_fhemGoogleCalendar notify fhemGoogleCalendar:start:.* {\
my $sum = fhem(q(get $NAME events format:custom="$S" filter:uid=="$EVTPART1" limit:count=1),1);;\
return fhem("set $sum ?");;}

Wie man das mit $EVTPARTx in DOIF umsetzen könnte hab ich mich kurz versucht einzulesen/zu beschäftigen, aber auf die Schnelle auch auf keine Lösung gekommen/gefunden.

Wie das genau mit dem set-Befehl gemeint ist, dem ein Leerzeichen angehangen wird, hab ich bisher nicht verstanden, darum steht da in meinem Beispiel ein Fragezeichen.

timtom

Ganz lieben Dank. Ich glaube das Leerzeichen kann man weglassen. Warum das damals eingefügt wurde, weiß ich auch nicht mehr ;)

Hat jemand eine Ahnung, wie ich das $EVTPART1 in das DOIF bekomme?

TomLee

ZitatHat jemand eine Ahnung, wie ich das $EVTPART1 in das DOIF bekomme?

Es gibt $EVENT in DOIF, das könnte man splitten und dann auf den Wert zugreifen, war mir aber zu aufwändig.

TomLee

#8
Jetzt wo das mit dem nicht existierenden Reading angesprochen wurde, trau ich mich jetzt einfach mal zu fragen ob man denn überhaupt filtern muss ?

Die Ausgabe ist doch auf einen Eintrag limitiert, dann wird doch (?) eh immer der letzte Termin mit format:custom="$S" limit:count=1 ausgegeben ?

Ich mach bestimmt nur den Kasper und sehe meinen Denkfehler bisher einfach nicht/habs nicht ganz nachvollzogen ::)

timtom

Hey, danke für deine Hilfe. Wenn man nicht filtert, wird immer der erste Eintrag in der Event Liste genommen. Leider ist das nicht der letzte. Dadurch ist mir das genau aufgefallen. Anstelle von Licht an, ist die Heizung ausgegangen ;) Hier die Lösung des Begehlteils aus dem DOIF Unter-Forum
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', '$EVENT'))[1].'" format:custom="$S" limit:count=1'))}

TomLee

Zitat... dann wird doch (?) eh immer der letzte Termin mit ...

Falsch(e) beschrieben/Wortwahl.
Bei mir hab ich
ZitathideOlderThan 0
gesetzt, damit wird immer der nächste Termin mit format:custom="$S" limit:count=1 ausgegeben.
Übersehe ich immer noch was ?

timtom

Zitat von: TomLee am 11 April 2023, 07:59:10Falsch(e) beschrieben/Wortwahl.
Bei mir hab ich
ZitathideOlderThan 0
Ohhh das Attr kannte ich noch gar nicht. Werd ich mir mal merken. Aktuell funktioniert jedoch o.g. Lösung auch. Das Attr. hätte mir aber wahrscheinlich eine menge Zeit erspart.