Was sagt mir dieser Error?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
OliverCJ
Beiträge: 404
Registriert: 29. Aug 2017 12:41
Answers: 3
Wohnort: Bergisch Gladbach

Was sagt mir dieser Error?

Beitrag von OliverCJ »

Guten Abend zusammen,

kann mir jemand sagen, was dieser Logeintrag genau bedeutet?

Code: Alles auswählen

2020-04-03 23:01:16.742 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Überschriften Lampen setzen': null
Die Rule dazu:

Code: Alles auswählen

rule "Überschriften Lampen setzen"
when
    Member of gLichtCounterSwitch changed //or 
    //Member of gLichtCounterDimmer changed
then
    val Number nAnzahlSwitch = gLichtCounterSwitch.members.filter[m|m.state == ON].size
    //val Number nAnzahlDimmer = gLichtCounterDimmer.members.filter[g|g.state instanceof Number].filter[m|(m.state as Number) != 0].size
    var String sLabelLicht
    //if(nAnzahlSwitch + nAnzahlDimmer == 1)
    if(nAnzahlSwitch  == 1) 
        sLabelLicht = "(es ist eine Lampe an)"
    else 
        //if(nAnzahlSwitch + nAnzahlDimmer == 0)
        if(nAnzahlSwitch  == 0)
            sLabelLicht = "(keine Lampe an)"
        else
            //sLabelLicht = "(es sind "+(nAnzahlSwitch + nAnzahlDimmer).toString+" Lampen an)"
            sLabelLicht = "(es sind "+(nAnzahlSwitch).toString+" Lampen an)"
    sLichter.postUpdate(sLabelLicht)
end
a) der Fehler kam auch schon, bevor ich die Zeilen mit "gLichtCounterDimmer" auskommentiert habe
b) ich habe sie auskommentiert, da ich derzeit keinen Dimmer in Benutzung habe
c) Die Rule funktioniert trotzdem, ich bekomme auf der Oberfläche angezeigt,was ich sehen möchte und der Wert stimmt auch:
Ausschnitt.PNG
d) quasi die "gleiche" Rule nutze ich noch mal für die Fenster, da bekomme ich diese Error-Logs nicht...

Danke!
Oliver
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_______________________________________________
Homematic IP Komponenten an CCU 3 (wächst stetig)
Innogy Smarthome System (verabschiedet sich langsam)
Philips Hue Beleuchtung
Fritz!Box
VU+ Solo SAT-Receiver
2 Squeezeboxen
Denon Heos System

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Was sagt mir dieser Error?

Beitrag von peter-pan »

Heist deine andere Regel vielleicht auch rule "Überschriften Lampen setzen" (nur um sicher zu gehen)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Benutzeravatar
OliverCJ
Beiträge: 404
Registriert: 29. Aug 2017 12:41
Answers: 3
Wohnort: Bergisch Gladbach

Re: Was sagt mir dieser Error?

Beitrag von OliverCJ »

Nein, nein, die heißt dann schon “Überschriften Fenster setzen“ und ist natürlich auf die entsprechende Gruppe angepasst.
Aber die eigentliche Regel ist gleich...

Gesendet von meinem SM-N975F mit Tapatalk


_______________________________________________
Homematic IP Komponenten an CCU 3 (wächst stetig)
Innogy Smarthome System (verabschiedet sich langsam)
Philips Hue Beleuchtung
Fritz!Box
VU+ Solo SAT-Receiver
2 Squeezeboxen
Denon Heos System

Benutzeravatar
udo1toni
Beiträge: 13972
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Was sagt mir dieser Error?

Beitrag von udo1toni »

Der Fehler ist etwas unspezifisch. :) Zur Eingrenzung könntest Du in der Rule selbst mit logInfo() Meldungen im Log erzeugen, um dann einzugrenzen, welche Zeile konkret die Fehlermeldung erzeugt.

Weil es so viel Spaß macht, Strings zusammenzusetzen, hier eine andere Form der Rule:

Code: Alles auswählen

rule "Überschriften Lampen setzen"
when
    Member of gLichtCounterSwitch changed or 
    Member of gLichtCounterDimmer changed
then
    val Number nAnzahlSwitch = gLichtCounterSwitch.members.filter[m|m.state == ON].size
    val Number nAnzahlDimmer = gLichtCounterDimmer.members.filter[g|g.state instanceof Number].filter[m|(m.state as Number) != 0].size
    val Number nSum = nAnzahlSwitch + nAnzahlDimmer
    var String sLabelLicht = "(Es "
    sLabelLicht = sLabelLicht + if(nSum < 2) "ist " else "sind "
    sLabelLicht = sLabelLicht + if(nSum == 0) "k" else ""
    sLabelLicht = sLabelLicht + if(nSum < 2) "eine " else sNum.toString + " "
    sLabelLicht = sLabelLicht + "Lampe"
    sLabelLicht = sLabelLicht + if(nSum < 2) " " else "n "
    sLabelLicht = sLabelLicht + "an.)"
    sLichter.postUpdate(sLabelLicht)
end
Das Ergebnis sollte das Gleiche sein.
Es sollte auch möglich sein, alle Items in eine Gruppe zu packen (Switch und Dimmer) und dann mit

Code: Alles auswählen

val Number nSum = gLichtCounter.members.filter[m|m.getStateAs(OnOffType) == ON].size
zu arbeiten. Ich gehe jedenfalls davon aus, dass getStateAs() auch für Switch Items zur Verfügung steht.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Tokamak
Beiträge: 168
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Was sagt mir dieser Error?

Beitrag von Tokamak »

OliverCJ hat geschrieben: 3. Apr 2020 23:13 a) der Fehler kam auch schon, bevor ich die Zeilen mit "gLichtCounterDimmer" auskommentiert habe
Der Code sollte mit der Auskommentierung so nicht funktionieren, da nAnzahlDimmer nicht definiert ist.
c) Die Rule funktioniert trotzdem,
Das ist überraschend. In ein paar meiner sehr komplexen Rules passiert das sporadisch. Dort musste ich sogar um eine ConcurrentLinkedQueue eine ReentrantLock bauen.
Tritt bei mir das Problem auf, wird die Rule-Ausführung abgebrochen, was leider inkonsistente Zustände hinterlässt.
Die Unterschiede zeigen, dass irgendwas in den Tiefen der DSL morsch ist, auf das wir keinen Einfluss haben.

Meine Vermutung geht Richtung der Lambdas, bei dir also die filter[].

Kann es sein, dass auf die gleichen Gruppen parallel in anderen Rules mit Lambdas zugegriffen wird?
Produktiv: Proxmox mit OH 3.4 und HABApp im LXC-Container
Entwicklung: Proxmox mit OH 4.1 und HABApp im LXC-Container

Benutzeravatar
OliverCJ
Beiträge: 404
Registriert: 29. Aug 2017 12:41
Answers: 3
Wohnort: Bergisch Gladbach

Re: Was sagt mir dieser Error?

Beitrag von OliverCJ »

Hallo, Danke schon mal für eure Antworten!

Gerade weil die Rule an den entscheidenden Stellen auskommentiert ist, sollte sie funktionieren. Ich hatte vorher Dimmer-Steckdosen im Einsatz, die keinen expliziten ON/OFF-Switch kannten. Die waren alle in der Gruppe gLichtCounterDimmer drin. Seit ich die nicht mehr habe, sind eben alle Zeilen, wo was mit Dimmer drin steht auskommentiert (vorher gedoppelt und aus dem Doppel den Dimmer rausgenommen. So kann ich - sollte doch noch mal ein solcher Zwischenstecker zum Einsatz kommen - ganz einfach zurück).

Ich kann es der besseren Übersicht ja noch mal ohne die auskommentierten Zeilen reinsetzen:

Code: Alles auswählen

rule "Überschriften Lampen setzen"

when
    Member of gLichtCounterSwitch changed
    
then
    val Number nAnzahlSwitch = gLichtCounterSwitch.members.filter[m|m.state == ON].size
    var String sLabelLicht
    if(nAnzahlSwitch  == 1) 
        sLabelLicht = "(es ist eine Lampe an)"
    else 
        if(nAnzahlSwitch  == 0)
            sLabelLicht = "(keine Lampe an)"
        else
            sLabelLicht = "(es sind "+(nAnzahlSwitch).toString+" Lampen an)"
    sLichter.postUpdate(sLabelLicht)
end
Und auch nochmal "Nein", die Gruppe "gLichtCounterSwitch" gibt es wirklich nur dafür, die "Überschrift" auf der Sitemap zu setzen und wird nur in dieser einen Rule verwendet.

Wie gesagt, sie zeigt auch immer richtig den Wert an, der den angeschalteten Leuchten/Lampen entspricht

Ich werde mal den Tipp von Toni beherzigen und ein paar eigene Logs einbauen...

_______________________________________________
Homematic IP Komponenten an CCU 3 (wächst stetig)
Innogy Smarthome System (verabschiedet sich langsam)
Philips Hue Beleuchtung
Fritz!Box
VU+ Solo SAT-Receiver
2 Squeezeboxen
Denon Heos System

Benutzeravatar
udo1toni
Beiträge: 13972
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Was sagt mir dieser Error?

Beitrag von udo1toni »

Ah, warte mal...

Zwei Sachen:
  1. : benutze hinter dem ersten else lieber ein {} Klammernpaar. Zwar gehört das zweite else noch zum zweiten if, an dieser Stelle ist es trotzdem sicherer, die Zuordnung auch explizit vorzugeben, nicht dass der Parser sich da verschluckt.
  2. : könntest Du damit leben, die Variable sLabelLicht auch zu initialisieren, wenn Du sie anlegst? also statt

    Code: Alles auswählen

    var String sLabelLicht
    lieber

    Code: Alles auswählen

    var String sLabelLicht = ""
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
OliverCJ
Beiträge: 404
Registriert: 29. Aug 2017 12:41
Answers: 3
Wohnort: Bergisch Gladbach

Re: Was sagt mir dieser Error?

Beitrag von OliverCJ »

Hallo Toni,

ich kann da fast mit allem leben. Grundsätzlich sogar mit dieser Error-Meldung :-). Wie gesagt, funktioniert die Rule ja einwandfrei. Sie ist übrigens von Dir... Du hattest mir damals dabei geholfen und mir gezeigt, wie ich die gewünschte Anzeige auf der Sitemap hinbekomme...

Mir ging es ja eigentlich nur darum, mal zu erfahren, was die Meldung genau bedeutet.
Aber ich werde Deine Tipps mal beherzigen und schauen, ob sich was ändert.

Ach, noch was: Die Meldung tritt nicht immer auf, wenn sich an der Gruppe GLichtCounterSwitch etwas ändert. Meines Erachtens - ohne das bis jetzt genau getestet zu haben - tritt sie sogar eher auf, wenn sich da gerade gar nichts tut...

_______________________________________________
Homematic IP Komponenten an CCU 3 (wächst stetig)
Innogy Smarthome System (verabschiedet sich langsam)
Philips Hue Beleuchtung
Fritz!Box
VU+ Solo SAT-Receiver
2 Squeezeboxen
Denon Heos System

Benutzeravatar
udo1toni
Beiträge: 13972
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Was sagt mir dieser Error?

Beitrag von udo1toni »

Na ja, dann kann der Fehler aber nicht auftreten, denn die Rule triggert nur bei Änderungen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
OliverCJ
Beiträge: 404
Registriert: 29. Aug 2017 12:41
Answers: 3
Wohnort: Bergisch Gladbach

Re: Was sagt mir dieser Error?

Beitrag von OliverCJ »

Okay, gerade rausgefunden, dass der Fehler immer dann auftritt, wenn eine Lampe, in der sechs Leuchtmittel drin sind, ausgeschaltet wird. Da es sich eben um einen Lampe handelt, habe ich dafür eine Gruppe angelegt bzw vier Gruppen:

Code: Alles auswählen

Group:Switch:OR(ON, OFF) grosseLampe "große Lampe [%d]" (gHueWZgrosseLampe)
Group:Dimmer grosseLampeDimmer "große Lampe Helligkeit [%s]" (gHueWZgrosseLampe)
Group:Color grosseLampeFarbe "große Lampe Farbwahl" (gHueWZgrosseLampe)
Group:Dimmer grosseLampeFarbtemp "große Lampe Farbtemperatur" (gHueWZgrosseLampe)
und je Leuchtmittel:

Code: Alles auswählen

Switch Hue_EG_WZ_grosseLampe1_Toggle
    "Hue große Lampe 1"
    (gLicht, gLichtCounterSwitch, grosseLampe)
    {channel="hue:0210:1:HueWzGL1:color"}
Dimmer Hue_EG_WZ_grosseLampe1_Dimmer
    "Hue große Lampe 1 Dimmer[%s]"
    (gLicht, grosseLampeDimmer)
    {channel="hue:0210:1:HueWzGL1:color"}
Color Hue_EG_WZ_grosseLampe1_Color
    "Hue große Lampe 1 Farbe"
    (gLicht, grosseLampeFarbe)
    {channel="hue:0210:1:HueWzGL1:color"}
Dimmer Hue_EG_WZ_grosseLampe1_ColorTemp
    "Hue große Lampe 1 Farbtemperatur"
    (gLicht, grosseLampeFarbtemp)
    {channel="hue:0210:1:HueWzGL1:color_temperature"}
Ich habe hier nur einen Block aufgeführt, aber das gibt es eben 6x.

Wenn ich diese Gruppe ausschalte, tritt der Fehler auf...

_______________________________________________
Homematic IP Komponenten an CCU 3 (wächst stetig)
Innogy Smarthome System (verabschiedet sich langsam)
Philips Hue Beleuchtung
Fritz!Box
VU+ Solo SAT-Receiver
2 Squeezeboxen
Denon Heos System

Antworten