Hallo Ihr,
ich benötige etwas Hilfe bei bei einer kleinen Schaltung. Bin mir aber noch nichtmal sicher ob DOIF die richtige Wahl ist.
Was habe ich vor:
Ich möchte eine Fernbedienung für meine Belüftungsanlage bauen.
Dazu habe ich mir einen Arduino Dino zugelegt, dieser hat 4 Opto Digital In und 4 Relais zum schalten.Alles bereits in fhem integriert.
An 2 von den Relais hänge ich die Schalter meiner Belüftungsanlage. Diese hat 4 Stufen die ich mittels der Schalter vorwärts oder Rückwärts durchschalten kann. Ein Relais muss also 1 mal an und wieder aus gehen um eine stufe höher oder runter zuschalten. Also 0 - 1 - 2 - 3 und umgekehrt.
An den 4 Digitalen Eingängen kommt die Rückmeldung der Anlage in welche Stufe sie sich befindet.
Ich benötige nun ein Define der mir solang das Relais 1 an und aus Schaltet bis die gewünschte stufe erreicht ist.
zb. Define Stufe1 DOIF ([tastertest1] eq "on" and [input1] eq "off" (set Relais1 on, sleep 1, Relais1 off, sleep 1) Doelseif ([input1] eq "on")
Define Stufe2 DOIF ([tastertest2] eq "on" and [input2] eq "off" (set Relais1 on, sleep 1, Relais1 off, sleep 1) Doelseif ([input2] eq "on")
Ich hoffe jemand versteht meinen Gedankengang und kann mir weiterhelfen, das das hier so nicht funktionert
MFG Rico
define Soll dummy
set Soll 0/1/2/3
define Luefter DOIF ([Soll] > [Luefter])(set Relais1 on)(set Relais1 off) \
DOELSEIF ([Soll] < [Luefter])(set Relais2 on)(set Relais2 off)
attr Luefter wait 1,1:1,1
Die Umsetzung der 4 Eingänge in eine Zahl sollte für den Arduino einfacher sein als die Richtungswahl für DOIF.
Wäre es möglich das etwas genauer zu beschreiben, damit ich es besser nachvollziehen/nachbauen kann.
define Soll Dummy
set Soll 0/1/2/3
Hier wähle ich meine gewünschte Stufe aus.
Das verstehe ich nicht so recht, vermute das das so gemeint ist.
"define Luefter DOIF ([Soll] > [Luefter])(set Relais1 on)(set Relais1 off)"
Wenn wert von Soll =1 (z.b.) dann das Relais1 an und wieder aus,
DOELSEIF ([Soll] < [Luefter])(set Relais2 on)(set Relais2 off)
aber was bedeutet das dann alles nach doelseif?
wenn nicht dann rückwärts durchschalten?!
Wo oder wie nutze ich den die Eingänge.
Die Richtung kann man auch ignorieren, da es immer fortwährend durchschaltet.
Habe mal den "Zeilenumbruch" angefügt.
Der erste Teil (DOIF) prüft, ob Soll größer als Ist ist, falls ja, wird das Relais 1 für 1s angesteuert.
Damit wird Ist geändert und erzeugt ein neues Ereignis, die Prüfung erfolgt von vorn, bis Soll gleich Ist.
Im DOELSEIF-Zweig erfolgt das Gleiche, nur nach "unten" mit Relais 2.
Ich glaub ich brauch noch mehr Hilfe
ich habe folgende Eingänge in Fhem vom Arduino integriert.
Input1, Input2, Input3 und Input4.
Wie muss dann der Doif Befehl aussehen damit das ganze Funktioniert.
Mit dem Bisherigen schaltet mein Relais endlos...
Ziel ist es das wenn ich zum Beispiel den Schalter "Stufe1" drücke er mir solange das Relais an und aus schaltet, bis Input1 angeht, etc.
IF Input1 then Soll = 1
IF Input2 then Soll = 2
IF Input3 then Soll = 3
IF Input4 then Soll = 4
Du kannst die Abfrage auch in das DOIF machen, ich finde es aber nicht sinnvoll, erst auf Stufe 4 zu schalten, wenn du von 2 auf 1 willst.
Zumal du ja auch einen Hoch- UND einen Runter-Eingang hast.
Ich könnte verzweifeln...
wäre es dir möglich mir das ganze Paket im Klartext nieder zuschreiben.
Also mit DOIF, den benötigten notifys usw.
Vieleicht erklärt sich es mir dann wie es gehen soll.
Hier mal noch der Auszug aus der fhem.cfg
define Relais1 FRM_OUT 7
attr Relais1 IODev DINo
attr Relais1 room Arduino
attr Relais1 stateFormat value
attr Relais1 webCmd on:off:toggle
define Relais2 FRM_OUT 6
attr Relais2 IODev DINo
attr Relais2 room Arduino
attr Relais2 stateFormat value
define Relais3 FRM_OUT 5
attr Relais3 IODev DINo
attr Relais3 room Arduino
attr Relais3 stateFormat value
attr Relais3 webCmd on:off:toggle
define Relais4 FRM_OUT 8
attr Relais4 IODev DINo
attr Relais4 room Arduino
attr Relais4 stateFormat value
define Input16 FRM_IN 16
attr Input16 IODev DINo
attr Input16 room Arduino
attr Input16 stateFormat reading
define Input17 FRM_IN 17
attr Input17 IODev DINo
attr Input17 event-min-interval 5
attr Input17 room Arduino
attr Input17 stateFormat reading
define Input18 FRM_IN 18
attr Input18 IODev DINo
attr Input18 event-min-interval 5
attr Input18 room Arduino
attr Input18 stateFormat reading
define Input19 FRM_IN 19
attr Input19 IODev DINo
attr Input19 event-min-interval 5
attr Input19 room Arduino
attr Input19 stateFormat reading
define Luefter DOIF ([stufe] > [Luefter])(set Relais1 on)(set Relais1 off) DOELSEIF ([stufe] < [Luefter])(set Relais2 on)(set Relais2 off)
attr Luefter room Arduino
attr Luefter wait 1,1:1,1
define stufe remotecontrol
attr stufe icon vent_ventilation_control
attr stufe rc_iconprefix black_btn_
attr stufe room Arduino
attr stufe row00 1:1,2:2,3:3
attr stufe row01 off:POWEROFF,down:DOWN,up:UP
attr stufe webCmd off:up:down:0:1:2:3
define stufe1 notify stu1 IF Input16 then stufe = 1
attr stufe1 room Arduino
define stufe2 notify stu2 IF Input17 then stufe = 2
attr stufe2 room Arduino
define stufe3 notify stu3 IF Input18 then stufe = 3
attr stufe3 room Arduino
define stufe4 notify stu4 IF Input19 then stufe = 4
attr stufe4 room Arduino
define Relais1 FRM_OUT 7
...
...
define Input19 FRM_IN 19
attr Input19 IODev DINo
attr Input19 event-min-interval 5
attr Input19 room Arduino
attr Input19 stateFormat reading
define Luefter DOIF ([stufe] > [IST] or [stufe:"up"])(set Relais1 on)(set Relais1 off) DOELSEIF ([stufe] < [IST] or [stufe:"down"])(set Relais2 on)(set Relais2 off)
attr Luefter room Arduino
attr Luefter wait 1,1:1,1
define stufe remotecontrol
attr stufe icon vent_ventilation_control
attr stufe rc_iconprefix black_btn_
attr stufe room Arduino
attr stufe row00 1:1,2:2,3:3
attr stufe row01 off:POWEROFF,down:DOWN,up:UP
attr stufe webCmd off:up:down:0:1:2:3
define IST DOIF ([Input16:"1"]) DOELSEIF ([Input17:"1"]) DOELSEIF ([Input18:"1"]) DOELSEIF ([Input19:"1"])
attr IST cmdState 0|1|2|3
attr IST room Arduino
Deine Notifys habe ich nicht verstanden. Haben die funktioniert?
Außerdem hat dein DOIF den Namen "Luefter", auf welchen du auch den Trigger setzt. Das ist hier falsch (und z.Zt. eh deaktiviert).
Ich habe mal angenommen, dass die Input-Werte "1" und "0" sind. Sonst musst du anpassen.
Je nach Schaltpunkt deiner Schrittschalter kanne sein, dass du statt
(set Relais1 on)(set Relais1 off)
(set Relais1 off)(set Relais1 on)(set Relais1 off)
und statt
wait 1,1:1,1
wait 0,1,1:0,1,1
schreiben musst. Kannst du auch gleich machen, erzeugt halt mehr Events.
Wieso sind es eigentlich 4 Relais? Und was bewirkt attr Input19 event-min-interval 5?
Hallo Per,
danke erstmal für deinen mühen, bin schon einige schritte weiter gekommen. Der "IST" DOIF geht jetzt super. (musste ihn auf ON:OFF ändern).
Jedoch macht der Luefter DOIF noch etwas sorgen.
Bin mir nicht sicher ob es überhaupt so funktionieren kann, denn noch hängt der Dino am Raspi und ich simuliere die Eingänge per Pythonscript, in der nächsten freien Minute werde/wollte ich vielleicht das schalten der Relais noch mit einpflegen, war mir aber für eine Simulation bisher zu viel aufwand.
Jedenfalls habe ich das Problem das die Relais nur 1x mal bei "up" hoch und 1x bei "down" runterschalten, egal was ich für einen Eingang Simuliere.
War der Meinung oder hatte gehofft das die Relais solange an und aus gehen bis der gewünschte Eingang erscheint.
Ich glaube in der Lüfter DOIF kommt die Rückmeldung nicht welche Stufe aktuell ansteht.
Zu deinen Fragen...
Es sind 4 Relais eingebunden weil 4 auf dem Board drauf waren (ist ein DINO Ethernet board von kmtronic 4Digi IN + 4 Relais)
Mein Nachbar hat die selbe Belüftungsanlage, mir würden dann nur noch 4 digitale Eingänge fehlen und ich könnte seine mit ans "NETZ" nehmen
das attr von 19 und den anderen hat selbst hinzugefügt, weiß nicht warum und wieso
MFG Rico
Zitat von: rico5588 am 14 März 2016, 18:21:52Jedenfalls habe ich das Problem das die Relais nur 1x mal bei "up" hoch und 1x bei "down" runterschalten, egal was ich für einen Eingang Simuliere.
Was zeigt das Event-Logging?
Zitat von: rico5588 am 14 März 2016, 18:21:52mir würden dann nur noch 4 digitale Eingänge fehlen und ich könnte seine mit ans "NETZ" nehmen
Kannst ja mit einem Binary-Encoder (http://www.learnabout-electronics.org/Digital/dig44.php) die Anzahl der Eingänge vergrößern. Musst dann aber das "Ist"-DOIF wieder anpassen.
Das mit dem Binären Code habe ich mir auch schon mal überlegt, obwohl mir die Umsetzung momentan noch zu hoch ist. Ich möchte erstmal eine Anlage ordentlich ans laufen bringen.
Bei dem einmal hoch und einmal runter hatte ich vergessen zu schreiben dass das jeweils nur einmal geht(das ist mein Aktuelles Problem) wenn ich das zweitemal in die selbe Richtung drücke passiert nichts. Auch wenn ich mich z.b. in stufe 1 befinde und die stufe 3 drücke geht leider auch noch nichts...
Hallo alle miteinander,
bin leider erst heute wieder zu meinem Projekt gekommen.
Habe heute meinen Arduino DINO mit meiner Belüftungsanlage gepaart und bin froh das zumindest die grundzüge erstmal Funktionieren.
Das durchschalten mit den Relais geht in beiden Richtungen super. Die Rückmeldungen kommen auch aaaberrrr.
Ich habe bei den Eingängen noch ein paar Fehler.
Das heisst in meiner IST DOIF steckt irgentwo der Wurm.
So ist die Theorie
Es gibt 4 Schalt zustände, Input16 = on (Stufe1) Input17 = on (stufe2) Input18 = on (stufe3) und Alle drei = off (Stufe0)
So der Code
([Input16:"on"]) DOELSEIF ([Input17:"on"]) DOELSEIF ([Input18:"on"])DOELSE ([Input17:"off"][Input18:"off"][Input16:"off"])
und so die Fehlerauswertung
2016.03.20 17:55:54 5 : FRM:>902000
2016.03.20 17:55:54 5 : FRM:<920100
2016-03-20 17:55:54 DOIF IST cmd_nr: 1
2016-03-20 17:55:54 DOIF IST cmd_event: Input16
2016-03-20 17:55:54 DOIF IST 1
2016.03.20 17:55:54 5 : FRM:>900000
2016.03.20 17:55:56 5 : FRM:>902000
2016.03.20 17:55:56 5 : FRM:<920200
2016.03.20 17:55:56 2 : IST: 001: Unknown command 001, try help.
2016-03-20 17:55:56 DOIF IST cmd_nr: 4
2016-03-20 17:55:56 DOIF IST cmd_event: Input16
2016-03-20 17:55:56 DOIF IST error: 001: Unknown command 001, try help.
2016-03-20 17:55:56 DOIF IST 0
2016-03-20 17:55:56 DOIF IST cmd_nr: 2
2016-03-20 17:55:56 DOIF IST cmd_event: Input17
2016-03-20 17:55:56 DOIF IST 2
2016.03.20 17:55:56 5 : FRM:>900000
2016.03.20 17:55:58 5 : FRM:>902000
2016.03.20 17:55:58 5 : FRM:<920400
2016.03.20 17:55:58 2 : IST: 100: Unknown command 100, try help.
2016-03-20 17:55:58 DOIF IST cmd_nr: 4
2016-03-20 17:55:58 DOIF IST cmd_event: Input17
2016-03-20 17:55:58 DOIF IST error: 100: Unknown command 100, try help.
2016-03-20 17:55:58 DOIF IST 0
2016-03-20 17:55:58 DOIF IST cmd_nr: 3
2016-03-20 17:55:58 DOIF IST cmd_event: Input18
2016-03-20 17:55:58 DOIF IST 3
2016.03.20 17:55:58 5 : FRM:>900000
2016.03.20 17:56:00 5 : FRM:>902000
2016.03.20 17:56:00 5 : FRM:<920000
2016.03.20 17:56:00 2 : IST: 010: Unknown command 010, try help.
2016-03-20 17:56:00 DOIF IST cmd_nr: 4
2016-03-20 17:56:00 DOIF IST cmd_event: Input18
2016-03-20 17:56:00 DOIF IST error: 010: Unknown command 010, try help.
2016-03-20 17:56:00 DOIF IST 0
2016.03.20 17:56:00 5 : FRM:>900000
"Das kommt wenn ich einmal durch schalte"
Ich vermute wenn der IST DOIF richtig wäre würde die Fernbedienung auch funtkionieren.
Das DOELSE muss ein DOELSEIF sein. Sonst müsste die Abfrage aus den runden Klammern weg, DOELSE hat nur einen Befehlsteil, keinen Triggerteil.
Ich weiss nicht, ob es wichtig ist, aber ich würde mal nach den Leerzeichen schauen und im letzten DOELSEIF and dazwischen setzen.
Und mach mal ein list auf IST.
Die sachen mal schnell umgesetzt.
Ergebniss
Stufe 1,2 und 3 gehen super nur 0 wird nicht als stufe erkannt (alles OFF)
CODE
([Input16:"on"])DOELSEIF([Input17:"on"])DOELSEIF([Input18:"on"])DOELSEIF([Input17:"off"]and[Input18:"off"]and[Input16:"off"])
Ich hoffe du meindest den Eventmonitor mit LIST? (Und mach mal ein list auf IST.)
2016-03-20 18:48:17 DOIF IST cmd_nr: 2
2016-03-20 18:48:17 DOIF IST cmd_event: Input17
2016-03-20 18:48:17 DOIF IST 2
2016-03-20 18:48:19 DOIF IST cmd_nr: 3
2016-03-20 18:48:19 DOIF IST cmd_event: Input18
2016-03-20 18:48:19 DOIF IST 3
2016-03-20 18:48:29 DOIF IST cmd_nr: 1
2016-03-20 18:48:29 DOIF IST cmd_event: Input16
2016-03-20 18:48:29 DOIF IST 1
2016-03-20 18:48:31 DOIF IST cmd_nr: 2
2016-03-20 18:48:31 DOIF IST cmd_event: Input17
2016-03-20 18:48:31 DOIF IST 2
2016-03-20 18:48:32 DOIF IST cmd_nr: 3
2016-03-20 18:48:32 DOIF IST cmd_event: Input18
2016-03-20 18:48:32 DOIF IST 3
Hier noch der Fehler vom IST DOIF
perl error in condition: EventDoIf('Input17',$hash,'off',1)andEventDoIf('Input18',$hash,'off',1)andEventDoIf('Input16',$hash,'off',1): syntax error at (eval 1528) line 1, near ")andEventDoIf"
Zitat von: rico5588 am 20 März 2016, 18:51:12
Die sachen mal schnell umgesetzt.
Ergebniss
Stufe 1,2 und 3 gehen super nur 0 wird nicht als stufe erkannt (alles OFF)
CODE
([Input16:"on"])DOELSEIF([Input17:"on"])DOELSEIF([Input18:"on"])DOELSEIF([Input17:"off"]and[Input18:"off"]and[Input16:"off"])
Ich hoffe du meindest den Eventmonitor mit LIST? (Und mach mal ein list auf IST.)
2016-03-20 18:48:17 DOIF IST cmd_nr: 2
2016-03-20 18:48:17 DOIF IST cmd_event: Input17
2016-03-20 18:48:17 DOIF IST 2
2016-03-20 18:48:19 DOIF IST cmd_nr: 3
2016-03-20 18:48:19 DOIF IST cmd_event: Input18
2016-03-20 18:48:19 DOIF IST 3
2016-03-20 18:48:29 DOIF IST cmd_nr: 1
2016-03-20 18:48:29 DOIF IST cmd_event: Input16
2016-03-20 18:48:29 DOIF IST 1
2016-03-20 18:48:31 DOIF IST cmd_nr: 2
2016-03-20 18:48:31 DOIF IST cmd_event: Input17
2016-03-20 18:48:31 DOIF IST 2
2016-03-20 18:48:32 DOIF IST cmd_nr: 3
2016-03-20 18:48:32 DOIF IST cmd_event: Input18
2016-03-20 18:48:32 DOIF IST 3
Hier noch der Fehler vom IST DOIF
perl error in condition: EventDoIf('Input17',$hash,'off',1)andEventDoIf('Input18',$hash,'off',1)andEventDoIf('Input16',$hash,'off',1): syntax error at (eval 1528) line 1, near ")andEventDoIf"
Leerzeichen zwischen den Operatoren sind nicht nur für die Lesbarkeit gut, sondern auch in Perl wie in jeder anderen höheren Sprache erforderlich, daher:
([Input16:"on"]) DOELSEIF ([Input17:"on"]) DOELSEIF ([Input18:"on"]) DOELSEIF ([Input17:"off"] and [Input18:"off"] and [Input16:"off"])
Gruß
Damian
OK der Perl error ist nun weg aber den state 0 bei alles off habe ich noch nich nicht erreicht.
Zitat von: rico5588 am 20 März 2016, 19:17:06
OK der Perl error ist nun weg aber den state 0 bei alles off habe ich noch nich nicht erreicht.
Zitat aus der Commandref zu DOIF:
ZitatDie logische Verknüpfung "and" mehrerer Ereignisse ist nicht sinnvoll, da zu einem Zeitpunkt immer nur ein Ereignis zutreffen kann.
Daher kann bei dir
([Input17:"off"] and [Input18:"off"] and [Input16:"off"])
nie wahr werden.
evtl. hilft schon den Status abfragen:
([Input17] eq "off" and [Input18] eq "off" and [Input16] eq "off")
Das mit den Leerzeichen wollte ich auch schreiben, man erkennt es gut an der in der Fehlermeldung fehlenden Trennung.
Zitat von: Damian am 20 März 2016, 19:11:04sondern auch in Perl wie in jeder anderen höheren Sprache erforderlich
Viele Sprachen nehmen auch "Sonderzeichen" als Trennung. Das ist bei Perl etwas spezieller (RegEx!).
Hab den IST DOIF wie folgt angepasst und der geht jetzt auch einwandfrei
([Input16] eq "on" and [Input17] eq "off" and [Input18] eq "off") DOELSEIF ([Input16] eq "off" and [Input17] eq "on" and [Input18] eq "off") DOELSEIF ([Input16] eq "off" and [Input17] eq "off" and [Input18] eq "on") DOELSEIF ([Input16] eq "off" and [Input17] eq "off" and [Input18] eq "off")
allerdings geht mein Luefter DOIF noch nicht so richtig
([stufe] > [IST]) (set Relais3 on) (set Relais3 off) (set Relais2 off) DOELSEIF ([stufe] < [IST]) (set Relais2 on) (set Relais2 off) (set Relais3 off)DOELSEIF ([stufe] = [IST]) (set Relais3 off) (set Relais2 off)
Habe verschiedene möglichkeiten versucht.
Wenn ich repeatcmd 1 reinmache läuft er endlos durch, las ich ihn weg kann ich nicht von der stufe 3 auf die stufe 1 oder von 1 auf 3. Er bleibt dann immer beim ersten stufenwechsel stehen und muss danach wieder initialized werden.
an dieser stelle schon mal ein Dank an euch beiden für die Hilfe bisher ;)
Statt
(set Relais3 on) (set Relais3 off) (set Relais2 off)
besser
(set Relais3 off) (set Relais3 on) (set Relais3 off)
Und dann mal do always testen.
Fällt mir gerade ein: mit
set Relais3 on-for-timer 1
wärst du unabhängig vom DOIF-Durchlauf und immer auf der sicheren Seite.
wait wird dann auf
wait 2:2
verkürzt.
Allerdings kenne ich die Arduino-Module nicht und mangels einem kann ich auch keins zum Nachschauen definieren.
Könntest du mir das noch etwas genauer beschreiben.
"Fällt mir gerade ein: mit
set Relais3 on-for-timer 1
wärst du unabhängig vom DOIF-Durchlauf und immer auf der sicheren Seite.
wait wird dann auf
wait 2:2"
Habe noch ein Problem mit dem Arduino Sketch, das Ding stürzt immer nach ein paar Stunden ab. Beim Reset sagt er mir "error
Unhandled sysex command"
Ich war der Annahme das das Sketch zu groß ist für das Dino Board, bin aber mittlerweile bei 67% Speicherauslastung...das kann es bald nicht mehr sein. UDP habe ich rausgenommen und der Rest läuft auf minimal Konfiguration. Bin für weiteres Tipps Dankbar. zum Glück ist Ostern, da habsch mal Zeit zum Basteln. MFG
Zitat von: rico5588 am 24 März 2016, 15:45:58Könntest du mir das noch etwas genauer beschreiben.
Wenn ein neuer Trigger kommt, beendet
DOIF den vorhergehenden Commandzweig, auch wenn es, wg.
wait, noch nicht bis zum letzten Befehlsblock (Klammernpaar) gekommen ist.
Damit kann (!) es passieren, dass der letzte
set Relais_xy off nicht mehr ausgeführt wird. Deshalb habe ich ihn am Anfang wiederholt.
Durch
on-for-timer wird
set Relais_xy off IMMER ausgeführt, weil es ein geräteinterner (oder entsprechend simulierter) Befehl ist und von
DOIF halt unabhängig ausgeführt wird. Für
sleep müsste man trixen (
{fhem("sleep 1;set ..."}) und
at finde ich hier zu oversized.
Und weil es statt 2 bzw. 3 Klammerpaaren nur noch eins ist, wird
wait auch entsprechend "verkleinert".
Zum Arduino darfst du von mir keine Hilfe erwarten.
Hm, hat das nun geklappt oder bist du ohne Heizung erfroren?
Hallo Per,
das DOIF geht mit dem On for timer recht gut, nur um genaueres zu sagen müsste mein Arduino erstmal stabil laufen.
Ich kämpfe nach wie vor daran das mir dieses kleine S......... Ding immer wieder nach ein paar Stunden abstürzt. Genauer gesagt es zeigt mir keine Eingänge und auf Relais schaltvorgänge in Fhem reagiert es auch nicht.Ein Neustart oder USB anschließen Hilft meistens schon damit er wieder reagiert.
Bin jetzt auf ein Sketch vom Hersteller zurück gegangen wo es funktioniert. Nachteil hier es ist web basierend. und damit müsste ich in fhem alle paar Sekunden eine abfrage über den zustand der Eingänge und Relais machen. Da war mir die Firmata Version wo mir der Arduino meldet wenn sich was ändert lieber....
das so weit zum Aktuellen stand.
Gibt es eine Möglichkeit den internen Ablauf zu loggen um herauszubekommen. wann er wo sich aufhängt?
Mein Sketch ist eigentlich nur ca.65% vom Speicher groß - das sollte doch ausreichend platz sein oder?
MFG Rico
Hallo alle miteinander,
ich bin wieder ein Stück weiter um nicht zu sagen Fertig mit dieser Baustelle.
Mein DOIF sieht momentan so aus.
([stufe] != [IST] and [lueftunghauptschalter] eq "on") (set Relais2 on-for-timer 1)
Im prinzip so --> Schalte Relais 2 so lange an und aus bis stufe und ist den gleichen Wert haben.
Alles andere kommt immer wieder durcheinander und endet meist in einer Endlosschleife.
Mein Absturzfehler konnte ich zumindest gut umgehen.
Erst war ich ja der Meinung das es am Netzteil liegt, aber nach dem 6 Netzteil konnte es das nicht sein. Habe dann verschiedene Firmata Verisonen getestet, aber alles ohne Erfolg.
Bis ich dann, warum auch immer, 1 Relais im 1 minuten Takt an und aus gehen lassen habe, um heraus zu bekommen wie lange er durchhält bis er abstürzt. Nach 3 Tagen dauer klick-klack und einigen Forumsstunden habe ich dann den Tip gefunden, dass man in einem bestimmten Zeitfenster ein Befehl senden muss, da er bei zu großer Pause sich aufhängt?!?!
Habe nun als Lösung ein pin als Relais den es so gar nicht gibt. aller 1 Stunde an und aus gehen lassen und seit dem Läuft er ohne Probleme durch.
Thema ist dennoch gelöst..
Habe gleich noch einen DOIF gepastelt, vielleicht hilft es jemandem.
Es geht darum die Lüftungsanlage nach einem Muster Automatisch ein und auszuschalten.
([test3] > 1200 and [10:00-15:00|8] and [Luma] == 1 or [11:30-12:00] and [Luma] == 1 or [test3] > 1200 and [10:00-12:00|7] and [Luma] == 1 or [test3] > 1200 and [14:00-16:00|7] and [Luma] == 1) (set stufe 4)
DOELSEIF ([Luma] == 4) (set stufe 4, set Luma 1)
DOELSEIF ([Luma] == 3) (set stufe 3, set Luma 1)
DOELSEIF ([Luma] == 2) (set stufe 2, set Luma 1)
DOELSE (set stufe 1)
#([test3] > 1200 and [10:00-15:00|8] or [11:30-12:00] or [test3] > 1200 and [10:00-12:00|7] or [test3] > 1200 and [14:00-16:00|7]) (set stufe 4) DOELSE (set stufe 1)
# [10:00-15:00|8] == 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we)
##(Luma = Lüfterstufe manuel (1=Auto,2=Stufe1,3=Stufe2,4=Stufe3,5=Stufeoff)
##(stufe = direkte stufe der Lüftungsanalge (1=off, 2=Stufe1, 3=Stufe2 und 4=Stufe3)
##An Bedingung --> (Luma = Rc Lüftermanuel, [test3]=Solarüberschuss)
## Solar über 1200 Watt überschuss + Werktag von 10:00-15:00 Uhr + Luma 1
## Solar über 1200 Watt überschuss + Wochenende von 10:00-12:00 Uhr + Luma 1
## Solar über 1200 Watt überschuss + Wochenende von 14:00-16:00 Uhr + Luma 1
## jeden Tag von 11:30 bis 12:00 + Luma 1
##mit attr wait 0:2,1800:2,1800:2,1800:900
## Luma = 4 --> Stufe 4 für 30 min --> dann luma set 1
## Luma = 3 --> Stufe 3 für 30 min --> dann luma set 1
## Luma = 2 --> Stufe 2 für 30 min --> dann luma set 1
Bis bald Rico