Hilfe bei der Gestaltung einer DSL Regel

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von scotty »

Hallo Udo,

leider klappt es mit der Function immer noch nicht.

Hier die Rule:

Code: Alles auswählen

rule "Telefonschalter Ausgang switchen"

when
    Item Flag_tschalterA changed from OFF to ON
then
   val strTime = transform("JS","secinhms.js",seconds)

    Flag_ADauer_01.postUpdate(strTime)

end

mit dieser Fehlermeldung.

Code: Alles auswählen

2022-10-23 03:07:31.131 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_9433-11' failed: The name 'seconds' cannot be resolved to an item or type; line 245, column 47, length 7 in fritzbox_9433
Ich habe keine Vorstellung, was da schief läuft.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

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

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von udo1toni »

Ähm... Du musst schon den Wert in die Funktion rein kippen. seconds ist eine Variable, die entsteht nicht aus dem luftleeren Raum einfach so...

Also: Die Rule muss ausrechnen, wieviele Sekunden vergangen sind. Dieser Wert muss als Zahl zur Verfügung stehen. Diese Zahl muss als Input an die Funktion übergeabn werden (das ist der letzte Parameter des Funktionsaufrufs).

Um es mal anders zu formulieren:

Code: Alles auswählen

rule "Nenne die Lottozahlen"
when
    Item MeinSchalter changed from OFF to ON
then
    Lottozahlen.postUpdate(dieVonNaechsterWoche)
end
Aber jedes Mal, wenn ich den Schalter einschalte, kommt nur eine Fehlermeldung. Sonst wäre ich inzwischen so richtig reich...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von scotty »

Den Lottogewinn teilen wir uns dann...

Spaß beiseite, ich habe es nicht kapiert. Kannst du mir bei der Formulierung mal helfen?
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

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

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von udo1toni »

Na, ursprünglich kamen wir ja vom Thread viewtopic.php?p=48880#p48880, wo diese Rule

Code: Alles auswählen

var Long lPhoneStart = 0
var Integer iSeconds = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState.toString == "ACTIVE") {
        lPhoneStart = now.toInstant.toEpochMilli
        Flag_ADauer_00.postUpdate(NULL)
    } else if(previousState.toString == "ACTIVE" && newState.toString == "IDLE") {
        iSeconds =  ((now.toInstant.toEpochMilli - lPhoneStart)/1000).intValue
        Flag_ADauer_00.postUpdate(iSeconds)
    }
end
die Sekunden liefert. Und in dieser Rule musst Du die Funktion einbauen, so:

Code: Alles auswählen

var Long lPhoneStart = 0
var Integer iSeconds = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState.toString == "ACTIVE") {
        lPhoneStart = now.toInstant.toEpochMilli
        Flag_ADauer_00.postUpdate(NULL)
    } else if(previousState.toString == "ACTIVE" && newState.toString == "IDLE") {
        iSeconds =  ((now.toInstant.toEpochMilli - lPhoneStart)/1000).intValue
        val strTime = transform("JS","secinhms.js",iSeconds)
        Flag_ADauer_00.postUpdate(iSeconds)
        Flag_ADauer_01.postUpdate(strTime)
    }
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von scotty »

Das habe ich tatsächlich so getestet, allerdings mit negativem Ergebnis. Ich versuche es später noch einmal und gebe dann Bescheid.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von scotty »

Hallo Udo,

leider komme ich erst jetzt dazu, mich wieder zu melden. Allerdings muss ich dir mitteilen, dass ich den Code jetzt genau wie von vorgegeben verwende, jedoch mit der folgenden Fehlermeldung:

Code: Alles auswählen

2022-10-24 20:00:16.816 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_9434-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.transform.actions.Transformation.transform(java.lang.String,java.lang.String,java.lang.String) on instance: null in fritzbox_9434
Die js-Datei liegt, ebenfalls wie von dir vorgegeben, unter /conf/transform

Ich habe seit gestern viel getestet, leider alles ohne Erfolg. Hast du noch einen anderen Vorschlag?
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

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

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von udo1toni »

Da steht, dass die Variable null sei. Bist Du sicher, dass iSeconds einen Wert liefert?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von scotty »

Merkwürdig, du hast recht. Ich habe zum prüfen mal eine Pause und eine Meldung eingebaut, iSeconds liefert keinen Wert.

Code: Alles auswählen

2022-10-25 01:32:54.017 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_9434-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.transform.actions.Transformation.transform(java.lang.String,java.lang.String,java.lang.String) on instance: null in fritzbox_9434
2022-10-25 01:32:59.015 [INFO ] [hab.core.model.script.RuleLastCall_A] - Beendigung des Ausgangsgespräches nach NULL Sekunden
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

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

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von udo1toni »

Dann bauen wir zur Sicherheit mal noch eine Abfrage ein:

Code: Alles auswählen

var Long lPhoneStart = 0
var Integer iSeconds = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState.toString == "ACTIVE") {
        lPhoneStart = now.toInstant.toEpochMilli
        Flag_ADauer_00.postUpdate(NULL)
    } else if(previousState.toString == "ACTIVE" && newState.toString == "IDLE") {
        iSeconds =  ((now.toInstant.toEpochMilli - lPhoneStart)/1000).intValue
        Flag_ADauer_00.postUpdate(iSeconds)
        if(iSeconds !== null) {
            val strTime = transform("JS","secinhms.js",iSeconds)
            Flag_ADauer_01.postUpdate(strTime)
        }
    }
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Hilfe bei der Gestaltung einer DSL Regel

Beitrag von scotty »

Leider bekomme ich immer wieder diese Fehlermeldung, obwohl ich zwischendurch sogar mal eine Pause eingebaut habe:

Code: Alles auswählen

2022-10-25 04:11:46.474 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_9434-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.transform.actions.Transformation.transform(java.lang.String,java.lang.String,java.lang.String) on instance: null in fritzbox_9434
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Antworten