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

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

Vorheriges Thema - Nächstes Thema

Invers

Danke.
Aber verstehe ich was falsch?
"YYYY-MM-DD"
Wäre doch danbn nicht
2017-23-12
sondern nach meinem Verständnis
2017-12-23

Sorry, falls ich triefe. :-)
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

Zitat von: Invers am 14 Februar 2017, 23:07:58
Danke.
Aber verstehe ich was falsch?
"YYYY-MM-DD"
Wäre doch danbn nicht
2017-23-12
sondern nach meinem Verständnis
2017-12-23

Sorry, falls ich triefe. :-)

Gut aufgepasst, war mein Fehler ich korrigiere es im Post gleich.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#17
Wäre es sinnvoll den direkten set-Befehl zu erweitern und cmdState mit einbeziehen.

So, dass cmd_<nr> ein gültiger Set-Parameter ist und wenn cmdState für den letzten Befehl eines Zweiges gesetzt ist, dieser Wert der gültige Parameter ist?

(Bedingung) () () ()
DOELSEIF (Bedingung) () () ()

cmdState ,,|,,on


In der cmdList würde dann "cmd_1 on" stehen und für DOIF_cmd müsste dann auf "cmd_2" zurück gemapped werden.

Damian

Zitat von: Ellert am 15 Februar 2017, 19:59:49
Wäre es sinnvoll den direkten set-Befehl zu erweitern und cmdState mit einbeziehen.

So, dass cmd_<nr> ein gültiger Set-Parameter ist und wenn cmdState für den letzten Befehl eines Zweiges gesetzt ist, dieser Wert der gültige Parameter ist?

(Bedingung) () () ()
DOELSEIF (Bedingung) () () ()

cmdState ,,|,,on


In der cmdList würde dann "cmd_1 on" stehen und für DOIF_cmd müsste dann auf "cmd_2" zurück gemapped werden.

Ich habe auch schon überlegt cmdStat für setlist auszuwerten

mit cmdStat on|off

würde in der Dropdown-Auswahl statt cmd_1 on und statt cmd_2 off stehen, on würde dann cmd_1 bedeuten und off cmd_2 ohne etwas zu umzubiegen.

Eine andere Version habe ich im aktuellen Thread zu dem Thema angehängt, dort wird zusätzlich jeder set Befehl akzeptiert, auf den man dann triggern kann, dass dürfte mit den anderen Features nicht kollidieren.

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

Per

Wird schwer, wenn man
cmdState on|on|off
oder ähnliches hat.
Sieht auf den ersten Blick unnütz auch, aber i.V. mit wait oder repeatcmd durchaus brauchbar.

Damian

Zitat von: Per am 16 Februar 2017, 11:37:26
Wird schwer, wenn man
cmdState on|on|off
oder ähnliches hat.
Sieht auf den ersten Blick unnütz auch, aber i.V. mit wait oder repeatcmd durchaus brauchbar.

Zwei gleiche Zustände wären dann nicht sinnvoll nutzbar, weil dann keine eindeutige Zuordnung wäre

Muss man schauen, ob das alles Sinn macht. Es sind nur Ideen, die vielleicht eine Sackgasse darstellen.

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

Per

Auch wenn das schon ne Weile alt ist, ist mir erst heute folgendes aufgefallen:
Set $SELF arbeitet nicht als "goto", sondern als "call".
Ist das so gewollt? Kann man das beeinflussen oder irgendwie was tun?

define DOIF.Tester DOIF (0) (set $SELF cmd_2) (set $SELF cmd_2) (set $SELF cmd_2)\
(0) (set dummy )


ergibt:
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_nr: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_event: set_cmd_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_nr: 1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_seqnr: 1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd: 1.1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_event: set_cmd_1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_1_1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_nr: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_event: set_cmd_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_nr: 1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_seqnr: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd: 1.2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_event: set_cmd_1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_1_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_nr: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd: 2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_event: set_cmd_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_2
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_nr: 1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_seqnr: 3
2017-04-17 09:39:30 DOIF DOIF.Tester cmd: 1.3
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_event: set_cmd_1
2017-04-17 09:39:30 DOIF DOIF.Tester cmd_1


Das kann man gut nutzen (wenn man weiss, dass es so ist), will man aber nicht immer.

Damian

define DOIF.Tester DOIF (0) (set $SELF cmd_2) (set $SELF cmd_2) (set $SELF cmd_2)\
(0) (set dummy )


Fehlt da nicht etwas? Wo ist denn cmd_2?

set $SELF cmd_2 ruft einfach den zweiten Zweig aus, es ist also als "Call" zu sehen und kein "GOTO"

Beispiel:

defmod di_bla DOIF (0) (set $SELF cmd_2) (set $SELF cmd_2) (set $SELF cmd_2) DOELSE (set bla on)
attr di_bla do always


set di_bla cmd_1
führt drei mal set bla on aus, etwas anderes habe ich auch nicht erwartet.




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

Per

Zitat von: Damian am 17 April 2017, 11:23:21Fehlt da nicht etwas? Wo ist denn cmd_2?
Ist beim Kopieren verloren gegangen :(.

Zitat von: Damian am 17 April 2017, 11:23:21es ist also als "Call" zu sehen und kein "GOTO"
Also "by design".

Ralli

Zitat von: Damian am 31 Januar 2017, 20:43:08
Mit der neuen Version ist es nun möglich Befehlszweige bzw. Zustände über einen set-Befehl bedingungslos auszulösen.

Übrigens auch hierfür danke. Auch das war ein Wunsch auf meiner Liste :) .
Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Per

Muss das mal wieder aufheben.

Zitat von: Damian am 17 April 2017, 11:23:21führt drei mal set bla on aus, etwas anderes habe ich auch nicht erwartet.
Wie wird mit wait umgegangen?
[code](0) (set $SELF cmd_2)(set $SELF cmd_2)(set $SELF cmd_2)(set $SELF cmd_2)
DOELSEIF (0) () () ()

wait 0:5,5,5[/code]
(Vereinfacht zum evtl. Nachstellen)
Ergibt irgendwie ein merkwürdiges Verhalten...

Damian

Zitat von: Per am 30 April 2017, 22:47:59
Muss das mal wieder aufheben.
Wie wird mit wait umgegangen?
[code](0) (set $SELF cmd_2)(set $SELF cmd_2)(set $SELF cmd_2)(set $SELF cmd_2)
DOELSEIF (0) () () ()

wait 0:5,5,5[/code]
(Vereinfacht zum evtl. Nachstellen)
Ergibt irgendwie ein merkwürdiges Verhalten...

Alles wie erwartet, die ersten drei set cmd2 führen den jeweils ersten Befehl ohne Zeitverzögerung aus (die verzögerten kommen nicht zum Zuge). Beim vierten werden auch die restlichen zwei Befehle zeitverzögert ausgeführt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kumue

Zitat von: Damian am 14 Februar 2017, 22:08:13
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.

funktionieren die variablen auch im perl-modus ?

Damian

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

kumue

das freut mich, aber ich scheitere leider am ersten Versuch..

{if ([22:42] and ($md eq "11-29")); {fhem_set "dummy1 on"}}

FM:
condition c01: syntax error, line 1, at EOF

Damian, kannst Du bitte ein Beispiel aufzeigen. Danke!