mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-26 10:34:52 +00:00
10_KNX.pm: moved KNX_scan function to KNXIO module, (Forum #122582)
git-svn-id: https://svn.fhem.de/fhem/trunk@27678 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
a6fb574388
commit
e85adff7a2
@ -1,5 +1,8 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- change: 10_KNX: moved KNX_scan function to KNXIO-module, see Forum #122582
|
||||
- change: 00_KNXIO: update KNX and KNXIO-module at same time!, Forum #127792
|
||||
added new Attr. enableKNXscan, see cmd-ref
|
||||
- change: 74_AutomowerConnect: Common.pm, automowerconnect.js
|
||||
improved disabled handling, reworked use only differential data
|
||||
- feature: OpenWeatherMapAPI: add human-readable text of daily forecast
|
||||
|
@ -138,6 +138,9 @@
|
||||
# cmd-ref: correct wiki links, W3C conformance...
|
||||
# error-msg on invalid set dpt1 cmd (on-till...)
|
||||
# Attr anwerReading now deprecated - converted to putCmd - autosave will be deactivated during fhem-restart if a answerReading is converted - use save!
|
||||
# MH 292306xx move KNX_scan Function to KNXIO-Module - update both KNXIO and KNX-Module !!!
|
||||
# update cmd-ref
|
||||
#
|
||||
# todo replace cascading if..elsif with given
|
||||
# todo-9/2023 final removal of attr answerReading conversion
|
||||
|
||||
@ -455,9 +458,6 @@ sub Initialize {
|
||||
$hash->{noAutocreatedFilelog} = 1; # autocreate devices create no FileLog
|
||||
$hash->{AutoCreate} = {'KNX_.*' => { ATTR => 'disable:1'} }; #autocreate devices are disabled by default
|
||||
|
||||
# register KNX_scan cmd (use from cmd-line)
|
||||
$cmds{KNX_scan} = { Fn => "KNX_scancmd", Hlp => '<devspec>,request values from KNX-Hardware. Use "help KNX" for more help',};
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -482,11 +482,11 @@ sub KNX_Define {
|
||||
q{[<group:model[:GAD-name][:set|get|listenonly][:nosuffix]>]"}) if (int(@a) < 3 || $a[2] !~ m/^(?:$PAT_GAD|$PAT_GAD_HEX)/ixms);
|
||||
|
||||
$hash->{'.DEFLINE'} = join(q{ },@a); # temp store defs for define2...
|
||||
return InternalTimer(gettimeofday() + 5.0,\&KNX_Define2,$hash) if (! $init_done);
|
||||
return InternalTimer(gettimeofday() + 3.0,\&KNX_Define2,$hash) if (! $init_done);
|
||||
return KNX_Define2($hash);
|
||||
}
|
||||
|
||||
### continue define 5 sec after init complete!
|
||||
### continue define after init complete
|
||||
sub KNX_Define2 {
|
||||
my $hash = shift // return;
|
||||
|
||||
@ -692,7 +692,7 @@ sub KNX_Get {
|
||||
return;
|
||||
}
|
||||
|
||||
#Does something according the given cmd...
|
||||
#send Value to bus
|
||||
#############################
|
||||
sub KNX_Set {
|
||||
my ($hash, $name, $targetGadName, @arg) = @_;
|
||||
@ -1864,79 +1864,6 @@ sub KNX_Log {
|
||||
return;
|
||||
}
|
||||
|
||||
##############################################
|
||||
########## public utility functions ##########
|
||||
# when called from FHEM cmd-line
|
||||
sub main::KNX_scancmd {
|
||||
my $cl = shift;
|
||||
my $devs = shift;
|
||||
$devs = 'TYPE=KNX' if (! defined($devs) || $devs eq q{}); # select all if nothing defined
|
||||
# return main::KNX_scan($devs);
|
||||
main::KNX_scan($devs);
|
||||
return;
|
||||
}
|
||||
|
||||
### get state of devices from KNX_Hardware
|
||||
# called with devspec as argument
|
||||
# e.g : KNX_scan() / KNX_scan('device1') / KNX_scan('device1, dev2,dev3,...' / KNX_scan('room=Kueche'), ...
|
||||
# returns number of "gets" executed
|
||||
sub main::KNX_scan {
|
||||
my $devs = shift // 'TYPE=KNX'; # select all if nothing defined
|
||||
|
||||
if (! $init_done) { # avoid scan before init complete
|
||||
Log3 (undef, 2,'KNX_scan command rejected during FHEM-startup!');
|
||||
return 0;
|
||||
}
|
||||
|
||||
my @devlist = devspec2array($devs);
|
||||
|
||||
my $i = 0; #counter devices
|
||||
my $j = 0; #counter devices with get
|
||||
my $k = 0; #counter total get's
|
||||
my $getsarr = q{};
|
||||
|
||||
foreach my $knxdef (@devlist) {
|
||||
next unless $knxdef;
|
||||
next if($knxdef eq $devs && !$defs{$knxdef});
|
||||
my $devhash = $defs{$knxdef};
|
||||
next if ((! defined($devhash)) || ($devhash->{TYPE} ne 'KNX') || $devhash->{DEF} =~ /$MODELERR/ixms);
|
||||
|
||||
#check if IO-device is ready
|
||||
my $iodev = $devhash->{IODev}->{NAME};
|
||||
next if (! defined($iodev));
|
||||
my $iostate = ReadingsVal($iodev,'state',q{});
|
||||
next if ($iostate ne 'connected');
|
||||
|
||||
$i++;
|
||||
my $k0 = $k; #save previous number of get's
|
||||
foreach my $key (keys %{$devhash->{GADDETAILS}}) {
|
||||
last if (! defined($key));
|
||||
my $option = $devhash->{GADDETAILS}->{$key}->{OPTION};
|
||||
next if (defined($option) && $option =~ /(?:set|listenonly)/ixms);
|
||||
$k++;
|
||||
$getsarr .= $knxdef . q{ } . $key . q{,};
|
||||
}
|
||||
$j++ if ($k > $k0);
|
||||
}
|
||||
Log3 (undef, 3, qq{KNX_scan: $i devices selected (regex= $devs) / $j devices with get / $k "gets" executing...});
|
||||
doKNX_scan($getsarr) if ($k > 0);
|
||||
return $k;
|
||||
}
|
||||
|
||||
### issue all get cmd's - each one delayed by InternalTimer
|
||||
sub doKNX_scan {
|
||||
my ($devgad, $arr) = split(/,/xms,shift,2);
|
||||
|
||||
my ($name, $gadName) = split(/[\s]/xms,$devgad);
|
||||
KNX_Get ($defs{$name}, $name, $gadName);
|
||||
|
||||
if (defined($arr) && $arr ne q{}) {
|
||||
return InternalTimer(gettimeofday() + 0.2,\&doKNX_scan,$arr); # does not support array-> use string...
|
||||
}
|
||||
Log3 (undef, 3, q{KNX_scan: finished});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
@ -1993,95 +1920,110 @@ sub doKNX_scan {
|
||||
<a id="KNX"></a>
|
||||
<h3>KNX</h3>
|
||||
<ul><li><strong>Introduction</strong><br/>
|
||||
<p>KNX is a standard for building automation / home automation. It is mainly based on a twisted pair wiring, but also other mediums (ip, wireless) are specified.</p>
|
||||
<p>For getting started, please refer to this document: <a href="https://www.knx.org/knx-en/for-your-home/">KNX for your home</a> - knx.org web-site.</p>
|
||||
<p>While the <a href="#TUL">TUL-module</a>, <a href="#KNXTUL">KNXTUL-module</a>, or <a href="#KNXIO">KNXIO-module</a> represent the connection to the KNX network,
|
||||
<p>KNX is a standard for building automation / home automation. It is mainly based on a twisted pair wiring,
|
||||
but also other mediums (ip, wireless) are specified.</p>
|
||||
<p>For getting started, please refer to this document:
|
||||
<a href="https://www.knx.org/knx-en/for-your-home/">KNX for your home</a> - knx.org web-site.</p>
|
||||
<p>While the <a href="#TUL">TUL-module</a>, <a href="#KNXTUL">KNXTUL-module</a>,
|
||||
or <a href="#KNXIO">KNXIO-module</a> represent the connection to the KNX network,
|
||||
the KNX module represent a individual KNX device. <br/>
|
||||
This module provides a basic set of operations (on, off, toggle, on-until, on-for-timer) to switch on/off KNX devices and to send values to the bus. </p>
|
||||
<p>Sophisticated setups can be achieved by combining multiple KNX-groupaddresses:datapoints (GAD's:dpt's) in one KNX device instance.</p>
|
||||
<p>KNX defines a series of Datapoint Type as standard data types used to allow general interpretation of values of devices manufactured by different vendors.
|
||||
These datatypes are used to interpret the status of a device, so the readings in FHEM will show the correct value and optional unit.</p>
|
||||
This module provides a basic set of operations (on, off, toggle, on-until, on-for-timer) to switch on/off KNX
|
||||
devices and to send values to the bus. </p>
|
||||
<p>Sophisticated setups can be achieved by combining multiple KNX-groupaddresses:datapoints (GAD's:dpt's)
|
||||
in one KNX device instance.</p>
|
||||
<p>KNX defines a series of Datapoint Type as standard data types used to allow general interpretation of values
|
||||
of devices manufactured by different vendors.
|
||||
These datatypes are used to interpret the status of a device, so the readings in FHEM will show the
|
||||
correct value and optional unit.</p>
|
||||
<p>For each received telegram there will be a reading containing the received value and the sender address.<br/>
|
||||
For every set, there will be a reading containing the sent value.<br/>
|
||||
The reading <state> will be updated with the last sent or received value. </p>
|
||||
<p>A (german) wiki page is avaliable here: <a href="https://wiki.fhem.de/wiki/KNX">FHEM Wiki</a></p>
|
||||
<p>A (german) wiki page is avaliable here: <a href="https://wiki.fhem.de/wiki/KNX">FHEM Wiki</a></p>
|
||||
</li>
|
||||
|
||||
<li><a id="KNX-define"></a><strong>Define</strong><br/>
|
||||
<p><code>define <name> KNX <group>:<dpt>[:[<gadName>]:[set|get|listenonly]:[nosuffix]] [<group>:<dpt> ..] <del>[IODev]</del></code></p>
|
||||
<p><strong>Important: a KNX device needs at least one valid DPT.</strong> Please refer to <a href="#KNX-dpt">avaliable DPT</a>.
|
||||
<p><code>define <name> KNX <group>:<dpt>[:[<gadName>]:[set|get|listenonly]:[nosuffix]] [<group>:<dpt> ..] <del>[IODev]</del></code></p>
|
||||
<p><strong>Important: a KNX device needs at least one valid DPT.</strong> Please refer to <a href="#KNX-dpt">avaliable DPT</a>.
|
||||
Otherwise the system cannot en- or decode messages.<br/>
|
||||
<strong>Devices defined by autocreate have to be reworked with the suitable dpt and the disable attribute deleted. Otherwise they won't do anything.</strong></p>
|
||||
|
||||
<p>The <group> parameter is either a group name notation (0-31/0-7/0-255) or the hex representation of it ([00-1f][0-7][00-ff]) (5 digits).
|
||||
All of the defined groups can be used for bus-communication.
|
||||
It is not allowed to have the same group-address more then once in one device. You can have multiple devices containing the same group-adresses.<br />
|
||||
As described above the parameter <DPT> must contain the corresponding DPT - matching the dpt-spec of the KNX-Hardware.</p>
|
||||
<p>The GAD's are per default named with "g<number>". The corresponding reading-names are getG<number> and setG<number>.<br />
|
||||
The optional parameteter <gadName> may contain an alias for the GAD. The following gadNames are <b>not allowed:</b> on, off, on-for-timer,
|
||||
on-until, off-for-timer, off-until, toggle, raw, rgb, string, value, set, get, listenonly, nosuffix - because of conflict with cmds & parameters.<br />
|
||||
<strong>Devices defined by autocreate have to be reworked with the suitable dpt and the disable attribute deleted.
|
||||
Otherwise they won't do anything.</strong></p>
|
||||
<p>The <group> parameter is either a group name notation (0-31/0-7/0-255) or the hex representation of it
|
||||
([00-1f][0-7][00-ff]) (5 digits). All of the defined groups can be used for bus-communication.
|
||||
It is not allowed to have the same group-address more then once in one device. You can have multiple devices containing
|
||||
the same group-adresses.<br/>
|
||||
As described above the parameter <dpt> has to contain the corresponding DPT - matching the dpt-spec of the KNX-Hardware.</p>
|
||||
<p>The gadNames are default named "g<number>". The corresponding reading-names are getG<number>
|
||||
and setG<number>.<br/>
|
||||
The optional parameteter <gadName> may contain an alias for the GAD. The following gadNames are <b>not allowed:</b>
|
||||
on, off, on-for-timer, on-until, off-for-timer, off-until, toggle, raw, rgb, string, value, set, get, listenonly, nosuffix
|
||||
- because of conflict with cmds & parameters.<br/>
|
||||
If you supply <gadName> this name is used instead. The readings are <gadName>-get and <gadName>-set.
|
||||
The synonyms <getName> and <setName> are used in this documentation.<br/>
|
||||
If you add the option "nosuffix", <getName> and <setName> have the identical name - only <gadName>.<br/>
|
||||
If you want to restrict the GAD, you can use the options "get", "set", or "listenonly". The usage should be self-explanatory. It is not possible to combine the options.</p>
|
||||
<p><b>Specifying an IO-Device in define is now deprecated!</b> Use attribute <a href="#KNX-attr-IODev">IODev</a> instead, but only if absolutely required!</p>
|
||||
<p>The first group is used for sending by default. If you want to send to a different group, you have to address it. E.g: <code>set <name> <gadName> <value> </code>
|
||||
If you want to restrict the GAD, you can use the options "get", "set", or "listenonly". The usage should be self-explanatory.
|
||||
It is not possible to combine the options.</p>
|
||||
<p><b>Specifying an IO-Device in define is now deprecated!</b> Use attribute <a href="#KNX-attr-IODev">IODev</a> instead,
|
||||
but only if absolutely required!</p>
|
||||
<p>The first group is used for sending by default. If you want to send to a different group, you have to address it.
|
||||
E.g: <code>set <name> <gadName> <value> </code>
|
||||
Without additional attributes, all incoming and outgoing messages are in addition copied into reading <state>.</p>
|
||||
<p>If enabled, the module <a href="#autocreate">autocreate</a> is creating a new definition for any unknown group-address. However, the new device will be disabled
|
||||
until you added a DPT to the definition and delete the <a href="#KNX-attr-disable">disable</a> attribute. The device name will be KNX_nnmmooo where nn is the line adress, mm the area and ooo the device.
|
||||
No FileLog or SVG definition is created for KNX-devices by autocreate. Use for example <code>define <name> FileLog <filename> KNX_.*</code>
|
||||
to create a single FileLog-definition for all KNX-devices created by autocreate.<br />
|
||||
Another option is to disable autocreate for KNX-devices in production environments (when no changes / additions are expected) by using:
|
||||
<code>attr <autocreate> ignoreTypes KNX_.*</code><br/>
|
||||
Examples:</p>
|
||||
<p>If enabled, the module <a href="#autocreate">autocreate</a> is creating a new definition for any unknown group-address.
|
||||
However, the new device will be disabled until you added a DPT to the definition and delete the
|
||||
<a href="#KNX-attr-disable">disable</a> attribute. The device name will be KNX_nnmmooo where nn is the line adress,
|
||||
mm the area and ooo the device.
|
||||
No FileLog or SVG definition is created for KNX-devices by autocreate. Use for example
|
||||
<code>define <name> FileLog <filename> KNX_.*</code> to create a single FileLog-definition for all KNX-devices
|
||||
created by autocreate.<br/>
|
||||
Another option is to disable autocreate for KNX-devices in production environments (when no changes / additions are expected)
|
||||
by using:<br/>
|
||||
<code>attr <autocreate> ignoreTypes KNX_.*</code></p>
|
||||
<pre>
|
||||
<code> define lamp1 KNX 0/10/11:dpt1</code>
|
||||
<code> attr lamp1 webCmd on:off</code>
|
||||
<code> attr lamp1 devStateIcon on:li_wht_on:off off:li_wht_off:on</code>
|
||||
<code> </code>
|
||||
<code> define lamp2 KNX 0/10/12:dpt1:steuern:set 0/10/13:dpt1.001:status:listenonly</code>
|
||||
<code> </code>
|
||||
<code> define lamp3 KNX 00A0D:dpt1.001</code>
|
||||
</pre>
|
||||
Examples:
|
||||
<code> define lamp1 KNX 0/10/11:dpt1
|
||||
attr lamp1 webCmd on:off
|
||||
attr lamp1 devStateIcon on:li_wht_on:off off:li_wht_off:on
|
||||
|
||||
define lamp2 KNX 0/10/12:dpt1:steuern:set 0/10/13:dpt1.001:status:listenonly
|
||||
|
||||
define lamp3 KNX 00A0D:dpt1.001
|
||||
</code></pre>
|
||||
</li>
|
||||
|
||||
<li><a id="KNX-set"></a><strong>Set</strong><br/>
|
||||
<p><code>set <deviceName> [<gadName>] <on|off|toggle><br/>
|
||||
set <deviceName> [<gadName>] <on-for-timer|off-for-timer> <on/off time in seconds><br />
|
||||
set <deviceName> [<gadName>] <on-for-timer|off-for-timer> <duration seconds><br/>
|
||||
set <deviceName> [<gadName>] <on-until|off-until> <timespec><br/>
|
||||
set <deviceName> [<gadName>] <value><br/></code></p>
|
||||
<p>Set sends the given value to the bus.<br/> If <gadName> is omitted, the first listed GAD of the device is used.
|
||||
If the GAD is restricted in the definition with "get" or "listenonly", the set-command will be refused.<br/>
|
||||
For dpt1 and dpt1.001 valid values are on, off, toggle and blink. Also the timer-functions can be used.
|
||||
A running Timer-function will be canncelled if a new set cmd (on,off,on-for-,....) for this GAD is issued.
|
||||
For all other DPT (dpt1.xxx) the min- and max-values can be used for en- and decoding alternatively to on/off.
|
||||
All other DPTs: allowed values or range of values are spedicified here: <a href="#KNX-dpt">KNX-dpt</a><br/>
|
||||
After successful sending the value, it is stored in the readings <setName> and state.<br/>
|
||||
|
||||
<a id="KNX-examples"></a>
|
||||
Examples:</p>
|
||||
A running timer-function will be cancelled if a new set cmd (on,off,on-for-,....) for this GAD is issued.<br/>
|
||||
For all other dpt1.<xxx> the min- and max-values can be used for en- and decoding alternatively to on/off.<br/>
|
||||
All DPTs: allowed values or range of values are specified here: <a href="#KNX-dpt">KNX-dpt</a><br/>
|
||||
After successful sending, the value is stored in readings <setName> and state.</p>
|
||||
<pre>
|
||||
<code> set lamp2 on # gadName omitted</code>
|
||||
<code> set lamp2 off # gadName omitted</code>
|
||||
<code> set lamp2 steuern on</code>
|
||||
<code> set lamp2 steuern off</code>
|
||||
<code> set lamp2 steuern on-for-timer 10 # seconds</code>
|
||||
<code> set lamp2 steuern on-until 13:15:00</code>
|
||||
<code> </code>
|
||||
<code> set lamp3 g1 off-until 13:15:00</code>
|
||||
<code> set lamp3 g1 toogle # lamp3 change state</code>
|
||||
<code> set lamp3 g1 blink 2 4 # lamp3 on for 4 seconds, off for 4 seconds, 2 repeats</code>
|
||||
<code> </code>
|
||||
<code> set myThermoDev g1 23.44</code>
|
||||
<code> </code>
|
||||
<code> set myMessageDev g1 Hello World! # dpt16 def</code>
|
||||
</pre>
|
||||
Examples:
|
||||
<code> set lamp2 on # gadName omitted
|
||||
set lamp2 off # gadName omitted
|
||||
set lamp2 steuern on
|
||||
set lamp2 steuern off
|
||||
set lamp2 steuern on-for-timer 10 # seconds
|
||||
set lamp2 steuern on-until 13:15:00
|
||||
|
||||
set lamp3 g1 off-until 13:15:00
|
||||
set lamp3 g1 toogle # lamp3 change state
|
||||
set lamp3 g1 blink 2 4 # lamp3 on for 4 seconds, off for 4 seconds, 2 repeats
|
||||
|
||||
set myThermoDev g1 23.44
|
||||
|
||||
set myMessageDev g1 Hello World! # dpt16 def
|
||||
</code></pre>
|
||||
<p>More complex examples can be found on the (german) <a href="https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele">Wiki</a></p>
|
||||
</li>
|
||||
|
||||
<li><a id="KNX-get"></a><strong>Get</strong><br/>
|
||||
<p>If you execute "get" for a KNX-Element the status will be requested from the device. The device has to be able to respond to a read -
|
||||
this might not be supported by the target device.<br />
|
||||
this might not be supported by the target KNX-device.<br/>
|
||||
If the GAD is restricted in the definition with "set" or "listenonly", the execution will be refused.<br/>
|
||||
The answer from the bus-device updates the readings <getName> and state.</p>
|
||||
</li>
|
||||
@ -2131,65 +2073,73 @@ The answer from the bus-device updates the readings <getName> and state.</
|
||||
-->
|
||||
<li><a id="KNX-attr-stateRegex"></a><b>stateRegex</b><br/>
|
||||
You can pass n pairs of regex-patterns and strings to replace, seperated by a space.
|
||||
A regex-pair is always in the format /<readingName>[:<value>]/[2nd part]/.
|
||||
A regex-pair is always in the format /<readingName>[:<value>]/[2nd part]/.
|
||||
The first part of the regex must exactly match the readingname, and optional (separated by a colon) the readingValue.
|
||||
If first part match, the matching part will be replaced by the 2nd part of the regex.
|
||||
If the 2nd part is empty, the value is ignored and reading state will not get updated.
|
||||
The substitution is done every time, a reading is updated. You can use this function for converting, adding units, having more fun with icons, ...<br/>
|
||||
The substitution is done every time, a reading is updated. You can use this function for converting, adding units,
|
||||
having more fun with icons, ...<br/>
|
||||
This function has only an impact on the content of reading state.
|
||||
It is executed directly after replacing the reading-names and processing "format" Attr, but before stateCmd.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-stateCmd"></a><b>stateCmd</b><br/>
|
||||
You can supply a perl-command for modifying state. This command is executed directly before updating the reading - so after renaming, format and regex.
|
||||
You can supply a perl-command for modifying state. This command is executed directly before updating the reading
|
||||
- so after renaming, format and regex.
|
||||
Please supply a valid perl command like using the attribute stateFormat.<br/>
|
||||
Unlike stateFormat the stateCmd modifies also the content of the reading <b>state</b>, not only the hash-content for visualization.<br/>
|
||||
You can access the device-hash ( e.g: $hash{IODev} ) in yr. perl-cmd. In addition the variables "$name", "$gadName" and "$state" are avaliable.
|
||||
A return value must be set and overrides reading state.
|
||||
Unlike stateFormat the stateCmd modifies also the content of the reading <b>state</b>,
|
||||
not only the hash-content for visualization.<br/>
|
||||
You can access the device-hash ( e.g: $hash{IODev} ) in yr. perl-cmd. In addition the variables
|
||||
"$name", "$gadName" and "$state" are avaliable. A return value must be set and overrides reading state.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-putCmd"></a><b>putCmd</b><br/>
|
||||
Every time a KNX-value is requested from the bus to FHEM, the content of putCmd is evaluated before the answer is sent.
|
||||
You can use a perl-command for modifying content.
|
||||
This command is executed directly before sending the data. A copy is stored in the reading <putName>.<br/>
|
||||
Each device only knows one putCmd, so you have to take care about the different GAD's in the perl string.<br/>
|
||||
Like in stateCmd you can access the device hash ("$hash") in yr. perl-cmd. In addition the variables "$name", "$gadName" and "$state" are avaliable.
|
||||
On entry, "$state" contains the current value of reading "state".
|
||||
The return-value will be sent to KNX-bus. The value has to be in the allowed range for the corresponding dpt, else the send is rejected.
|
||||
The reading "state" will NOT get updated!<br>
|
||||
Examples:
|
||||
Like in stateCmd you can access the device hash ("$hash") in yr. perl-cmd. In addition the variables
|
||||
"$name", "$gadName" and "$state" are avaliable. On entry, "$state" contains the current value of reading "state".
|
||||
The return-value will be sent to KNX-bus. The value has to be in the allowed range for the corresponding dpt,
|
||||
else the send is rejected. The reading "state" will NOT get updated!
|
||||
<pre>
|
||||
<code> attr <device> putCmd {return $state if($gadName eq 'status');} </code> #returns value of reading state on request from bus for gadName "status".
|
||||
<code> attr <device> putCmd {return ReadingsVal('dummydev','state','error') if(...);} </code> #returns value of device "dummydev" reading "state".
|
||||
<code> attr <device> putCmd {return (split(/[\s]/xms,TimeNow()))[1] if ($gadName eq 'time');} </code> #returns systemtime-stamp ...</pre>
|
||||
Examples:
|
||||
<code> attr <device> putCmd {return $state if($gadName eq 'status');} #returns value of reading state on request from bus for gadName "status".
|
||||
attr <device> putCmd {return ReadingsVal('dummydev','state','error') if(...);} #returns value of device "dummydev" reading "state".
|
||||
attr <device> putCmd {return (split(/[\s]/xms,TimeNow()))[1] if ($gadName eq 'time');} #returns systemtime-stamp ...
|
||||
</code></pre>
|
||||
</li>
|
||||
<li><a id="KNX-attr-format"></a><b>format</b><br/>
|
||||
The content of this attribute is appended to every sent/received value before readings are set, it replaces the default unit-value!
|
||||
"format" will be appied to ALL readings, it is better to use the (more complex) "stateCmd" or "stateRegex" Attributes if you have more than one GAD in your device.
|
||||
The content of this attribute is appended to every sent/received value before readings are set,
|
||||
it replaces the default unit-value! "format" will be appied to ALL readings, it is better to use the (more complex)
|
||||
"stateCmd" or "stateRegex" Attributes if you have more than one GAD in your device.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-disable"></a><b>disable</b><br/>
|
||||
Disable the device if set to <b>1</b>. No send/receive from bus and no set/get possible. Delete this attr to enable device again.
|
||||
Deleting this attribute is prevented in case the definition contains errors!
|
||||
<br/>As an aid for debugging, an additional INTERNAL: "RAWMSG" will show any message received from bus while the device is disabled.
|
||||
<br/>As an aid for debugging, an additional INTERNAL: "RAWMSG" will show any message received from bus while the device is disabled.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-KNX_toggle"></a><b>KNX_toggle</b><br/>
|
||||
Lookup current value before issuing <code>set device <gadName> toggle</code> cmd.<br/>
|
||||
FHEM has to retrieve a current value to make the toggle-cmd acting correctly. This attribute can be used to define the source of the current value.<br/>
|
||||
Format is: <b><devicename>:<readingname></b>. If you want to use a reading from own device, you can use "$self" as devicename.
|
||||
Be aware that only <b>on</b> and <b>off</b> are supported as valid values when defining device:readingname.<br/>
|
||||
If this attribute is not defined, the current value will be taken from owndevice:readingName-get or, if readingName-get is not defined,
|
||||
the value will be taken from readingName-set.
|
||||
FHEM has to retrieve a current value to make the toggle-cmd acting correctly. This attribute can be used to
|
||||
define the source of the current value.<br/>
|
||||
Format is: <b><devicename>:<readingname></b>. If you want to use a reading from own device,
|
||||
you can use "$self" as devicename. Be aware that only <b>on</b> and <b>off</b> are supported as valid values
|
||||
when defining device:readingname.<br/>
|
||||
If this attribute is not defined, the current value will be taken from owndevice:readingName-get or,
|
||||
if readingName-get is not defined, the value will be taken from readingName-set.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-IODev"></a><b>IODev</b><br/>
|
||||
Due to changes in IO-Device handling, (default IO-Device will be stored in <b>reading IODev</b>), setting this Attribute is no longer required,
|
||||
except in cases where multiple IO-devices (of type TUL/KNXTUL/KNXIO) exist in your config. Defining more than one IO-device is <b>NOT recommended</b>
|
||||
unless you take special care with yr. knxd or KNX-router definitions - to prevent multiple path from KNX-Bus to FHEM resulting in message loops.
|
||||
Due to changes in IO-Device handling, (default IO-Device will be stored in <b>reading IODev</b>), setting this Attribute
|
||||
is no longer required, except in cases where multiple IO-devices (of type TUL/KNXTUL/KNXIO) exist in your config.
|
||||
Defining more than one IO-device is <b>NOT recommended</b> unless you take special care with yr. knxd or KNX-router definitions
|
||||
- to prevent multiple path from KNX-Bus to FHEM resulting in message loops.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-widgetOverride"></a><b>widgetOverride</b><br/>
|
||||
This is a standard FHEMWEB-attribute, the recommendation for use in KNX-module is to specify the following form:
|
||||
This is a standard FHEMWEB-attribute, the recommendation for use in KNX-module is to specify the following form:
|
||||
<b><gadName>@set:<widgetName,parameter></b> This avoids overwriting the GET pulldown in FHEMWEB detail page.
|
||||
For details, pls see <a href="#FHEMWEB-attr-widgetOverride">FHEMWEB-attribute</a>.
|
||||
<br/></li>
|
||||
<li><a id="KNX-attr-answerReading"></a><b>answerReading</b><br/>
|
||||
This attr is deprecated. It will be converted to equivalent function using attr putCmd:<br/>
|
||||
This attr is deprecated. It will be converted to equivalent function using attr putCmd:<br/>
|
||||
<code> attr <device> putCmd {return $state;}</code>
|
||||
<br/></li>
|
||||
</ul>
|
||||
@ -2322,30 +2272,30 @@ The result of the "get" cmd will be stored in the respective readings.
|
||||
The command is supported <b>only</b> if the IO-device is of TYPE KNXIO!
|
||||
<br/>Useful after a fhem-start to syncronize the readings with the status of the KNX-device.
|
||||
<br/>The "get" cmds are scheduled asynchronous, with a delay of 200ms between each get. (avoid overloading KNX-bus)
|
||||
If called as perl-function, returns number of "get" cmds issued.<br/>
|
||||
Examples:
|
||||
If called as perl-function, returns number of "get" cmds issued.
|
||||
<pre>
|
||||
<code>syntax when used as perl-function (eg. in at, notify,...)</code>
|
||||
<code> KNX_scan() - scan all possible devices</code>
|
||||
<code> KNX_scan('dev-A') - scan device-A only</code>
|
||||
<code> KNX_scan('dev-A,dev-B,dev-C') - scan device-A, device-B, device-C</code>
|
||||
<code> KNX_scan('room=Kueche') - scan all KNX-devices in room Kueche</code>
|
||||
<code> KNX_scan('EG_.*') - scan all KNX-devices where device-names begin with EG_</code>
|
||||
<code>syntax when used from FHEM-cmdline</code>
|
||||
<code> KNX_scan - scan all possible devices</code>
|
||||
<code> KNX_scan dev-A - scan device-A only</code>
|
||||
<code> KNX_scan dev-A,dev-B,dev-C - scan device-A, device-B, device-C</code>
|
||||
<code> KNX_scan room=Kueche - scan all KNX-devices in room Kueche</code>
|
||||
<code> KNX_scan EG_.* - scan all KNX-devices where device-names begin with EG_</code>
|
||||
</pre>
|
||||
When using KNX_scan or any 'set or get <KNX-device> ...' in a global:INITIALIZED notify, pls. ensure to have some delay in processing the cmd's by using <b>fhem sleep</b>.
|
||||
<br/>Example:<br/>
|
||||
<code> defmod initialized_nf notify global:INITIALIZED sleep 10 quiet;; set KNX_date now;; set KNX_time now;;</code><br/>
|
||||
This avoids sending requests while the KNX-Gateway has not finished its initial handshake-procedure with FHEM (the KNX-IO-device).<br/>
|
||||
<br/>If you are using <b>KNXIO-module</b> as IO-device for your KNX-devices, a better solution is available:<br/>
|
||||
<code> defmod initializedKNXIO_nf notify <KNXIO-deviceName>:INITIALIZED set KNX_date now;; set KNX_time now;; KNX_scan;;</code><br>
|
||||
Examples:
|
||||
<code>syntax when used as perl-function (eg. in at, notify,...)
|
||||
KNX_scan() - scan all possible devices
|
||||
KNX_scan('dev-A') - scan device-A only
|
||||
KNX_scan('dev-A,dev-B,dev-C') - scan device-A, device-B, device-C
|
||||
KNX_scan('room=Kueche') - scan all KNX-devices in room Kueche
|
||||
KNX_scan('EG_.*') - scan all KNX-devices where device-names begin with EG_
|
||||
syntax when used from FHEM-cmdline
|
||||
KNX_scan - scan all possible devices
|
||||
KNX_scan dev-A - scan device-A only
|
||||
KNX_scan dev-A,dev-B,dev-C - scan device-A, device-B, device-C
|
||||
KNX_scan room=Kueche - scan all KNX-devices in room Kueche
|
||||
KNX_scan EG_.* - scan all KNX-devices where device-names begin with EG_
|
||||
</code></pre>
|
||||
Do <b>not</b> use KNX_scan or any 'set or get <KNX-device> ...' in a global:INITIALIZED notify, the IO-device will not be
|
||||
ready for communication at that time!
|
||||
<br/>
|
||||
A better solution is available:<br/>
|
||||
<code> defmod initializedKNXIO_nf notify <KNXIO-deviceName>:INITIALIZED set KNX_date now;; set KNX_time now;; KNX_scan;;</code><br>
|
||||
This event is triggered 30 seconds after FHEM init complete <b>and</b> the KNXIO-device status is "connected".
|
||||
<br/></li>
|
||||
<br/><br/>See also <a href="#KNXIO-attr">help KNXIO</a> how to start KNX_scan by using KNXIO-Attribute enableKNXscan, without using any notify,doif,...
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
Loading…
x
Reference in New Issue
Block a user