Gelöst: Nach Neustart viele di_SetSysAttr: bad reading name 'ARRAY Meldungen

Begonnen von AlexMuc, 13 Oktober 2025, 15:17:13

Vorheriges Thema - Nächstes Thema

AlexMuc

Hallo zusammen,
vermutlich nach dem Umzug von einem Pi2 auf einen Pi4 finden sich bei mir im Log von Fhem nach jedem Neustart fast 300 Zeilen mit Fehlermeldungen
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'ARRAY(0x1e0f670)_verbose_attr' (allowed chars: A-Za-z/\d_\.-)
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'ARRAY(0x25ecc00)_stacktrace_attr' (allowed chars: A-Za-z/\d_\.-)
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'ARRAY(0x25eccf0)_autocreate_attr' (allowed chars: A-Za-z/\d_\.-)
und
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'AttrState_ARRAY(0x1e0f670)_verbose' (allowed chars: A-Za-z/\d_\.-)
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'AttrState_ARRAY(0x25ecc00)_stacktrace' (allowed chars: A-Za-z/\d_\.-)
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'AttrState_ARRAY(0x25eccf0)_autocreate' (allowed chars: A-Za-z/\d_\.-)
2025.10.13 14:35:33 3: di_SetSysAttr: bad reading name 'AttrState_ARRAY(0x261dac0)_autocreate' (allowed chars: A-Za-z/\d_\.-)
Google kennt "di_SetSysAttr" garnicht. Welche Aliens haben sich bei mir eingenistet?

fz55

Hallo,

der Fehlermeldung nach ist di_SetSysAttr ein Device (DOIF?) bei dem ungültige Readingsnamen verwendet werden. Mit

deletereading di_SetSysAttr .*\(.*
löscht du alle Readings des Devices die eine ( enthalten.

Aber wie wurden die Readings erzeugt? Hast du eventuell fehlerhafte setstate-Befehle abgesetzt?

AlexMuc

Hab ihm!
Unter Everthing war tatsächlich ein Device mit diesem Namen welche einige Einstellungen beim MQTT Server vornimmt. Da sind jede Menge Readings die zu den Fehlern passen. Jetzt hab ich einen Ansatz wonach ich suchen muß.

Danke dir für den Wegweiser.

AlexMuc

So, hier noch ein Hinweis zur kompletten Lösung.
Das Device definiert einen UI-Table mit 4 Schaltern die Verboselevel, Autocreate von Fhem und MQTT-Server und einen "Stacktrace" einfach konfigurieren.

Die Funktion war nach dem Umzug irgendwie total kaputt, ich habe sie, nachdem ich sie gefunden habe, einfach gelöscht und aus einem Backup neu erstellt.

Leider finde ich gerade nicht raus, wo ich das her habe (weil auf meinem Mist wächst sowas bestimmt nicht, dafür fehlt mir das Wissen):

define di_SetSysAttr DOIF subs{                                                                ## Beschreibung\
    ## Eintragen der Attribute, die geschaltet werden sollen. Als <off> den Wert eintragen, der bei Schalter=off gesetzt wird, ebenso bei <on>\
    ## Beschreibung ist nur Text, der die beiden Möglichkeiten darstellt.\
    ## beim Umschalten wird das gewählte Attribut entsprechend gesetzt, zur Anzeige dahinter wird das Attribut tatsächlich neu gelesen und angezeigt.\
    ## Das kann auch mit einer Verzögerung geschehen, je nach Systemperformance und Attribut\
    ##\
    ## nur hier ändern!        Device          attr        <off>  <on>    Beschreibung \
    push (@{$_attrEntry},[qw(  MQTT2_FHEM_Server      autocreate  no    simple  no/simple )]);;\
    push (@{$_attrEntry},[qw(  global          stacktrace  0      1        0/1      )]);;\
    push (@{$_attrEntry},[qw(  global          verbose      3      5        3/5      )]);;\
    push (@{$_attrEntry},[qw(  autocreate      disable      0      1        0/1      )]);;\
    ##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\
    ## ab hier nix mehr ändern\
\
sub $SELF_attrState {\
        my $dev = shift;;\
        my $attrname = shift;;\
    \
        set_Reading("AttrState_$dev"."_$attrname",AttrVal($dev,$attrname,"???"),1);;\
        ##::Debug("attr: ".$dev.": ".AttrVal($dev,$attrname,"???"));;\
    }\
} ## end subs\
\
init{\
        for (my $i=0;; $i < @{$_attrEntry};; $i++) {\
::Debug("ArrayInhalt $i: ".$_attrEntry[$i][1]);;\
            (AttrVal("$_attrEntry[$i]","$_attrEntry[$i][1]","---") eq "$_attrEntry[$i][3]")?set_Reading("$_attrEntry[$i]_$_attrEntry[$i][1]_attr","on") : set_Reading("$_attrEntry[$i]_$_attrEntry[$i][1]_attr","off");;\
            set_Exec("init_$i",2+$i,qq($SELF_attrState("$_attrEntry[$i]","$_attrEntry[$i][1]")));;\
        }\
 }\
 \
DEF TPL_attrSet (\
$1_ON{\
    if([$SELF:"^$1_$2_attr:.on$"]){\
        set_Reading('AttrState_$1_$2','wait',1);;\
        fhem("attr $1 $2 $4");;\
        set_Exec("ston_$1",2,$SELF_attrState("$1","$2"),'AttrVal("$1","$2","???") ne "$4"');;\
    }\
}\
\
$1_OFF{\
    if([$SELF:"^$1_$2_attr:.off$"]){\
        set_Reading('AttrState_$1_$2','wait',1);;\
        fhem("attr $1 $2 $3");;\
        set_Exec("stoff_$1",2,$SELF_attrState("$1","$2"),'AttrVal("$1","$2","???") ne "$3"');;\
    }\
}\
\
) ## end DEF TPL\
\
FOR (@{$_attrEntry},TPL_attrSet($_$1,$_$2,$_$3,$_$4))
attr di_SetSysAttr event-on-change-reading Attr.*,.*_attr
attr di_SetSysAttr group ADMIN
attr di_SetSysAttr room MQTT2_DEVICE,System
attr di_SetSysAttr uiTable {\
package ui_Table;;\
$TC{0,2} = "align='left'";;\
$TC{1} = "align='right'";;\
$TC{3} = "align='center'";;\
$TR{0} = "style='font-size:80%'";;\
\
## die folgenden Einstellungen nach eigenen Bedürfnis bitte anpassen\
## Details unter https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#CSS-Variablen_und_Steuerungsattribute\
##\
$SHOWNOSTATE=1;;                            ## das Device hat keine Anzeige des STATE (brauchts nicht)\
$SHOWNODEVICELINE = "MQTT2_DEVICE|System";;  ## in den hier eingetragenen rooms wird der Devicename nicht angezeigt, deshalb ist dieses Tool auch\
##                                            im room DOIF_UI, hier kann es zum editieren ausgewählt werden\
$SHOWNODEVICELINK = 1;;                      ## die eingetragenen Devices sind nicht anklickbar\
}\
\
"Device:"|"attribute:"|"setting:"|"posibleValues:"\
FOR (@{$_attrEntry},"$_$1"|"$_$2"|WID([$SELF:$_$1_$_$2_attr],"iconSwitch,off,ios_on_fill\@lime,on,ios_off_fill\@slategray").style([$SELF:AttrState_$_$1_$_$2],([$SELF:AttrState_$_$1_$_$2] eq 'wait')?"orange":([$SELF:AttrState_$_$1_$_$2] eq "$_$3")?"slategray" : "lime","13")|style("$_$5","slategray","11")|"")


AlexMuc

Ich suchte mit Google und fand leider nix :-\ Aber das war es zu 200%.
Danke für den Link, den werde ich jetzt in meinen Waschzettel für Fhem ganz sicher mit aufnehmen.

JoWiemann

Hallo,

ich habe jetzt mit dem DOIF mal etwas "gespielt". So wie es jetzt ist, ist es nicht Neustart fest. Bei welchem Zustand auch immer wird es sowohl durch einen Fhem Neustart, als auch durch einen System Neustart, nicht richtig initialisiert. Hierdurch werden dann die fehlerhaften Readings erzeugt.

Da ich mich bisher nicht mit DOIF befassen musste und im Moment auch keine Zeit finde mich da einzuarbeiten kann ich leider auch nicht zur Fehlersuche beitragen.

Habe es jetzt erst einmal wieder deaktiviert auch wenn es eine schöne Lösung ist.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

AlexMuc

Danke dir für das Feedback. Bisher auf meinem alten Raspi hat es eigentlich immer beide Fälle ,,heil überlebt". Zumindest ist mir da nie was aufgefallen. Vielleicht hat sich ja beim Betriebssystem verändert was verändert was diesen negativen Effekt verursacht? Nur so als Idee.

Damian

Zitat von: JoWiemann am 22 Oktober 2025, 21:06:34ich habe jetzt mit dem DOIF mal etwas "gespielt". So wie es jetzt ist, ist es nicht Neustart fest. Bei welchem Zustand auch immer wird es sowohl durch einen Fhem Neustart, als auch durch einen System Neustart, nicht richtig initialisiert.

Ich habe den Code bei mir eingespielt und ausprobiert. Das Setzen der Attribute verändert die Konfiguration, das stand übrigens im ursprünglichen Thread von Sany. Das bedeutet, dass ohne ein vorheriges "save", nach dem Reboot der alte Zustand zu sehen ist, will man die Zustände dauerhaft haben, muss man vor dem Reboot "save" der FHEM-Konfiguration ausführen. Das konnte ich bei mir verifizieren. Man könnte auch im Programmcode nach dem Ändern des Attributes ein Save absetzen, dann würden nach dem Neustart die gesetzten Attributwerte erhalten bleiben. Defekte Readings konnte ich bei mir nicht sehen.

PS. Was mir allerdings aufgefallen war, ist die Tatsache, dass nach dem Neustart neue Readings entstehen aufgrund neuer Array-Adressen - das war wohl vom Autor nicht vorgesehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF