neue Features: set <DOIF_Modul> cmd_<NR>, Zeitvariablen $md $ymd

Begonnen von Damian, 31 Januar 2017, 20:43:08

Vorheriges Thema - Nächstes Thema

Damian

Mit der neuen Version ist es nun möglich Befehlszweige bzw. Zustände über einen set-Befehl bedingungslos auszulösen.

Die Syntax lautet:

set <DOIF_Modul> cmd_<NR>

Der Befehl hat folgende Eigenschaften:

1) es wird der Ausführungszweig mit der Nummer <NR> (cmd_1, cmd_2, cmd_3, usw. ) bedingungslos ausgeführt
2) der set-Befehl übersteuert alle Attribute wie z. B. wait, do, usw.
3) ein laufender Wait-Timer wird unterbrochen.
4) beim deaktivierten oder im Modus disable befindlichen Modul wird der set Befehl ignoriert.

Die Übersteuerung der Befehlsausführung lässt sich damit leicht über das Webinterface vornehmen.

Bsp.: Schaltbare Lampe über Fernbedienung und Webinterface

define di_lamp DOIF ([FB:"on"]) (set lamp on) DOELSEIF ([FB:"off"]) (set lamp off)
attr di_lamp cmdState on|off
attr di_lamp devStateIcon on:on:cmd_2 initialized|off:off:cmd_1


Das Anklicken des on/off-Lampen-Icons führt zum Schalten der Lampe.


Edit: Version wurde eingecheckt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich sehe, dass die Version sechs mal geladen wurde.

Wie sind die Erfahrungen? Gibt es noch Ideen zum neuen set cmd-Kommando?

Ansonsten werde ich die Version einchecken.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

Ich habe es bisher nur an einer Stelle genutzt, finde es aber super.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Invers

Finde ich echt toll und funktoniert super an inzwischen vielen Stellen!!!
Bin begeistert. Vielen Dank.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

Als ich diesen Post verfasste https://forum.fhem.de/index.php/topic,66090.msg573383.html#msg573383

empfand ich es als recht kompliziert diesen einfachen Fall (Lampe on/off über Webinterface zu schalten) mit DOIF abzubilden.

Ein paar Stunden später gab´s dann diese Version ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

Ich habe vorher immer noch structures erstellt um alle betroffenen Geräte auf einmal schalten zu können, aber so ist es doch deutlich einfacher.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Ellert

Mir gefällt, dass trotz der Aussage:
Zitat2) der set-Befehl übersteuert alle Attribute wie z. B. wait, do, usw.
in Befehlssequenzen die Wait-Timer wie gewohnt berücksichtigt werden.

Ist in dieser Version auch die Optimierung der indirekten Timer enthalten (checkReadingEvent für indirekte Timer intern als default)?

Damian

#7
Zitat von: Ellert am 08 Februar 2017, 19:26:40
Mir gefällt, dass trotz der Aussage:in Befehlssequenzen die Wait-Timer wie gewohnt berücksichtigt werden.

Ist in dieser Version auch die Optimierung der indirekten Timer enthalten (checkReadingEvent für indirekte Timer intern als default)?

-neben dem neuen set cmd-Kommado, ist checkReadingEvent für indirekte Timer als default drin

-es werden Angaben in eckigen Klammern im Ausführungsteil nur ersetzt, wenn sie auch wirklich ersetzbar sind (also existierende Readings und Devices beinhalten), sonst bleibt der Ausdruck wie er ist, siehe https://forum.fhem.de/index.php/topic,65916.msg571719.html#msg571719

-es wird nur der laufende Timer unterbrochen bzw. der erste übersteuert, die Waittimer der Folgesequenzen werden wie gewohnt abgearbeitet.

-für die Nachvollziehbarkeit der Ausführung, steht im Reading cmd_event das set-Kommando drin, so lässt sich der manuelle Auslöser identifizieren.

- sinnvolle cmd-Befehle werden abhängig von der Definition automatisch erkannt und im set-dropdown Menü angezeigt.

- cmd-Angaben, die es laut Definition nicht gibt, werden bewusst nicht abgefangen, man kann damit einen neuen Zustand setzen, den es sonst nicht gibt z. B. set my_DOIF cmd_99 - wer weiß wofür es gut sein kann ;)

Der Wunsch nach set cmd wurde schon früher geäußert, den Nutzen habe ich damals nicht gesehen. In Verbindung mit dem Webinterface macht die Erweiterung allerdings durchaus Sinn.

Zum Glück war die Realisierung einfacher, als ich befürchtet hatte. :)

Es fehlt nur noch die Doku. Ich denke, das werde ich am Wochenende vervollständigen und dann die Version einchecken.

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

carlos

Diese Version ist super. Ich habe sie schon im Einsatz mit Alexa:
Internals:
   DEF        ([$SELF:mybutton] eq "start")  ({system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:mybutton] eq "stop") ({system ("sudo /etc/init.d/alexa stop > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:mybutton] eq "restart")  ({system ("sudo /etc/init.d/alexa restart > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:mybutton] eq "status")  ({system ("sudo /etc/init.d/alexa status > /dev/null 2>&1 &")})
   NAME       FHEM.Alexa.DOIF
   NR         1553
   NTFY_ORDER 50-FHEM.Alexa.DOIF
   STATE      Alexa running as PID 19053
   TYPE       DOIF
   .userReadings:
   Readings:
     2017-02-09 10:19:32   Device          FHEM.Alexa.DOIF
     2017-02-09 10:19:31   INFO            Alexa running as PID 19053
     2017-02-09 10:19:32   STATUS          on
     2017-02-09 10:08:26   cmd             1
     2017-02-09 10:08:26   cmd_event       FHEM.Alexa.DOIF
     2017-02-09 10:08:26   cmd_nr          1
     2017-02-09 10:19:32   e_FHEM.Alexa.DOIF_mybutton start
     2017-02-09 10:08:26   error           {system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")}: -1
     2017-02-09 10:08:26   mybutton        start
     2017-02-09 10:08:26   state           on
   Condition:
     0          ReadingValDoIf($hash,'FHEM.Alexa.DOIF','mybutton') eq "start"
     1          ReadingValDoIf($hash,'FHEM.Alexa.DOIF','mybutton') eq "stop"
     2          ReadingValDoIf($hash,'FHEM.Alexa.DOIF','mybutton') eq "restart"
     3          ReadingValDoIf($hash,'FHEM.Alexa.DOIF','mybutton') eq "status"
   Devices:
     0           FHEM.Alexa.DOIF
     1           FHEM.Alexa.DOIF
     2           FHEM.Alexa.DOIF
     3           FHEM.Alexa.DOIF
     all         FHEM.Alexa.DOIF
   Do:
     0:
       0          {system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")}
     1:
       0          {system ("sudo /etc/init.d/alexa stop > /dev/null 2>&1 &")}
     2:
       0          {system ("sudo /etc/init.d/alexa restart > /dev/null 2>&1 &")}
     3:
       0          {system ("sudo /etc/init.d/alexa status > /dev/null 2>&1 &")}
   Helper:
     event      STATUS: on,Device: FHEM.Alexa.DOIF,e_FHEM.Alexa.DOIF_mybutton: start
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   FHEM.Alexa.DOIF
     timerevent STATUS: on,Device: FHEM.Alexa.DOIF,e_FHEM.Alexa.DOIF_mybutton: start
     triggerDev FHEM.Alexa.DOIF
     timerevents:
       STATUS: on
       Device: FHEM.Alexa.DOIF
       e_FHEM.Alexa.DOIF_mybutton: start
     timereventsState:
       STATUS: on
       Device: FHEM.Alexa.DOIF
       e_FHEM.Alexa.DOIF_mybutton: start
     triggerEvents:
       STATUS: on
       Device: FHEM.Alexa.DOIF
       e_FHEM.Alexa.DOIF_mybutton: start
     triggerEventsState:
       STATUS: on
       Device: FHEM.Alexa.DOIF
       e_FHEM.Alexa.DOIF_mybutton: start
   Internals:
   Itimer:
   Readings:
     0           FHEM.Alexa.DOIF:mybutton
     1           FHEM.Alexa.DOIF:mybutton
     2           FHEM.Alexa.DOIF:mybutton
     3           FHEM.Alexa.DOIF:mybutton
     all         FHEM.Alexa.DOIF:mybutton
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
   Trigger:
Attributes:
   cmdState   on|off|restart|status
   readingList mybutton
   room       Alexa
   setList    mybutton:start,stop,restart,status
   stateFormat INFO
   userReadings INFO STATUS
   webCmd     mybutton


Funktioniert prima.

Gruß

Carlos


FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Damian

Neue Version wurde eingecheckt. Sie ist morgen per Update verfügbar.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Ich habe mit dem Update ab und zu eine Perl-Warnung, konnte aber noch keine bestimmte Definition erkennen:
PERL WARNING: Use of uninitialized value $cmdList in concatenation (.) or string at ./FHEM/98_DOIF.pm line 2030, <GEN15> line 33.

Damian

Zitat von: Ellert am 12 Februar 2017, 19:46:47
Ich habe mit dem Update ab und zu eine Perl-Warnung, konnte aber noch keine bestimmte Definition erkennen:
PERL WARNING: Use of uninitialized value $cmdList in concatenation (.) or string at ./FHEM/98_DOIF.pm line 2030, <GEN15> line 33.

Das sind vermutlich die DOIF-Fälle ohne jegliche Bedingungen. Da fehlt die Initialisierung. Werde ich gleich korrigieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Damian am 12 Februar 2017, 20:12:26
Das sind vermutlich die DOIF-Fälle ohne jegliche Bedingungen. Da fehlt die Initialisierung. Werde ich gleich korrigieren.

Ich habe die korrigierte Version eingecheckt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Kurze Rückinfo: hat alles funktioniert wie vorher (wusste nämlich nix von dem Termin :D), ein neues DOIF mit den neuen Features hat auch ausgezeichnet gearbeitet.

Damian

#14
Ich habe neue Zeitvariablen $md im Format "MM-DD" und $ymd im Format "YYYY-MM-DD" eingebaut:

Damit lassen sich größere Zeitbereiche in der Bedingung eingrenzen:

vom 01.01 bis zum 26.02:

$md ge "01-01" and $md le "02-26"

oder

z. B. es Weihnachtet:

$ymd ge "2017-12-23" and $ymd le "2018-01-05"

Version ist bereits eingecheckt und ab morgen verfügbar.

Man kann so etwas natürlich über die holiday-Datei machen. Allerdings sind dort keine Jahresangaben vorgesehen.

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