I am currently running 3.2.0.M3.
I was able to create a bridge and thing definition and connect to The Things Network (TTN).
Defining a JSONPATH inside the channels’ definitions was not a problem:
Thing mqtt:topic:ttn:the-thing-node "TTN The Things Node" (mqtt:broker:bae01d4af3) @ "Locker" {
Channels:
Type string : full_message "full json message" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up" ]
Type datetime : time "time of event" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up", transformationPattern="JSONPATH:$.uplink_message.rx_metadata[0].time" ]
Type number : rssi "rssi value " [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up", transformationPattern="JSONPATH:$.uplink_message.rx_metadata[0].rssi" ]
Type number : snr "signal noise ratio" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up", transformationPattern="JSONPATH:$.uplink_message.rx_metadata[0].snr" ]
Type string : gateway_id "receiving gw id" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up", transformationPattern="JSONPATH:$.uplink_message.rx_metadata[0].gateway_ids.gateway_id" ]
Type number : battery "battery level device" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up", transformationPattern="JSONPATH:$.uplink_message.decoded_payload.battery" ]
Type string : event "event type " [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01/up", transformationPattern="JSONPATH:$.uplink_message.decoded_payload.event" ]
Type number : light "illumination in environment" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01//up", transformationPattern="JSONPATH:$.uplink_message.decoded_payload.light" ]
Type number : temperature "temperature in environment" [ stateTopic="v3/veve-lora-app@ttn/devices/veve-node-01//up", transformationPattern="JSONPATH:$.uplink_message.decoded_payloadtemperature" ]
}
My question is:
is it possible to do a JSONPATH transformation at the items (.items file) level?
I would rather have a generic channel (full_message above) from the TNN application and do the filtering at the items level.
Tried something like:
//LoraWAN Meta Data
String ELT1_meta_time1 "Metadata Time1" { channel="mqtt:topic:ttn:the-thing-node:time" }
String ELT1_meta_time2 "Metadata Time2" { channel="mqtt:topic:ttn:the-thing-node:full_message:JSONPATH:$.uplink_message.rx_metadata[0].time" }
Getting error in the log for ELT1_meta_time2 when saving items file:
2021-10-14 09:08:27.357 [ERROR] [el.item.internal.GenericItemProvider] - Binding configuration of type 'channel' of item 'ELT1_meta_time2' could not be parsed correctly.
org.openhab.core.model.item.BindingConfigParseException: UID segment '$.uplink_message.rx_metadata[0].time' contains invalid characters. The last segment of the channel UID must match the pattern '[\w-]*|[\w-]*#[\w-]*'.
at org.openhab.core.model.thing.internal.GenericItemChannelLinkProvider.createItemChannelLink(GenericItemChannelLinkProvider.java:86) ~[?:?]
at org.openhab.core.model.thing.internal.GenericItemChannelLinkProvider.processBindingConfiguration(GenericItemChannelLinkProvider.java:76) ~[?:?]
at org.openhab.core.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:372) ~[?:?]
at org.openhab.core.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:341) ~[?:?]
at org.openhab.core.model.item.internal.GenericItemProvider.processBindingConfigsFromModel(GenericItemProvider.java:212) ~[?:?]
at org.openhab.core.model.item.internal.GenericItemProvider.modelChanged(GenericItemProvider.java:407) ~[?:?]
at org.openhab.core.model.core.internal.ModelRepositoryImpl.notifyListeners(ModelRepositoryImpl.java:301) ~[?:?]
at org.openhab.core.model.core.internal.ModelRepositoryImpl.addOrRefreshModel(ModelRepositoryImpl.java:139) ~[?:?]
at org.openhab.core.model.core.internal.folder.FolderObserver.checkFile(FolderObserver.java:249) ~[?:?]
at org.openhab.core.model.core.internal.folder.FolderObserver.processWatchEvent(FolderObserver.java:312) ~[?:?]
at org.openhab.core.service.WatchQueueReader.lambda$3(WatchQueueReader.java:322) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]