temporäres at/notify was nicht bei "save" gespeichert werden soll

Begonnen von Markus Bloch, 25 Januar 2015, 10:59:08

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

ich hab eine Frage. Ich benutze öfters temporäre at's um gewisse Sachen aus anderen notify's heraus zu triggern. Meistens werden in den notify's Perl-Funktionen getriggert die dann eine gewisse Logik abbilden und in bestimmten Fällen ist dann ein temporäres at notwendig um z.B. beim einschalten des Fernsehers nach 20 Sekunden das Licht zu dimmen, etc.

Nun ist die Frage, wie kann man solche temporären Definitionen daran hindern, das sie bei einem "save" mit in die fhem.cfg geschrieben werden?

Ich kenne als Developer nur die Möglichkeit mit $hash->TEMPORARY = 1, nunja, aber wie geht das für normalsterbliche?

Weiß hier jemand Rat?

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Icinger

Temporäre at's, die nur einmal ausgeführt werden, werden automatisch gar nicht in die Config geschrieben.

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

rudolfkoenig

Schau dir mal das FHEM sleep an.
Nicht wiederkehrende at's werden (warum auch immer) nach fhem.save (statefile) geschrieben.

Markus Bloch

Zitat von: rudolfkoenig am 25 Januar 2015, 13:34:33
Nicht wiederkehrende at's werden (warum auch immer) nach fhem.save (statefile) geschrieben.

Geht ja darum, das ein laufendes temporäres at, ja eben gerade beim shutdown gespeichert wird und beim starten wieder angezogen wird. Das ist genau was ich meinte mit "temporäres at wird in fhem.cfg" geschrieben".

Nun ist die Frage, wie kann ich das verhindern, da meine temporären at's nicht nach einem Start von FHEM direkt wieder definiert werden sollen?

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Du scheinst nur selektiv zu lesen :)
ZitatSchau dir mal das FHEM sleep an.

Markus Bloch

Habe ich mir gerade mal angeschaut, wusste ich garnicht, dass das so schlau gelöst ist. Daumen hoch dafür.

Also sollte ein
define Jalousie_initial_set notify global:INITIALIZED define tmp_Reset_Jalousieautomatik at +00:00:05 {Jalousie_Automatik($we, 1)}

gleichbedeutend sein mit

define Jalousie_initial_set notify global:INITIALIZED sleep 5; {Jalousie_Automatik($we, 1)}

Und ebenfalls "non-blocking", oder?
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Nicht blockierend ist das FHEM-sleep auf jedenfall, falls danach was kommt. Ich dachte bis gerade, dass man FHEM-Befehle und Perl-Einzeiler nicht mischen kann, es scheint aber zu funktionieren.

Markus Bloch

Hab gerade mal folgendes Kommando gestartet:

{Log 3, "test"}; sleep 5; {Log 3, "test"}

Im Log ist folgendes zu sehen:


2015.01.25 14:18:23.973 3: test
2015.01.25 14:18:28.988 3: test


Von daher, passt, würde ich sagen.

Danke für die Hilfe.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

vbs

Ich spiele auch mit dem Gedanken, meine temporären ats auf sleeps umzubauen. Ich denke jedoch, dass das bei mir nicht geht, da ich den Timer bei einem erneuten Event resetten möchte.

Bsp: Beleuchtung soll 5 Minuten eingeschaltet werden bei Bewegungsmelder Event.

Im Moment habe ich ein notify, welches Licht einschaltet und ein at definiert mit +00:05:00, welches das Licht wieder ausschaltet. Aber ich prüfe vorher, ob das at schon existiert und lösche es ggf. und lege es neu an. Sprich: Licht soll nur ausgehen, wenn innerhalb der letzten 5 Minuten das Event nicht nochmal kam.

Könnte man so einen Fall auf sleep umbauen? Eher nicht, oder?

Markus Bloch

Wie sieht das ganze mit dummys aus, bzw. generell egal welcher Modultyp. Ein $hash->{TEMPORARY} bekommt man nur durch direkte Manipulation in $defs hin, oder?

Da gibts kein Attribut oder FHEM-Befehl wie man die TEMPORARY bekommt, oder?

sowas in der Art wie "define temporary <name> <modul> <def-args>"
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

@Markus: verstehe dich nicht.
@vbs: mann kann es schon, ist aber vermutlich aufwendiger, bzw. fuer nicht-Programmierer unmoeglich. Sleep ist "Fire&Forget", at hat einen Namen, damit man es loeschen oder modifizieren kann.

Markus Bloch

Ich möchte eine Definition erstellen die nicht bei einem save in fhem.cfg/fhem.state landet. Völlig unerheblich um welchen Modultyp es sich handelt.

In meinem speziellen Fall sind es vorrangig dummy-Definitionen für temporäre "Variablen".

Wie kann ich die daran hindern in die fhem.cfg zu wandern?

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

$defs{NAME}{TEMPORARY} setzen.
Ist aber eigentlich nicht vorgesehen.
Wieso stoeren sie in fhem.cfg?

Zum Rechnen kann man auch $data{meineVariable} verwenden.

Markus Bloch

Zitat von: rudolfkoenig am 25 Januar 2015, 16:19:03
$defs{NAME}{TEMPORARY} setzen.
Ist aber eigentlich nicht vorgesehen.

Dachte ich mir schon fast.

Zitat von: rudolfkoenig am 25 Januar 2015, 16:19:03
Wieso stoeren sie in fhem.cfg?

Zum Rechnen kann man auch $data{meineVariable} verwenden.

Geht mir weniger ums rechnen, sondern ums temporäre Unterbringen eines Wertes, der nach einer gewissen Zeit wieder benötigt wird. %data kannt ich noch garnicht. Dann nehm ich besser das.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)