Seite 2 von 3

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 23. Okt 2022 03:19
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.

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 23. Okt 2022 12:27
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...

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 23. Okt 2022 20:17
von scotty
Den Lottogewinn teilen wir uns dann...

Spaß beiseite, ich habe es nicht kapiert. Kannst du mir bei der Formulierung mal helfen?

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 23. Okt 2022 20:52
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

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 23. Okt 2022 22:08
von scotty
Das habe ich tatsächlich so getestet, allerdings mit negativem Ergebnis. Ich versuche es später noch einmal und gebe dann Bescheid.

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 24. Okt 2022 20:07
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?

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 24. Okt 2022 22:36
von udo1toni
Da steht, dass die Variable null sei. Bist Du sicher, dass iSeconds einen Wert liefert?

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 25. Okt 2022 01:40
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

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 25. Okt 2022 02:55
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

Re: Hilfe bei der Gestaltung einer DSL Regel

Verfasst: 25. Okt 2022 04:14
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