Seite 1 von 3

TR-064 Binding und OH3

Verfasst: 13. Okt 2022 16:32
von scotty
Hallo,

inzwischen habe ich dieses Binding nahezu perfekt konfiguriert, so dass mir ausgehende wie eingehende Telefonate mit Namen, Rufnummern, Datum und Uhrzeit in OH3 anzeigt werden.
Komplett wäre diese Konstellation für mich allerdings erst, wenn auch noch die Gesprächsdauer ausgelesen oder anderswie errechnet werden kann. Daher würde mich interessieren ob es Anwender gibt, die sich schon einmal damit auseinander gesetzt oder vielleicht sogar einen Lösungsvorschlag haben.

Vielen Dank im Voraus.

Re: TR-064 Binding und OH3

Verfasst: 13. Okt 2022 18:57
von udo1toni
Wird denn das Ende des Gesprächs signalisiert?

Re: TR-064 Binding und OH3

Verfasst: 14. Okt 2022 02:09
von scotty
Das ist eine gute Frage und ehrlich gesagt, da bin ich überfragt. Wir telefonieren über eine Fritz!Box 6591C und meine Recherchen sind diesbezüglich erfolglos.

Es ist nur so eine Idee, aber lässt sich vielleicht etwas über diese Log-Einträge bauen (natürlich nur mit deiner Unterstützung)?

Code: Alles auswählen

...
2022-10-14 01:50:41.439 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'fritzCallRinging' changed from DIALING to ACTIVE
...
2022-10-14 01:53:49.941 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'fritzCallRinging' changed from ACTIVE to IDLE
...

Re: TR-064 Binding und OH3

Verfasst: 14. Okt 2022 20:48
von udo1toni
Ja, da hast Du ja die Signalisierung. ACTIVE wird eine bestehende Verbindung sein, IDLE dann der Zustand bei aufgelegt.
Die einfachste Variante wäre dann so:

Code: Alles auswählen

var Long lPhoneStart = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState == ACTIVE) {
        iPhoneStart = now.getEpochSecond
    } else if(previousState == ACTIVE && newState == IDLE) {
        iSeconds =  (now.getEpochSecond - iPhoneStart).intValue
    }
    Gespraechsdauer.postUpdate(iSeconds)
end
Wenn der Status nach ACTIVE wechselt, merkt sich die Rule den aktuellen Zeitpunkt in der globalen Variablen lPhoneStart.
Wenn der Status von ACTIVE nach IDLE wechselt, speichert die Rule die Differenz des aktuellen Zeitpunkts zum gemerkten Zeitpunkt.

Natürlich wird die Gesprächsdauer auf diese Weise erst nach Ende des Gesprächs angezeigt.
Ich gehe davon aus, dass IDLE und ACTIVE "echte" Status sind. Ist das nicht der Fall, muss man halt jeweils .toString dran hängen und "" drum herum machen.

Re: TR-064 Binding und OH3

Verfasst: 15. Okt 2022 04:20
von scotty
Das klappt momentan noch nicht. Ich verwende derzeit diesen Code:

Code: Alles auswählen

var Long lPhoneStart = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState == "ACTIVE.toString") {
        iPhoneStart = now.getEpochSecond
    } else if(previousState == "ACTIVE.toString" && newState == "IDLE.toString") {
        iSeconds =  (now.getEpochSecond - iPhoneStart).intValue
    }

    var String callDauer = "-" 
    callDauer.postUpdate(iSeconds)
end
und bekomme die Fehlermeldung:

Code: Alles auswählen

2022-10-15 03:55:57.140 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_94-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.actions.BusEvent.postUpdate(java.lang.String,java.lang.String) on instance: null in fritzbox_94
Die Variable callDauer wird im weiteren Verlauf noch an ein Dummy-Item übergeben:

Code: Alles auswählen

Flag_ADauer_00.postUpdate(callDauer)
Ist das korrekt angelegt?

Außerdem, ohne den Zusatz .toString und die "" drum herum gab es noch weitere Fehlermeldungen.

Hast du noch eine Idee, wie die ERROR Meldung behoben werden kann?

Re: TR-064 Binding und OH3

Verfasst: 15. Okt 2022 12:41
von udo1toni
Da habe ich vielleicht etwas missverständlich formuliert... Ich meinte es so:

Code: Alles auswählen

var Long lPhoneStart = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState.toString == "ACTIVE") {
        iPhoneStart = now.getEpochSecond
    } else if(previousState.toString == "ACTIVE" && newState.toString == "IDLE") {
        iSeconds =  (now.getEpochSecond - iPhoneStart).intValue
    }
    Gespraechsdauer.postUpdate(iSeconds)
end
State: ACTIVE
String: "ACTIVE"
previousState -> State
previousState.toString -> String

Es könnte auch sein, dass now.getEpochSecond nicht funktioniert, dann wäre meine Vermutung, dass es ZonedDateTime.now.getEpochSecond ist.

Re: TR-064 Binding und OH3

Verfasst: 15. Okt 2022 16:29
von scotty
Ich komme leider erst später dazu, deine Korrektur zu testen. Aber eine Frage noch zwischendurch: ist die Variable callDauer richtig erstellt bzw. kann das Ergebnis, wie beschrieben, anschließend von dem Dummy-Item "Flag_ADauer_00" so übernommen werden?

Re: TR-064 Binding und OH3

Verfasst: 15. Okt 2022 18:26
von scotty
Auch der nächste Test brachte kein positives Ergebnis. Mit diesem Code...

Code: Alles auswählen

var Long lPhoneStart = 0

rule "Gesprächsdauer messen"
when
    Item fritzCallRinging changed
then
    var Integer iSeconds = 0
    if(newState.toString == "ACTIVE") {
        iPhoneStart = ZonedDateTime.now.getEpochSecond
    } else if(previousState.toString == "ACTIVE" && newState.toString == "IDLE") {
        iSeconds =  (ZonedDateTime.now.getEpochSecond - iPhoneStart).intValue
    }

    var String callDauer = "-" 
    callDauer.postUpdate(iSeconds)
end
ergaben sich folgende Fehlermeldungen...

Code: Alles auswählen

2022-10-15 18:15:57.921 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_94-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.actions.BusEvent.postUpdate(java.lang.String,java.lang.String) on instance: null in fritzbox_94
2022-10-15 18:15:58.586 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_94-1' failed: 'getEpochSecond' is not a member of 'java.time.ZonedDateTime'; line 9, column 23, length 32 in fritzbox_94
2022-10-15 18:16:03.592 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox_94-1' failed: 'getEpochSecond' is not a member of 'java.time.ZonedDateTime'; line 11, column 22, length 32 in fritzbox_94
Leider komme ich ohne deine Hilfe nicht weiter, deshalb: hast du noch weitere Tipps?

Re: TR-064 Binding und OH3

Verfasst: 15. Okt 2022 20:26
von udo1toni
ok, in einem anderen Thread sind wir auf .toEpochSecond gekommen. Sorry, ist auch für mich etwas Stochern im Nebel, da ich selbst bisher noch auf OH2.5 arbeite...

Re: TR-064 Binding und OH3

Verfasst: 16. Okt 2022 02:53
von scotty
Schade, auch dein letzter Hinweis hat nicht zum Erfolg geführt. Trotzdem noch einmal: Danke für die Unterstützung.