[gelöst] Fehler mit WeekDayTimer " sensor <1> not found - check name"

Begonnen von Achim, 07 Dezember 2019, 19:44:47

Vorheriges Thema - Nächstes Thema

Achim

Hallo,

Ich habe die Frage aus dem Thread entfernt, wo ich sie ursprünglich gepostet habe. Das Problem ist aus meiner Sicht wohl etwas "älter".

Ich habe seit einiger Zeit folgenden Fehler im LOG.

Zitat[Buero_Heizung_Control1] sensor <1> not found - check name.

die Definition in FEHM ist:

define Buero_Heizung_Control1 WeekdayTimer Buero_Heizung 07:00|18.0 10:00|21.0 23:00|15.0 ((Value("Feiertag") eq 1 || $we) && Value("Heizung_Hauptschalter") eq "on")
setuuid Buero_Heizung_Control1 5ddc1038-f33f-2282-4d16-d0b9b1c2ab8ee63a
attr Buero_Heizung_Control1 WDT_Group former_HC
attr Buero_Heizung_Control1 WDT_delayedExecutionDevices 1
attr Buero_Heizung_Control1 commandTemplate set $NAME desired-temp $EVENT


Ich habe vor einiger Zeit "Heating_Control" in "WeekdayTimer" umgewandelt. Danach waren die Fehlermeldungen noch nicht vorhanden. Dachte ich zumindest. Ich habe nach dem Umwandeln keinen Neustart von FHEM durchgeführt. Der Fehler tauchte das erste mal auf, nachdem ich FHEM nach dem Umwandeln von "Heating_Control" in "WeekdayTimer" neu gestartet habe.

Ich habe in dem Code nachgesehen. Der Fehler ist in einer Sektion wo wahrscheinlich Fensterkontakte gelesen werden. Ich habe in manchen Räumen Fensterkontakt, die sollen aber nicht in die Funktion von WeekdayTime eingreifen. Die Heizkörpersteuerung und die Fensterkontakte sind von den FHT und FHTTK Geräten realisiert.

Kann mir da jemand bei der Fehlerbeseitigung weiterhelfen?

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

amenomade

#1
Zitatattr Buero_Heizung_Control1 WDT_delayedExecutionDevices 1

Zitat von: CommandRefWDT_delayedExecutionDevices
Defines a space separated list devices (atm only window sensors are supported). When one of its state readings is open the aktual switch is delayed.

Somit hast Du definiert, dass ein Sensor namens "1" das Schalten des WDT verzögern soll
So einen Sensor hast Du aber nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Achim

Hallo,

vielen Dank. Das ist die Lösung des Problems.
Jeder meiner mit von Heating_Control nach WeekDayTimer umgewandelten Definitionen mit
Zitatset <name> ConvertToWDT
hat den Eintrag. Der wurde bei der Umwandlung wohl fälschlicherweise erstellt.

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

amenomade

Wenn Du schon bei den Heating_Control Devices ein Attribut "windowSensor 1" hattest, hat er das übernommen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Achim

Hallo,

nein, bei Heating_Control hatte ich das Attribut "windowSensor" nicht gesetzt. Ich habe gerade in meinen Backups nachgesehen. Nach der Konvertierung sah die Definition noch folgendermassen aus:
attr Buero_Heizung_Control1 WDT_delayedExecutionDevices
da war die "1" noch nicht vorhanden. Erst nachdem Neustart war die "1" in der Zeile. Wie die dahingekommen ist weiß ich nicht. Ich habe sie da auf keinen Fall manuell eingefügt, auch nicht ausversehen. Denn das wäre dann bei 21 WeekDayTimer Definitonen der Fall gewesen. Sehr seltsam.

Vielleicht liest ja beta_user den Thread und er kann bei der Konvertierungsroutine noch eine Bedingung einbauen, bei der diese Ziele nur geschrieben wird, wenn ein "windowSensor" Eintrag vorhanden ist.

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

amenomade

Zitat von: Achim am 07 Dezember 2019, 20:27:46

Vielleicht liest ja beta_user den Thread und er kann bei der Konvertierungsroutine noch eine Bedingung einbauen, bei der diese Ziele nur geschrieben wird, wenn ein "windowSensor" Eintrag vorhanden ist.


Vor meiner Antwort hatte ich schon im Code geguckt. Ich kann mir das nicht erklären. Der Code sieht sauber aus.
128 sub Heating_Control_ConvertToWDT() {
129   my @hcNamen = sort keys %{$modules{Heating_Control}{defptr}};
130   foreach my $hcName ( @hcNamen ) {
131     my $hash = $defs{$hcName};
132     my $definition = $defs{$hcName}{DEF};
133     my $windows = AttrVal($hcName,"windowSensor",undef);
134     my @a = GetDefAndAttr($hcName);
135     shift @a; #delete define
136     my @b = GetAllReadings($hcName);
137     CommandDelete(undef,$hcName);
138     CommandDefine(undef,"$hcName WeekdayTimer $definition");
139     CommandAttr(undef, "$hcName WDT_delayedExecutionDevices $windows");
140     CommandAttr(undef, "$hcName WDT_Group former_HC");
141     foreach my $linesa  ( @a ){
142        AnalyzeCommand(undef, "$linesa") unless ($linesa =~ m/^attr $hcName windowSensor/);
143     }
144     foreach my $linesb  ( @b ){
145        AnalyzeCommand(undef, "$linesb");
146     }
147   }
148   Log3 undef,  3, "Heating_Control_ConvertToWDT() done on: ".join(" ",@hcNamen );
149 }


EDIT: wobei... ich weiss nicht, was CommandAttr(undef, "$hcName WDT_delayedExecutionDevices $windows"); ergibt, wenn $windows = undef. Wahrscheinlich ein gesetztes leeres Attribut. Nach einem Reboot... gute Frage

Ich habe aber selbst alle meine HC in WDT umgewandelt, und dieses Problem hatte ich nicht
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Achim

Hallo,

über die FHEM Überfläche bekommt man das Attribut
Zitatattr Buero_Heizung_Control1 WDT_delayedExecutionDevices
ohne Parameter nicht gesetzt. Wenn man dort den Eintrag leer lässt und "attr" ausführt, wird automatisch die "1" gesetzt.
Wenn man fhem.cfg direkt editiert und die Zeile ohne die "1" speichert, ist automatisch nach einem Neustart von FHEM die "1" wieder vorhanden und verursacht den Fehler.

Daher sollte die Konvertierungsroutine im "Heating_Control" Modul diese Zeile nur schreiben, wenn ein Wert vorhanden ist. In Perl kenne ich mich leider nicht so aus, ob eine Abfrage wie
if not undef $windows {
  CommandAttr(undef, "$hcName WDT_delayedExecutionDevices $windows");
}

funktioniert

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

Beta-User

Danke für die Problemanalyse!

Der Konverter-Code sollte mit dem heutigen update auch an der Stelle keine Probleme mehr machen.

Die Zeile ist geändert zu:
CommandAttr(undef, "$hcName WDT_delayedExecutionDevices $windows") if defined $windows;

@Achim: Das mit dem optional hinten angestellten if ist eine Perl-Besonderheit. Sonst müßte man schreiben:
if (defined $windows) {CommandAttr(undef, "$hcName WDT_delayedExecutionDevices $windows")};
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files