FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: chq am 08 Juni 2018, 07:36:17

Titel: Syntaxfehler at..if..else
Beitrag von: chq am 08 Juni 2018, 07:36:17
Hallo,

ein per Wlan-Steckdose geschaltetes Licht soll nur dann täglich zwischen 19 und 6 Uhr leuchten, wenn meine Frau auch daheim ist.
Wenn Sie beispielsweise erst um 20 Uhr heimkommt, soll sich das Licht halt um 20 Uhr erst einschalten.
Wenn Sie beispielsweise schon um 5 Uhr das Haus verlässt, soll sich das Licht halt um 5 Uhr schon ausschalten.

Folgender Code ist ein erster Ansatz meinerseits. Ich verstehe nicht, warum es zu Syntaxfehlern kommt.

define babylampeLeuchtet at *19:00:00 { if (trackingFrau("presence") eq "present") && (($hour >= 19 || $hour < 6))) { fhem("set ogBabylampe on") } else { fhem("set ogBabylampe off") } }

syntax error at (eval 3398) line 1, near ") &&"
syntax error at (eval 3398) line 1, near "} }"


trackingFrau ist ein PRESENCE-Device. Funktioniert.
ogBabylampe ist eine Wlan-Steckdose (ESPEasy). Funktioniert.

Gruß Chris
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Frank_Huber am 08 Juni 2018, 07:39:17
ich empfehle das in ein DOIF zu packen.
Was Du vorhast wird mit at so nicht gehen.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: chq am 08 Juni 2018, 08:23:37
Ok, super!

Das hier funktioniert bereits:

([08:17-08:18]) (set ogBabylicht on) DOELSE (set ogBabylicht off)

Das hier leider (noch) nicht:

([08:17-08:18] and [trackingFrau:presence] eq present) (set ogBabylicht on) DOELSE (set ogBabylicht off)

Im angelegten Device steht unten Probably associated with: trackingFrau present PRESENCE

Gruß Chris
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Frank_Huber am 08 Juni 2018, 09:05:45
mach eq "present" daraus.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: CoolTux am 08 Juni 2018, 09:25:26
Ich würde mir das ganze noch einmal genauer überlegen. Wenn Du alles zu festen Zeiten machst ist das nicht Zielführend. Versuche mit Events zu arbeiten.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: nils_ am 08 Juni 2018, 09:26:28
Zitat von: Frank_Huber am 08 Juni 2018, 07:39:17
ich empfehle das in ein DOIF zu packen.
Was Du vorhast wird mit at so nicht gehen.

DOIF ist die eine Variante (scheint ja auch zu laufen bei dir)

ansonsten hättet du ein "notify" nehmen können. (um auf die änderung von presence zu reagieren!)
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Wernieman am 08 Juni 2018, 09:37:35
Insofern war der Grundgedanke falsch:
Das System muß entscheiden, wenn jemand kommt. Also nicht zu einer festen Uhrzeit.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: nils_ am 08 Juni 2018, 10:13:09
Zitat von: Wernieman am 08 Juni 2018, 09:37:35
Insofern war der Grundgedanke falsch:
Das System muß entscheiden, wenn jemand kommt. Also nicht zu einer festen Uhrzeit.

das ist oft der Gedankenfehler der gemacht wird finde ich.
fhem arbeitet eventbasiert und reagiert auf trigger. ( -> notify )
oft wird aber gedacht, wenn etwas in einem zeitraum abgefragt/geprüftn/ausgeführt werden soll, das dies mit einem at zu lösen ist. und damit hätten wir dann zustands-polling. geht auch, ist aber nicht schön :)


aber es hat alles seine daseins-berechtigung, deswegen jeder so wie er will _und_ wie er es versteht :)
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: CoolTux am 08 Juni 2018, 10:27:54
Der Threadersteller muss hier in zwei Richtungen denken was seine Frau und das Licht an geht.

Einmal muß er auf das nach Hause kommen reagieren und abfragen ob es schon spät genug für Licht ist (isDay) und einmal muss er einen Event abfangen der entweder einen relativen Bezug zu isDay hat (Twilight) oder der intervall mäßig immer kommt und dann in einem Notify in einer Abfrage isDay endet.

Ich selbst reagiere auf Twilight:azimuth
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Otto123 am 08 Juni 2018, 12:02:10
Hi,

ich habe sowas ähnliches auch, ich stelle das mal allgemein dar:
define KommtGeht DOIF ([Person:"present"] and [?Zeitraum])(schalte an) DOELSEIF ([Person:"absent"] and [?Zeitraum])(schalte aus)
attr KommtGeht do always


Person Zeitraum und der Schaltvorgang muss natürlich ersetzt werden. [Person:"present"] triggert auf den event "present". Der Zeitraum wird nur abgefragt und kann natürlich mit Sonnenaufgang oder Sonnenuntergang belegt werden werden. Beispiele findet man in der Doku (https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung).

Man kann den Zeitraum auch triggern lassen, dann passiert etwas von wenn man da oder abwesend ist. Aber das entsprach nicht der ursprünglichen Aufgabenstellung.

Gruß Otto
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: chq am 08 Juni 2018, 12:40:58
Danke für die vielen Infos.. muss ich jetzt erstmal alles "auswerten".  :P

Gruß Chris

Edit: Ähm, ich hab mir dieses Flussdiagramm nun mehrmals angeschaut, verstehe es jedoch noch immer nicht:

https://wiki.fhem.de/wiki/Datei:DOIF_Aufbau_Ablauf_nSVG.png

Was ist denn mit der Frage "Passt ein Auslöser der Bedingung 1 zum Ereignis?" gemeint? Ist ein Ereignis ein Auslöser?
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Wernieman am 08 Juni 2018, 13:51:06
DAS ist auch DOIF ... es kann viel, mir persönlich zu viel ... weshalb es zu DOIF von mir keine Hilfe geben wird. (Sorry)
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: pc1246 am 08 Juni 2018, 14:34:34
Zitat von: Otto123 am 08 Juni 2018, 12:02:10
Hi,

ich habe sowas ähnliches auch, ich stelle das mal allgemein dar:
define KommtGeht DOIF ([Person:"present"] and [?Zeitraum])(schalte an) DOELSEIF ([Person:"absent"] and [?Zeitraum])(schalte aus)
attr KommtGeht do always


Person Zeitraum und der Schaltvorgang muss natürlich ersetzt werden. [Person:"present"] triggert auf den event "present". Der Zeitraum wird nur abgefragt und kann natürlich mit Sonnenaufgang oder Sonnenuntergang belegt werden werden. Beispiele findet man in der Doku (https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung).

Man kann den Zeitraum auch triggern lassen, dann passiert etwas von wenn man da oder abwesend ist. Aber das entsprach nicht der ursprünglichen Aufgabenstellung.

Gruß Otto
Moin
Also ich sehe das anders, beim DOELSEIF sollte es schon durch die Zeit geschaltet werden, und dann auch als "or"! Sonst brennt die Lampe unter Umstaenden sehr lange!
Gruss Christoph
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Otto123 am 08 Juni 2018, 20:17:49
Hallo Christoph,

in der ursprünglichen Textaufgabe steht es aber anders drin. Da soll die Lampe nachts nicht von allein ausgehen.

Gruß Otto
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: chq am 08 Juni 2018, 21:27:26
Die Lampe soll (if "Frau daheim") von 19 Uhr abends bis morgens 6 Uhr brennen.

Gruß Chris

Edit: Das hier funktioniert (zumindest bei permanenter Anwesenheit der Weiblichkeit) jetzt zunächst einmal, womit die Aufgabe für mich jedoch noch nicht gelöst ist:

([19:00-06:00] and [trackingFrau:presence] eq "present") (set ogBabylicht on) DOELSE (set ogBabylicht off)
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Damian am 08 Juni 2018, 21:39:41
Zitat von: chq am 08 Juni 2018, 21:27:26
Die Lampe soll (if "Frau daheim") von 19 Uhr abends bis morgens 6 Uhr brennen.

Gruß Chris

Dann reicht einfach:

([19:00-06:00] and [trackingFrau:presence] eq "present") (set ogBabylicht on) DOELSE (set ogBabylicht off)

Das Licht geht  an, wenn Frau nach 19:00 Uhr kommt und es geht ebenfalls um 19:00 Uhr an, wenn Frau vorher schon da war.

Das List geht aus, wenn Frau im Zeitraum geht oder spätestens um 06:00 Uhr, wenn sie da bleibt.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: chq am 08 Juni 2018, 21:45:57
Werde mal einen Testlauf wagen..  ;D

Gruß Chris

Edit: Sämtliche "Schnelltests" verliefen positiv.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Frank_Huber am 08 Juni 2018, 21:49:24
Sorry für die blöde Zwischenfrage, ein Zeitbereich [Anfang - Ende] geht auch über Mitternacht hinaus? Hab dann bisher immer 2 Zeitbereiche gemacht. Bis 00 und nach 00.....

Gesendet von meinem Doogee S60 mit Tapatalk

Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Damian am 08 Juni 2018, 21:54:13
Zitat von: Frank_Huber am 08 Juni 2018, 21:49:24
Sorry für die blöde Zwischenfrage, ein Zeitbereich [Anfang - Ende] geht auch über Mitternacht hinaus? Hab dann bisher immer 2 Zeitbereiche gemacht. Bis 00 und nach 00.....

Gesendet von meinem Doogee S60 mit Tapatalk

Es geht über Mitternacht, das war immer schon so und wird auch so bleiben ;)
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: rischbiter123 am 08 Juni 2018, 22:06:42
Kann es sein, dass das mal anders beschrieben war? Ich habe (bzw jetzt hatte) nämlich auch ein paar von der Sorte.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Frank_Huber am 08 Juni 2018, 22:22:56
Danke Damian! [emoji6]
Hatte die Frage wohl schon viel früher stellen sollen..., [emoji23][emoji23][emoji23]

Gesendet von meinem Doogee S60 mit Tapatalk

Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Damian am 08 Juni 2018, 22:27:01
Zitat von: rischbiter123 am 08 Juni 2018, 22:06:42
Kann es sein, dass das mal anders beschrieben war? Ich habe (bzw jetzt hatte) nämlich auch ein paar von der Sorte.

Kann mich nicht erinnern, dass es anders beschrieben wäre.

So steht es zumindest vom Anfang an in der Commandref:

ZitatZeitintervalle über Mitternacht:

define di_light DOIF ([22:00-07:00]) (set light on) DOELSE (set light off)
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: rischbiter123 am 08 Juni 2018, 22:38:01
Habe gerade noch mal nachgesehen. Habe es bei DisableForInteval so gelesen und bin dann, wie andere vielleicht auch, davon ausgegangen, dass es bei DOIF genauso ist. Hat ja auch funktioniert, war nur etwas umständlicher. Aber man lernt ja nie aus.
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: pc1246 am 09 Juni 2018, 09:31:00
Zitat von: Otto123 am 08 Juni 2018, 20:17:49
Hallo Christoph,

in der ursprünglichen Textaufgabe steht es aber anders drin. Da soll die Lampe nachts nicht von allein ausgehen.

Gruß Otto
Hallo Otto
Tagsueber aber schon! Und Dein Beispiel triggert nur auf Anwesenheit! Deshalb brennt Sie so lange, bis die Frau zwischen 19 und 6 Uhr weggeht!
Gruss Christoph

Edith: Oh! da hat die Forensoftware mir einen Streich gespielt! Ihr seid schon viel weiter!
Titel: Antw:Syntaxfehler at..if..else
Beitrag von: Otto123 am 09 Juni 2018, 11:28:37
Moin Christoph,

da hast Du Recht, aber die Aufgabe wächst sowieso mit jedem Lösungsschritt. Ich hatte die Korrekturantwort auch gerade parat da war Damian schneller. Aber das wird auch nicht die endgültige Lösung sein :)

Gruß otto