DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe

Begonnen von Damian, 06 November 2015, 22:05:57

Vorheriges Thema - Nächstes Thema

moonsorrox

Zitat von: Damian am 22 Februar 2016, 18:34:51
@moonsorrox

Wenn man einen nicht numerischen Wert mit größer oder kleiner vergleicht, dann gibt es eine Warnung vom Perl-Interpreter, denn dieser wertet die Bedingung aus. Ich habe es mit der jetzigen Version, wie auch mit einer vom Mai getestet und in beiden Fällen kommt diese Warnung. Es ist also immer schon so gewesen.

Gruß

Damian

Problem ist mit einem numerischen Wert funktioniert es nicht..! muss ich das wohl akzeptieren oder irgendwie ändern.
Hatte da schon einige Versuche, aber da ging gar nichts mehr  :-\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Das neue DOIF hat eine Ausgabeformatierung http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen , damit kannst Du den Wert über eine Regex vielleicht verändern:

[<Geraet>:<Reading>:"s/<zu suchender Begriff>/<Ersatzwert>/"]

Der zu suchende Begriff und der Ersatzwert können reguläre Ausdrücke sein.

Eine umfangreiche Beschreibung dazu findest Du hier http://perldoc.perl.org/perlre.html


Damian

Zitat von: Ellert am 22 Februar 2016, 19:15:32
Das neue DOIF hat eine Ausgabeformatierung http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen , damit kannst Du den Wert über eine Regex vielleicht verändern:

[<Geraet>:<Reading>:"s/<zu suchender Begriff>/<Ersatzwert>/"]

Der zu suchende Begriff und der Ersatzwert können reguläre Ausdrücke sein.

Eine umfangreiche Beschreibung dazu findest Du hier http://perldoc.perl.org/perlre.html

Das mit dem Suchen und Ersetzen geht bei dem neuen Features so nicht. Es wird gematched und Sachen in runden Klammern werden in Variablen $1, $2 usw. abgespeichert (Perlfunktinalität), auf die man im letzten Parameter Output wieder zugreifen kann.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Würde sowas funktionieren ?[<Geraet>:<Reading>:d:($1 == 0 ? "Runter" : "none")]

Damian

Zitat von: Ellert am 22 Februar 2016, 20:18:24
Würde sowas funktionieren ?[<Geraet>:<Reading>:d:($1 == 0 ? "Runter" : "none")]

von der Syntax schon, aber die Warnung lautet:

Zitat2016.02.21 14:32:15 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 196330) line 1.

Es sind ja die nicht numerischen Werte das Problem und nicht die numerischen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Damian am 22 Februar 2016, 20:42:07
von der Syntax schon, aber die Warnung lautet:

Es sind ja die nicht numerischen Werte das Problem und nicht die numerischen.

Ja, mir ging es mehr ums Prinzip. Also, ob ich den Output beliebig manipulieren kann.

Das ist interessant für HM-Heizkörperventile, dort kann die desired-temp numerisch sein, aber auch  "on" oder "off".

Mit der Outputoption könnte man jetzt on/off durch 99/0 ersetzen und die Warnungen vermeiden, die durch numerische Vergleiche entstehen.

Damian

Zitat von: Ellert am 23 Februar 2016, 10:31:48
Ja, mir ging es mehr ums Prinzip. Also, ob ich den Output beliebig manipulieren kann.

Das ist interessant für HM-Heizkörperventile, dort kann die desired-temp numerisch sein, aber auch  "on" oder "off".

Mit der Outputoption könnte man jetzt on/off durch 99/0 ersetzen und die Warnungen vermeiden, die durch numerische Vergleiche entstehen.

genau, ist doch schön zu sehen, dass die neue Funktionalität durchaus Praxisrelevanz hat  :)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

ich bin da momentan am probieren aber scheitere leider...!
Irgendwie bin ich da nicht ganz auf der Höhe mit diesen readings.

Könnt ihr da mal einen Blick drauf nehmen in dem Beitrag habe ich das Problem und das list, ebtl. mal ein Zeile mit dieser neuen Syntax mir auf die Sprünge helfen.

Was ich auch nicht hin bekomme ist das er morgens nach dem hoch fahren, wieder runter fährt weil er wohl den "last_state" benutzt..!  :-\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

eigentlich funktioniert der Rollladen für meine Terrassentür die ganze Woche über, aber heute weil wohl Samstag ist blieb er wieder mal unten.... ich dachte das Thema wäre erledigt aber leider nicht und ich habe keinen Ansatz wo ich suchen soll... macht er doch am Wochennende das selbe wie in der Woche nur das er etwas später hoch fährt.

Diese Meldungen habe ich im Log, die haben mich bisher auch nicht gestört und sind in der Woche auch nicht so zahlreich, gemeint ist das mit dem "numeric"

2016.03.05 08:29:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097753) line 1.
2016.03.05 08:29:49 1: PERL WARNING: Argument "Hoch" isn't numeric in numeric le (<=) at (eval 3097752) line 1.
2016.03.05 08:28:52 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097532) line 1.
2016.03.05 08:28:52 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097526) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097520) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097519) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097514) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097513) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097508) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097507) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097502) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097501) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097496) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097495) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097490) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097489) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097484) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097483) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097478) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097477) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097472) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097471) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097466) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097465) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097459) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097458) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097453) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097452) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097446) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097445) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097440) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097439) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097434) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097433) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097428) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097427) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097422) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097421) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097416) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097415) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097410) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097409) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097404) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097403) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097398) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097397) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097392) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097391) line 1.
2016.03.05 08:15:09 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3094350) line 1.
2016.03.05 08:15:09 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3094349) line 1.
2016.03.05 08:15:00 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3094343) line 1.
2016.03.05 08:15:00 3: CUL_HM set RollladenWZT off
2016.03.05 08:15:00 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3094335) line 1.
2016.03.05 08:15:00 3: CUL_HM set RollladenWZT on


das ist mein ausführendes DOIF:


([?du_RolloWZmodus] eq "FHEM" and ([[du_RolloZeitWZ_hoch]|8] or [[du_RolloZeitWZ_hoch_WoE]|7])) (set RollladenWZT on)
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [WZ_TK_Terrasse:state] eq "closed" and [{sunset("CIVIL",-100,"16:35","22:20")}|78]) (set RollladenWZT off)
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [du_Tageslicht] eq "dunkel" and [RollladenWZT] eq "Runter" and [WZ_TK_Terrasse:state] eq "open") ## Wenn Rollladen unten und Terrassentür wird geöffnet
(setreading RollladenWZT last_state [RollladenWZT], set RollladenWZT on,set NI3_LichtTerrasse on) ## schreibe die Position des Rollladen in ein Reading und fahre den Rollladen hoch schalte das Licht Terrasse EIN
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [RollladenWZT] <= 100 and [RollladenWZT] eq "open") ## Wenn Rollladen auf einer Position zwischen 0 - 100 und Terrassentür wird geöffnet
(setreading RollladenWZT last_state [RollladenWZT], set RollladenWZT on,set NI3_LichtTerrasse on) ## schreibe die Position des Rollladen in ein Reading und fahre den Rollladen hoch und schalte das Licht Terrasse EIN
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [du_Tageslicht] eq "dunkel" and [RollladenWZT:last_state] <= 99 and [WZ_TK_Terrasse:state] eq "closed") ## Wenn das gespeicherte Reading ein Wert von 0 - 99 hat und die Terrassentür wird geschlossen
(set NI3_LichtTerrasse off,set RollladenWZT [RollladenWZT:last_state]) ## nutze das Reading und fahre den Rollladen in die entsprechende Position zurück und schalte das Licht Terrasse AUS


warum funktioniert das nun am WoEnde nicht so wie in der Woche, übersehe ich etwas..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Zitat([?du_RolloWZmodus] eq "FHEM" and ([[du_RolloZeitWZ_hoch]|8] or [[du_RolloZeitWZ_hoch_WoE]|7])) (set RollladenWZT on)
Das sieht nicht verkehrt aus.

Das letzte DOIF update gab es gestern, also am Besten heute noch updaten und weiter beobachten und "shutdown restart" nicht vergessen.

siehe auch hier: https://forum.fhem.de/index.php/topic,50142.msg419552.html#msg419552

|78 bedeutet jeden Tag, das kannst Du weglassen.

moonsorrox

Zitat von: Ellert am 05 März 2016, 21:37:01
Das sieht nicht verkehrt aus.

deshalb ist es mir ja grad unerklärlich, warum der Rollladen am WoEnde unten bleibt oder er wieder runter fährt, werde morgen früh mal schauen.
Seit ich dieses DOIF umgebaut habe mit den ganzen setreadings Werten ist das glaube ich so... gefallen tut mir das alles noch nicht, aber es sollte ja für die kommende Sommerzeit  die Beschattung durch führen.
Dann ersetze ich nur "FHEM" durch "Beschattung" weil im Moment brauche ich das ja noch nicht und es ist eine sogenannte Testphase, aber diese klappt eben leider noch nicht. Werde es dann auch in einem eigenen Beschattungs DOIF nutzen, weil es übersichtlicher ist...!

Das ganze fahren des Terrassen Rollladen (RollladenWZT) soll dann bei Beschattung auch funktionieren, damit ist das hoch/runter fahren bei öffnen der Terrassentür gemeint und dann werden die setreadings und last_state Werte genutzt.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 06 März 2016, 02:07:41
deshalb ist es mir ja grad unerklärlich, warum der Rollladen am WoEnde unten bleibt oder er wieder runter fährt, werde morgen früh mal schauen.
Seit ich dieses DOIF umgebaut habe mit den ganzen setreadings Werten ist das glaube ich so... gefallen tut mir das alles noch nicht, aber es sollte ja für die kommende Sommerzeit  die Beschattung durch führen.
Dann ersetze ich nur "FHEM" durch "Beschattung" weil im Moment brauche ich das ja noch nicht und es ist eine sogenannte Testphase, aber diese klappt eben leider noch nicht. Werde es dann auch in einem eigenen Beschattungs DOIF nutzen, weil es übersichtlicher ist...!

Das ganze fahren des Terrassen Rollladen (RollladenWZT) soll dann bei Beschattung auch funktionieren, damit ist das hoch/runter fahren bei öffnen der Terrassentür gemeint und dann werden die setreadings und last_state Werte genutzt.

Dein Ausdruck ist recht komplex, daher Analyse schwierig. Es ist immer tückisch bei vielen Zweigen ohne DOELSE zu arbeiten insb. wenn man kein do always definiert hat. Denn, wenn dein Zustand von cmd_1 nicht zwischendurch in einen anderen wechselt, dann wird logischerweise am nächsten Tag nicht noch mal cmd_1 ausgeführt.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

OK, Danke Damian, ich werde mich der ganzen Sache nochmals annehmen und "Neu" aufbauen..! Ich lasse erst einmal das ganze setreadings Gedöns weg  ;)
Danach werde ich mir ein komplette Beschattungssteuerung mit Temperatur, Helligkeit, Beschattungsendzeit usw. aufbauen...
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Tueftler1983

Hallo ist es mitterweile möglich in dEM Beispiel:
(Bedingun) (Event1) (Event2)
Das das Event2, wiederholt wird?  Würde gerne ein Event 8 mal wiederholen.

Ellert