Hello
I’ve found this message in my logs, but I don’t understand. Can you please help me?
2025-10-23 08:37:49.525 [WARN ] [el.core.internal.ModelRepositoryImpl] - DSL model 'presence.rules' has errors, therefore ignoring it: There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
Here my rule:
// Global variables
var Timer cameHomeTimer = null
// Presence (Home) Unifi in
rule "Set Home"
when
Member of gPhones changed to ON
then
val setHome = gPhones.members.filter[ p | p.state == ON && p.name == triggeringItem.name].map[ name.replace("_Phone_Home_Unifi_online", "") ]
switch setHome {
case setHome.get(0) == "Axxxxx": {
if (A_Presence.state == OFF) {
A_Presence.sendCommand(ON)
}
}
case setHome.get(0) == "Cxxx": {
if (C_Presence.state == OFF) {
C_Presence.sendCommand(ON)
}
}
//case setHome.get(0) == "Cxxx": C_Presence.sendCommand(ON)
}
end
// Presence (Home) welcome message
rule "Welcome home my dear"
when
Member of gPresence changed to ON
then
if(cameHomeTimer !== null) {
return; // do nothing if there is already a Timer
}
logInfo("test", "Rule triggered by " + triggeringItem.name + " at " + now.toString)
cameHomeTimer = createTimer(now.plusSeconds(5), [ |
val cameHome = gPresence.members.filter[ h | h.state == ON && (h.name == triggeringItem.name || (h.lastUpdate !== null && h.lastUpdate.isAfter(now.minusSeconds(6)))) ].map[ name.replace("_Presence", "") ]
gPresence.members.forEach[ h | logInfo("test", "Values for " + h.name + "\n" + "State = " + h.state.toString + "\n" + "LastUpdate = " + h.lastUpdate.toString)]
var String message = "Benvenuti a casa: "
switch(cameHome.size) {
case 0: {
logError("came home", "Unexpected number of phones: " + cameHome.size)
return;
}
case cameHome.size == 1 && cameHome.get(0) == "Axxxxx": message = "Benvenuto a casa, Axxxxxx"
case cameHome.size == 1 && cameHome.get(0) == "Cxxx": message = "Benvenuta a casa, Cxxx"
case cameHome.size == 1 && cameHome.get(0) == "Sxxx": message = "Benvenuta a casa, Sxxxx"
case cameHome.size == 1 && cameHome.get(0) == "Exx": message = "Benvenuto a casa, Exxxxx"
case cameHome.size == 1 && cameHome.get(0) == "Axx": message = "Welcome home, Axx"
case cameHome.size == 1 && cameHome.get(0) == "Cxxxx": message = "Welcome home, Cxxxx"
default: {
message = message + cameHome.reduce[ String list, String name | list + ", " + name ]
val ind = message.lastIndexOf(",").toString
//message = new StringBuilder(str).replace(ind, ind+1," e").toString();
message = message.replace(ind, " e ").toString();
}
}
logInfo("check message", "message is: " + message)
Echo1_TTS_Volume.sendCommand('90')
//Echo_Living_Room_TTS.sendCommand('<speak><break time="2s"/>' + message + '</speak>')
Echo1_TTS.sendCommand(message)
cameHomeTimer = null
])
end
// Presence (Away) GPS out
rule "Set Away"
when
Member of gPGPS changed to OFF
then
val setAway = gPGPS.members.filter[ a | a.state == OFF && a.name == triggeringItem.name].map[ name.replace("_Presence_GPS", "") ]
switch setAway {
case setAway.get(0) == "Axxxx": A_Presence.sendCommand(OFF)
case setAway.get(0) == "Cxxx": C_Presence.sendCommand(OFF)
}
end
thanks for helping me
Andrea