Busch-Jaeger Free@Home

So, I have made an attempt to update the binding to discover and implement the wireless devices as described (using DeviceTypeID A039), setting channels and Thing type based on DeviceTypeName from your list, assuming idp/odp is the same as for wired devices.

F@H 2.5.4-SNAPSHOT

Note
You might end up having devices recognized/listed as different thing types in OH inbox, so you will need to identify the correct one. Will be interesting to hear if your devices now are recognised as correct Thing type, and not dummy thing.

1 Like

Yes, almost perfect. There is only one problem with the blind actuators. The double actuators (2/2-fach left/right) are recognized as single actuators (1/1-fach) and I can only control one side.

Before the new binding, the double actuator was recognized as 2 single dummy things, see my table in Post 243 “same device”.

Great, and you manage to create operable items for your devices within OH?

The binding is now updated to implement 2/1-fach Jalousieaktor (see you refer to it as 2/2-fach in your previous post, but it appears to be 2/1-fach based on your list as retrieved from PaperUI inbox).

I have replaced the binding in the link in post 246, so you could download the new binding and retry.

1 Like

Now everything is working flawless. Well done Stian!

Yes, I managed to create working items without any problems!

1 Like

Hello Stian,

I activated the dummy things, too. I found motion detectors that are not implement at the moment. The ID is 1008. In the SysAp I see that in one channel ch0000 is stored the current Lux and the state:
grafik
grafik

Or is my research wrong?

“Zeitprogramme” and “Aktionen” are having one channels, too. Maybe it will be interesting to implement them. I can post the IDs if you want.

Thanks for the great work and your support :smiley:

Well, it’s hard to say as you are referring to the device only as motion detector: Is it with or without relay? Based on the ID 1008, I would assume it is without relay (based on similarity to 9008 which is already included in the binding).

So, to get ON/OFF response from your device in OH, I have implemented “1008” as a motion detector (without relay):
F@H 2.5.4-SNAPSHOT

The lux value for motion detectors are not implemented at all in the binding from before, so this would require more extensive work for the binding (i.e. idp/odp, channel definitions/configurations etc).

The same goes for “Zeitprogramme” and “Aktionen” which basically are just some kind of mirror for your “Time programs” and “Actions” as you have set them up in your SysAp. Meaning, your SysAp dumps them as devices within F@H, but really uncertain what information actually could be retrieved from these “devices”, and what there would be to gain on getting them implemented in OH (you regardless get the response of devices which are involved in program/action in OH). As an alternative, you could set up rules in OH to achieve the same as time programs/actions in F@H SysAp, and thus just delete your existing F@H time programs/actions (if your goal is to have OH control only).

Thanks for the implementation.

I could add the motion detectors as thinks. But I can not see any changes in the events.log if the motion is detected. I do not see any error log. In the sysap “free@home Monitor” the changes are reported.

Do you have any idea how to improve debugging?

Your device “1008” is recognised similar as “9008” which also is a motion detector (without relay), a device which already is implemented in the binding (set up as SWITCH, meaning it will report ON/OFF status based on motion).

The “9008” device operate under channel ch0000, and idp0000/odp0000. I have the “9008” device, and for me I get ON/OFF updates in OpenHab when motion starts/stops. No other updates.

As I do not have the “1008” device, I am unable to troubleshoot any further. Not sure if your “1008” device actually operate under the same idp/odp.

Hi,

do someone have a complete thing-example-file for freeathome with a rollershutter channel and a szene?

i do not want to use paperui - and i hope it is possible.

regards

I haven’t tested myself, and would recommend to start out reading:
OpenHab Things

And for testing, I would start out with something like (for thing definition):

Bridge freeathome:bridge:mybridge [host="xxx.xxx.xxx.xxx", port="5280", login="username", password="password", dummy_things_enabled="true"] {
	Thing raffstore myRaffstore "Raffstore Switch" [DeviceID="ABB123454", ChannelId="ch0000", InputIdComplete="idp0000", InputIdStepwise="idp0001", InputIdPercentage="idp0002", OutputIdPercentage="odp0001"]
}

Followed by items definition:

Rollershutter   Screen_Stepwise     "Shutter stepwise"   {channel="freeathome:raffstore:ABB123454_ch0000:stepwise"}
Rollershutter   Screen_Complete     "Shutter complete"   {channel="freeathome:raffstore:ABB123454_ch0000:complete"}
Dimmer          Screen_Percentage   "Percentage"         {channel="freeathome:raffstore:ABB123454_ch0000:percentage"}

You could figure out the details if you generate a thing in PaperUI to get the required configuration input.

I did checked out the json from paperui from a former installation, but i am not able to transform it to a thing-file.

No Error, No Function … within the things-file!

I added / edited my things-file as follows:

Things-File:

Bridge freeathome:bridge:cyyyyyy9	[
		host					= "xxx.xxx.xxx.xxx",
		port 					= "5280",
		login 					= "openhab",
		password				= "OpenHab",
		dummy_things_enabled	= "false",
		log_enabled				= "true",
		log_dir					= "/openhab/logs/log_bj",
		label					= "FreeAtHome Bridge"
	]
{
	Thing raffstore ABBxxxxxxxx1_ch0000 [
				label				= "UVKGO, REG_B001_ABBxxxxxxxx1_ch0000",
				DeviceID			= "ABBxxxxxxxx1",
				ChannelId			= "ch0000",
				InputIdComplete		= "idp0000",
				InputIdStepwise		= "idp0001",
				InputIdPercentage	= "idp0002",
				OutputIdPercentage	= "odp0001"
			]
	Thing raffstore ABBxxxxxxxx1_ch0001 [
				label				= "UVKGO, REG_B001_ABBxxxxxxxx1_ch0001",
				DeviceID			= "ABBxxxxxxxx1",
				ChannelId			= "ch0001",
				InputIdComplete		= "idp0000",
				InputIdStepwise		= "idp0001",
				InputIdPercentage	= "idp0002",
				OutputIdPercentage	= "odp0001"
			]
	Thing raffstore ABBxxxxxxxx1_ch0002 [
				label				= "UVKGO, REG_B001_ABBxxxxxxxx1_ch0002",
				DeviceID			= "ABBxxxxxxxx1",
				ChannelId			= "ch0002",
				InputIdComplete		= "idp0000",
				InputIdStepwise		= "idp0001",
				InputIdPercentage	= "idp0002",
				OutputIdPercentage	= "odp0001"
			]
	Thing raffstore ABBxxxxxxxx1_ch0003 [
				label				= "UVKGO, REG_B001_ABBxxxxxxxx1_ch0003",
				DeviceID			= "ABBxxxxxxxx1",
				ChannelId			= "ch0003",
				InputIdComplete		= "idp0000",
				InputIdStepwise		= "idp0001",
				InputIdPercentage	= "idp0002",
				OutputIdPercentage	= "odp0001"
			]
}

Items v1

Rollershutter	CH00000_preset		"..."	<...>	(...)	
	{channel="freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000:percentage", autoupdate="false"}
Dimmer			CH00000_custom		"..."	<...>	(...)	
	{channel="freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000:percentage", autoupdate="false"}

Items v2

Rollershutter	CH00000_preset		"..."	<...>	(...)	
	{channel="freeathome:raffstore:ABBxxxxxxxx1_ch0000:percentage", autoupdate="false"}
Dimmer			CH00000_custom		"..."	<...>	(...)	
	{channel="freeathome:raffstore:ABBxxxxxxxx1_ch0000:percentage", autoupdate="false"}

When I go to PaperUI -> Configuration -> Things then I see the Bridge, the Raffstore Switches and the linked items correctly.

I also tried different channels in item config, both of them did not produce an error in log but only “Item v1” worked with PaperUi as described above.

LOG-File after saving .things-File

[INFO ] [del.core.internal.ModelRepositoryImpl] - Refreshing model 'freeathome.things'
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:bridge:cyyyyyy9' changed from UNINITIALIZED to INITIALIZING
[INFO ] [thome.handler.FreeAtHomeBridgeHandler] - SysAP Info:2.4.0
[INFO ] [thome.handler.FreeAtHomeBridgeHandler] - Login: openhab      with the current jid: kk@busch-jaeger.de
[INFO ] [thome.handler.FreeAtHomeBridgeHandler] - Matching jid for login(openhab)      kk@busch-jaeger.de
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:bridge:cyyyyyy9' changed from INITIALIZING to ONLINE
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000' changed from UNINITIALIZED to INITIALIZING
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000' changed from INITIALIZING to ONLINE
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0001' changed from UNINITIALIZED to INITIALIZING
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0001' changed from INITIALIZING to ONLINE
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0002' changed from UNINITIALIZED to INITIALIZING
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0002' changed from INITIALIZING to ONLINE
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0003' changed from UNINITIALIZED to INITIALIZING
[INFO ] [ome.event.ThingStatusInfoChangedEvent] - 'freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0003' changed from INITIALIZING to ONLINE

For checking if the bridge is working or not I cleared the things-File and used PaperUI to add a thing/channel and this worked without changing anything on the items/sitemap - i do not added the bridge itself only the needed test-channel (ch0002).

Interestingly, both spellings of the item variants above work with these different channel configurations.

– Additional –

Is this possible? (It does not work and throws no error!)
{channel=“freeathome:bridge:cd4aaac9:status”}
How can PaperUI display the bridge ONLINE - I want this in my Sitemap, too :wink:

Strange. What binding version are you using btw? See you are putting config parameters for your bridge which no longer are applicable for the newer binding versions.

Getting your things ONLINE should indicate your setup is able to get communication via bridge (also as seen from logs). And as you say, when going to PaperUI you see your bridge and Things ONLINE, I would assume the Things also are listed as “Raffstore Switch”? IDPs/ODPs as set up for your things also seem correct, so you have all indications of correct bridge/thing setup.

Wrt your items, Items v2 (ref channel details) is the way channels/items are generated for me, using PaperUI discovery. Although, Items v1 should be correct based on OpenHab documentation, when using Thing files.

What I see though, is that you are using percentage for both Rollershutter channel and Dimmer channel, i.e. freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000:percentage

For me, I have:

  1. Rollershutter Stepwise:
    freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000:stepwise
  2. Rollserhutter Complete:
    freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000:complete
  3. Dimmer Percentage:
    freeathome:raffstore:cyyyyyy9:ABBxxxxxxxx1_ch0000:percentage

Uncertain about what/how you try to achieve with `{channel=“freeathome:bridge:cd4aaac9:status”}. The Bridge itself is not set up with any channels. In the binding code, the bridge is set ONLINE if a successful websocket connection is achieved. Not sure how this status would be retrieved to a Sitemap.

255 │ Active │ 80 │ 1.0.0.201906172005 │ FreeAtHome Binding

How does your items-file look like?

Anyone tested new Firmeware 2.5.0:

I am running the latest version, the 2.5.4 version from Post #251.

For me, having autodiscovered things, my items file for a screen actuator look like:

Rollershutter   SunscreenLivingroom_Stepwise     "Shutter stepwise"   {channel="freeathome:raffstore:ABB123456_ch0000:stepwise"}
Rollershutter   SunscreenLivingroom_Complete     "Shutter complete"   {channel="freeathome:raffstore:ABB123456_ch0000:complete"}
Dimmer          SunscreenLivingroomStue_Percentage   "Percentage"       {channel="freeathome:raffstore:ABB123456_ch0000:percentage"}

I just did an upgrade to 2.5.0 firmware version, using the latest 2.5.4 binding version, and everything seems to work as before.

1 Like

firmware 2.5.0 is working fine here, too.

1 Like

Could someone please tell me whether it is even possible to create things manually in the things file or whether it is only possible via autodiscover in Paper UI?
I read that there are bindings that can only do this via autodiscover.
I cannot find any references to this in the readmes for the bindings.

I tried to connect my bridge with firmware 2.5.0 and the latest snapshot of the add-on (org.openhab.binding.freeathome-2.5.4-SNAPSHOT.jar).
The connection is not working, the log shows this error:

2020-04-15 23:17:18.572 [INFO ] [rnal.handler.FreeAtHomeBridgeHandler] - Connecting to XMPP Client
2020-04-15 23:17:18.574 [WARN ] [ent.WebSocketConnectionConfiguration] - Websocket session being created: ws://192.168.178.201:5280/xmpp-websocket/
2020-04-15 23:17:18.599 [WARN ] [ent.WebSocketConnectionConfiguration] - Handshake response received from server
2020-04-15 23:17:18.600 [WARN ] [ent.WebSocketConnectionConfiguration] - Handshake succeded: Sec-Websocket-Protocol = XMPP
2020-04-15 23:17:28.586 [WARN ] [rnal.handler.FreeAtHomeBridgeHandler] - Problems connecting to SysAp:
rocks.xmpp.core.XmppException: javax.websocket.SessionException: CloseReason[1006,Closed abnormally.]
	at rocks.xmpp.core.session.XmppSession.throwAsXmppExceptionIfNotNull(XmppSession.java:280) ~[xmpp-core-client-0.9.0-SNAPSHOT.jar:?]
	at rocks.xmpp.core.session.XmppClient.connect(XmppClient.java:225) ~[xmpp-core-client-0.9.0-SNAPSHOT.jar:?]
	at org.openhab.binding.freeathome.internal.handler.FreeAtHomeBridgeHandler.connectGateway(FreeAtHomeBridgeHandler.java:233) [bundleFile:?]
	at org.openhab.binding.freeathome.internal.handler.FreeAtHomeBridgeHandler.initialize(FreeAtHomeBridgeHandler.java:114) [bundleFile:?]
	at org.eclipse.smarthome.core.thing.binding.BaseThingHandler.thingUpdated(BaseThingHandler.java:166) [bundleFile:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_212]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_212]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_212]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_212]
	at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:152) [bundleFile:?]
	at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:52) [bundleFile:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_212]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_212]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_212]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
Caused by: javax.websocket.SessionException: CloseReason[1006,Closed abnormally.]
	at rocks.xmpp.websocket.net.client.WebSocketConnectionConfiguration$2.onClose(WebSocketConnectionConfiguration.java:271) ~[?:?]
	at org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1235) ~[?:?]
	at org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:106) ~[?:?]
	at org.glassfish.tyrus.core.ProtocolHandler.close(ProtocolHandler.java:445) ~[?:?]
	at org.glassfish.tyrus.core.TyrusWebSocket.close(TyrusWebSocket.java:240) ~[?:?]
	at org.glassfish.tyrus.client.TyrusClientEngine$2$1.close(TyrusClientEngine.java:612) ~[?:?]
	at org.glassfish.tyrus.container.jdk.client.ClientFilter.processConnectionClosed(ClientFilter.java:218) ~[?:?]
	at org.glassfish.tyrus.container.jdk.client.Filter.onConnectionClosed(Filter.java:124) ~[?:?]
	at org.glassfish.tyrus.container.jdk.client.Filter.onConnectionClosed(Filter.java:128) ~[?:?]
	at org.glassfish.tyrus.container.jdk.client.TransportFilter$4.completed(TransportFilter.java:276) ~[?:?]
	at org.glassfish.tyrus.container.jdk.client.TransportFilter$4.completed(TransportFilter.java:266) ~[?:?]
	at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126) ~[?:1.8.0_212]
	at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:430) ~[?:1.8.0_212]
	at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191) ~[?:1.8.0_212]
	at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) ~[?:1.8.0_212]
	at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293) ~[?:1.8.0_212]
	at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[?:1.8.0_212]
	... 3 more
	Suppressed: java.lang.IllegalStateException: The connection has been closed.
		at org.glassfish.tyrus.core.TyrusSession.checkConnectionState(TyrusSession.java:507) ~[?:?]
		at org.glassfish.tyrus.core.TyrusSession.getAsyncRemote(TyrusSession.java:183) ~[?:?]
		at rocks.xmpp.websocket.net.WebSocketConnection.write(WebSocketConnection.java:129) ~[?:?]
		at rocks.xmpp.websocket.net.client.WebSocketClientConnection.send(WebSocketClientConnection.java:129) ~[?:?]
		at rocks.xmpp.websocket.net.WebSocketConnection.closeStream(WebSocketConnection.java:100) ~[?:?]
		at rocks.xmpp.core.net.AbstractConnection.closeAsync(AbstractConnection.java:111) ~[?:?]
		at rocks.xmpp.core.net.AbstractConnection.close(AbstractConnection.java:136) ~[?:?]
		at rocks.xmpp.core.session.XmppSession.closeAndNullifyConnection(XmppSession.java:1332) ~[?:?]
		at rocks.xmpp.core.session.XmppSession.notifyException(XmppSession.java:1356) ~[?:?]
		at rocks.xmpp.websocket.net.client.WebSocketClientConnection.lambda$new$2(WebSocketClientConnection.java:118) ~[?:?]
		at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760) ~[?:1.8.0_212]
		at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736) ~[?:1.8.0_212]
		at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474) ~[?:1.8.0_212]
		at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1977) ~[?:1.8.0_212]
		at rocks.xmpp.websocket.net.client.WebSocketConnectionConfiguration$2.onClose(WebSocketConnectionConfiguration.java:271) ~[?:?]
		at org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1235) ~[?:?]
		at org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:106) ~[?:?]
		at org.glassfish.tyrus.core.ProtocolHandler.close(ProtocolHandler.java:445) ~[?:?]
		at org.glassfish.tyrus.core.TyrusWebSocket.close(TyrusWebSocket.java:240) ~[?:?]
		at org.glassfish.tyrus.client.TyrusClientEngine$2$1.close(TyrusClientEngine.java:612) ~[?:?]
		at org.glassfish.tyrus.container.jdk.client.ClientFilter.processConnectionClosed(ClientFilter.java:218) ~[?:?]
		at org.glassfish.tyrus.container.jdk.client.Filter.onConnectionClosed(Filter.java:124) ~[?:?]
		at org.glassfish.tyrus.container.jdk.client.Filter.onConnectionClosed(Filter.java:128) ~[?:?]
		at org.glassfish.tyrus.container.jdk.client.TransportFilter$4.completed(TransportFilter.java:276) ~[?:?]
		at org.glassfish.tyrus.container.jdk.client.TransportFilter$4.completed(TransportFilter.java:266) ~[?:?]
		at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126) ~[?:1.8.0_212]
		at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:430) ~[?:1.8.0_212]
		at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191) ~[?:1.8.0_212]
		at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) ~[?:1.8.0_212]
		at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293) ~[?:1.8.0_212]
		at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[?:1.8.0_212]
		at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_212]
		at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_212]
		at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]

I have not a JAVA developer, so the stacktrace is not helpful for me :wink:
Anyone with an idea?