Wann Werte aus fhem.save programmtechnisch auswertbar ?

Begonnen von DS_Starter, 28 Januar 2016, 00:33:47

Vorheriges Thema - Nächstes Thema

DS_Starter

Guten Abend zusammen,

wahrscheinlich ist meine Frage recht trivial, aber mir fehlt der richtige Ansatz ...

Wenn FHEM beendet wird, werden ja beim Start diverse Werte aus fhem.save eingelesen um die Status vor dem Stopp wieder herzustellen.
Nun möchte ich anhand des $hash->{State} feststellen, ob zum Zeitpunkt des shutdown von FHEM dieser Wert gleich "on" war (um entsprechende Reaktionen auszuführen).

An welcher Stelle  bzw. Funktion wird während der Startsequenz fhem.save eingelesen, d.h. wann stehen die Werte auswertbar zur Verfügung ?

Habe das bereits erfolglos am Ende X_Define-Routine ausprobiert, aber zu diesem Zeitpunkt stehen die Werte von  $hash->{State} noch auf "???" wenn ich nichts falsch gemacht habe.

Bitte gebt mir mal einen Schubs .....

viele Grüße
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

$hash->{State} steht nie zur VErfügung, denn diesen Wert gibt es überhaupt nicht. (Man achte auf Groß-/Kleinschreibung!)

Zitat von: DS_Starter am 28 Januar 2016, 00:33:47
An welcher Stelle  bzw. Funktion wird während der Startsequenz fhem.save eingelesen, d.h. wann stehen die Werte auswertbar zur Verfügung ?

Reihenfolge:


  • Zuerst werden nacheinander alle nicht-volatilen devices zusammen mit ihren Attributen angelegt,
  • danach werden die Daten aus fhem.save verarbeitet und dabei auch volatile devices (z.B. einmalig auszuführende at) angelegt,
  • danach wird $init_done auf 1 gesetzt.

Es besteht übrigens auch die Möglichkeit, ein fhem zu starten, ohne die fhem.save überhaupt zu verarbeiten (zumindest bei configDB).
Auf Werte aus der fhem.save sollte man sich als Entwickler besser nicht verlassen - man weiss nicht, ob sie überhaupt vorhanden und/oder gültig sind.


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Guten Morgen,

danke für die Info betateilchen, das hilft mir auf jeden Fall weiter denke ich.

Ja, STATE ist klar .... war schon ein bisschen spät gestern Abend bzw. heute früh  :)


Schönen Tag noch !


Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

$hash->{STATE} ist übrigens ein Internal, das meiner Meinung nach überhaupt nicht in die fhem.save geschrieben oder von dort gelesen wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

#4
Naja, mir sieht das so aus. Schau mal in diesen Auszug meiner fhem.save:

........................
setstate CUL_868 2015-12-02 00:36:19 raw is00000F000FF0
setstate CUL_868 2016-01-28 00:40:27 state Initialized
setstate CUL_868 2015-12-01 00:33:28 version V 1.61 CUL868
setstate Cam3 2016-01-28 00:40:28 Availability
setstate Cam3 2016-01-28 00:40:28 PollState Inactive
setstate CamCP1 off
setstate CamCP1 2016-01-28 01:09:59 Availability enabled
setstate CamCP1 2016-01-28 01:09:59 CamIP 192.168.2.33
setstate CamCP1 2016-01-28 01:09:59 CamLiveMode Liveview from DS
setstate CamCP1 2016-01-28 01:09:59 CamModel BU-3025
setstate CamCP1 2016-01-28 01:09:59 CamPort 80
setstate CamCP1 2016-01-28 01:09:59 CamPreRecTime 10
setstate CamCP1 2016-01-28 01:09:59 CamRecShare surveillance
setstate CamCP1 2016-01-28 01:09:59 CamRecVolume volume1
.......................

Das fette "setstate CamCP1 off"  sollte es m.M. nach sein. Aber ich probiere es aus.

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

justme1968

#5
das ist nicht STATE internal sondern das state reading.

leg ein notify auf global:INITIALIZED an und lies das reading state aus.

das solltet zumindest so lange funktionieren wie das modul beim starten keine readings ändert und ist vermutlich das beste was du erreichen kannst.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DS_Starter

Aha ... ok ...
Dann mache ich das mal.

Danke euch beiden !  :)

Gruß
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Jetzt habe ich ein paar Versuche gemacht und auch eine Lösung gefunden die nach wiederholten Tests bis jetzt prima funktioniert.

Zunächst in X-Define-Routine Aufruf zu Sub:

recstoponboot($hash);         # check ob nach Reboot alle Recordings aus -> sonst stoppen

Die dazu gehörige Subroutine sieht so aus:

######################################################################################
###  check ob alle Recordings = Stop nach Reboot -> sonst stoppen

sub recstoponboot ($) {
  my ($hash) = @_;
  my $logstr;
 
  if ($init_done == 1) {
     if ($hash->{STATE} eq "on") {
         $logstr = "Recording of $hash->{CAMNAME} seems to be active after reboot - try to stop it now";
         &printlog($hash,$logstr,"1");
         &camstoprec($hash);
         }
  }
  else {
  InternalTimer(gettimeofday(), "recstoponboot", $hash, 0);
  }
 
return undef;
}


Das klappt beim FHEM Neustart prima um das Recording der Kameras zu stoppen, falls noch eine Aufnahme (zumindest entsprechend fhem.save) läuft.
Habe mir auch mal einen Logstring mit dem Wert von STATE zum Auswertungszeitpunkt ($init_done=1)  ausgeben lassen und man sieht deutlich "on" oder "off".

Also scheint doch STATE (groß -> internal) durch fhem.save beeinflusst zu werden, denn das werte ich hier aus wenn $init_done.
Oder seht ihr einen Denkfehler ?  (Es funktioniert ja schließlich)

Grüße
Heiko


Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

Zitat von: DS_Starter am 28 Januar 2016, 11:32:07
Also scheint doch STATE (groß -> internal) durch fhem.save beeinflusst zu werden, denn das werte ich hier aus wenn $init_done.
Oder seht ihr einen Denkfehler ?  (Es funktioniert ja schließlich)

Es kommt drauf an, wie die readings im Modul gehandhabt werden.
Im "Normalfall" wird beim setzen des readings state auch das Internal STATE aktualisiert, das muss aber nicht in jedem Modul so sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

ZitatEs kommt drauf an, wie die readings im Modul gehandhabt werden.

Ach ja deswegen .... ich glaube mich zu erinnern bei diversen Studien im Wiki und Forum darüber gestolpert zu sein.

Da muß ich mal schauen ob ich diverse Textstellen im Wiki etc. finde die beschreiben wo und wie das "Normalverhalten" geändert wird/werden kann.

Nicht das ich dieses Verhalten im Modul unbeabsichtigt  abändere und mich dann wundere warum die oben beschriebene Routine nicht mehr funktioniert.

Super ... danke !
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Thorsten Pferdekaemper

Zitat von: DS_Starter am 28 Januar 2016, 11:53:02
Nicht das ich dieses Verhalten im Modul unbeabsichtigt  abändere und mich dann wundere warum die oben beschriebene Routine nicht mehr funktioniert.
Ich denke, dass Du einfach das Reading "state" statt das Internal "STATE" verwenden solltest. Dann müsstest Du auf der sicheren Seite sein.
Gruß,
   Thorsten
FUIP

DS_Starter

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter