KNX 2.0 Binding -> Problem with Data Point Type "Number"

Hi!

I am figuring out how to integrate KNX to my OH2 environment right now and i am already able to trigger switches in both directions and displaying date/time from OH.
I do have some struggles with a Number item right now.

What i want to achieve:
Send a 1 or 2 with data point type 18.001 (Scene control).
Basically i want to create a scene that triggers a pre-defined color on my RGBW stripe.
Due to the fact that it’s not possible to send a color item via KNX i created scenes in my dimmer actor with the desired RGBW config that i want to trigger now.

I am able to do so via the group monitor (Send a 1 or 2 for the desired scene).
i created a sitemap to test if my OH setup sends the 1 or 2 and i am monitoring this with the group monitor.

unfortunately the data is sent as 9.*2-Byte Float. (I guess that’s standard for a number item?)
when i trigger with DPT 18.001 directly from the group monitor it works.

My config files:

items:

Number        WoZi_Nummer_Szene_LED             "LED Szene"                                                         { channel="knx:device:bridge:generic:WoZi_Nummer_Szene_LED" }

things:

        Type number                         :   WoZi_Nummer_Szene_LED               "LED Controller Szene"          [ ga="18.001:<1/3/10" ]

the group monitor screenshot (working while sending 1 and 2 directly from the monitor), not working at the bottom, sent via sitemap:

i tried deleting 18.001:< and also 18:001: but that did not work for me.
I also tried number-control in the things config but that was not working either.

I don’t get the difference to be honest. The readme says:

Control Channel Types

In contrast to the standard channels above, the control channel types are used for cases where the KNX bus does not own the physical state of a device. This could be the case if e.g. a lamp from another binding should be controlled by a KNX wall switch.

i tried it with the switches i set up and it works, no matter if i use switch or switch-control.
is there any benefit using the one or the other? when would i use switch instead of switch-control?
if the sensor and the actor are both physical devices in my system?

Do you really need to set the scene? If not, please try DPT 17.001 which is only to recall an existing scene.

1 Like

Thanks for the answer, Udo!

Unfortunately it does not work either. I came up witt DPT 18.001 because i took a look to the parameters provided by the led controller in the ets5 and then i searched the same telegram in the group monitor which is 18.001. If i send it via the group monitor everything works …
I have no clue, why the monitor does not read the telegram from OH2 with the correct DPT …
Is my thing config correct in your eyes?

Thank you!

17.001 and 18.001 are the same, except that 18.001 will allow to set the MSB to 1, where 17.001 will not.

As I’m using 17.001 with success (well, kind of) I wonder if this will work for you.

ATM openHAB always complains about wrong number format. 17.001 (as well as 18.001) is integer, and openHAB tries to store float. But although there is a warning, the command gets executed and the item is updated successfully.

1 Like

i tried 17 and 18 in the thing config.
both time i did not get the desired result.
18 was working directly in the bus monitor. i will try 17 via bus monitor when i am out of hospital.
the screenshot i posted above is from the ets5 log not from OH2 so i dont know if OH complains about wrong number format. but the ets oviously does :slight_smile:

I guess i am using numbers wrong with the knx binding …
Could you please post an example of your number things and items so i can see if mine are similar?
I tried to post humidity to dpt 9.007 to a KNX Status-Value but it does not work either …
Thank you

Hi!

It is working now and i don’t know why … :wink:
But i can not read the current scene (if i change it via knx ets5 monitor the OH number item won’t update).
Is a status item required for this? The controller does not provide a status item for the scene.
Or is there another way?

I can read the scene item (output) via the group monitor.

Maybe it’s working now because i copied the thing config from the tutorial:

Thing device generic [
    address="1.2.3",
    fetch=true,
    pingInterval=300,
    readInterval=3600

What is that adress for? do i have to take care that there is no physical device adress 1.2.3? It was working without that config as well …

Thank you!

Which device should answer to the read request?
In fact, there is no device which shall hold the state of scene, as “scene” is (most commonly) a write only GA.

If calling a scene, some devices will change their state. Now, if changing the state of one of these devices, there will be no change to the scene, although the scene is not longer valid…

1 Like

That’s the question :wink:
I don’t know what to expect from the read request.

I actually don’t need the scene, i am just playing around.
Now what i really need is the state of a switch.
I created 2 GA’s (1/3/7 and 1/3/8).
With that Switch i want to activate scenes of the LED controller and turn on my Hue lamps which are already configured in OH2. I created switch items and they are triggered in OH (validated that with the rest api).
But: The GA of the status does not change what results in the LED fo my KNX pushbutton is not turned ON/OFF.
Maybe there is a problem with my IP interface (IPS 200 REG).

Here’s what the log says:

2018-10-29 19:12:36.330 [WARN ] [calimero.link.192.168.178.40:3671   ] - negative confirmation of 1.2.3: 2e00b160110e12030081
2018-10-29 19:12:56.679 [WARN ] [nx.internal.client.AbstractKNXClient] - Giving up reading datapoint 1/3/8, the number of maximum retries (3) is reached.```

How did you configure the switch?

I doubt there is a real problem with your IP interface.

1 Like

I don’t think there is a real problem either because i can send commands. Just reading seems to be a problem …

and here the things file:

Bridge knx:ip:bridge [ 
    ipAddress="192.168.178.40", 
    portNumber=3671, 
    localIp="192.168.178.11", 
    type="TUNNEL", 
    readingPause=50, 
    responseTimeout=10, 
    readRetriesLimit=3, 
    autoReconnectPeriod=1,
    localSourceAddr="0.0.0"
    //useNAT=true
]
{
     Thing device generic [
        address="1.1.255",   //Issue with that one … i don't know what this adress is for. 
        fetch=true,
        pingInterval=300,
        readInterval=3600
    ] {

Don’t use an address for a generic thing! There is no address, so don’t set an address at all. You can’t fetch data for a non existent hardware either, so no fetch=true an no pingInterval :slight_smile:
The only parameter for a generic thing would be readInterval, but even this parameter should only be set if necessary.

Please don’t set parameters to the bridge either, if not absolutely needed (autoReconnectPeriod should be at least longer than responseTimeout, but you don’t need to set these parameters)

But you did not write down the switch… :wink:

1 Like

Sorry. Forgot that.
Here’s the switch (thing)

  Type switch                         :   WoZi_Schalter_Weiss                 "Wohnzimmer Weiß"               [ ga="1/3/7+<1/3/8" ]

and item

Switch          WoZi_Schalter_Weiss               "Weiß aktivieren im Wohnzimmer"                                                   { channel="knx:device:bridge:generic:WoZi_Schalter_Weiss" }

as well as the KNX GA’s:


Seems to me you don’t have an knx actuator. Please use switch-control instead:

Type switch-control : WoZi_Schalter_Weiss "Wohnzimmer Weiß" [ ga="1/3/7+<1/3/8" ]
1 Like

Hello,

yes that’s true. i Just want to trigger a rule with that button.
Unfortunately it does not change the state in the ETS although i used a status group.
What i want:
First push > OH Item true (works)
Second push > OH Item false (works).
and the status being displayed (light on/light off) at the glass-sensor-display.
That does not work and I can’t figure out, why it does not.

I also tried switch-control but it still does not update the logo.

Any other ideas?
Thank you!

Ah! Yes, of course you have to switch the GA:

Type switch-control : WoZi_Schalter_Weiss "Wohnzimmer Weiß" [ ga="1/3/8+1/3/7" ]

This way openHAB will get the Command through 1/3/7 but will send its Status to 1/3/8

1 Like

Hello

thank you! Finally it works.
I added an actuator for test purpose and it works with my code posted before.

If i want to use switch-control i have to switch the group adress. I tried that too and it worked.
I just want to understand why, now.

The docs say the main adress has to stand in front of the status group adress.
Could you explain, why it has to be inverted, when using a switch-control?

And a final question regarding the “<” - sign:
Could you give an example on how you use it?
The docs say if that sign is set the knx bus is able to read the status, right?
I try figuring out how parameters can be read after a power failure …

But maybe it doesn’t matter because the boot time of my server will be higher, so i should send the command after booting …

Thank you so much for your support. With your help I really made some progress now :wink:

The main GA is the one, which openHAB will use to send messages. It’s like knx configuration. If you are adding more than one GA to a communication object, the device will always only send its messages to the first GA.
Additional GA are always “read only” (more precisely “receive only”), the openHAB knx1/knx2 binding does it the same way.

No, it’s the other way :slight_smile:
openHAB will try to read the GA with a <.
Given a knx switch actuator with GA 1/1/0 for “set switch ON/OFF” and GA 1/1/1 for feedback (and the R-Flag set for this communication object), you would define the channel like this:

Type switch : channel1 "My Switch" { ga="1/1/0+<1/1/1" }

When starting up, openHAB will send a read request to GA 1/1/1 and hopefully the actuator will answer this request within period of responseTimeout.
openHAB will try to get the actual state up to readRetriesLimit times.
If not successfully, openHAB will then give up and leave the channel at status NULL.
If, however, the actuator does send a status, openHAB will immediately update the status accordingly.

In most scenarios, there is absolutely no need to use restoreOnStartup through a persistence service or even autoupdate="true" (i.e.: simply set every knx item to autoupdate="false") for any knx item.

1 Like

Again, thanks a lot :slight_smile:
I hope i can contribute by helping the community nearly as much as you do one day :wink:

Is this still supposed to work?
In general my knx-binding ( on OH 2.4) is working fine, but I can´t get this OH controlled things/items to work.
I use a groupaddress 0/0/6 for sending changes and 0/1/6 for the status.
No device on the bus holds the state.
I want OH to hold the (binary) state.
OH should listen on 0/0/6 for changes coming from KNX.
OH should send state changes to 0/1/6 (regardless if KNX or OH changed the state)
OH should answer read-requests on 0/1/6 from KNX.
OH should not answer to read-requests on 0/0/6 from KNX.

I have defined the thing:

Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="0/1/6+0/0/6" ]

I also tried:

Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="1.001:0/1/6+0/0/6" ]
Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="0/0/6+0/1/6" ]
Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="1.001:0/0/6+0/1/6" ]
Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="0/1/6+<0/0/6" ]
Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="0/0/6+<0/1/6" ]
Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="1.001:0/0/6+<0/1/6" ]
Type switch-control : zentralfunktionen_szenarien_szene_esszimmer_fernsehen "switch" [ ga="1.001:0/1/6+<0/0/6" ]

OH does not react on any changes happening on the bus. no log entries in OH KNX-log.
if I change the value in the OH-console like:

smarthome:update zentralfunktionen_szenarien_szene_esszimmer_fernsehen OFF

I get this log entry, but no messages on the bus.

2019-09-19 09:56:09.574 [TRACE] [nal.handler.DeviceThingHandler] - Handling command 'OFF' for channel 'knx:device:bridge:generic:zentralfunktionen_szenarien_szene_esszimmer_fernsehen'
2019-09-19 09:56:09.575 [TRACE] [nternal.channel.KNXChannelType] - getCommandSpec testing Keys '[ga]' for command 'OFF'
2019-09-19 09:56:09.576 [TRACE] [nternal.channel.KNXChannelType] - getCommandSpec key 'ga' uses expectedTypeClass 'class org.eclipse.smarthome.core.library.types.OnOffType' witch isInstance for command 'OFF' and dpt '1.001'
2019-09-19 09:56:09.576 [TRACE] [ernal.client.AbstractKNXClient] - writeToKNX groupAddress '0/1/6', commandSpec 'org.openhab.binding.knx.internal.channel.WriteSpecImpl@53890c48'
2019-09-19 09:56:09.576 [TRACE] [ernal.client.AbstractKNXClient] - sendToKNX mappedValue: 'off' groupAddress: '0/1/6'
2019-09-19 09:56:09.582 [DEBUG] [ernal.client.AbstractKNXClient] - Wrote value 'OFF' to datapoint 'command DP 0/1/6 'knx:ip:bridge', DPT id 1.001, low priority' (0. attempt).
2019-09-19 09:56:09.582 [TRACE] [nal.handler.DeviceThingHandler] - rememberRespondingSpec handled commandSpec for '0/1/6' size '6' added 'true'

After spending several hours on this I´m a bit desperate already.
I´m happy for any hints.
thx