[eingeführt] DOIF und set

Begonnen von Per, 22 Januar 2016, 17:22:50

Vorheriges Thema - Nächstes Thema

Per

Nachdem ich bei DOIF mittels cmdState einen Status benennen kann, würde ich, um nochmal einen Schwung Dummys entfernen zu können, den Status auch gern aktiv ändern, ohne extra eine Variable setzen müssen.
Also statt
define Var1 dummy
define doif1 DOIF ([Var1] eq "on" or [eigentliche on-Abfrage]) DOELSEIF ([Var1] eq "off" or [eigentliche on-Abfrage])
attr cmdState on|off
...
set Var1 on

gleich
define doif2 DOIF ([eigentliche on-Abfrage]) DOELSEIF ([eigentliche on-Abfrage])
attr cmdState on|off
...
set doif2 on

nehmen.

Gerade zum Testen fände ich das sehr praktisch.

Ellert

Meinst Du so
setreading doif2 state on
oder so
setstate doif2 on?

Per

#2
Zitat von: Ellert am 03 Februar 2016, 10:00:58
Meinst Du so
setreading doif2 state on?
Genau so. So schnell werden Wünsche erfüllt :D.

Per

Aber wie kann ich das DOIF-Icon im Floorplan die set oder setreading übergeben, ohne ein "Parallel-Dummy" zu verwenden.
Mit eventMap oder devStateIcon bekomme ich nur set, aber keine setreading übergeben, mit webCmd übergeben werden sie zwar angezeigt, aber wie frage ich sie ab? Aktuell bekomme ich nur "unknown argument state, choose one of disable initialize" als Fehlermeldung.
Ne andere Idee habe ich z.Zt. noch nicht. :(

igami

Ich wäre ja für ein

set myDOIF cmd 1

und dann wird der code auch tatsächlich ausgeführt. Könnte nützlich sein beim testen ob die Ausführung funktioniert.
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

Ralli

+1

ein


set DOIF cmd 1


etc. wäre super - muss aber dann natürlich zu einer unbedingten Ausführung führen, ohne Überprüfung der Bedingungen, die dafür eigentlich erforderlich sind. Eine kleine Nuss ist dann vielleicht darin zu sehen, wenn $EVENT oder $DEVICE o.ä. verarbeitet werden.
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

Ellert

Zitat von: Per am 19 Februar 2016, 15:04:57
Aber wie kann ich das DOIF-Icon im Floorplan die set oder setreading übergeben, ohne ein "Parallel-Dummy" zu verwenden.
Mit eventMap oder devStateIcon bekomme ich nur set, aber keine setreading übergeben, mit webCmd übergeben werden sie zwar angezeigt, aber wie frage ich sie ab? Aktuell bekomme ich nur "unknown argument state, choose one of disable initialize" als Fehlermeldung.
Ne andere Idee habe ich z.Zt. noch nicht. :(

Schon mal setstate probiert?

Per

Zitat von: Ellert am 19 Februar 2016, 16:35:57
Schon mal setstate probiert?
Setstete funktioniert in der "Kommandozeile", aber 1. habe ich dann die gleichen Probleme wie oben und 2. erzeuge ich keinen Event, womit die Sache als solches wenig nutzbringend ist.

Ellert

ZitatAktuell bekomme ich nur "unknown argument state, choose one of disable initialize" als Fehlermeldung.
DOIF kennt für set nur die beiden Argumente disable und initialize.

ZitatAber wie kann ich das DOIF-Icon im Floorplan die set oder setreading übergeben, ohne ein "Parallel-Dummy" zu verwenden.
Das wird dann wahrscheinlich mit einer readingsGroup gelingen. Der Wiki-Beitrag hat sehr hilfreiche Beispiele http://www.fhemwiki.de/wiki/ReadingsGroup


Per

Zitat von: Ellert am 19 Februar 2016, 17:47:51Das wird dann wahrscheinlich mit einer readingsGroup gelingen.
Habe ich auch nur i.V. mit einem Dummy gefunden.

Ellert

Müsste auch mit Icon und Perlcode gehen.

Ralli

Hallo,

ich möchte den Fred nochmal nach oben holen und das für eine Erweiterung vorschlagen.

Also: Eine  tolle Idee wäre, ein DOIF mit set DOIF ... zu einem bestimmten cmd-Zweig "zu zwingen". Dabei wäre es genial, wenn bei einem gesetzten cmdstate stattdessen mit set DOIF mein_custom_status aufgerufen werden könnte.

Wenn also z.B. für eine Rolladensteuerung, Beschattung oder Lichtszenensteuerung ein DOIF aus mehreren Zweigen besteht und diese mit cmdstate für den entsprechenden Status belegt sind, könnte ein Aufruf von set DOIF ... zum erzwungenen Ausführen dieses Zweiges führen. Damit könnte man universell Dummy-Variablen ersetzen, gleichzeitig manuell und automatisch entsprechende Dinge auslösen. Ich fände das genial.
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

Damian

Zitat von: Ralli am 26 Februar 2016, 08:42:46
Hallo,

ich möchte den Fred nochmal nach oben holen und das für eine Erweiterung vorschlagen.

Also: Eine  tolle Idee wäre, ein DOIF mit set DOIF ... zu einem bestimmten cmd-Zweig "zu zwingen". Dabei wäre es genial, wenn bei einem gesetzten cmdstate stattdessen mit set DOIF mein_custom_status aufgerufen werden könnte.

Wenn also z.B. für eine Rolladensteuerung, Beschattung oder Lichtszenensteuerung ein DOIF aus mehreren Zweigen besteht und diese mit cmdstate für den entsprechenden Status belegt sind, könnte ein Aufruf von set DOIF ... zum erzwungenen Ausführen dieses Zweiges führen. Damit könnte man universell Dummy-Variablen ersetzen, gleichzeitig manuell und automatisch entsprechende Dinge auslösen. Ich fände das genial.

ja, könnte man einbauen. Allerdings wird der Zustand dann gesetzt und die Befehle ausgeführt, obwohl die Bedingung nicht wahr ist.

Das könnte eine Fehlersuche erschweren, weil dann schnell behauptet werden kann, dass das Modul falsch schaltet.

Alternativ dazu kann man jetzt schon, in der jeweiligen Bedingung ... or [Mydummy] eq "on" hinzufügen.

Gruß

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

Ralli

Hallo Damian,

der Sinn bestände ja eben darin, Dummys nicht mehr nutzen zu müssen. Und ja, ein Zweig würde ausgeführt, obwohl die Bedingung nicht wahr ist - aber dazu wurde das DOIF ja dann durch den set-Befehl "gezwungen".
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

Zitat von: Damian am 26 Februar 2016, 10:37:40Alternativ dazu kann man jetzt schon, in der jeweiligen Bedingung ... or [Mydummy] eq "on" hinzufügen.
Jain.
1. Wie gesagt soll ja der Dummy weg
2. Wie reagiert der Dummy, wenn er aus Anzeigezwecken im DOIF gesetzt wird

Dass das DOIF durch set auch mit "falschen" Bedingungen schaltet, ist ja genau Sinn der Sache.

Per

Habe mal im Quelltext den Befehl "press" zugelassen.
Da ich aber nicht zuviel im Quelltext rumspielen wollte (habe im sub DOIF_set die "Fehlerbehandlung" für "press" deaktiviert), kann ich nicht danach auswerten, ist halt nur ein Trigger (wie trigger doif_xy).
Für den Rest muss ich zwar die Definitionen dahingehend anpassen, aber ich kann zumindest schon mal die Dummies weglassen.
Schöner wäre es natürlich, wenn die benannten cmdState automatisch freigegeben (das könnte ich noch realisieren) und die Stats entsprechend gesetzt (wäre auch noch machbar) sowie die Befehle ausgeführt würden. Spätestens da wäre ich aber am Ende. Wenn dann noch wait, repeatCmd und andere (von mir schon anwendungsseitig kaum verstandene Konstrukte :-[) dazu kommen, ist eh alles zu spät.

Wobei bei der richtigen Lösung die cmdState nicht unbedingt optimal sind, da diese auch mehrfach auftreten können :-\.

stera

#16
Hallo,

das geht leider immer nur noch im DOIF selbst oder kann man irgendwie den "set doif_xx cmd1" absetzen..

Würde gerne per Telegram die Befehle im DOIF ausführen ohne ein Dummy zwischen zu schalten..

Ansonsten müsste es doch gehen, wenn man ein z.B "setreading doif_xx cmd1 true" im jeweiligen Doif setzt und dann die Attr. Selftrigger auf all setzt und auf das reading cmd1 triggert?


Update: Das funktioniert -> auch ohne attr. Selftrigger

([$SELF:selftrigger_cmd1] eq "true")
(set Test on)


Das als Befehl absetzen und dann wird es ausgeführt  8)

setreading doif_name selftrigger_cmd1 true




Gruß,
SteRa

Per

Zitat von: stera am 03 September 2018, 10:49:07
oder kann man irgendwie den "set doif_xx cmd1" absetzen..
Doch, (fast) genau so. Allerdings mit Unterstrich.

stera

Zitat von: Per am 03 September 2018, 11:45:19
Doch, (fast) genau so. Allerdings mit Unterstrich.

Ah danke, dass habe ich gesucht

Also: "set doif_xx cmd_1"