ActionDetector und fhem.save

Begonnen von volschin, 13 Dezember 2013, 15:28:13

Vorheriges Thema - Nächstes Thema

volschin

Das habe ich gerade in einer alten Diskussion gefunden, aber noch nicht getestet.
ZitatMit der Definition wird die fhem.save alle 60 Minuten automatisch gespeichert. Das sollte wohl reichen, um nicht wieder zwei Stunden manuell Variablen zu setzen. :-D

    define AutoSave at +*01:00:00 {          \
        fhem (" { WriteStatefile() } ")    ;;     \
    }

Gruß
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

volschin

Punkt 1: Der Code war etwas zu umständlich. Einfacher:
define AutoSave at +*01:00:00 { WriteStatefile() }

Tut bei mir, was es soll.

Punkt 2: Der ActionDetector greift jetzt den aktuellen Status ab, nutzt aber anscheinend für seine eigenen Daten als Basis nicht die fhem.save. Dort sind die Daten aber drin.

setstate ActionDetector alive:14 dead:0 unkn:5 off:0
setstate ActionDetector 2013-12-14 10:57:55 state alive:14 dead:0 unkn:5 off:0
setstate ActionDetector 2013-12-14 10:57:55 status_Fenster.Bad unknown
setstate ActionDetector 2013-12-14 10:57:55 status_Fenster.Kueche unknown
setstate ActionDetector 2013-12-14 10:57:55 status_Fenster.Schlafen.R unknown
setstate ActionDetector 2013-12-14 10:57:55 status_Fenster.Wohnen.R unknown
setstate ActionDetector 2013-12-14 10:57:55 status_HZ_Regler.Bad alive
setstate ActionDetector 2013-12-14 10:57:55 status_HZ_Regler.Kueche alive
setstate ActionDetector 2013-12-14 10:57:55 status_HZ_Regler.Schlafen.L alive
setstate ActionDetector 2013-12-14 10:57:55 status_HZ_Regler.Schlafen.R alive
setstate ActionDetector 2013-12-14 10:57:55 status_HZ_Regler.Wohnen.L alive
setstate ActionDetector 2013-12-14 10:57:55 status_HZ_Regler.Wohnen.R alive
setstate ActionDetector 2013-12-14 10:57:55 status_Rauchmelder.Flur alive
setstate ActionDetector 2013-12-14 10:57:55 status_Rauchmelder.Schlafen alive
setstate ActionDetector 2013-12-14 10:57:55 status_Rauchmelder.Wohnen alive
setstate ActionDetector 2013-12-14 10:57:55 status_Schuhtuer.Flur unknown
setstate ActionDetector 2013-12-14 10:57:55 status_Thermostat.Bad alive
setstate ActionDetector 2013-12-14 10:57:55 status_Thermostat.Kueche alive
setstate ActionDetector 2013-12-14 10:57:55 status_Thermostat.Schlafen alive
setstate ActionDetector 2013-12-14 10:57:55 status_Thermostat.Wohnen alive
setstate ActionDetector 2013-12-14 10:57:55 status_Tuer.Flur alive


Als Ergebnis schickt mir Prowl beim Neustart 39 Messages, obwohl sich der Status nicht geändert hat.
Das ist mein Notify:
define alive notify ActionDetector.* {myProwl('Alarm: Änderung im ActionDetector',"%",1)}

Lässt sich da was machen?

Gruß,
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

martinp876

ok - ist ein 'händischer' Aufruf. Das geht sicher. Dauert auch nicht einmal so lange, ein paar Hundert ms. Hängt natürlich von der Systemgrösse. Man könnte es im batch schreiben lassen - wäre ideal für so einen Hintergrund job. das kostet kleiner 50ms "outage" für das System.

define AutoSave at +*01:00:00 {          \
{BlockingCall("WriteStatefile", "","", 30,"", "")}\
}


Gruss Martin

martinp876

Hallo Veit,

So, jetzt habe ich das Problem gefunden.... der action-detector räumt immer auf und löscht nicht eingetragene Readings.
werde ich ändern....
version 4380 steht bereit

das notify könntest du spezifischer machen

define alive notify ActionDetector:.status.* {myProwl('Alarm: Änderung im ActionDetector',"%",1)}

attr ActionDetector event-on-change-reading .*

hast du sicher schon

Gruss Martin


volschin

Hallo Martin,
großartig. Ich habe mir die Datei gleich zum Testen aus dem SVN gezogen und eingespielt. Shutdown & restart. Alle Daten sind da und keine Alarmmeldung ging raus.

Ich finde es immer wieder toll, was Du hier auf die Beine stellst.

Ganz herzlichen Dank.

Gruß
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

Sailor

Hallo zusammen

mir ist bewusst, dass der Thread schon ein bisschen aelter ist, aber ich moechte auf Basis der ActionDetector - Dead Meldungen einem dummy setzen.

Hierzu habe ich folgenden Code ausgebruetet:

define DeadDeviceIndicatorNotify notify ActionDetector:.status.* {\
if (substr(Value("ActionDetector"), (index(Value("ActionDetector"), "dead:")+5), 1) > 0) {\
fhem "set DeadDeviceIndicator dead";;\
fhem "set PushoverWarning msg 'Deeke Home-ActionDetector' 'Dead device detected' '' 1 ''";;\
Log 3, "Dead Device warning sent via Pushover" ;;\
};;\
else {\
fhem "set DeadDeviceIndicator alive";;\
};;\
}


Doch irgendwie scheine ich den Trigger Befehl dafuer falsch zu verwenden.  :-[

Habe die Befehle

trigger ActionDetector alive:4 dead:1 unkn:0 off:0
trigger ActionDetector  state alive:4 dead:1 unkn:0 off:0
trigger ActionDetector  STATE alive:4 dead:1 unkn:0 off:0
trigger ActionDetector  status alive:4 dead:1 unkn:0 off:0

ohne Ergebnis durchprobiert.

Habt Ihr eine Idee, wie ich den Code testen kann oder ob er ueberhaupt funktionieren kann?

Gruss
    Sailor
******************************
Man wird immer besser...

volschin

Das wundert mich nicht. Das Notify erwartet für ein Einzeldevice ein dead oder alive. Dafür ist das status.* So muss dann auch getriggert werden.

Gruß
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

Sailor

Hallo Veit

OK Danke... So weit verstanden, aber selbst wenn ich


trigger BR_Window alive:dead
trigger BR_Window alive:no


versuche, steht im ActionDetector-2014.log nichts neues.

Ich meine gelesen zu haben, dass der Action Detector die Meldungen nur zyklisch abfragt, so dass der trigger auf Device-Ebene schlichtweg ueberlesen wird.

Folglich kommt der entsprechende Code daher auch nicht zum tragen:


define DeadDeviceIndicatorNotify notify ActionDetector:.status.* {\
fhem "set PushoverWarning msg 'ActionDetector' 'test message' '' 1 ''";;\
}


"Was tun" sprach Zeus

Sailor
******************************
Man wird immer besser...

martinp876

Der Actiondetector fragt nicht ab, ob im Device dead/alive steht sondern schreibt es rein. Hierzu wird jeweils der Zeitstempel der letzten receivemessage geprueft.

Wenn du ein dead provizieren willst solltest du einfach actCycle auf einen kleinen wert setzen (00:01) . Die Pruefintervale des ActionDetector legst du in dessen Attribut actCycle fest.

das
if (substr(Value("ActionDetector"), (index(Value("ActionDetector"), "dead:")+5), 1) > 0) {\
wuerde ich so schreiben
if (Value("ActionDetector") !~ m/dead:0 /) {\
sollte schneller gehen und auch beruecksichtigen, dass 10 und mehr devices tot sind.

und den trigger
define DeadDeviceIndicatorNotify notify ActionDetector:.*alive:.* {\

Gruss Martin

Sailor

#24
Hallo Martin,

danke für Deiien Hilfe damals.  :)
Habe Deinen Code verwendet und es hat über den letzten Zeitraum von 3 Monaten auch sehr gut geklappt.

Die Meldungen kommen durch, wenn auch manchmal etwas unbegründet.  :o

Um herauszufinden welche(s) Gerät(e) eigentlich den DeadDevice-Trigger ausgelöst haben, wäre es wünschenswert, den entsprechenden Gerätenamen mit in der Message zu übertragen.

Wie komme ich also an dieses Array an Variablen. Im ActionDetector selbst stehen ja nur die Zahlen und der Befehl "list ActionDetector" gibt mir diese nicht im Einzelnen als Variable wieder.

Und mit dem Befehl "get ERRactNames" unter HMInfo komme ich nicht ganz klar.


Gruß
    Sailor
******************************
Man wird immer besser...

martinp876

das ist aktuell nicht wirklich eingebaut. Also habe ich ein neues Kommando eingebaut. Ab morgen also

get ActionDetector listDevice          # returns all assigned entities
get ActionDetector listDevice notActive# returns entities which habe not status alive
get ActionDetector listDevice alive    # returns entities with status alive
get ActionDetector listDevice unknown  # returns entities with status unknown
get ActionDetector listDevice dead     # returns entities with status dead


in HMInfo kannst du auch
InternalVal("hm","ERRactNames","")
nutzen.

Sailor

Super ... Danke!  :D

Bin schon gespannt!

Gruss
   Sailor
******************************
Man wird immer besser...

Sailor

Hallo Martin

habe gerade ein "update force" gefahren um das CUL_HM auf den neusten Stand zu bringen.

Aber irgendwie nimmt er die "get ActionDetector..." Befehle nicht an.
Habe ich einen Fehler gemacht?  :o

Gruss
    Sailor
******************************
Man wird immer besser...

martinp876

der ActionDetector braucht das Attribut model ActionDetector. Das sollte eigentlich automatisch gesetzt werden. Passiert dies auch? Wenn nicht trage es ein.
Du hast einen update gemacht? Auch HMConfig ist sicher neu?

Sailor

Hallo Martin

Folgender Versionsstand

# $Id: HMConfig.pm 6044 2014-06-03 18:18:26Z martinp876 $
# $Id: 10_CUL_HM.pm 6054 2014-06-04 07:43:35Z martinp876 $

attr ActionDetector model ActionDetector liess sich im Frontend nicht auswaehlen. Habe es daher manuell ind die fhem.cfg eingetragen.

Der gesamte Eintrag sieht jetzt wie folgt aus:

###START########## Initialize ActionDetector to process KeepAlive Signals  ####################################START####
define ActionDetector CUL_HM 000000
attr ActionDetector actCycle 600
attr ActionDetector event-on-change-reading .*
attr ActionDetector model ActionDetector
define FileLog_ActionDetector FileLog ./log/ActionDetector-%Y.log ActionDetector
attr FileLog_ActionDetector archivedir /var/media/ftp/SEAGATE-ST3500630A-01/fhemlog-archive
attr FileLog_ActionDetector logtype text
attr FileLog_ActionDetector nrarchive 1
attr FileLog_ActionDetector room Logs
####END########### Initialize ActionDetector to process KeepAlive Signals  #####################################END#####



Dennoch ergibt der Befehl

get ActionDetector listDevice


die Meldung


Unknown argument listDevice, choose one of cmdList param saveConfig


"Was tun" sprach Zeus...  ???

Gruss
    Sailor
******************************
Man wird immer besser...