FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Talkabout am 31 Juli 2015, 19:57:09

Titel: "TEMPORARY" device
Beitrag von: Talkabout am 31 Juli 2015, 19:57:09
Hallo zusammen,

in der fhem.pl habe ich einen Hinweis darauf gefunden, wie man temporäre Devices definiert. Es ist wohl so, dass wenn ein Device die Eigenschaft "TEMPORARY" besitzt, diverse Dinge nicht mehr gemacht werden. Dazu gehört auch die Überprüfung der Strukturänderungen (die dann auch im FHEMWEB das Fragezeichen neben "Save config" anzeigt). Ich möchte gerne bestimmte Timer über FHEM-Befehle anlegen, die aber tatsächlich nur temporär da sind. Im Moment ist es so, dass sobald diese erstellt sind, die fhem.cfg als geändert markiert wird. Speichere ich die fhem.cfg dann (aufgrund anderer Änderungen), habe ich diese Timer dann auch in der Datei... Gibt es einen Befehl, mit dem ich diese "TEMPORARY" Eigenschaft für ein beliebiges Device setzen kann? So etwas in der Art

tmpdefine DEVICE_XXX

Wenn nicht, wäre so etwas vielleicht sinnvoll?

Danke!

Gruss
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 09 August 2015, 14:08:27
ZitatIch möchte gerne bestimmte Timer über FHEM-Befehle anlegen, die aber tatsächlich nur temporär da sind.

Der Anwendungsfall ist mir noch nicht klar genug. Sonst kannst du es auch selbst bauen:
define tmpdefine cmdalias tmpdefine .* AS define $EVENT;; { $defs{$EVTPART0}{TEMPORARY} = 1;;;; undef }
Titel: Antw:"TEMPORARY" device
Beitrag von: Talkabout am 09 August 2015, 16:17:02
Zitat von: rudolfkoenig am 09 August 2015, 14:08:27
Der Anwendungsfall ist mir noch nicht klar genug. Sonst kannst du es auch selbst bauen:
define tmpdefine cmdalias tmpdefine .* AS define $EVENT;; { $defs{$EVTPART0}{TEMPORARY} = 1;;;; undef }

Hallo Rudi,

Anwendungsfall:

Ein Fenster wird geöffnet, es wird über ein "at" definiert, dass alle 20 Minuten eine Erinnerung ausgegeben werden soll, solange es geöffnet ist. Dieses "at" führt dazu, dass FHEM mir ein Fragezeichen neben "Save config" anzeigt, da sich die Struktur ja geändert hat. Speichere ich die fhem.cfg nun, ist der Timer dort auch wieder drin. Das würde ich gerne vermeiden.

Dein Code-Beispiel wäre eine Alternative, aber vielleicht ist die Anforderung generell nützlich.

Gruss
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 09 August 2015, 16:55:12
Eigentlich muesste das at gespeichert werden, da das Fenster auch waehrend eines FHEM Neustarts geoeffnet sein kann. Macht tmpdefine auch fuer andere Geraete Sinn, oder ist das at spezifisch? Was sagen andere dazu?
Titel: Antw:"TEMPORARY" device
Beitrag von: Talkabout am 09 August 2015, 17:26:34
Zitat von: rudolfkoenig am 09 August 2015, 16:55:12
Eigentlich muesste das at gespeichert werden, da das Fenster auch waehrend eines FHEM Neustarts geoeffnet sein kann. Macht tmpdefine auch fuer andere Geraete Sinn, oder ist das at spezifisch? Was sagen andere dazu?
Theoretisch müsste es mit gespeichert werden, aber damit handelt man sich ein ungewünschtes Verhalten ein. Wenn ich die fhem.cfg nun mit diesem Timer speichere (aufgrund anderer Änderungen), dann ist es da so lange drin, wie ich nicht wieder die fhem.cfg speichere. Auch wenn das at ja nach dem Schliessen des Fenster zwar wieder gelöscht wird, bleibt es in der fhem.cfg bei einem Neustart bestehen. Folglich müsste ich nach jedem Schliessen eines Fensters die fhem.cfg speichern.

Das tmpdefine würde für alle Devices Sinn machen, für die es Sinn macht sie temporär zu erstellen. Dazu fallen mir aktuell ein:

at
notify
watchdog
doif
dummy
randomtimer

Vielleicht gibt es auch weitere, die mir gerade nicht einfallen. Im Endeffekt wäre die Erweiterung aber auch nicht wirklich aufwendig, da man ja "nur" das TEMPORARY auf 1 setzen müsste, ansonsten ist der Code äquivalent zu "define". Wenn es aus Deiner Sicht aber keinen Sinn macht, dann probiere ich Dein oberes Code-Beispiel aus.

Gruss
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 23 August 2015, 14:44:33
Habe den define Befehl mit der -temporary Option erweitert.
Titel: Antw:"TEMPORARY" device
Beitrag von: Talkabout am 23 August 2015, 18:46:25
Zitat von: rudolfkoenig am 23 August 2015, 14:44:33
Habe den define Befehl mit der -temporary Option erweitert.
Hallo Rudi,

danke!

Wie ist denn die korrekte Syntax?

Gruss
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 23 August 2015, 19:39:11
define -temporary myAt at +*00:01 { Log 1, "Hallo" }
Titel: Antw:"TEMPORARY" device
Beitrag von: Talkabout am 23 August 2015, 19:41:50
Zitat von: rudolfkoenig am 23 August 2015, 19:39:11
define -temporary myAt at +*00:01 { Log 1, "Hallo" }
Danke!

Gruss
Titel: Antw:"TEMPORARY" device
Beitrag von: klaus.schauer am 09 September 2015, 09:19:51
Falls man die temporary-Option zusammen mit autocreate verwendet, wird das Device eingerichtet, aber das log-File kann nicht angelegt werden:


2015.09.09 09:09:06 2: EnOcean 4BS response telegram received, create temporary device with SenderID FFFCF31E.
2015.09.09 09:09:06 1: EnOcean Unknown device with SenderID FFFCF31E and 4BS telegram, please define it.
2015.09.09 09:09:06 2: autocreate: define -temporary EnO_4BS_FFFCF31E EnOcean FFFCF31E EnOcean:1:A5:808FFFF0:FFFCF31E:00:03FFF44E094C00
2015.09.09 09:09:06 2: EnOcean EnO_4BS_FFFCF31E 4BS teach-in response message from FFFCF31E to FFF44E09 received
2015.09.09 09:09:06 2: EnOcean ts2 4BS teach-in accepted from FFFCF31E
2015.09.09 09:09:06 1: PERL WARNING: Use of uninitialized value $t in substitution (s///) at ./FHEM/98_autocreate.pm line 101.
2015.09.09 09:09:06 1: PERL WARNING: Use of uninitialized value in hash element at ./FHEM/98_autocreate.pm line 230.
2015.09.09 09:09:06 1: PERL WARNING: Use of uninitialized value $n in substitution (s///) at ./FHEM/98_autocreate.pm line 102.
2015.09.09 09:09:06 1: PERL WARNING: Use of uninitialized value in hash element at ./FHEM/98_autocreate.pm line 238.
2015.09.09 09:09:06 2: autocreate: define FileLog_-temporary FileLog ./log/-%Y.log -temporary
2015.09.09 09:09:06 1: ERROR: Invalid characters in name (not A-Za-z0-9.:_): FileLog_-temporary
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 09 September 2015, 09:24:29
Zitattemporary-Option zusammen mit autocreate

Wuesste gerne, wozu das gut sein soll.
Titel: Antw:"TEMPORARY" device
Beitrag von: klaus.schauer am 09 September 2015, 10:33:42
Zitat von: rudolfkoenig am 09 September 2015, 09:24:29
Wuesste gerne, wozu das gut sein soll.
Für ein bidirektionales Teach-In wird ein temporäres Response-Device benötigt, um die Rückmeldungen dem auslösenden Device zuzuordnen und den Prozess abzuschließen. Das Response-Device wird nach einem erfolgreichen Teach-In-Prozess wieder gelöscht. Leider gibt es bisher eine Nebenwirkung, falls das auslösende Devices danach einen Teach-Out Befehl an das Remote-Device sendet. In diesem Fall scheinen noch Restbestände in der Konfiguration übrig zu bleiben, die bei Teach-Out zu Fehlern führen. Bisher habe ich das Problem nur mit einem fhem-restart vor einem Teach-Out umgehen können. Vielleicht löst die temporary-Option das Problem.
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 09 September 2015, 11:11:19
Alles schoen und gut, aber ich wuerde dafuer nicht autocreate beschaeftigen. FileLog und SVG braucht man doch fuer so ein Geraet nicht. Kannst du nicht direkt CommandDefine() aufrufen? Oder von mir aus fhem("define ...")? Wenn autocreate sein muss, dann koenntest du $hash->{TEMPORARY} auch in EnOcean_DefineFn setzen.
Titel: Antw:"TEMPORARY" device
Beitrag von: klaus.schauer am 09 September 2015, 11:58:11
Zitat von: rudolfkoenig am 09 September 2015, 11:11:19
Alles schoen und gut, aber ich wuerde dafuer nicht autocreate beschaeftigen. FileLog und SVG braucht man doch fuer so ein Geraet nicht. Kannst du nicht direkt CommandDefine() aufrufen? Oder von mir aus fhem("define ...")? Wenn autocreate sein muss, dann koenntest du $hash->{TEMPORARY} auch in EnOcean_DefineFn setzen.
Gegenfrage: Warum kann man nicht einfach autocreate passend machen?
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 09 September 2015, 12:18:49
Weil autocreate sich nicht um TEMPORARY Geraete kuemmern sollte. Die benoetigen kein FileLog, und gespeichert soll fhem.cfg auch nicht. Und falls das alles nicht benoetigt wird, was ist dann der Zusatznutzen von autocreate gegenueber CommandDefine?
Titel: Antw:"TEMPORARY" device
Beitrag von: klaus.schauer am 09 September 2015, 14:13:58
Zitat von: rudolfkoenig am 09 September 2015, 12:18:49
Weil autocreate sich nicht um TEMPORARY Geraete kuemmern sollte. Die benoetigen kein FileLog, und gespeichert soll fhem.cfg auch nicht. Und falls das alles nicht benoetigt wird, was ist dann der Zusatznutzen von autocreate gegenueber CommandDefine?
Ganz einfach: Die Teach-in-Prozeduren in EnOcean sind auf autocreate zugeschnitten. Es müsste an mehreren Stellen eingegriffen werden. Das ist aufwändig und sollte vermieden werden.
Titel: Antw:"TEMPORARY" device
Beitrag von: rudolfkoenig am 09 September 2015, 15:12:15
Habe eine Weile ueberlegt, was wichtiger ist: Dienstleister zu sein, oder meine Meinung durchzusetzen.
In diesem Fall hat das Erste gewonnen.

Habe eine geaenderte 98_autocreate.pm eingecheckt.
Titel: Antw:"TEMPORARY" device
Beitrag von: klaus.schauer am 09 September 2015, 19:18:35
Danke, hoffentlich lässt sich damit dann der Fehler beheben.