Seite 2 von 3

Re: Außendusche Frostsicher machen

Verfasst: 10. Okt 2022 22:25
von Snatsch
die Fehlermeldung lautet :)

Code: Alles auswählen

2022-10-10 22:21:09.471 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Duschheizung_anschalten-1' failed: An error occurred during the script execution: index=1, size=1 in Duschheizung_anschalten

Re: Außendusche Frostsicher machen

Verfasst: 10. Okt 2022 22:31
von udo1toni
Und diese Meldung ergibt keinen Sinn. Nochmal die Frage (anders gestellt): Wie hast Du die Rule exakt angelegt?

PS: Die Fehlermeldung bezieht sich definitiv nicht auf diese Rule.

Re: Außendusche Frostsicher machen

Verfasst: 10. Okt 2022 22:35
von Snatsch
wie alle meine Rules über Visual Studio Code. :?

Re: Außendusche Frostsicher machen

Verfasst: 10. Okt 2022 22:49
von udo1toni
Dann hast Du noch eine andere Rule laufen...

Code: Alles auswählen

rule "Duschheizung schalten"
passt nicht zu

Code: Alles auswählen

UID 'Duschheizung_anschalten-1' failed: An error occurred during the script execution: index=1, size=1 in Duschheizung_anschalten

Re: Außendusche Frostsicher machen

Verfasst: 10. Okt 2022 23:42
von Snatsch
Irgendwie ist der Wurm drinn. :roll:
wenn ich dir Rule selbst auslöse kommt die Log Warnung

Code: Alles auswählen

2022-10-10 23:39:25.408 [WARN ] [e.model.script.Temperatur outdoor_t1] - Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!

Re: Außendusche Frostsicher machen

Verfasst: 11. Okt 2022 08:10
von udo1toni
Nein, das passt. newState als implizite Variable wird nur bei einem changed Ereignis mit Daten gefüllt. Du könntest die Rule auch folgendermaßen modifizieren:

Code: Alles auswählen

rule "Duschheizung schalten"
when 
    Item Temperaturen_outdoor_t1 changed 
then
    if(!(Temperaturen_outdoor_t1.state instanceof Number)) {
       logWarn("Temperatur outdoor", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")
       return;
    }
    val nNew = (Temperaturen_outdoor_t1.state as Number).floatValue
    if(nNew < 7.7 && Duschheizung_Betrieb.state != ON) {
       logInfo("Außentemperatur ist unter 3 Grad")
       Duschheizung_Betrieb.sendCommand(ON)
        Meldung.postUpdate ("Die Duschheizung ist jetzt eingeschaltet")
    }
    if(nNew > 10 && Duschheizung_Betrieb.state != OFF) {
       Duschheizung_Betrieb.sendCommand(OFF)
        Meldung.postUpdate("Die Duschheizung ist jetzt ausgeschaltet")
    }
end

Code: Alles auswählen

newState
wird also einfach an allen Stellen durch Temperaturen_outdoor_t1.state ersetzt.

Re: Außendusche Frostsicher machen

Verfasst: 11. Okt 2022 10:47
von rfu
Hi,

ich denke die Fehlermeldung mit "index=1, size=1" kommt weil der log Befehl zwei Parameter erwartet, aber nur einen bekommt...

Code: Alles auswählen

logInfo("Außentemperatur ist unter 3 Grad")
rfu

Re: Außendusche Frostsicher machen

Verfasst: 11. Okt 2022 19:42
von Snatsch
ich habe wirklich keine Ahnung was da schief läuft.
Ich habe die Rule jetzt laufen

Code: Alles auswählen

rule "Duschheizung Anschalten"
when 
    Item Temperaturen_outdoor_t1 changed 
then
    if(!(Temperaturen_outdoor_t1.state instanceof Number)) {
       logWarn("Temperatur outdoor", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")
       return;
    }
    val nNew = (Temperaturen_outdoor_t1.state as Number).floatValue
    if(nNew < 7.7 && Duschheizung_Betrieb.state != ON) {
       logInfo("Außentemperatur ist unter 3 Grad")
       Duschheizung_Betrieb.sendCommand(ON)
        Meldung.postUpdate ("Die Duschheizung ist jetzt eingeschaltet")
    }
    if(nNew > 10 && Duschheizung_Betrieb.state != OFF) {
       Duschheizung_Betrieb.sendCommand(OFF)
        Meldung.postUpdate("Die Duschheizung ist jetzt ausgeschaltet")
    }
end
aber es kommt immer wieder der gleiche Fehler im LOG

Code: Alles auswählen

2022-10-11 19:34:32.369 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Duschheizung_Anschalten-1' failed: An error occurred during the script execution: index=1, size=1 in Duschheizung_Anschalten
warum steht da Duschheizung Anschalten -1 ?
Habe doch nur eine Rule "Duschheizung Anschalten" Habe auch schon die Cache gelöscht und die Rule im Config Ordner.

Re: Außendusche Frostsicher machen

Verfasst: 11. Okt 2022 22:41
von udo1toni
Oh. Ja, das logInfo ist verkehrt. logInfo (wie alle anderen Log-Befehle) erwartet zwingend zwei Strings, wobei der erste String der Name des Loggers ist (kein Teil der Log-Meldung) und der zweite String die eigentliche Meldung. Hab ich auch übersehen... man wird betriebsblind...

Code: Alles auswählen

rule "Duschheizung schalten"
when 
    Item Temperaturen_outdoor_t1 changed 
then
    if(!(Temperaturen_outdoor_t1.state instanceof Number)) {
       logWarn("tempOutdoor", "Sensor Item liefert keinen gültigen Zahlenwert. Abbruch!")
       return;
    }
    val nNew = (Temperaturen_outdoor_t1.state as Number).floatValue
    if(nNew < 7.7 && Duschheizung_Betrieb.state != ON) {
       logInfo("tempOutdoor", "Außentemperatur ist unter 3 Grad")
       Duschheizung_Betrieb.sendCommand(ON)
        Meldung.postUpdate ("Die Duschheizung ist jetzt eingeschaltet")
    }
    if(nNew > 10 && Duschheizung_Betrieb.state != OFF) {
       Duschheizung_Betrieb.sendCommand(OFF)
        Meldung.postUpdate("Die Duschheizung ist jetzt ausgeschaltet")
    }
end
Der Loggername enthält gewöhnlich auch keine Leerzeichen und ebensowenig Sonderzeichen oder Umlaute.
Über den Loggernamen kann man (im laufenden Betrieb) das LogLevel steuern, also z.B. nur noch Warnmeldungen ausgeben lassen, oder auch gar keine Meldungen. Alles abhängig vom Namen (org.openhab.model.script.tempOutdoor wäre z.B. der Loggername für die log-Befehle in obiger Rule).

Aber noch mal der Hinweis: Die Fehlermeldung gibt immer den Klartext Namen der auslösenden Rule an. Wenn die Rule "Duschheizung schalten" heißt, ist eine Meldung bezüglich "Duschheizung_Anschalten" nicht durch diese Rule verursacht. Wenn man Rules im Zusammenhang mit logs postet, sollte man darauf achten, dass diese vollständig und zeichengenau wiedergegeben werden. Es bringt nichts, Rules zu haben, die "ungefähr so" sind, wie im Original. Steht in einer Rule z.B. ein Passwort im Klartext, oder meinetwegen eine Mailadresse, so kann man die gerne unkenntlich machen, genau wie Tokens usw, aber eben keine essenziellen Dinge der Rule abändern, wie soll man da Fehler zuordnen können?

Re: Außendusche Frostsicher machen

Verfasst: 12. Okt 2022 09:51
von rfu
Hi,

gibt der logger nicht die rule im File an, also nicht den namen der Rule selber, sondern 'Duschheizung_Anschalten-1' wäre die erste Rule im File 'Duschheizung_Anschalten.rules'

rfu