tempList.cfg temperatur Profile

Begonnen von x347, 23 Oktober 2014, 14:03:07

Vorheriges Thema - Nächstes Thema

bgewehr

Oh. Was genau ist die Bedeutung von "bestätigt" und warum braucht man das?

Ich habe ja die Liste per tmpList save erzeugt. Was muss ich da noch tun?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

martinp876

das prinzip hast du schon verstanden - von HM allgemein?
IM device werden daten (register) gespeichert. Auch die templisten gehören in die Kategorie.
in FHEM werden readings dargestellt - auch register kann man darstellen
im File (templisten) kann man konfigurationen speichern.

Das lesen der Register aus devices ist nicht "kostenfrei" - und manchmal umständlich. Je nach device kostet es resourcen in der Luft sowie Zeit. Daher kann der User das Lesen steuern. Über das Attribut autoReadReg kann man es automatisieren - man hat aber einen Delay.
Für das Schreiben gilt das gleiche - sogar noch mehr.
=> man kann kein file beim starten immer "schreiben". die templisten müssen manuell geschrieben werden (also das schreiben anstossen).
=> wenn man geschrieben hat kann man die daten wieder aus dem Device lesen - zur sicherheit. mache ich IMMER. nur dann bin ich wirklich sicher, dass das, was in FHEM dargestellt wird ein Abbild des device ist.

nach einem Schreiben - wenn man nicht gelesen hat - sind die Daten denmach nicht verifiziert. Wenn man noch einmal gelesen hat sollte alles stimmen.
man kann in HMInfo zusätzlich prüfen, dass alle Daten komplett geladen sind (aus den Devices gelesen).

Wenn du die Daten mit getConfig gelesen hast sollten die Daten auf verified stehen. Du kannst ein save machen, das ändert nichts am Zustand verified. wenn du ein restore machst willst du etwas schreiben - danach wird FHEM wieder nachsehen wollen, was passiert. ist.

bgewehr

#47
Vielen Dank für die umfängliche Erklärung, das hilft mir weiter.

Ich habe verstanden, dass es vier Stellen von Informationen gibt, die im Takt bleiben müssen:
- die Register im HM Gerät
- die Register in Fhem (getconfig)
- die Readings aus den Registern (Modulsache)
- die files, die wir speichern

Ist es nun richtig, dass ich ein neues tmpList- File, dass ich jetzt per Save erzeugt habe, nicht direkt per restore wieder einlesen kann? Was muss denn da erst verifiziert werden?

Wenn aber zwischendurch eine Änderung an den Settings des Devices gemacht wurde, warum muss dann vor dem Schreiben aus einer tmpList Datei irgendwas verifiziert werden? Hinterher wäre mir einleuchtend, aber vorher? Also warum kommt beim restore ein fail mit dem Grund fehlende Verifizierung? Was genau wird gegen was verifiziert?

Wenn ich vorher ein getconfig mache, was bringt das vor dem Schreiben?

Sorry, ich steh da auf dem Schlauch...


Gesendet von iPhone mit Tapatalk
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

martinp876

Zitat- die Register in Fhem (getconfig)
ist ein kommando, der die register aus dem Device liest und in den Readings darstellt.
Die Register werden in hex auch in den Readings gespeichert - kannst du sehen, wenn expert auf 2 steht.

ZitatIst es nun richtig, dass ich ein neues tmpList- File, dass ich jetzt per Save erzeugt habe, nicht direkt per restore wieder einlesen kann?
falsch. Das file wird gelesen, es werden die kommmandos generiert und geschickt. wenn autoReadReg entsprechend gesetzt ist (ich setze immer 5) werden die Daten auch automatisch rückgelesen. Das kanze kann schon 6-10min dauern. wenn es probleme gibt auch länger. Grund ist, dass sich ein rt nur alle 3min meldet - und idR 2-3 Zyklen gebraucht werden.
bei autoReadReg läuft ein background timer von 30min, der - falls etwas nicht komplett erscheint - ein getCondfig triggert.
Zitat
Wenn aber zwischendurch eine Änderung an den Settings des Devices gemacht wurde, warum muss dann vor dem Schreiben aus einer tmpList Datei irgendwas verifiziert werden?
FHEM schreibt nicht immer alles. Es werden änderungen von Registern geschrieben - alles andere kostet zu viel Performance. wenn also register-readings vorhanden sind werden die Ändeerungen mit den vorhandenen verglichen und unterschiede geschreiben.
Es ist demnach essentiell, dass die daten konsistent gehalten werden.

Einfach ist es:
setze autoReadReg auf 5 (immer ... setze ich überall)
ich würde immer das attribut tempListTmpl entsprechend setzen ...
setze deine templist im file wie gewünscht

jetzt kannst du mit restore die daten in die rts schreiben.
dann kannst du warten, wenn du gedult hast (schwierig, weiss ich)

nun würde ich mein system mit HMInfo überwachen - das ist dafür gemacht
danach verifizieren

wenn also die attribute stimmen, kannst du dein system in einem zug syncen
set hm tempListTmpl status
set hm tempListTmpl restore
set hm tempListTmpl verify

so weit klar?
mir wäre es zu blöd, jeden rt einzeln zu setzen.


Motivierte linke Hände

Um sicherzugehen, dass ich das richtig verstanden habe:

Wenn ich also in einer Routine zum automatischen Setzen von tempLists

set Hzg_Gaestezimmer_Clima tempListTmpl restore /opt/fhem/tempList.cfg:Gaestezimmer

stehen habe und das im Logfile dann führt zu

2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListMon prep 06:00 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListTue prep 06:00 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListWed prep 06:00 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListThu prep 06:00 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListFri prep 06:00 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListSat prep 06:30 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListSun prep 06:30 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: CUL_HM set Hzg_Gaestezimmer_Clima tempListSun exec 06:30 17.0 09:00 21.0 21:00 17.0 23:00 21.0 24:00 17.0
2015.02.08 20:03:46 3: set Hzg_Gaestezimmer_Clima tempListTmpl restore /opt/fhem/tempList.cfg:Gaestezimmer :
Hzg_Gaestezimmer_Clima: tempList not verified


... dann heißt das, das nicht sichergestellt ist, dass die TempList angekommen ist.

Gibt es eine Möglichkeit, ein Skript so zu schreiben, dass das richtige Setzen der tempLists sichergestellt ist? Müsste ich jeweils noch ein verify dahintersetzen?

set Hzg_Gaestezimmer_Clima tempListTmpl restore /opt/fhem/tempList.cfg:Gaestezimmer
set Hzg_Gaestezimmer_Clima tempListTmpl verify /opt/fhem/tempList.cfg:Gaestezimmer


Oder müsste ich dann auch noch auf die Rückmeldung von verify irgendwie reagieren? Das soll, wie gesagt, automatisch ablaufen - und idealerweise so zuverlässig wie möglich.
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

martinp876

Mit dem restore werden die komandos in die q gehaengt. Damit ist es nicht gesendet, das dauert etwa 3 min. Wenn autoreadreg eingestellt ist wird die liste automatisch ruckgelesen. Dann steht verified drin... also die werte in fhem sind die im device. Nun kannst du ein temllisttemplate verify machen.
Wenn du es automatisieren willst kannst du ein verify nach dem empfang des verified triggern.

Uber hminfo - wie gesagt - kannst du das ganze system mit einem kommando verifizieren.

Motivierte linke Hände

Danke für die Erläuterung!

Verify (hminfo oder einzelnes Gerät) sendet aber keine Befehle neu, wenn die im Gerät nicht richtig verarbeitet wurden, d.h. das müsste ich dann auch irgendwie automatisieren, damit ein automatisiertes verify Sinn macht?
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

martinp876

sollte schon automatisch funktionieren. wäre daneben, wenn es nicht unterstützt wäre

set tempListTmpl[<typeFilter>][templateName][verify|restore|status|genPlot] [<filename>]# program a templist from a template in the file to one or multiple devices

verify: prüfen, dass das File mit den Readings übereinstimmt - und der status korrekt (verified) ist.
status: welches template wird wo genutzt
restore: schreiben der unterschiedlichen werte vom File in das Device.


Also:
optional
- Readings sind korrekt? besser ist das.
- set hm tempListTmpl status # prüfen, dass auch das template entsprechend gesetzt ist
- attribut autoReadReg im Device auf 5 (meine Empfehlung...)

notwendig
- template im File setzen, wie man mag. so viele templates ändern, wie man will.
- set hm tempListTmpl restore
### warten... ~10min. dann sind 3 Perioden des Sendens vorbei. Alternativ burst nutzen und burstXmit absetzen...

nach 10 min sollte
- alle Kommandos abgearbeitet sein
- autoReadReg dafür gesorgt haben, dass das device nach dem Schreiben automatisch gelesen wurde
- templistStatus auf verified stehen

man kann am Ende und immer zwischendurch ein
- set hm tempListTmpl verify
durchführen
Auch interessant: prüfen, ob die Verarbeitung abgeschlossen ist
- set hm protoEvents



Noch ein Tip: ich würde die ConfigFile nie in das Directory FHEM legen. Aber das eingebaute edit der files verlangt dies. Also lege ich meine files in ein Directory "setup" neben FHEM und erzeuge einen softlink im Verzeichniss FHEM auf das ConfigFile. Klappt prima.

goerdi

Hi !

Sry das ich hier nochmal einsteige.... ich habe eine tempList.cfg angelegt und das Ganze mit

beim Regler ist alles richtig eingetragen
tempListTmpl   setup/tempList.cfg:aufenthalt

set hm tempListTmpl verify
set hm tempListTmpl status
und  set hm tempListTmpl restore klappt auch ganze gut
nach einem restore stehn die Werte in den Reglern.. soweit so gut

Ich hab hm autoupdate eingeschaltet und bei allen Devices AutoReadReg auf 5 stehen.

also set hm tempListTmpl status sagt bei allen OK
set hm tempListTmpl verify ist bei allem auf passed

jetzt aendere ich die Datei tempList.cfg  aber die Register werden nicht upgedatet...

Hab ich da was vergessen oder einen Denkfehler ?

Gruss Gerd

martinp876

so weit gehe ich nicht - bis jetzt zumindest.
autoreadreg 5 stellt (bestmöglich) sicher dass die Registerwerte-Kopie in FHEM den Werten aus dem Device entsprechen.
ein templistverify wird nur manuell angestossen. Hier werden die Werte der Kopie mit den Werten im File verglichen.

Ich könnte jetzt einbauen, das beim Ändern des templates ein automatisches verify durchgeführt wird und ein templateStatus gesetzt wird (ok/deviation/TemplateNotFound/RegisterNotComplete).
templates kann man im Prinzip für alle Devices anlegen - man könnte es also generell machen. Das würde die Archivierung von Registern kompletieren: auslesen, archivieren, verifizieren.
Das automatische Schreiben bei Abweichungen.... könnte man auch einbauen.... wäre ich aber vorsichtig.

Dauert aber sicher etwas. Aktuell leider noch handarbeit.

goerdi

Hi !

kommt drauf an... man kanns ja auch extern per cronjob ueberwachen..
sprich wenn die Datei innerhalb der letzten 10 minuten geaendert wuerde führe den Befehl aus...

Die Frage ist nur geht das fhem telnet in einem script ?

Gruss Gerd

Motivierte linke Hände

Du kannst es zumindest umgekehrt machen und Skripte aus fhem ausführen. Die Ausgabe des Skeipts kannst Du in eine Variable einlesen und weiterverarbeiten. Dazu gibt's Beispiele, die das System erklären sollten. Wenn Du nichts findest, melde Sich gerne nochmals, dann gehe ich mal meinen Code durchsuchen.

Gruß, Christian
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

martinp876

Klar kannst du fhem mit einem script von extern steuern. Kommt auf dein script an.
Ist aber ein fragwuerdiges vorgehen... fhem script per script zu steuern.

kadettilac89

#58
Hallo, ist es möglich, dass im HM-Modul die Funktion "tempListTmpl" rausgenommen wurde?

"set hm tempListTmpl -f Schlafzimmer sru restore tempList.cfg"

Ich bekommen nun die Fehlermeldung:
Unknown argument tempListTmpl, choose one of archConfig autoReadReg clear cpRegs loadConfig purgeConfig saveConfig tempList templateDef templateDel templateExe templateSet update verifyConfig

Ich hab mehrere Heizprogramme in einem Templatefile und setze diese je nach Anforderung .. z. B. Homeoffice und das Büro wird geheizt. Es gibt zwar die Möglichkeit einzelne Templatefiles per "set hm tempList" zu setzen, aber dann müsste ich für jedes Thermostat ein File haben was ich verhindern möchte.

Ich hab an den Definitionen nichts geändert und es lief letzten Winter problemlos. Es wurde scheinbar durch ein Update irgendwann zwischen März und jetzt geändert.

Danke schon mal!

Edit:
Version die das Update gezogen hat und nicht mehr funktioniert:
98_HMinfo.pm 9697 2015-10-27 12:31:35Z martinp876

Version aus einem Backup das noch funktioniert:
98_HMinfo.pm 9300 2015-09-25 10:58:46Z martinp876

martinp876

Attr Schlafzimmer templist sru
Set hm templist -f Schlafzimmer restore