FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wkarl am 20 Juli 2015, 07:38:35

Titel: [gelöst] serielles Abarbeiten von Anweisungen
Beitrag von: wkarl am 20 Juli 2015, 07:38:35
Hallo,

für unsere Bewässerung habe ich für die serielle Ansteuerung der einzelnen Stränge folgendes Konstrukt mit at:
IrrigationWF_Start.(on|off) {
    if ($EVENT eq "on") {
    fhem("set Irrigation_0._Sw_0. off");
    fhem("set SwitchSocketPwr_12_Sw on");
    fhem("define sprinkle_Irr01Sw01 at +00:00:05 set Irrigation_01_Sw_04 on-for-timer 1800");
    fhem("define sprinkle_Irr01Sw02 at +00:30:00 set Irrigation_02_Sw_02 on-for-timer 1800");
    fhem("define sprinkle_Irr01Sw03 at +01:00:00 set Irrigation_01_Sw_03 on-for-timer 1800");
    fhem("define sprinkle_Irr01Sw04 at +01:30:00 set Irrigation_01_Sw_01 on-for-timer 1800");
    fhem("define sprinkle_Irr02Sw01 at +02:00:00 set Irrigation_01_Sw_02 on-for-timer 1800");
    fhem("define sprinkle_TheEnd at +02:30:00 set IrrigationWF_Start,SwitchSocketPwr_12_Sw off");
        }
elsif ($EVENT eq "off") {
    fhem("delete sprinkle_.*");
        fhem("set SwitchSocketPwr_12_Sw,Irrigation_0._Sw_0. off");
        }
}


Die letzten Tage habe habe ich mich durch commandref, wiki, etc gewühlt, um evtl eine (elegantere) Alternative zu finden. Ohne Erfolg. Hat jemand ähnliche schon mal umgesetzt und kann mir seine Lösung zur Verfügung stellen?

Danke und ciao walter
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: RoBra81 am 20 Juli 2015, 07:46:10
Hallo,

sieh dir mal DOIF an, da kann man schön Zeiten programmieren und mit den neuen Features (siehe http://forum.fhem.de/index.php/topic,39070.msg312029.html#msg312029) müsstest du dein at sehr gut ersetzen können...

Ronny
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: frank am 20 Juli 2015, 09:33:42
sprinkle/sprinkleControl
http://www.fhemwiki.de/wiki/Bew%C3%A4sserungssteuerung (http://www.fhemwiki.de/wiki/Bew%C3%A4sserungssteuerung)
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: wkarl am 20 Juli 2015, 11:43:47
Hallo Ronny,

DOIF hatte ich hach schon in Betracht hatte ad hoc aber keinen Ansatz gefunden. Sehe es mir nochmal genauer an.

@frank: hatte ich vergessen zu erwähnen. sprinkle hatte ich verworfen, da ich aktuell keine Feuchtigkeitsfühler im Einsatz habe und nach meinem Verständnis die Reihenfolge der Stränge nicht vorgegeben werden kann.

Danke Euch beiden für die Hinweise.

ciao walter
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: herrmannj am 20 Juli 2015, 14:01:54
Hi

Du könntest doch anstelle der "at" definitionen jeweils ein (fhem) zwischen die Anweisungen setzen.

Also "set x on-for-timer 10; sleep 10; set y on-for-timer 10; sleep 10" ...

Das erscheint mir einfacher.

Achtung perl sleep blockiert, fhem sleep nicht.

vg
joerg
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: Damian am 20 Juli 2015, 15:58:43
Zitat von: RoBra81 am 20 Juli 2015, 07:46:10
Hallo,

sieh dir mal DOIF an, da kann man schön Zeiten programmieren und mit den neuen Features (siehe http://forum.fhem.de/index.php/topic,39070.msg312029.html#msg312029) müsstest du dein at sehr gut ersetzen können...

Ronny

wäre dann z. B.

define di_sprinkle DOIF ([IrrigationWF_Start:?on])
    (set Irrigation_0._Sw_0. off, set SwitchSocketPwr_12_Sw on)
    (set Irrigation_01_Sw_04 on-for-timer 1800)
    (set Irrigation_02_Sw_02 on-for-timer 1800)
    (set Irrigation_01_Sw_03 on-for-timer 1800)
    (set Irrigation_01_Sw_01 on-for-timer 1800)
    (set Irrigation_01_Sw_02 on-for-timer 1800)
    (set IrrigationWF_Start off, set SwitchSocketPwr_12_Sw off)
DOELSEIF ([IrrigationWF_Start:?off])
(set SwitchSocketPwr_12_Sw off, set Irrigation_0._Sw_0. off)

attr di_sprinkle wait 0,5,25,30,60,90,0


Gruß

Damian
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: wkarl am 21 Juli 2015, 06:33:24
Hallo Damian,

Zitat von: Damian am 20 Juli 2015, 15:58:43
wäre dann z. B.

define di_sprinkle DOIF ([IrrigationWF_Start:?on])
    (set Irrigation_0._Sw_0. off, set SwitchSocketPwr_12_Sw on)
    (set Irrigation_01_Sw_04 on-for-timer 1800)
    (set Irrigation_02_Sw_02 on-for-timer 1800)
    (set Irrigation_01_Sw_03 on-for-timer 1800)
    (set Irrigation_01_Sw_01 on-for-timer 1800)
    (set Irrigation_01_Sw_02 on-for-timer 1800)
    (set IrrigationWF_Start off, set SwitchSocketPwr_12_Sw off)
DOELSEIF ([IrrigationWF_Start:?off])
(set SwitchSocketPwr_12_Sw off, set Irrigation_0._Sw_0. off)

attr di_sprinkle wait 0,5,25,30,60,90,0



funktioniert das bei Dir? Dies habe ich auch so aus dem zitiertem thread interpretiert. Allerdings kommt es bei mir zu folgender Fehlermeldung:
Zitatrrigation_WF02 DOIF: expected DOELSEIF or DOELSE: (set Irrigation_01_Sw_04 on-for-timer 1800) (set Irrigation_02_Sw_02 on-for-timer 1800) (set Irrigation_01_Sw_03 on-for-timer 1800) (set Irrigation_01_Sw_01 on-for-timer 1800) (set Irrigation_01_Sw_02 on-for-timer 1800) (set IrrigationWF_Start off, set SwitchSocketPwr_12_Sw off)DOELSEIF ([IrrigationWF_Start:?off])   (set SwitchSocketPwr_12_Sw off, set Irrigation_0._Sw_0. off)

Fehlerfrei angenommen wird:
define di_sprinkle DOIF ([IrrigationWF_Start:?on])
    (set Irrigation_0._Sw_0. off, set SwitchSocketPwr_12_Sw on,
    set Irrigation_01_Sw_04 on-for-timer 1800,
    set Irrigation_02_Sw_02 on-for-timer 1800, ...


Allerdings hat hier dann wait mit Komma keine Auswirkungen :-(

ciao walter
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: RoBra81 am 21 Juli 2015, 07:05:10
Hast du die Version aus dem Thread genommen? Ich glaube die Änderungen sind noch nicht im Update...

Ronny
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: wkarl am 21 Juli 2015, 07:55:04
Ok, das wäre natürlich eine Möglichkeit ;-)

ciao walter
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: wkarl am 21 Juli 2015, 14:53:30
Hallo Damian,

[quote author=Damian link=topic=39304.msg314574#msg314574 date=1437400723]
attr di_sprinkle wait 0,5,25,30,60,90,0

[/quote]

Das Verhalten zeigt sich bei mir etwas anders. Mit dem obigen wait wurden die Wartezeiten zwischen den Kommandos immer länger.

attr di_sprinkle wait 0,5,25,25,25,25,0[/code]
Macht es wie es soll. Finde ich besser da man die 'on-for-timer' nicht immer dazurechnen muss.

ciao walter
Titel: Antw:serielles Abarbeiten von Anweisungen
Beitrag von: Damian am 21 Juli 2015, 15:01:36
Zitat von: wkarl am 21 Juli 2015, 14:53:30
Hallo Damian,

Das Verhalten zeigt sich bei mir etwas anders. Mit dem obigen wait wurden die Wartezeiten zwischen den Kommandos immer länger.

attr di_sprinkle wait 0,5,25,25,25,25,0

Macht es wie es soll. Finde ich besser da man die 'on-for-timer' nicht immer dazurechnen muss.

ciao walter

Du hast recht. Ich habe zwar Differenzen in deinem Beispiel berücksichtigt, aber fälschlicherweise auf den Vorgängerzeitpunkt und nicht auf den Anfangszeitpunkt.

Gruß

Damian

Titel: Antw:[gelöst] serielles Abarbeiten von Anweisungen
Beitrag von: wkarl am 22 Juli 2015, 11:56:30
gestern Abend erfolgreich durchgelaufen. Super Erweiterung.

Danke und ciao
walter