Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...

Begonnen von Damian, 19 März 2016, 22:12:40

Vorheriges Thema - Nächstes Thema

Ellert

Wäre es dann nicht flexibler, eine Funktion zu implementieren, mit der sich Attributwerte (wait, repeatcmd, repeatsame, cmdState, ...) einfach lesen und setzen lassen?

attrwert(<DOIFname>,<Attributname>,<Befehlszweig Nr>[, <Sequenz Nr>][, <Wert>])

falls Wert angegeben ist, wird das Attribut  an entsprechender Stelle geändert.

Damit könnte man auch Attribute während der Befehlsausführung setzen, z.B.

-repeatcmd, um die Wiederholungszeit temperaturabhängig zu ändern, um die Wiederholung der "Fenster offen" Meldung zu kürzen, wenn es kälter wird
-wait, um "selftrigger wait" abzuschalten, weil der wait-Wert eines Zweiges auf 0 gesetzt wird.
- und auch dieses
ZitatEine Dynamik könnte ich mir bei Benachrichtigungen vorstellen: je länger ein  Ereignis zurückliegt, desto größer der Benachrichtigungsabstand, z. B. bei Fenster-offen-Meldung. Anfangs öfters, da neu, später seltener, da bereits bekannt, um nicht den Log zuzumüllen.
Verhalten könnte damit noch flexibler gestaltet werden.

Eine solche Funktion eröffnet ungeahnte Möglichkeiten, birgt aber sicherlich auch einige Gefahren.

Damian

Zitat von: Ellert am 01 Mai 2016, 11:13:31

Eine solche Funktion eröffnet ungeahnte Möglichkeiten, birgt aber sicherlich auch einige Gefahren.

ja, allerdings geht das in die Richtung, gebe den Leuten ein goto und du wirst bald den produzierten Code nicht mehr nachvollziehen können, da möchte ich nicht hin.

Mein Anliegen ging in die andere Richtung: Mit einer Angabe (wie in meinen Bespielen) eine ganze Reihe zu definieren.

Diese Funktion würde das aber nicht leisten können, weil sie mit einer festen Sequenznummer arbeitet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitatallerdings geht das in die Richtung, gebe den Leuten ein goto und du wirst bald den produzierten Code nicht mehr nachvollziehen können, da möchte ich nicht hin.
Das ist nachvollziehbar.

ZitatDiese Funktion würde das aber nicht leisten können, weil sie mit einer festen Sequenznummer arbeitet.
Ich denke schon,
Zitat(<Befehle>,{attrwert($SELF,"wait",0,1,attrwert($SELF,"wait",0,0)+2)}) (<Befehle>,{attrwert($SELF,"wait",0,2,attrwert($SELF,"wait",0,1)+2)}) (<Befehle>,{attrwert($SELF,"wait",0,3,attrwert($SELF,"wait",0,2)+2)})
durch einen verschachtelten Funktionsaufruf. Rot liest den Wert der aktuellen Sequenz aus dem Attribut und Blau schreibt den um 2 erhöhten  Wert für die nächste Sequenz ins Attribut.

Allerdings, wenn ich mir die Menge Befehlstext ansehe, sieht es nicht gerade einfach aus :D

Zitat(die ich ja jetzt nicht eingecheckt habe)
Sollten meine Bedenken das verhindert haben, ziehe ich sie zurück.
Es ist wie mit dem "Pudding"  ;)


Damian

Zitat von: Ellert am 01 Mai 2016, 15:10:58
Das ist nachvollziehbar.
Ich denke schon,durch einen verschachtelten Funktionsaufruf. Rot liest den Wert der aktuellen Sequenz aus dem Attribut und Blau schreibt den um 2 erhöhten  Wert für die nächste Sequenz ins Attribut.

Allerdings, wenn ich mir die Menge Befehlstext ansehe, sieht es nicht gerade einfach aus :D
Sollten meine Bedenken das verhindert haben, ziehe ich sie zurück.
Es ist wie mit dem "Pudding"  ;)

Die Version werde ich mir zur Seite legen. Wenn ich wieder Zeit finde (habe z. Zt. noch andere Projekte) werde ich es so ausbauen, dass man möglichst mit einem! Ausdruck (wie in meinen Beispielen) Verzögerungsreihen aufbauen kann (linear, exponentiell und was man sonst so in der Mathematik per Induktion (über Zugriff auf den Vorgänger) definieren kann). Die Angabe einer komplexen Funktion für jeden wait-Timer ist recht aufwändig und etwas für Profis. Sie lässt sich über myUtils, wie von dir vorgeschlagen, bereits heute realisieren.

Gruß

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