Having trouble with quite a lot of the code you wrote for me. I’m aware it wasn’t supposed to just be a drop-in replacement, but I’ve caught the simple things like a single speech quote needs to be a double:
if(!packet_TXT.contains('AIRCRAFT')) return;
doesn’t work whereas
if(!packet_TXT.contains("AIRCRAFT")) return;
does.
So I’ve fixed that.
I couldn’t get logDebug to show in tail (http://openhabian.local:9001) so I’ve replaced logDebug with logWarn in my code. Only logInfo, logWarn and logError messages appear.
val isValid = [ value, compareTo, valid, msg |
val isBad = value == compareTo;
if(isBad) {
logWarn(LOGNAME, msg);
}
valid || !isBad
}
planeTransmissionValidity = isValid.apply(plane_ICAO_TXT, packet_TXT, planeTransmissionValidity, "ICAO fail")
planeTransmissionValidity = isValid.apply(plane_Callsign_TXT, packet_TXT, planeTransmissionValidity, "callsign fail")
planeTransmissionValidity = isValid.apply(plane_Contact_Age_TXT, packet_TXT, planeTransmissionValidity, "age fail")
planeTransmissionValidity = isValid.apply(plane_Altitude_TXT, packet_TXT, planeTransmissionValidity, "alt fail")
planeTransmissionValidity = isValid.apply(plane_VertRate_TXT, packet_TXT, planeTransmissionValidity, "vert fail")
planeTransmissionValidity = isValid.apply(plane_Latitude_TXT, packet_TXT, planeTransmissionValidity, "lat fail")
planeTransmissionValidity = isValid.apply(plane_Longitude_TXT, packet_TXT, planeTransmissionValidity, "long fail")
doesn’t work, and I think it’s due to something in the Lambda?
When I replaced the final curly bracket with a square one VSCode stopped complaining about it, but apart from that I think what’s supposed to happen here is that once one error occurs, planeTransmissionValidity is supposed to get set to false and all the successive tests should fail.
This doesn’t happen.
I added logging like this:
planeTransmissionValidity = isValid.apply(plane_ICAO_TXT, packet_TXT, planeTransmissionValidity, "ICAO fail")
logWarn(LOGNAME, "icao is {} " + plane_ICAO_TXT, planeTransmissionValidity)
planeTransmissionValidity = isValid.apply(plane_Callsign_TXT, packet_TXT, planeTransmissionValidity, "callsign fail")
logWarn(LOGNAME, "callsign is {} " + plane_Callsign_TXT, planeTransmissionValidity )
planeTransmissionValidity = isValid.apply(plane_Contact_Age_TXT, packet_TXT, planeTransmissionValidity, "age fail")
logWarn(LOGNAME, "age is {} " + plane_Contact_Age_TXT, planeTransmissionValidity)
planeTransmissionValidity = isValid.apply(plane_Altitude_TXT, packet_TXT, planeTransmissionValidity, "alt fail")
logWarn(LOGNAME, "alt is {} " + plane_Altitude_TXT, planeTransmissionValidity)
planeTransmissionValidity = isValid.apply(plane_VertRate_TXT, packet_TXT, planeTransmissionValidity, "vert fail")
logWarn(LOGNAME, "vert is {} " + plane_VertRate_TXT, planeTransmissionValidity)
planeTransmissionValidity = isValid.apply(plane_Latitude_TXT, packet_TXT, planeTransmissionValidity, "lat fail")
logWarn(LOGNAME, "lat is {} " + plane_Latitude_TXT, planeTransmissionValidity)
planeTransmissionValidity = isValid.apply(plane_Longitude_TXT, packet_TXT, planeTransmissionValidity, "long fail")
logWarn(LOGNAME, "long is {} " + plane_Longitude_TXT, planeTransmissionValidity)
and tail gives me this:
2024-04-17 14:56:56.758 [WARN ] [re.model.script.ADSB Processing test] - packet 0 of 14
2024-04-17 14:56:56.760 [WARN ] [re.model.script.ADSB Processing test] - icao is true 000000
2024-04-17 14:56:56.761 [WARN ] [re.model.script.ADSB Processing test] - callsign fail
2024-04-17 14:56:56.762 [WARN ] [re.model.script.ADSB Processing test] - callsign is true {"NOW":1713362215.8,
2024-04-17 14:56:56.763 [WARN ] [re.model.script.ADSB Processing test] - age fail
2024-04-17 14:56:56.764 [WARN ] [re.model.script.ADSB Processing test] - age is true {"NOW":1713362215.8,
2024-04-17 14:56:56.766 [WARN ] [re.model.script.ADSB Processing test] - alt is true 30300
2024-04-17 14:56:56.767 [WARN ] [re.model.script.ADSB Processing test] - vert fail
2024-04-17 14:56:56.768 [WARN ] [re.model.script.ADSB Processing test] - vert is true {"NOW":1713362215.8,
2024-04-17 14:56:56.769 [WARN ] [re.model.script.ADSB Processing test] - lat fail
2024-04-17 14:56:56.770 [WARN ] [re.model.script.ADSB Processing test] - lat is true {"NOW":1713362215.8,
2024-04-17 14:56:56.771 [WARN ] [re.model.script.ADSB Processing test] - long fail
2024-04-17 14:56:56.772 [WARN ] [re.model.script.ADSB Processing test] - long is true {"NOW":1713362215.8,
2024-04-17 14:56:56.773 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'testing-1' failed: For input string: "{"NOW":1713362215.8,
I’ve tried Googling “openhab lambdas” for help, and found this:
So while this may not apply to my situation, now I’m (even more) confused.
Also, although the problem above breaks the Rule, I’m also getting errors from
cache.shared.put("plane_Altitude_TXT", transform("JSONPATH", "$.AIRCRAFT[" + packetloop_NUM.toString+"].ALTITUDE", packet_TXT)
whereas
var plane_Altitude_TXT = transform("JSONPATH", "$.AIRCRAFT[" + packetLoop_NUM.toString+"].ALTITUDE", packet_TXT)
works.
I’m really sorry if I come across as ungrateful or picky. I really appreciate all the help you’ve given me and as always I suspect there are simple fixes that are hiding in the gaps of my knowledge.
Could these errors be down to a missing Binding?