neue Features: defaultvalue, readingList, Ereignisfilter, Attribut checkall

Begonnen von Damian, 05 Oktober 2016, 19:58:14

Vorheriges Thema - Nächstes Thema

Ellert

Ich überarbeite die Doku gerade nochmal.

Gilt "notexist" als deprecated ?

Wird folgende Zeitangabe möglich sein?
[[$SELF:mybegin,1]-[$SELF:myend,2]]
Wenn ja, dann ändere ich das Beispiel

Edit:
Ist der Defaultwert hier auch möglich?
[<devicename>,<default>]

und in dieser Form mit indirekter Angabe
[<devicename1>:<readingname1>,[<devicename2>:<readingname2>]]


Damian

Zitat von: Ellert am 09 November 2016, 08:29:37
Ich überarbeite die Doku gerade nochmal.

Gilt "notexist" als deprecated ?

Wird folgende Zeitangabe möglich sein?
[[$SELF:mybegin,1]-[$SELF:myend,2]]
Wenn ja, dann ändere ich das Beispiel

Edit:
Ist der Defaultwert hier auch möglich?
[<devicename>,<default>]

und in dieser Form mit indirekter Angabe
[<devicename1>:<readingname1>,[<devicename2>:<readingname2>]]

notexist bleibt natürlich als globaler Default-Wert und kann ohne weiteres benutzt werden.

Übersteuern kann man das dann mit den Angaben:

Folgendes soll zuerst möglich sein:

[<Device>,<Default-Wert>]
[<Device>:<Reading>,<Default-Wert>]

wobei <Default-Wert>  Zahlen oder Zeichenketten sein können, mit oder ohne Anführungszeichen.

Sie vollständige Syntax lautet ja mit Filter und Output-Formatierung dann (nur bei readings):

[<Device>:<Reading>:<Filter>:<Output>,<Default-Wert>]

Stufe 2

Weitere Auswertung von <Defalut-Wert>(falls sinnvoll) könnte wie bei wait sein.

[<Device>:<Reading>:<Filter>:<Output>,<Perlberechnung mit allem was in Perl geht und allen Angaben in eckigen Klammern>

Aber erst muss ich es einbauen und dann dokumentieren.

Es soll natürlich alles abwärtskompatibel sein d. h. Filter, Output und Default-Wert sind optional und müssen nicht angegeben werden.



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

Ellert

Ich habe die Kurzreferenz noch ergänzt und das Beispiel eingeenlischt  ;)

Da bei den Attributen nicht nur "DOIF spezifische Attribute" aufgeführt sind lautet die Überschrift jetzt "Attribute".

Das Bild, wie DOIF im Frontend aussehen kann, habe ich mal angehängt.

Damian

Zitat von: Ellert am 09 November 2016, 12:38:03
Ich habe die Kurzreferenz noch ergänzt und das Beispiel eingeenlischt  ;)

Da bei den Attributen nicht nur "DOIF spezifische Attribute" aufgeführt sind lautet die Überschrift jetzt "Attribute".

Das Bild, wie DOIF im Frontend aussehen kann, habe ich mal angehängt.

OK. Ich werde, sobald ich etwas mehr Zeit habe, darauf aufbauend die genannten Features (auch $week) noch einbauen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Hallo Damian,

ich musste das Beispiel überarbeiten, es hätte nicht funktioniert. Falls diese Überarbeitung ungelegen kommt, kann ich die Änderungen der Doku auch später in den Releasekandidaten einpflegen.

Damian

Zitat von: Ellert am 11 November 2016, 11:04:10
Hallo Damian,

ich musste das Beispiel überarbeiten, es hätte nicht funktioniert. Falls diese Überarbeitung ungelegen kommt, kann ich die Änderungen der Doku auch später in den Releasekandidaten einpflegen.

Kein Problem, ich habe noch nichts gemacht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Version 0.4 im ersten Post

Neues Feature:

Defaultwert für Readings und Stati mit Perlberechnung!

was jetzt geht:

[lamp,"off"]
[room:temperatur,20]
[brightness,3*[myvalue]+2]
[heating,AttrVal("mydevice","myattr","")]
[[mytime,"10:00"]]

weitere Features:

readingList,...

Ereignisfilter

Attribut checkall

$week für Wochennummer

Interne Funktionsaufrufe in der Bedingung wurden optimiert

Doku angepasst.

Die Version ist wie immer abwärtskompatibel, allerdings haben sich intern die Funktionsaufrufe geändert, daher kein reload machen, sondern System nach dem Einspielen durchstarten.

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

Ellert

Ich habe das Beispiel ausprobiert, wenn ich die Zeiten im Frontend ändere, dann tritt der Fehler auf:  time_switch: error in default: 00:00

Zitat
Internals:
   DEF        (["$SELF:mybutton: on"] or [[$SELF:mybegin,"00:00"]])
   (set lamp on)
DOELSEIF (["$SELF:mybutton: off"] or [[$SELF:myend,"00:01"]])
   (set lamp off)
   NAME       time_switch
   NR         43
   NTFY_ORDER 50-Schaltuhr
   STATE      on
   TYPE       DOIF
   Readings:
     2016-11-12 19:39:05   Device          time_switch
     2016-11-12 19:39:05   cmd             1
     2016-11-12 19:39:05   cmd_event       time_switch
     2016-11-12 19:39:05   cmd_nr          1
     2016-11-12 19:39:18   error           time_switch: error in default: 00:01
     2016-11-12 19:39:05   matched_event_c1_1 mybutton: on
     2016-11-12 19:36:16   matched_event_c2_1 mybutton: off
     2016-11-12 19:39:18   mybegin         12:00
     2016-11-12 19:39:05   mybutton        on
     2016-11-12 19:36:04   myend           12:10
     2016-11-12 19:39:05   state           on
     2016-11-12 19:39:18   timer_01_c01    13.11.2016 12:00:00
     2016-11-12 19:39:18   timer_02_c02    13.11.2016 12:10:00
   Condition:
     0          EventDoIf('time_switch',$hash,'mybutton: on',0) or DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
     1          EventDoIf('time_switch',$hash,'mybutton: off',0) or DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0          set lamp on
     1:
       0          set lamp off
   Helper:
     event      mybutton: on
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   time_switch
     timerevent mybutton: on
     triggerDev time_switch
     timerevents:
       mybutton: on
       error: time_switch: error in default: 00:00
       timer_01_c01: 13.11.2016 12:00:00
       error: time_switch: error in default: 00:01
       timer_02_c02: 13.11.2016 12:10:00
       Device: time_switch
       matched_event_c1_1: mybutton: on
       cmd_nr: 1
       cmd: 1
       cmd_event: time_switch
       on
     timereventsState:
       mybutton: on
       error: time_switch: error in default: 00:00
       timer_01_c01: 13.11.2016 12:00:00
       error: time_switch: error in default: 00:01
       timer_02_c02: 13.11.2016 12:10:00
       Device: time_switch
       matched_event_c1_1: mybutton: on
       cmd_nr: 1
       cmd: 1
       cmd_event: time_switch
       on
     triggerEvents:
       mybutton: on
       error: time_switch: error in default: 00:00
       timer_01_c01: 13.11.2016 12:00:00
       error: time_switch: error in default: 00:01
       timer_02_c02: 13.11.2016 12:10:00
       Device: time_switch
       matched_event_c1_1: mybutton: on
       cmd_nr: 1
       cmd: 1
       cmd_event: time_switch
       on
     triggerEventsState:
       mybutton: on
       error: time_switch: error in default: 00:00
       timer_01_c01: 13.11.2016 12:00:00
       error: time_switch: error in default: 00:01
       timer_02_c02: 13.11.2016 12:10:00
       Device: time_switch
       matched_event_c1_1: mybutton: on
       cmd_nr: 1
       cmd: 1
       cmd_event: time_switch
       on
   Internals:
   Itimer:
     all         time_switch
   Localtime:
     0          1479034800
     1          1479035400
   Readings:
   Realtime:
     0          12:00:00
     1          12:10:00
   Regexp:
     0:
       0          time_switch:mybutton: on
     1:
       0          time_switch:mybutton: off
     All:
       0          time_switch:mybutton: on
       1          time_switch:mybutton: off
   State:
   Time:
     0          [time_switch:mybegin,"00:00"]
     1          [time_switch:myend,"00:01"]
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timers:
     0           0
     1           1
   Trigger:
   Triggertime:
     1479034800:
       localtime  1479034800
       Hash:
     1479035400:
       localtime  1479035400
       Hash:
Attributes:
   alias      Schaltuhr
   cmdState   on|off
   group      Schaltuhr
   readingList mybutton mybegin myend
   room       DOIF_Labor
   setList    mybutton:on,off mybegin:time myend:time
   webCmd     mybutton:mybegin:myend


Damian

Problem behoben. Version 0.5 im ersten Post.

Zeichenketten in Anführungszeichen implizieren keine Berechnung. Alle genannten Beispiele funktionieren jetzt korrekt.

Übrigens funktionieren ohne Anführungszeichen Perlberechnungen auch im Attribut notexist.

Doku weiter angepasst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Yil

Hi Damian,

kannst Du kurz ein Anwendungsbeispiel für das neue Attribut checkall geben - mir ist das noch nicht ganz klar, welches Problem das löst.

VG Yil
HM CCU2 mit ca. 35 HM-Komponenten inkl. Bausätzen
fhem auf RPi mit Sonos, EnOcean-CUL, ZWAVE-CUL und Bluetooth
Osram Lightify

Damian

Zitat von: Yil am 14 November 2016, 18:23:40
Hi Damian,

kannst Du kurz ein Anwendungsbeispiel für das neue Attribut checkall geben - mir ist das noch nicht ganz klar, welches Problem das löst.

VG Yil


DOIF  ([A] eq "on")
  (set bla1 on)
DOELSEIF ([B] eq "on")
  (set bla2 on)


es kommt Event: A: off

Ohne checkall passiert nichts. Es wird die erste Abfrage überprüft - sie ist nicht wahr, die zweite Bedingung wird nicht überprüft, weil A dort nicht vorkommt.

Mit checkall wird dagegen auch DOELSEIF überprüft, obwohl dort A nicht vorkommt, ist B gleich on wird set bla2 on ausgeführt.

Gruß

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

Damian

Ich habe eine Version 0.6 (erste Post) gebastelt, bei der Readings, die mit _ beginnen nicht gelöscht werden. Wenn man eigene Readings im Modul beginnend mit dem Unterstrich definiert, so bleiben sie erhalten bis man sie löscht.
Damit bleiben eigene Readings zusammenhängend am Anfang aller Readings sichtbar und man hat noch beliebig Spielraum eigene Reading-Namen zu erfinden.

Wenn einem noch etwas besseres einfällt, dann bitte melden, bevor die Version eingecheckt wird.

Gruß

Damian





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

igami

Vielleicht als Anlehnung an die Register von Home Matic U- davor Scheiben für user.
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

Zitat von: Damian am 14 November 2016, 23:03:37
Ich habe eine Version 0.6 (erste Post) gebastelt, bei der Readings, die mit _ beginnen nicht gelöscht werden. Wenn man eigene Readings im Modul beginnend mit dem Unterstrich definiert, so bleiben sie erhalten bis man sie löscht.
Damit bleiben eigene Readings zusammenhängend am Anfang aller Readings sichtbar und man hat noch beliebig Spielraum eigene Reading-Namen zu erfinden.

Wenn einem noch etwas besseres einfällt, dann bitte melden, bevor die Version eingecheckt wird.

Gruß

Damian

Ein Präfix ist das einfachste, hatte ich auch gedacht.

Die Readings kann man dann mit deletereading <Device> _.* löschen das Bedarf dann keiner Löschfunktion.

Edit: Falsches Zitat ersetzt