FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mhelgers am 28 März 2017, 08:04:55

Titel: Finde den Fehler..... DOIF
Beitrag von: mhelgers am 28 März 2017, 08:04:55
Hallo zusammen,

vielleicht sehe ich den Wald vor lauter Bäumen nicht...aber ich habe zwei Rolladen die ich ansteuer und unten dazu gehörig zwei DOIF's.
Dazu habe ich auch zwei Dummy Varriablen die ich auf 'automatik' oder 'manuell' stellen kann
Die rechte Rolladen steht auf automatik, die linke auf manuell
Die rechte fährt morges hoch, erfüllt also den Teil DOIF ([07:00|12345] or [08:35|06] und auch abends unten, soweit alles prima.
Die linke sollte morgens manuell hochfahren und Abends automatisch herunter.
Die linke macht morgens nichts  >:( , bleibt also unten. Liegt es daran, dass sie auf manuell steht und der DOELSEIF Zweig nicht durchlaufen wird??

define RolloWohnRE DOIF ([07:00|12345] or [08:35|06]) (set rollo_wohn_re off) DOELSEIF ([{sunset(900,"16:00","22:45")}] and ([rollo_wohn_re_dummy] eq "automatik")) (set rollo_wohn_re on)


define RolloWohnLI DOIF ([07:00|12345] or [08:35|06]) (set rollo_wohn_li off) DOELSEIF ([{sunset(10,"16:00","22:45")}] and ([rollo_wohn_li_dummy] eq "automatik")) (set rollo_wohn_li on)



thx vorab
Titel: Antw:Finde den Fehler.....
Beitrag von: betateilchen am 28 März 2017, 08:47:25
ich hab schon vier Fehler gefunden...

Titel: Antw:Finde den Fehler.....
Beitrag von: igami am 28 März 2017, 09:00:12
Bitte mal ein list von deinem nicht funktionierenden DOIF in CODE Tags posten.

PS: Wie hoch ist eigentlich der Finderlohn? Falls es keinen gibt bitte einen passenderen Titel wählen.
PPS: gehört das Thema nicht eher in's DOIF Unterforum?
Titel: Antw:Finde den Fehler.....
Beitrag von: betateilchen am 28 März 2017, 09:40:47
Zitat von: igami am 28 März 2017, 09:00:12
PPS: gehört das Thema nicht eher in's DOIF Unterforum?

Völlig egal. Für mich ist da einfach ein Logikfehler drin, der in keiner Umsetzung zum gewünschten Ergebnis führte.
Titel: Antw:Finde den Fehler.....
Beitrag von: mhelgers am 29 März 2017, 06:53:58
 :-\Code Tags eingefügt! Mein Fehler! Mea Culpa! Ab in den See! :-\

nun zu den Antworten


Ja ich prüfe auf 'automatik' aber dennoch sollte der erste Zweig durchlaufen werden. Das 'manuell' ist ja nur für die Lesbarkeit, und um die Variable überhaupt setzten zu können. Die Variable mit nur einem Wert zu belegen, also 'automatik' macht ja auch keinen Sinn

Gelesen heißt meine Codezeile doch so:
Wenn es Mo-Fr ist und 07:00h oder Sa-So und 08:35h fahre die Rollade hoch, wenn der Sonnenuntergang zwischen 16:00h und 22:45h ist und die Dummyvariable auf automatik steht fahre die Rollade 900sec nach Sonnenuntergang herunter

ein 'manuell' brauche ich doch nicht, und die Rollade soll immer, egal ob automatik oder manuell zu den gegebenen Zeiten hoch fahren!

ich habe mir jetzt nochmals die Referenz durchgelesen und denke es liegt daran, dass die Zusatzbedingung nicht nur im dem DOELSEIF Zweig auftreten darf. Was ich gefunden habe ist, entweder im ersten Zweig oder in beiden.

Ich habe die Anweisung jetzt in zwei Einzelanweisungen aufgetrennt
guckst du


define RolloWohnLIauf DOIF ([07:00|12345] or [08:35|06]) (set rollo_wohn_li off)
define RolloWohnLIab DOIF ([{sunset(10,"16:00","22:45")}] and ([rollo_wohn_li_dummy] eq "automatik")) (set rollo_wohn_li on)


....ich werde berichten :)

Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: darkness am 29 März 2017, 07:11:28
Es fehlt immer noch ein List vom DOIF.

ZitatDie Ausführung erfolgt standardmäßig einmalig nur nach Zustandswechsel des Moduls

hast du ein do always?
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: mhelgers am 29 März 2017, 07:19:31
hetz mich nicht!
ein always habe ich nicht



Internals:
DEF ([07:00|12345] or [08:35|06]) (set rollo_wohn_li off) DOELSEIF ([{sunset(10,"16:00","22:45")}] and ([rollo_wohn_li_dummy] eq "automatik")) (set rollo_wohn_li on)
NAME RolloWohnLI
NR 512
NTFY_ORDER 50-RolloWohnLI
STATE ???
TYPE DOIF
Readings:
2017-03-29 07:17:03 timer_01_c01 30.03.2017 07:00:00|12345
2017-03-29 07:17:03 timer_02_c01 29.03.2017 08:35:00|06
2017-03-29 07:17:03 timer_03_c02 29.03.2017 20:35:50
Condition:
0 DOIF_time_once($hash,0,$wday,"12345") or DOIF_time_once($hash,1,$wday,"06")
1 DOIF_time_once($hash,2,$wday) and (InternalDoIf($hash,'rollo_wohn_li_dummy','STATE') eq "automatik")
Days:
0 12345
1 06
Devices:
1 rollo_wohn_li_dummy
all rollo_wohn_li_dummy
Do:
0:
0 set rollo_wohn_li off
1:
0 set rollo_wohn_li on
Helper:
globalinit 1
last_timer 3
sleeptimer -1
Internals:
1 rollo_wohn_li_dummy:STATE
all rollo_wohn_li_dummy:STATE
Itimer:
Localtime:
0 1490850000
1 1490769300
2 1490812550
Realtime:
0 07:00:00
1 08:35:00
2 20:35:50
Regexp:
All:
State:
Time:
0 07:00:00
1 08:35:00
2 {sunset(10,"16:00","22:45")}
Timecond:
0 0
1 0
2 1
Timer:
0 0
1 0
2 0
Timers:
0 0 1
1 2
Triggertime:
1490769300:
localtime 1490769300
Hash:
1490812550:
localtime 1490812550
Hash:
1490850000:
localtime 1490850000
Hash:
Attributes:
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: darkness am 29 März 2017, 07:47:55
Zitat von: mhelgers am 29 März 2017, 07:19:31
ein always habe ich nicht

Dann solltest du das ändern (https://fhem.de/commandref_DE.html#DOIF_do_always)
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: igami am 29 März 2017, 08:03:56
Zitat von: mhelgers am 29 März 2017, 07:19:31
hetz mich nicht!
Du erwartest doch hilfe und dann noch meckern, wenn Informationen eingefordert werden? :o
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: mhelgers am 03 April 2017, 09:47:07
so, habe jetzt alle Formalien erfüllt, LIST ist geliefert und Code ist in Codetags......
Findet denn jetzt jemand den Fehler???
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: darkness am 03 April 2017, 10:00:56
Hast du auch das mal angeschaut bzw. versucht?

Zitat von: darkness am 29 März 2017, 07:47:55
Dann solltest du das ändern (https://fhem.de/commandref_DE.html#DOIF_do_always)
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: mhelgers am 03 April 2017, 15:02:55
ne, das always habe ich nicht eingebaut....ist doch auch irgendwie unlogisch. Denn dann müsste ich es überall einbauen
also zB auch hier

Anwendungsbeispiele:

Einschalten um 8:00 Uhr, ausschalten um 10:00 Uhr.
define di_light DOIF ([08:00]) (set switch on) DOELSEIF ([10:00]) (set switch off)

und das muss doch nicht sein - oder?? Der Schalter wird um 08:00h eingeschaltet und um 10:00h ausgeschaltet und das jeden Tag


bei diesem Befehl ist es nachvollziehbar, da es eventabhängig ist. Wenn die Temperatur 20°C überschreitet geht der Lüfter an.

define di_garage DOIF ([Temp] >20 ) (set Fan on)
attr di_garage do always







Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: kumue am 03 April 2017, 15:12:54
Zitat von: mhelgers am 03 April 2017, 15:02:55
ne, das always habe ich nicht eingebaut....ist doch auch irgendwie unlogisch. Denn dann müsste ich es überall einbauen
also zB auch hier

Anwendungsbeispiele:

Einschalten um 8:00 Uhr, ausschalten um 10:00 Uhr.
define di_light DOIF ([08:00]) (set switch on) DOELSEIF ([10:00]) (set switch off)

und das muss doch nicht sein - oder?? Der Schalter wird um 08:00h eingeschaltet und um 10:00h ausgeschaltet und das jeden Tag


bei diesem Befehl ist es nachvollziehbar, da es eventabhängig ist. Wenn die Temperatur 20°C überschreitet geht der Lüfter an.

define di_garage DOIF ([Temp] >20 ) (set Fan on)
attr di_garage do always


Bei den Anwendungsbeispiel ist do always unnötig.
Durch den DOELSEIF-Fall um 10Uhr findet ein Zustandswechsel statt (cmd_2)
Am nächsten Tag um 8Uhr der nächste Zustandswechsel (cmd_1) usw...
Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: darkness am 03 April 2017, 15:13:12
Gelesen hast du aber schon?

ZitatDie Ausführung erfolgt standardmäßig einmalig nur nach Zustandswechsel des Moduls

du hast dein DOIF:

define RolloWohnLI DOIF ([07:00|12345] or [08:35|06]) (set rollo_wohn_li off) DOELSEIF ([{sunset(10,"16:00","22:45")}] and ([rollo_wohn_li_dummy] eq "automatik")) (set rollo_wohn_li on)

Teil 1 des DOIFs wird ausgeführt. Dann sollte bei dem DOIF auch CMD_1 stehen. Teil 2 wird aber nicht ausgeführt, da
Zitat... linke auf manuell

Deshalb ein do always.

Ich kann dir nicht versprechen, ob es wirklich daran liegt. Aber das fällt mir zumindest auf.

Titel: Antw:Finde den Fehler..... DOIF
Beitrag von: automatisierer am 03 April 2017, 15:25:05
es wird definitv daran liegen!

cmd_1 wird nur einmal ausgeführt, danach muss ein Zustandswechsel erfolgen, oder aber das attr xxxx do always eingetragen werden.

@mhelgers - wenn dir empfohlen wird ein 'do always' einzubauen, warum machst du es nicht? was soll passieren? Teste es doch einfach! Im schlimmsten Fall funktioniert dein DOIF immer noch nicht.