I try to send a current time information into my KNX bus periodically. Therefore I setup a rule which fires periodically but my attempt to call “sendCommand()” fails… :-/
Platform information:
Hardware:Raspberry Pi 3 B+
OS: openhabian
openHAB version: openHAB 2.4.0-1 (Release Build)
Issue of the topic:
My rule is fired as expected but the execution fails because the thing I want to fire the command on cannot be found.
Please post configurations (if applicable):
Items configuration related to the issue
Thing device knx_virtual "knx-virtual" {
Type datetime-control : time "knx_virtual_time" [ ga="10.001:8/2/0" ]
}
Rules code related to the issue
rule "Send time to KNX bus"
when
Time cron "4 0/1 * ? * * *"
then
knx_virtual_time.sendCommand(23)
end
If logs where generated please post these here using code fences:
[ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Send time to KNX bus': The name 'knx_virtual_time' cannot be resolved to an item or type; line 5, column 3, length 16
I can’t see why the system complains… please open my eyes!
thanks for your advice! I’m at that point where I’ve read and used the documentation (the KNX binding in special) for many times successfully. I’m unable to see where I missed something.
I’ll try to get more specific with my question:
The error message complains about “knx_virtual_time” because I referenced it with the rules ‘then’ code block.
I tried different namings for the reference all built from the words of the thing description:
knx_virtual:time failed due to parse error when reading the rule file (because of character ‘:’).
knx_virtual same error message as above
knx-virtual fails
knx_virtual_time fails
…you name it…
Nothing worked so far.
Could you please give me a sample description that would make my code work?
Thing device knx_virtual "knx-virtual" {
Type datetime-control : time "knx_virtual_time" [ ga="10.001:8/2/0" ]
}
This is a channel. Please be aware that the channel is named time, not knx_virtual_time.
You have to link the channel to an item for using it in a rule.
As it’s to send time to knx: Please take a look at his:
// Time and Date
Thing ntp:ntp:home "Lokale Zeit" [hostname="0.pool.ntp.org",refresh=120, refreshNtp=30, locale="de_DE", timeZone="Europe/Berlin"]
// knx
Bridge knx:ip:bridge "Weinzierl 730 IP" [
ipAddress="192.168.178.150",
type="TUNNEL"
] {
Thing device Virtuell "virtuelle" @ "KNX" [
] {
Type datetime-control : wochenzeit "Zeit und Tag" [ ga="10.001:15/7/10" ]
}
}
DateTime Buszeit "Zeit und Tag" { channel="knx:device:bridge:Virtuell:wochenzeit", channel="ntp:ntp:home:dateTime" }
No rule, the above configuration is sufficient to update the bus time for knx
That was my fault, I weren’t able get that in the late evening. o_0
Absolute! I just wrote it that way to show how many variants I tried…
I had and it looks promising good! So I tried it out. Unfortunately some questions came up that I wasn’t able to answer myself:
Just to be sure, this is code from the *.things file, isn’t it?
The Thing ntp:ntp:home [...] resides in the “root” of the file?
The Thing device Virtuell "virtuelle" @ "KNX" [...] is part of my Bridge knx:ip:bridge [...]?
This goes to a *.items file, correct?
At least I did it that way with no success. When I save the files the log shows changes detection indications. While the system is running I cannot see any KNX telegrams on the KNX bus which I trace using ETS Pro version nor any log entries which indicate the new cofiguration is working properly.
Any ideas? About that? Are you running the config shown on openHAB 2.4?
It doesn’t matter where you put the thing definition in, e.g. I have different *.things files for that, one knx.things for all knx devices, one mqtt.things for all mqtt devices, a my.things file for all that stuff which is configured in one or two lines (as ntp), that’s up to you. The file name doesn’t matter as long as it ends with .things and is stored in ./things/
You have to setup the correct group address in the channel, and you have to install the ntp binding in addition to knx, obviously.
Correct
Please take care about the channel, as it depends on your bridge, thing and channel definition. That’s why I posted my bridge…
As you are using files to define things, please be aware that (especially when changing things) you maybe have to restart the corresponding bundle, i.e. typing on the karaf console:
openhab> bundle:restart org.openhab.binding.knx
or simply restart openHAB completely (which takes ages compared to bundle:restart).
Yes, you made my day! Installing the NTP binding that was missing before did the trick. It works like a charm now, the bus is updated with a time stamp once in a while so all the display devices show the corret time now. (Without that they run out of sync after a month…)
Would you please add a hint to install NTP binding in addition to your posting so all the other folks that come here will find a complete solution.
Again: Thank you so much! That was a pretty good advice.