Hi there,
i finally had the time to migrate from oH 1.8.3 to the latest oH 2 (openhabian) release.
I started to migrate rules without physial objects first and so i reached the FritzBox TR064 binding and the corresponding rules.
One of my TR064 rules checks for a new call and then processes the informations from the binding into items and Telegram messages.
But this rule isn´t working under oH 2 like it did under oH 1.8.3.
I´m pretty sure it´s just some typo or something very simple that changed between the rule engine…
fritzboxtr064.cfg
url=https://192.168.2.1:49443
refresh=60000
user=pi.openHAB
pass=Thisisasecurepassword
FritzBox.items
/* Anwesenheit iPhones MAP(presence.map): */
Contact fbUserA "UserA [MAP(presence.map):%s]" <presence> {fritzboxtr064="maconline:AA-BB-CC-DD-EE-FF"}
Contact fbUserB "UserB [MAP(presence.map):%s]" <presence> {fritzboxtr064="maconline:AA-BB-CC-DD-EE-FF"}
Contact fbGuest "Guest [MAP(presence.map):%s]" <presence> {fritzboxtr064="maconline:AA-BB-CC-DD-EE-FF"}
Contact fbBusiness "Business [MAP(presence.map):%s]" <presence> {fritzboxtr064="maconline:AA-BB-CC-DD-EE-FF"}
/* Fritz!Box */
Switch fbKlingel "Telefon klingelt [%s]" <phone> {fritzboxtr064="callmonitor_ringing"}
Call fbAnruf "Anruf von [%1$s]" <phone> {fritzboxtr064="callmonitor_ringing"}
Call fbAnrufName "Anruf von [%1$s]" <phone> {fritzboxtr064="callmonitor_ringing:resolveName"}
String fbWANIp "IP-Adresse [%s]" <fritzbox> {fritzboxtr064="externalWanip"}
String fbLastNumber "Letzter Anrufer [%s]" <phone>
String fbLastName "Letzter Anrufer [%s]" <phone>
default.sitemap
Text item=fbWANIp
Text item=fbLastNumber visibility=[itmExpert == ON]
Text item=fbLastName visibility=[itmExpert == ON]
fbLastCall.rules
import org.openhab.library.tel.types.CallType
rule "Eingehender Anruf"
when
Item fbKlingel changed from OFF to ON
then
// Daten des CallType auslesen
val CallType call = fbAnruf.state as CallType
// Die Variablen anlegen und mit der Nummer bzw. Namen des Anrufers füllen
val String LastCallNumber = call.destNum.toString()
var String LastCallName = fbAnrufName.state.toString()
// Prüfen ob es sich um ein Fax handelt
if(LastCallName.startsWith("1237891##"))
{
return (false)
}
// Prüfen ob der Anruf privat ist und zur weiteren Identifizierung markieren
if(LastCallName.startsWith("7891237##"))
{
LastCallName = LastCallName.removeStart("7891237##")
LastCallName = "Privat: " + LastCallName
}
// Prüfen ob der Anruf beruflich ist und zur weiteren Identifizierung markieren
if(LastCallName.startsWith("4561237##"))
{
LastCallName = LastCallName.removeStart("4561237##")
LastCallName = "Arbeit: " + LastCallName
}
// Prüfen ob der Anrufer unbekannt ist und entsprechend markieren
if(LastCallName.startsWith("Arbeit: Name not found for") || LastCallName.startsWith("Privat: Name not found for"))
{
if(LastCallName.startsWith("Arbeit"))
{
LastCallName = "Arbeit: Unbekannt"
}
if(LastCallName.startsWith("Privat"))
{
LastCallName = "Privat: Unbekannt"
}
}
// Entfernt die Info des Telefonbucheintrags
if(LastCallName.endsWith("(Work)") || LastCallName.endsWith("(Mobile)"))
{
LastCallName = LastCallName.removeEnd(" (Mobile)")
LastCallName = LastCallName.removeEnd(" (Work)")
}
// Die Daten in die Items eintragen
if(LastCallName.startsWith("Privat"))
{
LastCallName = LastCallName.removeStart("Privat: ")
postUpdate(fbLastNumber, LastCallNumber)
postUpdate(fbLastName, LastCallName)
logDebug("RuleLastCall", "Der Anruf von " + LastCallNumber + " (" + LastCallName + ")" + " wurde als Letzter Anrufer gespeichert.")
}
// Eine E-Mail versenden wenn der Anruf beruflich war
if(LastCallName.startsWith("Arbeit"))
{
logDebug("RuleLastCall", "Der Anruf war beruflich, es wird eine E-Mail versendet")
LastCallName = LastCallName.removeStart("Arbeit: ")
sendMail("myname@business.com", "Verpasster Anruf von " + LastCallNumber + " (" + LastCallName + ")", "Hallo Michael,\r\nfolgender Anruf wurde verpasst: " + LastCallNumber + " (" + LastCallName +")" + "\r\n\r\nFreundliche Grüße\r\nopenHAB")
}
// Prüfen ob Michael zuhause ist
if(fbMichael.state == CLOSED)
{
// Nur über private Anrufe benachrichtigen
if(LastCallName.startsWith("Arbeit"))
{
logDebug("RuleLastCall", "Der Anruf war beruflich, es wird eine E-Mail versendet")
}
else
{
logDebug("RuleLastCall", "Es wird eine Nachricht an Michael versendet.")
LastCallName = LastCallName.removeStart("Privat: ")
var LastCallTextDoor = "Folgender Anruf wurde verpasst: "
LastCallTextDoor = LastCallTextDoor + LastCallNumber + " (" + LastCallName + ")"
sendTelegram("bot1", LastCallTextDoor)
}
}
// Prüfen ob Johanna zuhause ist
if(fbJohanna.state == CLOSED)
{
// Nur über private Anrufe benachrichtigen
if(LastCallName.startsWith("Arbeit"))
{
logDebug("RuleLastCall", "Der Anruf war beruflich, es wird keine Nachricht versendet")
return (false)
}
else
{
logDebug("RuleLastCall", "Es wird eine Nachricht an Johanna versendet.")
LastCallName = LastCallName.removeStart("Privat: ")
var LastCallTextDoor = "Folgender Anruf wurde verpasst: "
LastCallTextDoor = LastCallTextDoor + LastCallNumber + " (" + LastCallName + ")"
sendTelegram("bot2", LastCallTextDoor)
}
}
end
Logfile
2018-07-15 12:10:18.061 [INFO ] [tzboxtr064.internal.PhonebookManager] - Trying to resolve number 0123456789 to name comparing 7 characters
2018-07-15 12:10:18.067 [INFO ] [tzboxtr064.internal.PhonebookManager] - found name match Michael Bredehorn in phonebook by comparing 987654 321 94+ with 987654
==> /var/log/openhab2/events.log <==
2018-07-15 12:10:18.119 [vent.ItemStateChangedEvent] - fbAnruf changed from to 7891237,0123456789
2018-07-15 12:10:18.141 [vent.ItemStateChangedEvent] - fbAnrufName changed from to 7891237,Michael (Mobile)
2018-07-15 12:10:18.146 [vent.ItemStateChangedEvent] - fbKlingel changed from OFF to ON
==> /var/log/openhab2/openhab.log <==
2018-07-15 12:10:19.344 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Eingehender Anruf': Could not cast 1379060,01728158771 to void; line 12, column 22, length 25
==> /var/log/openhab2/events.log <==
2018-07-15 12:10:23.201 [vent.ItemStateChangedEvent] - fbAnruf changed from 7891237,0123456789 to
2018-07-15 12:10:23.206 [vent.ItemStateChangedEvent] - fbAnrufName changed from 7891237,Michael (Mobile) to
2018-07-15 12:10:23.212 [vent.ItemStateChangedEvent] - fbKlingel changed from ON to OFF
The code in line 12 is:
val CallType call = fbAnruf.state as CallType
Any ideas why this rule isn´t working in oH2 but is still working in my oH 1.8.3 environment?
kind regards
Michael
- Platform information:
- Hardware: Raspberry Pi 3 Model B Plus Rev 1.3
- OS: Raspbian GNU/Linux 9 (stretch) / Linux 4.14.52-v7+
- Java Runtime Environment:
openjdk version “1.8.0_152”
OpenJDK Runtime Environment (Zulu Embedded 8.25.0.76-linux-aarch32hf) (build 1.8.0_152-b76)
OpenJDK Client VM (Zulu Embedded 8.25.0.76-linux-aarch32hf) (build 25.152-b76, mixed mode, Evaluation) - openHAB version: openHAB 2.3.0-1 (Release Build)