Hauptmenü

DOIF Beschattung

Begonnen von seule3008, 27 Juni 2018, 16:23:30

Vorheriges Thema - Nächstes Thema

seule3008

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

choetzu

Du müsstest das ganze DOIF posten. So hast du nur den Teil ab DOELSEIF.  Lg C
Raspi3, EnOcean, Zwave, Homematic

Otto123

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

seule3008

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

Otto123

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

Ellert

#5
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.>"

seule3008

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

seule3008

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.  :-\

Otto123

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

Bartimaus

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....
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Ellert

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

Frank_Huber

Was ich sehe ist die Klammer Setzung der und / oder Verbindungen nicht eindeutig.

Gesendet von meinem Doogee S60 mit Tapatalk


Ellert

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?

Frank_Huber

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


Otto123

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