FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: seule3008 am 27 Juni 2018, 16:23:30

Titel: DOIF Beschattung
Beitrag von: seule3008 am 27 Juni 2018, 16:23:30
Hallo

ich habe mir ein Beschattungs DOIF geschrieben und habe ein Problem. Ich habe einen Dummy Beschattung erstellt, um die Funktion ein und aus schalten zu können. Dieses Dummy frage ich im DOIF ab, aber egal ob er auf An oder Aus steht das DOIF fährt immer die Rollladen. Kann mit da jemand evtl einen Tip geben?

DOELSEIF ([Beschattung:state] eq "An" and [Wetter:temperature] > 25 and [Wetter:condition] eq "sonnig" or [Wetter:condition] eq "heiter" or [Wetter:condition] eq "teilweise wolkig" or [Wetter:condition] eq "überwiegend wolkig" and [TC_TWILIGHT:azimuth] > 130 and [TC_TWILIGHT:azimuth] < 250 and [TC_TWILIGHT:elevation] > 30 and [RolloWzFenster:level] ne "20") (set RolloWzFenster pct 20)

Vielen Dank im Voraus

Christian
Titel: Antw:DOIF Beschattung
Beitrag von: choetzu am 27 Juni 2018, 16:38:41
Du müsstest das ganze DOIF posten. So hast du nur den Teil ab DOELSEIF.  Lg C
Titel: Antw:DOIF Beschattung
Beitrag von: Otto123 am 27 Juni 2018, 17:06:32
Hallo Christian,

der Tipp wäre: Mach dir die Funktion von UND (and) und ODER (or) in der logischen Bedeutung klar!

In der Regel musst Du die ganzen or's mit einer Klammer klammern! 

irgendwas oder 1 ist immer wahr!

Gruß Otto
Titel: Antw:DOIF Beschattung
Beitrag von: seule3008 am 27 Juni 2018, 17:15:03
Hallo

man seid ihr schnell...

Also hier mal das ganze DOIF
([({twilight("TC_TWILIGHT","sr_civil","06:00","9:00")} - 90 + rand(180))]) (set RolloWzFenster Hoch)
DOELSEIF ([({twilight("TC_TWILIGHT","ss_civil","18:00","22:00")} - 90 + rand(180))]) (set RolloWzFenster Runter)
DOELSEIF ([Beschattung:state] eq "on" and [Wetter:temperature] > 25 and [Wetter:condition] eq "sonnig" or [Wetter:condition] eq "heiter" or [Wetter:condition] eq "teilweise wolkig" or [Wetter:condition] eq "überwiegend wolkig" and [TC_TWILIGHT:azimuth] > 130 and [TC_TWILIGHT:azimuth] < 250 and [TC_TWILIGHT:elevation] > 30 and [RolloWzFenster:level] ne "20") (set RolloWzFenster pct 20)
DOELSEIF ([Beschattung:state] eq "An" and [Wetter:temperature] <= 25 and [TC_TWILIGHT:azimuth] >= 250 and [TC_TWILIGHT:azimuth] < 270 and [RolloWzFenster:level] eq "20") (set RolloWzFenster pct 100)


Als ich die or's in Klammern stehen hatte passierte garnix. Gibt es eine Möglichkeit wie in Exel das ganze schritt für schritt auszuwerten?

Grüße

Christian
Titel: Antw:DOIF Beschattung
Beitrag von: Otto123 am 27 Juni 2018, 17:21:32
Ich mache das immer auf Papier :) mit nullen und einsen

Das "Problem" ist die Reihenfolge in Perl -> http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
Er macht erst die and und dann die or

Also mach (a and b and (c or d or f ))
Titel: Antw:DOIF Beschattung
Beitrag von: Ellert am 27 Juni 2018, 17:27:36
Ein Dummy ist meist nicht erforderlich, da ein Reading im DOIF genutzt werden kann. Entweder über uiTable oder klassisch mit readingsList, setList, webCmd und webCmdLabel, z.B. klassisch

define Sonnenschutz DOIF (... [$SELF:Beschattung] eq "An" ...) (<Befehle>)
DOELSEIF ...
...


und die wesentlichen Attribute
attr Sonnenschutz readingList Beschattung
attr Sonnenschutz setList Beschattung:An,Aus
attr Sonnenschutz webCmd Beschattung
attr Sonnenschutz webCmdLabel Beschattungsauswahl

Damit kann man Dummy reduzieren, siehe auch http://fhem.de/commandref_DE.html#DOIF_setList__readingList ff.


Welchen Status hat der Dummy An oder on?
Du kannst Vergleiche abkürzen statt
[Wetter:condition] eq "sonnig" or [Wetter:condition] eq "heiter"
so
[Wetter:condition] =~ "sonnig|heiter|<usw.>"
Titel: Antw:DOIF Beschattung
Beitrag von: seule3008 am 27 Juni 2018, 18:05:20
Hi

wenn ich wahr und unwahr mit 1 und 0 auf nem Blatt prüfe ist ja schon der erste Punkt der Status vom Dummy Beschattung 0 und dann sollte ja weiter schon nichts mehr passieren aber es löst trotzdem aus. das verstehe ich nicht. Ich habe on off und auch An Aus probiert beides die selbe Wirkung.

Als ich das jetzt sortiert und abgekürzt habe bekomme ich jetzt eine Fehlermeldung:

autoRolloWzFenster DOIF: expected DOELSEIF or DOELSE:  and ([Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig")  (set RolloWzFenster pct 20) DOELSEIF ([Beschattung:state] eq "An" and [Wetter:temperature] <= 25 and [TC_TWILIGHT:azimuth] >= 250 and [TC_TWILIGHT:azimuth] < 270 and [RolloWzFenster:level] eq "20") (set RolloWzFenster pct 100)



([({twilight("TC_TWILIGHT","sr_civil","06:00","9:00")} - 90 + rand(180))]) (set RolloWzFenster Hoch)
DOELSEIF ([({twilight("TC_TWILIGHT","ss_civil","18:00","22:00")} - 90 + rand(180))]) (set RolloWzFenster Runter)
DOELSEIF ([Beschattung:state] eq "on" and [Wetter:temperature] > 25 and [TC_TWILIGHT:azimuth] > 130 and [TC_TWILIGHT:azimuth] < 250 and [TC_TWILIGHT:elevation] > 30 and [RolloWzFenster:level] ne "20") and ([Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig")  (set RolloWzFenster pct 20)
DOELSEIF ([Beschattung:state] eq "An" and [Wetter:temperature] <= 25 and [TC_TWILIGHT:azimuth] >= 250 and [TC_TWILIGHT:azimuth] < 270 and [RolloWzFenster:level] eq "20") (set RolloWzFenster pct 100)


Ich verstehe das nicht  es läuft ja in der Ursprungsversion aber halt nur das An und Aus nicht, weil er den Status des Dummy ignoriert.

Grüße

Christian
Titel: Antw:DOIF Beschattung
Beitrag von: seule3008 am 27 Juni 2018, 18:24:32
Aso der Dummy ist angelegt damit ich die sache mit dem Schalter aus dem Homekit heraus an und aus schalten kann. Falls das der Sache dient.  :-\
Titel: Antw:DOIF Beschattung
Beitrag von: Otto123 am 27 Juni 2018, 18:29:56
Jetzt hast Du die ganzen oder ja in ein and gepackt.
Aber im ersten DOELSIF fehlt die schließende Klammer! Oder die nach and ist zuviel :)
and ([Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig")
Titel: Antw:DOIF Beschattung
Beitrag von: Bartimaus am 27 Juni 2018, 19:12:29
Erscheint der State des Dummy auch in den Readings des DOIF ?
Wenn nicht, Dummy einmal an/ausschalten.

DOIF ist EVENT-basiert wie ich lernen musste....
Titel: Antw:DOIF Beschattung
Beitrag von: Ellert am 27 Juni 2018, 19:43:19
Zitat von: seule3008 am 27 Juni 2018, 18:24:32
Aso der Dummy ist angelegt damit ich die sache mit dem Schalter aus dem Homekit heraus an und aus schalten kann. Falls das der Sache dient.  :-\
Ja, wenn Homekit nur Dummys bedienen kann, dann kannst Du natürlich keine Definition einsparen, zu dumm ;)

Zeig uns doch mal das falsche Verhalten im Eventmonitor und dazu passend ein Listing der beteiligten Geräte (Dummy, DOIF, usw.) dann müssen wir nicht soviel raten.

Oder Du versuchst mal hier mit https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche etwas zu finden.
Titel: Antw:DOIF Beschattung
Beitrag von: Frank_Huber am 27 Juni 2018, 19:44:52
Was ich sehe ist die Klammer Setzung der und / oder Verbindungen nicht eindeutig.

Gesendet von meinem Doogee S60 mit Tapatalk

Titel: Antw:DOIF Beschattung
Beitrag von: Ellert am 27 Juni 2018, 19:47:14
Zitat von: Frank_Huber am 27 Juni 2018, 19:44:52
Was ich sehe ist die Klammer Setzung der und / oder Verbindungen nicht eindeutig.

Gesendet von meinem Doogee S60 mit Tapatalk

Ist doch kein oder mehr drin, oder?
Titel: Antw:DOIF Beschattung
Beitrag von: Frank_Huber am 27 Juni 2018, 20:09:26
Zitat von: Ellert am 27 Juni 2018, 19:47:14
Ist doch kein oder mehr drin, oder?
Ja eben drum.

Gesendet von meinem Doogee S60 mit Tapatalk

Titel: Antw:DOIF Beschattung
Beitrag von: Otto123 am 27 Juni 2018, 21:02:27
In dem Zweig stimmt die Anzahl der Klammern einfach nicht!
([Beschattung:state] eq "on" and [Wetter:temperature] > 25 and [TC_TWILIGHT:azimuth] > 130 and [TC_TWILIGHT:azimuth] < 250 and [TC_TWILIGHT:elevation] > 30 and [RolloWzFenster:level] ne "20") and ([Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig") 

Das kann nicht gehen, egal ob der Dummy hüpft!  :o ;D ;D ;D
Titel: Antw:DOIF Beschattung
Beitrag von: seule3008 am 27 Juni 2018, 22:42:41
Jetzt verstehe ich nur noch Bahnhof. :o

Habe jetzt die Klammern mal gesetzt wie Otto123 geschrieben hat aber der Fehler ist noch da, wenn ich die so setze ist er weg.
([({twilight("TC_TWILIGHT","sr_civil","06:00","9:00")} - 90 + rand(180))]) (set RolloWzFenster Hoch)
DOELSEIF ([({twilight("TC_TWILIGHT","ss_civil","18:00","22:00")} - 90 + rand(180))]) (set RolloWzFenster Runter)
DOELSEIF ([Beschattung:state] eq "on" and [Wetter:temperature] > 25 and [TC_TWILIGHT:azimuth] > 130 and [TC_TWILIGHT:azimuth] < 250 and [TC_TWILIGHT:elevation] > 30 and [RolloWzFenster:level] ne "20" and ([Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig")) (set RolloWzFenster pct 20)
DOELSEIF ([Beschattung:state] eq "on" and [Wetter:temperature] <= 25 and [TC_TWILIGHT:azimuth] >= 250 and [TC_TWILIGHT:azimuth] < 270 and [RolloWzFenster:level] eq "20") (set RolloWzFenster pct 100)


Aber wie ist das gemeint das die ganzen oder in ein and gepackt sind??? Ich mochte ja nur, dass er das ausführt, wenn eine dieser Wetterbedingungen vorliegt sonst nicht. Und eben auch nur, wenn der Dummy auf on steht sonst auch keine Aktion.

Ich habe leider von Programmiersprache leine Ahnung und blicke nicht mehr durch. Für mein Laienwissen erscheint das logisch was da steht aber für Fhem scheinbar nicht  ::)

Ich habe leider keine Log für die DOIFs ich hab mich da mal dran versucht der irgendwie hat das Logfile nie was aufgezeichnet. Und da die anderen Doifs funktionieren habe ich es dann mit den Logs gelassen.

Grüße und gute Nacht

Christian
Titel: Antw:DOIF Beschattung
Beitrag von: Otto123 am 27 Juni 2018, 23:24:21
Dein Code ist ja jedesmal anders  ;)

Du hast dein ursprüngliches or Konstrukt
[Wetter:condition] eq "sonnig" or [Wetter:condition] eq "heiter" or [Wetter:condition] eq "teilweise wolkig" or [Wetter:condition] eq "überwiegend wolkig"in einen Ausdruck gepackt.
[Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig"
Damit hast Du nur noch Bedingungen mit and verknüpft. Sorry, wenn ich das etwas flapsig ausgedrückt habe.
Damit brauchst Du nicht mehr extra klammern.

Ich habe kein Beispiel geschrieben was die Klammenr richtig setzt. Ich habe Dir Deine Fehler gezeigt!

Funktioniert es jetzt? Du hast eine Klammer zuviel aber die stört nicht.

Gruß Otto
Titel: Antw:DOIF Beschattung
Beitrag von: Damian am 28 Juni 2018, 09:30:11
Ob eine Klammer zu viel oder zu wenig drin ist, erkennt normalerweise der DOIF-Parser, wenn man nicht die cfg-Datei editiert. Bei Definitionen am besten immer die Ausgabe von list des Moduls hier anhängen, denn damit kann man nicht nur die Definition, sondern auch das was DOIF "verstanden" hat sehen.
Titel: Antw:DOIF Beschattung
Beitrag von: seule3008 am 28 Juni 2018, 10:29:45
Ok ich bin heute im 24 Stunden Dienst und werde morgen mal versuchel so ein List zu erstellen. Danke schonmal für eure Mühen.

Grüße
Titel: Antw:DOIF Beschattung
Beitrag von: seule3008 am 30 Juni 2018, 17:44:45
Hi

danke für eure Hilfe. Ich habe jetzt die Reihenfolge geändert, die Klammern die zuviel waren entfernt und jetzt geht es.

das ist die Zeile die jetzt funktioniert:
DOELSEIF ([Beschattung:state] eq "on" and [Wetter:temperature] >= 22 and [TC_TWILIGHT:azimuth] > 130 and [TC_TWILIGHT:azimuth] < 240 and [TC_TWILIGHT:elevation] > 30 and [RolloWzFenster:level] ne "20" and [Wetter:condition] =~ "sonnig|heiter|teilweise wolkig|überwiegend wolkig") (set RolloWzFenster pct 20)

Danke und Grüße

Christian
Titel: Antw:DOIF Beschattung
Beitrag von: Tobias am 17 Juli 2018, 16:20:44
kleiner HInweis: Statt der Wetter condition würde ich stattdessen lieber auf die Globalstrahlung (Proplanta Modul) zurückgreifen. Mit einem Wert > 5.5 liegst du dann ganz gut. So habe ich es