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