Register werden nicht gesetzt

Begonnen von holgerschlegel, 18 April 2016, 10:09:05

Vorheriges Thema - Nächstes Thema

holgerschlegel

Hallo,

ich verwende eine Perl Funktion um bei bestimmten Bedingungen die Heizprogramme aller meine Wandthermostate (HM-TC-IT-WM-W-EU) umzustellen.
Dazu wird je Thermostat ein "regSet weekPrgSel prog2" (natürlich mit der jeweils passenden Programmnummer) abgesetzt.
Aufgrund der Einstellung "autoReadReg" auf "5_readMissing" erfolgt kurz danach ein "getConfig" auf den Climate Kanal.

Meine Erwartung ist, das danach alle Thermostate auf dem entsprechenden Programm stehen.
Leider ist dem aber nicht so.
Nach früheren Tipps hier im Forum hatte ich nach jedem regSet ein "sleep(60)" eingebaut.
Das hat aber scheinbar nicht zum gewünschten Ergebnis geführt.

Hier der entsprechende Auszug aus der fhem.log Datei.

2016.04.18 09:30:40 3: CUL_HM set Az.Thermostat.Climate regSet weekPrgSel prog2
2016.04.18 09:31:40 3: CUL_HM set Ba.Thermostat.Climate regSet weekPrgSel prog2
2016.04.18 09:32:40 3: CUL_HM set Ku.Thermostat.Climate regSet weekPrgSel prog2
2016.04.18 09:33:41 3: CUL_HM set Sz.Thermostat.Climate regSet weekPrgSel prog2
2016.04.18 09:34:41 3: CUL_HM set Wz.Thermostat.Climate regSet weekPrgSel prog2
2016.04.18 09:35:53 3: CUL_HM set Az.Thermostat.Climate getConfig
2016.04.18 09:36:09 3: CUL_HM set Ba.Thermostat.Climate getConfig
2016.04.18 09:36:25 3: CUL_HM set Ku.Thermostat.Climate getConfig
2016.04.18 09:36:41 3: CUL_HM set Sz.Thermostat.Climate getConfig
2016.04.18 09:36:57 3: CUL_HM set Wz.Thermostat.Climate getConfig

Weitere Log-Zeilen davor oder danach gibt es nicht.

Wenn ich mir jetzt die entsprechenden Werte in der Oberfläche anschaue, stehen "Az.Thermostat.Climate" und "Ba.Thermostat.Climate" wie gewünscht auf "prog2".

Jedoch stehen "Ku.Thermostat.Climate", "Sz.Thermostat.Climate" und "Wz.Thermostat.Climate" immer noch auf "prog1".
In diesen 3 Devices steht dafür unter "protIOerr" der Wert "1 last_at:2016-04-18 09:35:41". Mit genau der gleichen Uhrzeit bei allen 3 Devices.
Vermutlich ist dies die Uhrsache für die fehlgeschlagenen Registeränderung..

Alle Devices stehen auf "CMDs_done".

Im HMLAN ist die "msgLoadHistory" "5min steps: 0/0/0/28/0/0/0/0/0/0/0/1", also laut meiner Interpretation kein Overload.


Hat noch jemand Ideen oder Tipps woran es liegen kann, oder wo ich noch nach Fehlern suchen kann?

Grüße
Holger

martinp876

Ioerr besagt, dass das io einen Fehler hat. Evtl overload.
Hast du hminfo? Dann mache ein get hm protoevents.

holgerschlegel

Hier das Ergebnis des HMInfo get protoEvents.
Ich sehe die IOerr der 3 Devices die nicht umgeschaltet haben.
Speziell den Teil unter der Tabelle kann ich aber nicht interpretieren.

protoEvents done:
    name             :State           |CmdPend   |Snd       |Resnd     #CmdDel    |ResndFail |Nack      |IOerr
    Au.Lampe         : done           |  -       | 3:       |  -       #  -       |  -       |  -       |  -
    Au.Temperatur    :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Az.Fenster_Dach  :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Az.Fenster_Front : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Az.Heizung       :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Az.Thermostat    : done           |  -       | 53:      | 1:       #  -       |  -       |  -       |  -
    Ba.Heizung       : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Ba.Thermostat    : done           |  -       | 52:      |  -       #  -       |  -       |  -       |  -
    Fl.Fenster       : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Fl.Heizung       :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Ku.Fenster       : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Ku.Heizung       :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Ku.Thermostat    : done           |  -       | 48:      |  -       # 5        |  -       |  -       | 1:
    Sz.Fenster       :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Sz.Heizung       : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Sz.Thermostat    : done           |  -       | 63:      | 1:       # 5        |  -       |  -       | 1:
    Wz.Fenster_Dach  : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Wz.Fenster_Front : done           |  -       | 1:       |  -       #  -       |  -       |  -       |  -
    Wz.Heizung_Dach  :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Wz.Heizung_Front :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
    Wz.Thermostat    : done           |  -       | 77:      | 2:       # 5        |  -       |  -       | 1:
    Ze.Stromzaehler  :  -             |  -       |  -       |  -       #  -       |  -       |  -       |  -
================================================================================================================
    sum              0                |0         |303       |4         #15        |0         |0         |3

    CUL_HM queue length:0

    requests pending
    ----------------
    autoReadReg          :
        recent           : Wz.Thermostat
    status request       :
    autoReadReg wakeup   : Az.Fenster_Front Wz.Fenster_Dach Wz.Fenster_Front
    status request wakeup:
    autoReadTest         : Az.Thermostat.Climate Ba.Thermostat.Climate Ku.Thermostat.Climate Sz.Thermostat.Climate Wz.Thermostat.Climate

    IODevs:HMLAN1:opened pending=0 condition:ok


Nebenfrage:
Kann es sein das ein sleep(60) hinter einem notify gleich den ganzen FHEM schlafen legt?
Zumindest kommt der Browser für die komplette Zeit (hier 5*60 Sekunden) nicht zurück und zeigt in den Tab nur eine Sanduhr.

Grüße
Holger

franky08

#3
Ja, wenn hinter dem sleep nicht´s weiter steht. Siehe commandref:

ZitatBemerkung: falls sleep von keinem Befehl gefolgt wird, dann wird FHEM blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

holgerschlegel

ZitatJa, wenn hinter dem sleep nicht´s weiter steht. Siehe commandref:

Da der Sleep in einer Perl Funktion in MyUtils steht, stehen dahinter sehrwohl beitere Befehle. In diesem Fall wird der Befehl in einer Schleife über alle Wandthermostate ausgeführt.

franky08

Na, dann informier dich mal über sleep in Zusammenhang mit Perl!
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1