FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: timtom am 10 April 2023, 14:59:00

Titel: (gelöst) DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: timtom am 10 April 2023, 14:59:00
Hallo zusammen,

ich möchte gerne einen Teil (0xxxxxjsgooglecom=uid) des folgenden Events im Befehlteil des DOIF nutzen. Wenn ich das richtig verstanden habe, wird die komplette Triggerzeile in $EVENT des DOIF gespeichert. Ich bekomme es nur irgendwie nicht hin, genau den Teil der uid zu extrahieren und im Befehlteil des DOIFs wieder einzubauen. Hat jemand einen Denkanstoß für mich?

Event Monitor
2023-04-09 14:53:00 Calendar fhemGoogleCalendar start: 0xxxxxjsgooglecom
   
([fhemGoogleCalendar:"^start:"]) {fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="0xxxxxjsgooglecom" format:custom="$S" limit:count=1'))}
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Damian am 10 April 2023, 17:45:45
Du willst im Grunde den Inhalt des Readings start vom gesendeten Device haben, also [$DEVICE:start]
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Otto123 am 10 April 2023, 18:50:27
Es ist nicht sinnvoll immer wieder neue Threads zum gleichen Problem zu öffnen, das macht die Helfer müde ;)

Vom Prinzip her muss Du sowas machen, falls DOIF kein $EVTPART1 kann (Code für die FHEM Kommandozeile nur zur Veranschaulichung) :
{my $EVENT='start: 0xxxxxjsgooglecom';; return (split (' ', $EVENT))[1]}
Also wahrscheinlich so
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', $EVENT))[1].'" format:custom="$S" limit:count=1'))}Falls DOIF wirklich die Variable $EVENT befüllt.

Allerdings sieht mir der set Befehl so unvollständig aus ???

Gruß Otto
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: timtom am 10 April 2023, 19:41:20
Zitat von: Otto123 am 10 April 2023, 18:50:27Es ist nicht sinnvoll immer wieder neue Threads zum gleichen Problem zu öffnen, das macht die Helfer müde ;)
Du hast ja Recht. Aber in dem anderen Thread wurde mir ja ein notify ans Herz gelegt und ich würde gerne DOIF nutzen ;)

Zitat von: Otto123 am 10 April 2023, 18:50:27Also wahrscheinlich so
Code Auswählen Erweitern
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', $EVENT))[1].'" format:custom="$S" limit:count=1'))}Falls DOIF wirklich die Variable $EVENT befüllt.

Allerdings sieht mir der set Befehl so unvollständig aus ???
Danke. Wir kommen der Lösung langsam näher. Also das $EVent ist richtig befüllt "start: 0nhfpov1kk0csm90l52tore2jsgooglecom"
Eigentlich sieht das Split theoretisch auch gut aus. Nur kommt folgender Fehler.
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', start: 0nhfpov1kk0csm90l52tore2jsgooglecom ))[1].'" format:custom="$S" limit:count=1'))}: syntax error at (eval 5226947) line 1, near "start:"
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Otto123 am 10 April 2023, 19:48:24
versuch mal
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', '$EVENT'))[1].'" format:custom="$S" limit:count=1'))}oder auch so:
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', $event))[1].'" format:custom="$S" limit:count=1'))}
ZitatIn der Bedingung und im Ausführungsteil werden die Schlüsselwörter $SELF durch den eigenen Namen des DOIF-Moduls, $DEVICE durch das aktuelle Device, $EVENT durch die passende Eventzeile, $EVENTS kommagetrennt durch alle Eventzeilen des Triggers ersetzt.

Entsprechend können Perl-Variablen in der DOIF-Bedingung ausgewertet werden, sie werden in Kleinbuchstaben geschrieben. Sie lauten: $device, $event, $events

Bedeutet nach meinem Wissen: $EVENT wird einfach ersetzt und ist keine Perl Variable sondern eher ein Platzhalter. DOIF setzt zusätzlich die Variable $event, die lässt sich dann wie in meinem Beispiel verwenden.
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Damian am 10 April 2023, 20:27:26
Was ist denn mit:

([fhemGoogleCalendar:"^start:"]) {fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="[$DEVICE:start]" format:custom="$S" limit:count=1'))}
wie ich vorhin vorgeschlagen habe?
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Otto123 am 10 April 2023, 20:31:51
@Damian Es gibt mMn im Device fhemGoogleCalendar kein Reading start. ;)
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Damian am 10 April 2023, 20:45:40
Zitat von: Otto123 am 10 April 2023, 20:31:51@Damian Es gibt mMn im Device fhemGoogleCalendar kein Reading start. ;)

OK, dann noch ein weiterer Vorschlag:

DOIF {fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="[fhemGoogleCalendar:"^start:",""]" format:custom="$S" limit:count=1'))}
siehe: https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: timtom am 10 April 2023, 21:55:59
Hi Damian, hi Otto,

lieben Dank für eure schnelle Hilfe. Ich Dummkopf. Ich hatte es zwar schon mit ' bzw. " probiert und das DOIF hat auch ohne Fehler getriggert, nur hat die Tradfri nicht geschaltet. Das lag allerdings daran, dass mal wieder der Gateway neu gestartet werden mussste. Auf jeden Fall geht es jetzt so. Danke für eure Mühe!

Zitat von: Otto123 am 10 April 2023, 19:48:24ersuch mal
Code Auswählen Erweitern
{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.(split (' ', '$EVENT'))[1].'" format:custom="$S" limit:count=1'))}

Da o.g. funktioniert, habe ich Damians Vorschlag noch nicht getestet. Wer ich die Tage aber mal tun.
[quote author=Damian link=msg=1271891 date=1681152340]
Code Auswählen Erweitern
[code]DOIF {fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="[fhemGoogleCalendar:"^start:",""]" format:custom="$S" limit:count=1'))}
Titel: Aw: DOIF Teil aus $EVENT für Befehl nutzen
Beitrag von: Damian am 11 April 2023, 08:53:35
Zitat von: timtom am 10 April 2023, 21:55:59Da o.g. funktioniert, habe ich Damians Vorschlag noch nicht getestet. Wer ich die Tage aber mal tun.
[quote author=Damian link=msg=1271891 date=1681152340]
Code Auswählen Erweitern
[code]DOIF {fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="[fhemGoogleCalendar:"^start:",""]" format:custom="$S" limit:count=1'))}

Wenn du es probierst, nimm lieber diese Version:

{fhem("set ".fhem('get fhemGoogleCalendar events filter:uid=="'.[fhemGoogleCalendar:"^start:",""].'" format:custom="$S" limit:count=1'))}
Die Angabe [fhemGoogleCalendar:"^start:",""] ist im Perlmodus eine Perl-Funktion und kein Platzhalter, deswegen würde der erste Vorschlag nicht funktionieren.