Rollosteuerung greift nicht !!!

Begonnen von sash.sc, 17 Oktober 2016, 08:59:10

Vorheriges Thema - Nächstes Thema

sash.sc

Hallo zusammen.

Habe mir eine Steuerung über DOIF zusammen gestellt.
Hatte bis jetzt auch funktioniert. Dort war nur die Überprüfung auf die Wochentage eingebaut bzw. abgefragt.
Habe dieses DOIF nun um einen "Automatikschalter" erweitert sowie eine Abfrage von einem Lichtsensor eingebaut.
Jedoch scheinen die neuen Abfragen nicht zu greifen, genau so wenig, wie das WAIT Attribut.

Jemand eine Idee, was da falsch läuft.

Hier mal die Listing der Definitionen.

DOIF
Internals:
   DEF        ([Automatik:state] eq "an" and [lichtsens:Indikator:d] > 40 and [09:45|7] or [07:30-09:00|8]) (set group=Jallo {(60+int(rand(40)))}) (set jallo3.stand [Jallo3:state])
   NAME       Jallo_up
   NR         402
   NTFY_ORDER 50-Jallo_up
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-10-17 08:49:56   Device          lichtsens
     2016-10-17 08:48:33   cmd             1.2
     2016-10-17 08:48:33   cmd_event       lichtsens
     2016-10-17 08:48:33   cmd_nr          1
     2016-10-17 08:48:33   cmd_seqnr       2
     2016-10-17 08:49:56   e_lichtsens_Indikator 83
     2016-10-17 08:48:33   state           cmd_1
     2016-10-17 08:42:14   timer_1_c1      17.10.2016 09:45:00|7
     2016-10-17 08:42:14   timer_2_c1      18.10.2016 07:30:00|8
     2016-10-17 08:42:14   timer_3_c1      17.10.2016 09:00:00|8
     2016-10-17 08:48:33   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'Automatik','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "an" and ReadingValDoIf($hash,'lichtsens','Indikator','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 40 and DOIF_time_once($hash,$hash->{timer}{0},$wday,"7") or DOIF_time($hash,$hash->{realtime}{1},$hash->{realtime}{2},$wday,$hms,"8")
   Days:
     0          7
     1          8
     2          8
   Devices:
     0           Automatik lichtsens
     all         Automatik lichtsens
   Do:
     0:
       0          set group=Jallo {(60+int(rand(40)))}
       1          set jallo3.stand [Jallo3:state]
   Helper:
     event      Indikator: 83
     globalinit 1
     last_timer 3
     sleepdevice lichtsens
     sleepsubtimer -1
     sleeptimer -1
     timerdev   lichtsens
     timerevent Indikator: 83
     triggerDev lichtsens
     timerevents:
       Indikator: 83
     timereventsState:
       Indikator: 83
     triggerEvents:
       Indikator: 83
     triggerEventsState:
       Indikator: 83
   Internals:
   Interval:
     1          -1
     2          1
   Itimer:
   Localtime:
     0          1476690300
     1          1476768600
     2          1476687600
   Readings:
     0           Automatik:state lichtsens:Indikator
     all         Automatik:state lichtsens:Indikator
   Realtime:
     0          09:45:00
     1          07:30:00
     2          09:00:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          09:45:00
     1          07:30:00
     2          09:00:00
   Timecond:
     0          0
     1          0
     2          0
   Timer:
     0          0
     1          0
     2          0
   Timers:
     0           0  1  2
   Trigger:
   Triggertime:
     1476687600:
       localtime  1476687600
       Hash:
     1476690300:
       localtime  1476690300
       Hash:
     1476768600:
       localtime  1476768600
       Hash:
Attributes:
   alias      Jallos Morgens auf
   devStateIcon cmd_1:rc_1:disable cmd_2:rc_2:disable initialize:general_an@lime:disable disabled:general_aus@red:initialize initialized:general_an@orange:initialize
   group      Ja_St
   icon       fts_shutter_up@cyan
   room       10_WoZi
   wait       120,10


Dummy Automatik

Internals:
   NAME       Automatik
   NR         407
   STATE      aus
   TYPE       dummy
   Readings:
     2016-10-17 07:37:27   state           aus
Attributes:
   alias      Automatik für Jallo
   devStateIcon an:general_an@lime:aus aus:general_aus@red:an
   group      Ja_St
   icon       time_automatic@lime
   room       10_WoZi


Lichtsesnor



   CHANGED
   DEF        3A 39.4
   IODev      JL
   JL_MSGCNT  16996
   JL_RAWMSG  OK 9 58 1 5 85 106
   JL_TIME    2016-10-17 08:56:46
   LASTInputDev JL
   LaCrosse_lastRcv 2016-10-17 08:56:46
   MSGCNT     16637
   NAME       lichtsens
   NR         365
   STATE      T: 76
   TYPE       LaCrosse
   addr       3A
   battery_new 0
   bufferedH
   bufferedT
   corr1      39.4
   corr2      0
   previousH  106
   previousT  75.9
   sensorType 0=T(H)
   Readings:
     2016-10-17 08:56:46   Indikator       80
     2016-10-17 08:56:46   battery         ok
     2016-07-14 13:09:08   d               0
     2016-09-30 19:17:42   indikator       0
     2016-10-17 08:56:46   state           T: 76
     2016-10-17 08:56:46   temperature     76
Attributes:
   IODev      JL
   doAverage  1
   event-min-interval Indikator:1200
   event-on-change-reading Indikator:4
   group      Licht
   room       10_WoZi,80_Diagramme
   userReadings Indikator { sprintf("%.0f",ReadingsVal("lichtsens","temperature",0)*1.05);;;;}


Die "Automatik" stand auch auf "aus", also hätten die Jallos gar nicht fahreen dürfen.l
Sind aber um punkt 7:30 Uhr hochgefahren, obwohl der Schwellwert für das Licht unter dem Wert von 40 lag.

Erwartet wird, dass wenn der Lichtwert über 40 ist und Automatik an ist, die Abfrage auf Wochentag oder Wochenende erfolgt, dann die Jallos auf einen Zufallswert zwischen 60% und 100% gefahren werden !

Gruß und Danke
Sascha

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Otto123

Hallo Sascha,

also ich mag falsch liegen, aber:
Dein ganzen "and" werden zusammengefasst die ergeben so wie Du sagst 0. Dann wird oder 7:30 gemacht, das ist um 7:30 = 1
0 oder 1 = 1

Alles richtig  ;)

Du musst die Zeiten klammern, dann wird die Klammer oder verknüpft und dann erst mit dem Rest mit und.

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

sash.sc

#2
Hallo Otto.

Du meinst um alle "or" Verknüpfungen eine Klammer, damit diese als erstes abgearbeite bzw zusammen gefasst wird ?

Hab gedacht, dass die Klammer nur sein muss, wenn die ODER vor einem UND steht.

Es gabe da mal einen Spruch: ODER vor UND wird es ohne Klammern ungesund !  ;)

Trifft doch hier nicht zu, oder ?

Du meinst dann also so ?


([Automatik:state] eq "an" and [lichtsens:Indikator:d] > 40 and ([09:45|7] or [07:30-09:00|8])) (set group=Jallo {(60+int(rand(40)))}) (set jallo3.stand [Jallo3:state])



Gruß und Danke
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Otto123

#3
Hallo Sascha,

naja, ich denke es ist egal ob es davor oder danach steht. In Perl hat UND die höhe Priorität, das ist wie PUNKT vor STRICH Rechnung.
Also erst wird geUNDet und dann geORt.

Ja, genau wie es jetzt ist sollte das gehen. Ich bin nach wie vor dafür: lieber eine Klammer mehr als eine zu wenig.  ;)
Ich habe auch ein paar solche Konstrukte die laufen genau so. Ich schreibe allerdings immer die Zeiten vorne hin - da stimmt dann Dein Spruch wieder  ;D

Und Du meinst das wait ging nicht? Da sehe ich aber nicht wieso.

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

sash.sc

#4
Ich warte mal Morgen ab, wann die Jallos rauf fahren. Habe mir noch ein LOG für das DOIF angelegt um zu schauen, was wann passiert.

Werden dann nochmal was schreiben.

Danke für deine Hilfe

Gruß
Sascha

edit:

Habe das noch gefunden

https://forum.fhem.de/index.php/topic,58237.0.html
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

sash.sc

So, da bin ich wieder. Zum Glück habe ich Urlaub.  8)

Habe das DOIF ja gestern abgeändert.


([Automatik:state] eq "an" and [lichtsens:Indikator:d] > 40 and ([09:45|7] or [07:30-09:00|8])) (set group=Jallo {(60+int(rand(40)))}) (set jallo3.stand [Jallo3:state])


Da wir heute im Münsterland recht bescheidenes Wetter haben, ist es erst später hell geworden.
Ich habe eigentlich gedacht, dass das DOIF spätestens in der Woche dann die Rollos um 9:00 Uhr hoch fährt. Aber das der Wert des Lichtsensors, auf Grund des Wetters, nicht den Wert von 40 überschritten hat, sind die Rollos natürlich unten geblieben.

Die Frage ist, wie ich das DOIF abändern muss, damit die Rollos in der Woche spätestens um 9:00 Uhr hoch fahren, egal wie es draussen aussieht?

Gruß und Danke
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Otto123

Hallo Sascha,

aus dem Bauch würde ich sagen einfach noch ein or [9:00|8] dazu? Allerdings macht er es auch wenn die Dinger schon oben sind.
Dann wäre besser ein DOELSEIF ([9:00|8]) () aber da muss Deine ganze Logik nochmal rein.

Du könntest auch den Lichtsensor odern
statt [lichtsens:Indikator:d] > 40
([lichtsens:Indikator:d] > 40 or [9:00|8])

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

sash.sc

#7
Dankeschön für die Antwort.

Habe die Zeit von 9:00 Uhr auf 10:00 erhöht.

Mal schauen. Tage jetzt gerade das RBsmart Modul, ist gerade im Test. Ist für die Rollo Steuerung mit diversen Vorgaben!

Gruß Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb