Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[upb] UPB Binding initial contribution #1620

Closed
wants to merge 4 commits into from

Conversation

cvanorman
Copy link

@cvanorman cvanorman commented Dec 28, 2016

Signed-off-by: Chris Van Orman vanorman.chris@gmail.com

Fixes #1619

@DaAwesomeP
Copy link

@cvanorman Since it worked well to sort out bugs last time, would you mind providing a JAR again for testing?

@cvanorman
Copy link
Author

File attached.

org.openhab.binding.upb-2.0.0-SNAPSHOT.zip

@DaAwesomeP
Copy link

Thanks. It doesn't work for me. I dropped the file in /usr/share/openhab2/addons:

2016-12-28 12:58:51.870 [ERROR] [org.openhab.binding.upb             ] - FrameworkEvent ERROR - org.openhab.binding.upb
org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.upb [220]
  Unresolved requirement: Import-Package: gnu.io

        at org.eclipse.osgi.container.Module.start(Module.java:434)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)[org.eclipse.osgi-3.10.2.v20150203-1939.jar:]

@cvanorman
Copy link
Author

It requires that nrjavaserial be provided by the runtime. This has historically been provided by the openhab-transport-serial bundle, but is being refactored to include it directly from the runtime (see openhab/openhab-core#101)

So, you can either run the following in the karaf console:

feature:install openhab-transport-serial

or you can download the nrjavaserial file attached in the the previously mentioned issue and drop it in your addons folder.

@DaAwesomeP
Copy link

DaAwesomeP commented Dec 28, 2016

OK, I assume that that is a dependency and will be automatically installed via PaperUI. I installed it via Karaf just fine. However, I haven't specified any devices, and I have another error:

upb.things:

upb:bridge:upbmodem [ serialPort="/dev/ttyS0", network="135" ]

log:

2016-12-28 15:27:26.011 [ERROR] [ome.core.thing.internal.ThingManager] - Exception occured while initializing handler of thin                                                g 'upb:bridge:upbmodem': java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
java.util.concurrent.ExecutionException: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)[:1.8.0_111]
        at java.util.concurrent.FutureTask.get(FutureTask.java:206)[:1.8.0_111]
        at org.eclipse.smarthome.core.common.SafeMethodCaller.callAsynchronous(SafeMethodCaller.java:188)[96:org.eclipse.smar                                                thome.core:0.9.0.201612171108]
        at org.eclipse.smarthome.core.common.SafeMethodCaller.call(SafeMethodCaller.java:81)[96:org.eclipse.smarthome.core:0.                                                9.0.201612171108]
        at org.eclipse.smarthome.core.common.SafeMethodCaller.call(SafeMethodCaller.java:65)[96:org.eclipse.smarthome.core:0.                                                9.0.201612171108]
        at org.eclipse.smarthome.core.thing.internal.ThingManager$9.run(ThingManager.java:710)[103:org.eclipse.smarthome.core                                                .thing:0.9.0.201612171108]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_111]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:1                                                80)[:1.8.0_111]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.                                                8.0_111]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_111]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_111]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_111]
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
        at org.openhab.binding.upb.handler.UPBBridgeHandler.initialize(UPBBridgeHandler.java:73)[220:org.openhab.binding.upb:                                                2.0.0.201612230831]
        at org.eclipse.smarthome.core.thing.internal.ThingManager$9$1.call(ThingManager.java:713)[103:org.eclipse.smarthome.c                                                ore.thing:0.9.0.201612171108]
        at org.eclipse.smarthome.core.thing.internal.ThingManager$9$1.call(ThingManager.java:1)[103:org.eclipse.smarthome.cor                                                e.thing:0.9.0.201612171108]
        at org.eclipse.smarthome.core.common.SafeMethodCaller$CallableWrapper.call(SafeMethodCaller.java:179)[96:org.eclipse.                                                smarthome.core:0.9.0.201612171108]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111]
        ... 3 more
2016-12-28 15:27:26.041 [ERROR] [ome.core.thing.internal.ThingManager] - Exception occured while initializing handler of thin                                                g 'upb:bridge:upbmodem': java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
java.util.concurrent.ExecutionException: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)[:1.8.0_111]
        at java.util.concurrent.FutureTask.get(FutureTask.java:206)[:1.8.0_111]
        at org.eclipse.smarthome.core.common.SafeMethodCaller.callAsynchronous(SafeMethodCaller.java:188)[96:org.eclipse.smar                                                thome.core:0.9.0.201612171108]
        at org.eclipse.smarthome.core.common.SafeMethodCaller.call(SafeMethodCaller.java:81)[96:org.eclipse.smarthome.core:0.                                                9.0.201612171108]
        at org.eclipse.smarthome.core.common.SafeMethodCaller.call(SafeMethodCaller.java:65)[96:org.eclipse.smarthome.core:0.                                                9.0.201612171108]
        at org.eclipse.smarthome.core.thing.internal.ThingManager$9.run(ThingManager.java:710)[103:org.eclipse.smarthome.core                                                .thing:0.9.0.201612171108]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_111]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:1                                                80)[:1.8.0_111]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.                                                8.0_111]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_111]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_111]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_111]
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
        at org.openhab.binding.upb.handler.UPBBridgeHandler.initialize(UPBBridgeHandler.java:73)[220:org.openhab.binding.upb:                                                2.0.0.201612230831]
        at org.eclipse.smarthome.core.thing.internal.ThingManager$9$1.call(ThingManager.java:713)[103:org.eclipse.smarthome.c                                                ore.thing:0.9.0.201612171108]
        at org.eclipse.smarthome.core.thing.internal.ThingManager$9$1.call(ThingManager.java:1)[103:org.eclipse.smarthome.cor                                                e.thing:0.9.0.201612171108]
        at org.eclipse.smarthome.core.common.SafeMethodCaller$CallableWrapper.call(SafeMethodCaller.java:179)[96:org.eclipse.                                                smarthome.core:0.9.0.201612171108]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111]
        ... 3 more

@cvanorman
Copy link
Author

I'll be honest with you, I've never gotten the "things" files to work with any binding. Just use the Paper UI.

@cvanorman
Copy link
Author

Actually, if you remove the quotes from around the numbers it should parse it correctly.

@DaAwesomeP
Copy link

OK. I used the quotes because that's how it was stated in the doc file in the commit. That fixed the error.

@ThomDietrich
Copy link
Member

I've never gotten the "things" files to work with any binding. Just use the Paper UI.

Working with things files should just as well work. In the community forum one of the main sources among discussed problems is the not always clear and consistent way bindings and add-ons are configured and how they behave. With the step-by-step evolution of PaperUI and the database to be a full replacement for manual file based configurations the significance of files might drop but they are still important. My point being: For the sake of conformity, please also pay attention to the file based configuration aspect :)

@DaAwesomeP
Copy link

DaAwesomeP commented Dec 28, 2016

@ThomDietrich All is well! The config files work! I prefer the file-based configs because I can backup and restore my OH configuration very easily. The doc file in this commit simply needs an adjustment to remove the quotation marks. However, I will note that this binding is configured slightly differently. Most other bindings seem to follow this model:

upb:bridge:modem1 [ serialPort="/dev/ttyS0", network=135 ]
upb:link:modem1:link1 [ id=3 ]

Though I can't really see a situation where you would need more than one modem (assuming your house is wired properly with repeaters/phase couplers), and the current config method seems to support that anyway.

@cvanorman I successfully got the binding to control my lights! Thank you! However, it doesn't seem to respond to status updates. Also, I've noticed that the config option for how often the lights are queried is now gone. And, although it makes no difference to me (I use BasicUI and HABpanel), there are no items in the Control section of PaperUI. Current config:
upb.things:

upb:bridge:upbmodem [ serialPort="/dev/ttyS0", network=135 ]
upb:link:LightDenAll (upb:bridge:upbmodem) [ id=3 ]
upb:link:SceneDenNight (upb:bridge:upbmodem) [ id=1 ]
upb:dimmer:LightDenOuterCans (upb:bridge:upbmodem) [ id=5 ]
upb:dimmer:LightDenInnerCans (upb:bridge:upbmodem) [ id=6 ]
upb:dimmer:LightDenMantle (upb:bridge:upbmodem) [ id=7 ]

upb.items:

Dimmer Light_Den_All "All" (Den, Lights) {channel="upb:link:LightDenAll:link"}
Switch Scene_Den_Night "Scene - Night" (Den, Scenes) {channel="upb:link:SceneDenNight:link"}
Dimmer Light_Den_OuterCans "Outer Cans" (Den, Lights) {channel="upb:dimmer:LightDenOuterCans:dimmer"}
Dimmer Light_Den_InnerCans "Inner Cans" (Den, Lights) {channel="upb:dimmer:LightDenInnerCans:dimmer"}
Dimmer Light_Den_Mantle "Mantle" (Den, Lights, Lights_Away) {channel="upb:dimmer:LightDenMantle:dimmer"}

@DaAwesomeP
Copy link

I've also just noticed an odd delay 10-15 second every third or fourth time a light is adjusted. It could just be my network/machine though.

@DaAwesomeP
Copy link

One final thought: It would definitely be possible to "discover" devices on the UPB network. UPStart does it by simply getting the info of every device in the network and showing the IDs that respond. This could be for a later update though.

@cvanorman
Copy link
Author

There are a few differences in regards to refreshing as OH2 doesn't have the same polling refresh process as OH1. The items should refresh when they are initialized and they will properly respond to a REFRESH command. So, you could create a cron rule that refreshes them all if you like. I would recommend keeping that to a minimum though as the powerline bus has limited throughput and flooding it can cause missed messages. Links will ignore the REFRESH command.

Also, I've put in a "LOW" priority queue for the refresh messages and they block for 1 second to ensure a response is received prior to sending a new command.

@cvanorman
Copy link
Author

Yes, discovery is definitely possible, I just haven't worked on it.

@cvanorman
Copy link
Author

As for the layout and / or structure of the config files, I don't do anything particular there. My binding does not parse any information from it directly. It interacts only with the openHAB api so it should work the same as it does for any other binding.

I think for your items files you are not binding to the correct channel. It should look like this:
Dimmer Light_Den_All "All" (Den, Lights) {channel="upb:link:LightDenAll:brightness"}

The last part of the channel is the channel name which should be either brightness or switch depending on the item type.

@DaAwesomeP
Copy link

I see. I updated my config to use brightness and switch, but it still doesn't seem to be seeing the changes:

Dimmer Light_Den_All "All" (Den, Lights) {channel="upb:link:LightDenAll:brightness"}
Switch Scene_Den_Night "Scene - Night" (Den, Scenes) {channel="upb:link:SceneDenNight:switch"}
Dimmer Light_Den_OuterCans "Outer Cans" (Den, Lights) {channel="upb:dimmer:LightDenOuterCans:brightness"}
Dimmer Light_Den_InnerCans "Inner Cans" (Den, Lights) {channel="upb:dimmer:LightDenInnerCans:brightness"}
Dimmer Light_Den_Mantle "Mantle" (Den, Lights, Lights_Away) {channel="upb:dimmer:LightDenMantle:brightness"}

@cvanorman
Copy link
Author

Is there any activity in the debug logs? Like, is the modem receiving data?

@DaAwesomeP
Copy link

It receives and logs both status updates, but it does not update the state:

19:59:39.366 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
19:59:39.366 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
19:59:39.382 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
19:59:39.382 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [69, 48, 53, 50, 49, 70, 70]
19:59:39.401 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
19:59:39.401 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 65, 13]
19:59:39.401 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870E0521FFFFBA
19:59:39.715 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
19:59:39.716 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
19:59:39.732 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
19:59:39.732 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [69, 48, 53, 50, 49, 70, 70]
19:59:39.751 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
19:59:39.751 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 57, 13]
19:59:39.751 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870E0521FFFFB9

@cvanorman
Copy link
Author

Those messages are link messages for a link with id=15, but I didn't see that in your config.

I should also mention that it is now more accurate in identifying things. Previously it just checked the source or destination and flagged those items. This could result in incorrect items being updated and so you may be expecting those messages to update your LightDenOuterCans, but that is not what the UPB message actually indicated.

@DaAwesomeP
Copy link

Actually, it's supposed to be device #6 (LightDenInnerCans). I haven't reprogrammed anything and UPStart sees that switch as device #6, so I don't think this issue is with the switch.

@cvanorman
Copy link
Author

Ummm, there is no ambiguity here. The message in that log is a deactivate command sent to link 15 from device 5 on network 135. That is what it is.

The binding will interpret that as a status update for a link with id 15. If no such thing is configured, it will be ignored.

@DaAwesomeP
Copy link

DaAwesomeP commented Dec 29, 2016

It seems to be decoding the command wrong. This is what I get after switching Device 8 to 100. I am dead sure that this is device 8 and that it is emitting device 8. It can't possibly also be emitting link 15:

21:00:45.845 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
21:00:45.846 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
21:00:45.862 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
21:00:45.862 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 48, 56, 50, 48, 70, 70]
21:00:45.881 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
21:00:45.881 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 55, 13]
21:00:45.881 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870F0820FFFFB7
21:00:46.195 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
21:00:46.195 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
21:00:46.212 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
21:00:46.212 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 48, 56, 50, 48, 70, 70]
21:00:46.231 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
21:00:46.231 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 54, 13]
21:00:46.231 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870F0820FFFFB6
21:00:46.645 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
21:00:46.645 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 52, 56, 55]
21:00:46.662 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
21:00:46.662 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 56, 56, 54, 54, 52]
21:00:46.676 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [55]
21:00:46.676 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [66, 13]
21:00:46.676 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU080487000886647B
21:00:46.962 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
21:00:46.962 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 53, 56, 55]
21:00:46.978 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
21:00:46.978 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 56, 56, 54, 54, 52]
21:00:46.994 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [55]
21:00:46.994 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [65, 13]
21:00:46.994 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU080587000886647A

However, when I decode it, I also get link 15. Is it possible that the PIM is being read incorrectly? The first two commands say that it is sending to device 15 and the source is device 8, but the next two commands say that it is sending a null command to no particular device and is from device 8.

@cvanorman
Copy link
Author

I don't think so, this is very normal traffic. If it was decoding wrong it would likely not produce a meaningful message at all.

These messages are all coming from device 8 which matches up with what you said. There are two sets which is also normal. The first, PU8904870F0820FFFFB7, is an activate command for link 15 sent from device 8. The second, PU080487000886647B, is a device status report of 100% for device 8. Each message is duplicated twice and this is also normal.

I'm also realizing that the earlier message, PU8904870E0521FFFFBA, is actually link 14 (coming from device 5) and not 15 like I had indicated.

@DaAwesomeP
Copy link

Well, it's been a few days, and it seems that some devices send updates properly and others don't. I'm not sure why. They're all Simply Automated switches, and UPStart grabs their updates every time.

@cvanorman
Copy link
Author

Can you provide me with your configuration and the debug log from when you are pressing a switch?

@DaAwesomeP
Copy link

cat /etc/openhab2/things/upb.things:

upb:bridge:upbmodem [ serialPort="/dev/ttyS0", network=135 ]

upb:link:LightDenAll (upb:bridge:upbmodem) [ id=3 ]
upb:link:SceneDenNight (upb:bridge:upbmodem) [ id=1 ]
upb:dimmer:LightDenOuterCans (upb:bridge:upbmodem) [ id=5 ]
upb:dimmer:LightDenInnerCans (upb:bridge:upbmodem) [ id=6 ]
upb:dimmer:LightDenMantle (upb:bridge:upbmodem) [ id=7 ]

upb:dimmer:LightBreakfastCans (upb:bridge:upbmodem) [ id=1 ]
upb:dimmer:LightBreakfastWall (upb:bridge:upbmodem) [ id=2 ]

upb:dimmer:LightKitchenOuterCans (upb:bridge:upbmodem) [ id=3 ]
upb:dimmer:LightKitchenIslandCans (upb:bridge:upbmodem) [ id=4 ]

upb:link:LightGameRoomAll (upb:bridge:upbmodem) [ id=3 ]
upb:link:SceneGameRoomNight (upb:bridge:upbmodem) [ id=16 ]
upb:dimmer:LightGameRoomFixture (upb:bridge:upbmodem) [ id=8 ]

upb:link:LightHouseAll (upb:bridge:upbmodem) [ id=4 ]
upb:link:SceneHouseNight (upb:bridge:upbmodem) [ id=6 ]

upb:link:AwayTimersState (upb:bridge:upbmodem) [ id=17, duplicateTimeout=1500 ]

cat /etc/openhab2/items/upb.items:

Group All
Group Scenes
Group Status (All)
Group Den "Den" <television> (All)
Group Kitchen "Kitchen" <kitchen> (All)
Group Breakfast "Breakfast" <pantry> (All)
Group GameRoom "Game Room" <smiley> (All)
Group House "House" <house> (All)

Group Lights_Away

/* active groups */
Group:Switch:OR(ON, OFF) Lights "All Lights [(%d)]" (All)

/* Lights */
Dimmer Light_Den_All "All" (Den, Lights) {channel="upb:link:LightDenAll:brightness"}
Switch Scene_Den_Night "Scene - Night" (Den, Scenes) {channel="upb:link:SceneDenNight:switch"}
Dimmer Light_Den_OuterCans "Outer Cans" (Den, Lights) {channel="upb:dimmer:LightDenOuterCans:brightness"}
Dimmer Light_Den_InnerCans "Inner Cans" (Den, Lights) {channel="upb:dimmer:LightDenInnerCans:brightness"}
Dimmer Light_Den_Mantle "Mantle" (Den, Lights, Lights_Away) {channel="upb:dimmer:LightDenMantle:brightness"}

/* Dimmer Light_Breakfast_All "All" (Den, Lights) {upb="id=3 link=true"}
Switch Scene_Breakfast_Night "Scene - Night" (Den, Scenes) {upb="id=1 link=true"} */
Dimmer Light_Breakfast_Cans "Cans" (Breakfast, Lights, Lights_Away) {channel="upb:dimmer:LightBreakfastCans:brightness"}
Dimmer Light_Breakfast_Wall "Wall" (Breakfast, Lights) {channel="upb:dimmer:LightBreakfastWall:brightness"}

Dimmer Light_Kitchen_Outer_Cans "Outer Cans" (Kitchen, Lights) {channel="upb:dimmer:LightKitchenOuterCans:brightness"}
Dimmer Light_Kitchen_Island_Cans "Island Cans" (Kitchen, Lights, Lights_Away) {channel="upb:dimmer:LightKitchenIslandCans:brightness"}

Dimmer Light_GameRoom_All "All" (GameRoom, Lights) {channel="upb:link:LightGameRoomAll:brightness"}
Switch Scene_GameRoom_Night "Scene - Night" (GameRoom, Scenes) {channel="upb:link:SceneGameRoomNight:switch"}
Dimmer Light_GameRoom_Fixture "Fixture" (GameRoom, Lights, Lights_Away) {channel="upb:dimmer:LightGameRoomFixture:brightness"}

Dimmer Light_House_All "All" (House, Lights) {channel="upb:link:LightHouseAll:brightness"}
Switch Scene_House_Night "Scene - Night" (House, Scenes) {channel="upb:link:SceneHouseNight:switch"}

Switch AwayTimersState "Away Timers" <clock> (Astro) {channel="upb:link:AwayTimersState:switch"}
// Turn off device 8
14:56:27.378 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:27.379 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
14:56:27.395 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:27.395 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 48, 56, 50, 49, 70, 70]
14:56:27.414 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:27.414 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 54, 13]
14:56:27.414 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870F0821FFFFB6
14:56:27.728 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:27.728 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
14:56:27.745 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:27.745 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 48, 56, 50, 49, 70, 70]
14:56:27.763 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:27.764 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 53, 13]
14:56:27.764 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870F0821FFFFB5
14:56:28.161 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:28.161 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 52, 56, 55]
14:56:28.178 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:28.178 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 56, 56, 54, 48, 48]
14:56:28.192 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68]
14:56:28.192 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 13]
14:56:28.192 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU08048700088600DF
14:56:28.478 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:28.478 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 53, 56, 55]
14:56:28.495 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:28.495 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 56, 56, 54, 48, 48]
14:56:28.509 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68]
14:56:28.509 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [69, 13]
14:56:28.509 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU08058700088600DE
14:56:40.375 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:40.375 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
14:56:40.391 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:40.392 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [69, 48, 55, 50, 48, 70, 70]
14:56:40.410 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:40.410 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 57, 13]
// Turn on device 7
14:56:40.410 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870E0720FFFFB9
14:56:40.725 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:40.725 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
14:56:40.741 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:40.742 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [69, 48, 55, 50, 48, 70, 70]
14:56:40.760 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:40.760 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 56, 13]
14:56:40.760 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870E0720FFFFB8
14:56:41.091 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:41.092 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 52, 56, 55]
14:56:41.108 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:41.108 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 55, 56, 54, 54, 52]
14:56:41.123 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [55]
14:56:41.123 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [67, 13]
14:56:41.123 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU080487000786647C
14:56:41.407 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:41.408 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 53, 56, 55]
14:56:41.424 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:41.424 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 55, 56, 54, 54, 52]
14:56:41.439 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [55]
14:56:41.439 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [66, 13]
14:56:41.439 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU080587000786647B
14:56:42.940 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:42.941 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
14:56:42.957 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:42.957 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 48, 54, 50, 48, 70, 70]
14:56:42.976 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:42.976 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 66, 13]
// Turn on device 6, and somewhere here I tried to turn on device 4 from device 6
14:56:42.976 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870D0620FFFFBB
14:56:43.290 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:43.291 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
14:56:43.307 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:43.307 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 48, 54, 50, 48, 70, 70]
14:56:43.326 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:43.326 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 65, 13]
14:56:43.326 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870D0620FFFFBA
14:56:50.971 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:50.972 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
14:56:50.988 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:50.988 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [67, 48, 54, 50, 48, 70, 70]
14:56:51.007 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:51.007 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 67, 13]
14:56:51.007 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870C0620FFFFBC
14:56:51.321 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:51.321 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
14:56:51.337 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:51.337 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [67, 48, 54, 50, 48, 70, 70]
14:56:51.356 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
14:56:51.356 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 66, 13]
14:56:51.356 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870C0620FFFFBB
14:56:51.771 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:51.771 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 52, 56, 55]
14:56:51.787 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:51.787 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 54, 56, 54, 54, 52]
14:56:51.802 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [55]
14:56:51.802 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 13]
14:56:51.802 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU080487000686647D
14:56:52.088 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
14:56:52.088 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 48, 56, 48, 53, 56, 55]
14:56:52.104 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
14:56:52.104 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48, 48, 54, 56, 54, 54, 52]
14:56:52.119 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [55]
14:56:52.119 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [67, 13]
14:56:52.119 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU080587000686647C
// Restarted log so I could see exactly what's what, turning off device 4 from device 6
15:04:31.088 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
15:04:31.088 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
15:04:31.105 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
15:04:31.105 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 48, 54, 50, 49, 70, 70]
15:04:31.123 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
15:04:31.124 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 65, 13]
15:04:31.124 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870D0621FFFFBA
15:04:31.438 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
15:04:31.438 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
15:04:31.455 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
15:04:31.455 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 48, 54, 50, 49, 70, 70]
15:04:31.473 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
15:04:31.474 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 57, 13]
15:04:31.474 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870D0621FFFFB9
// Turning on device 4 from device 6
15:05:04.815 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
15:05:04.815 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 52, 56, 55]
15:05:04.831 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
15:05:04.832 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 48, 54, 50, 48, 70, 70]
15:05:04.850 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
15:05:04.851 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 66, 13]
15:05:04.852 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8904870D0620FFFFBB
15:05:05.165 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [80]
15:05:05.165 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [85, 56, 57, 48, 53, 56, 55]
15:05:05.181 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [48]
15:05:05.182 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [68, 48, 54, 50, 48, 70, 70]
15:05:05.200 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70]
15:05:05.200 [DEBUG] [enhab.binding.upb.internal.UPBReader] - Received: [70, 66, 65, 13]
15:05:05.200 [DEBUG] [enhab.binding.upb.internal.UPBReader] - UPB Message: PU8905870D0620FFFFBA

It seems that my switches only broadcast their change if they are manually pressed. They do not broadcast if another switch tells it what to do. There doesn't appear to be an option for this. It makes sense too, because the switch broadcasting at that point would be redundant. Being able to control another light from another switch is a feature of any smart switch, and I would hate to give that up.

@cvanorman
Copy link
Author

Devices do not broadcast via a link. Only the device that is pressed. The powerline bus simply cannot support it as it would just result in a lot of collisions. There is not a lot I can do about that. Ideally, I'd like to be able to store the links themselves (in OH) and update a device based upon the activation of a link. I haven't really had time to look into what my options are in OH for that.

If the system is updating when you manually press a switch, then it is working as it was intended.

@cvanorman
Copy link
Author

Of course, you can do this manually via a rule. If you configure the link in OH, you will get updates for the link and can then update the status of devices based upon your knowledge of what that link is supposed to do.

@cvanorman
Copy link
Author

That config doesn't include link 66. Are none of the links or switches updating?

@gmoneyman
Copy link

I was just giving you an example. Making sure a Link is always a "brightness" channel no matter which item is used. A Dimmer item is always a "brightness" channel no matter if device or link. And a "switch" channel is only used for a device with a switch item.

All seems to be working for me but need further test. I do have the link update problem that @DaAwesomeP talks about which seemed to work in OH1.

@gmoneyman
Copy link

@cvanorman @DaAwesomeP Just want to make sure my behavior is same as what you know to be.
I have two Simply Automated US11-40 which control lights in basement. First one, the top rocker turns on half lights in basement. The other switch turns the other half of the lights one. The bottom rocker of the first switch is set to a link which turns off all lights in the basement. When I hit the bottom rocker, all lights go off but the item in UI does not update that it is off. This is a known bug with no workaround?

Group item=BasementNew label="Basement" icon="cellar" {
Switch item=Light_C_Allbasement
Slider item=Light_C_Front
Slider item=Light_C_Back
}

upb:link:LightCAllbasement (upb:bridge:upbmodem) [ id=35 ]
upb:dimmer:LightCFront (upb:bridge:upbmodem) [ id=32 ]
upb:dimmer:LightCBack (upb:bridge:upbmodem) [ id=33 ]

Switch Light_C_Allbasement "All" (BasementNew) {channel="upb:link:LightCAllbasement:brightness"} Dimmer Light_C_Front "Basement Front" (BasementNew) {channel="upb:dimmer:LightCFront:brightness"} Dimmer Light_C_Back "Basement Back" (BasementNew) {channel="upb:dimmer:LightCBack:brightness"}

@martinvw martinvw added the new binding If someone has started to work on a binding. For a new binding PR. label Apr 23, 2017
Copy link
Member

@martinvw martinvw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cvanorman thanks for your PR, I added some review comments. Questions, please let me know.

Bundle-Name: UPB Binding
Bundle-SymbolicName: org.openhab.binding.upb;singleton:=true
Bundle-Vendor: openHAB
Bundle-Version: 2.0.0.qualifier
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you bump the bundle and Java version to 2.1.0 and 1.8

<?xml version="1.0" encoding="UTF-8"?>
<!--

Copyright (c) 2014-2016 by the respective copyright holders.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that this file has a missing or invalid copyright header, can you fix all of them by running

mvn license:format

Please commit only the ones for your binding.

bin.includes = META-INF/,\
.,\
OSGI-INF/,\
ESH-INF/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you include the about.html in the file (a new requirement :-) ) and make sure the file ends with a newline

<parent>
<groupId>org.openhab.binding</groupId>
<artifactId>pom</artifactId>
<version>2.0.0-SNAPSHOT</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update the version

* used across the whole binding.
*
* @author Chris Van Orman - Initial contribution
* @since 2.0.0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you update all @since-s

try {
wait(ACK_TIMEOUT);
} catch (InterruptedException e) {

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we receive this InterruptedException, the interrupted flag was cleared and we most likely need to reset the flag:

http://www.yegor256.com/2015/10/20/interrupted-exception.html
https://www.ibm.com/developerworks/library/j-jtp05236/

/**
* {@link Runnable} implementation used to write data to the UPB modem.
*
* @author cvanorman
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected author name, please add it like you did at the other classes.

<module>org.openhab.binding.urtsi</module>
<module>org.openhab.binding.vitotronic</module>
<module>org.openhab.binding.yamahareceiver</module>
<module>org.openhab.binding.zway</module>
</modules>

</project>
</project>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Undo this change

@@ -65,10 +65,11 @@
<module>org.openhab.binding.tellstick</module>
<module>org.openhab.binding.tesla</module>
<module>org.openhab.binding.toon</module>
<module>org.openhab.binding.upb</module>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To have the binding being picked up by the distro, you furthermore need to add it to the feature.xml, again at the alphabetically correct position. If you have a dependency on some transport bundle (e.g. upnp, mdns or serial), make sure to add a line for this dependency as well (see the other bindings as an example).

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The about.html file seems missing, guidelines B.2

@martinvw
Copy link
Member

Hello @cvanorman how are you doing? Will you able to process the review comments? If you any questions please let us know.

@cvanorman
Copy link
Author

cvanorman commented Jun 17, 2017 via email

@martinvw
Copy link
Member

@cvanorman thanks for all your work till now. However I see quite some work ahead it seems to me that some comments are still open, besides that the build fails and you have a conflict. Give that you merged in the master (in openhab you should always rebase instead of merge) the proper way to go now is:

git reset HEAD~1
git stash
git reset HEAD~2 --hard
git stash pop
-- maybe fix some merge conflicts, most likely not
-- perform a normal commit and validate whether the results are correct
-- origin or another name if needed
git push origin 1619-upb-binding --force

If you managed this, it's time to rebase on the openhab/master

@martinvw
Copy link
Member

Hello @cvanorman , how are you doing, do you have plans to finalize this binding? Or would you prefer someone else to take it over? In that case we could maybe tag it and ask other developer to jump in?

@cvanorman
Copy link
Author

Sorry, yes, unfortunately my life has become occupied with other matters and I'm unlikely to find time to continue this anytime soon.

@wborn wborn changed the title Created UPB binding, Fixes #1619 [ubp] UPB Binding initial contribution Dec 18, 2018
@wborn wborn changed the title [ubp] UPB Binding initial contribution [upb] UPB Binding initial contribution Dec 18, 2018
@wborn wborn added the stale As soon as a PR is marked stale, it can be removed 6 months later. label Jan 28, 2019
@martinvw martinvw removed awaiting feedback stale As soon as a PR is marked stale, it can be removed 6 months later. labels Mar 2, 2019
@davidgraeff
Copy link
Member

Closing as no one is working on this anymore

@davidgraeff davidgraeff closed this Apr 2, 2019
@Hilbrand Hilbrand added the oh1 migration Relates to migrating an openHAB 1 addon to openHAB 2 label Sep 13, 2019
@openhab-bot
Copy link
Collaborator

This pull request has been mentioned on openHAB Community. There might be relevant details there:

https://community.openhab.org/t/altering-jar-file-for-manual-binding-installation/84155/8

@openhab-bot
Copy link
Collaborator

This pull request has been mentioned on openHAB Community. There might be relevant details there:

https://community.openhab.org/t/altering-jar-file-for-manual-binding-installation/84155/9

1 similar comment
@openhab-bot
Copy link
Collaborator

This pull request has been mentioned on openHAB Community. There might be relevant details there:

https://community.openhab.org/t/altering-jar-file-for-manual-binding-installation/84155/9

@marcusb
Copy link
Contributor

marcusb commented Jan 2, 2020

Another implementation here

@hmerk
Copy link
Contributor

hmerk commented Jul 24, 2021

Can be closed as #6742 got merged.
sorry, commented at wrom place but can‘t delete…

Flole998 pushed a commit to Flole998/openhab-addons that referenced this pull request Dec 30, 2021
* Added expire functionality as core framework feature

Closes openhab#1620

Signed-off-by: Kai Kreuzer <kai@openhab.org>
markus7017 pushed a commit to markus7017/openhab-addons that referenced this pull request Aug 12, 2023
Signed-off-by: Markus Storm <markus.storm@gmx.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted new binding If someone has started to work on a binding. For a new binding PR. oh1 migration Relates to migrating an openHAB 1 addon to openHAB 2
Projects
None yet
Development

Successfully merging this pull request may close these issues.