diff --git a/fhem/CHANGED b/fhem/CHANGED
index 90e45d9fc..f5360354f 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -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.
+ - feature: 10_MYSENSORS_DEVICE: add attrTemplate support
+ - change: 00_MYSENSORS: enhance support for node functions
+ when using multiple GW's
- feature: 93_DbRep: new aggregation type year
- bugfix 73_AMADCommBridge: fix little bug
- bugfix: 70_BRAVIA: fix channel presets, fix use of ReadingsAge
diff --git a/fhem/FHEM/00_MYSENSORS.pm b/fhem/FHEM/00_MYSENSORS.pm
index a00193187..988a3e2d4 100644
--- a/fhem/FHEM/00_MYSENSORS.pm
+++ b/fhem/FHEM/00_MYSENSORS.pm
@@ -56,15 +56,18 @@ sub MYSENSORS_Initialize($) {
$hash->{AttrFn} = "MYSENSORS::Attr";
$hash->{NotifyFn} = "MYSENSORS::Notify";
- $hash->{AttrList} =
- "autocreate:1 ".
- "requestAck:1 ".
- "first-sensorid ".
- "last-sensorid ".
- "stateFormat ".
- "OTA_firmwareConfig";
+ my @attrList = qw(
+ autocreate:1
+ requestAck:1
+ first-sensorid
+ last-sensorid
+ stateFormat
+ OTA_firmwareConfig
+ );
+ $hash->{AttrList} = $hash->{AttrList} = join(" ", @attrList)
}
+
package MYSENSORS;
use Exporter ('import');
@@ -330,7 +333,10 @@ sub onPresentationMsg($$) {
unless ($client) {
if ($hash->{'inclusion-mode'}) {
$clientname = "MYSENSOR_$msg->{radioId}";
+ $clientname = "$hash->{NAME}_DEVICE_0"if defined $main::defs{$clientname};
CommandDefine(undef,"$clientname MYSENSORS_DEVICE $msg->{radioId}");
+ CommandAttr(undef,"$clientname IODev $hash->{NAME}");
+ CommandAttr(undef,"$clientname room MYSENSORS_DEVICE");
$client = $main::defs{$clientname};
return unless ($client);
} else {
@@ -385,8 +391,9 @@ sub onInternalMsg($$) {
last;
};
$type == I_HEARTBEAT_RESPONSE and do {
- RemoveInternalTimer($hash,"MYSENSORS::Start"); ## Reset reconnect because timeout was not reached
- readingsSingleUpdate($hash, "heartbeat", "last", 0);
+ RemoveInternalTimer($hash,"MYSENSORS::Start"); ## Reset reconnect because timeout was not reached
+ readingsSingleUpdate($hash, "heartbeat", "alive", 0);
+ if (my $client = matchClient($hash,$msg)){ MYSENSORS::DEVICE::onInternalMessage($client,$msg) };
};
$type == I_VERSION and do {
$hash->{version} = $msg->{payload};
diff --git a/fhem/FHEM/10_MYSENSORS_DEVICE.pm b/fhem/FHEM/10_MYSENSORS_DEVICE.pm
index 35eb422c2..651b510dc 100755
--- a/fhem/FHEM/10_MYSENSORS_DEVICE.pm
+++ b/fhem/FHEM/10_MYSENSORS_DEVICE.pm
@@ -55,6 +55,7 @@ sub MYSENSORS_DEVICE_Initialize($) {
OTA_autoUpdate:0,1
OTA_BL_Type:Optiboot,MYSBootloader
OTA_Chan76_IODev
+ model
);
use warnings 'qw';
$hash->{AttrList} = join(" ", @attrList)." ".$readingFnAttributes;
@@ -250,7 +251,7 @@ sub Set($@) {
$hash->{sets}->{fwType} = join(",", MYSENSORS::getFirmwareTypes($hash->{IODev}));
my $list = join(" ", map {$hash->{sets}->{$_} ne "" ? "$_:$hash->{sets}->{$_}" : $_} sort keys %{$hash->{sets}});
$hash->{sets}->{fwType} = "";
- return grep (/(^on$)|(^off$)/,keys %{$hash->{sets}}) == 2 ? SetExtensions($hash, $list, $name, $command, @values) : "Unknown argument $command, choose one of $list";
+ return SetExtensions($hash, $list, $name, $command, @values);
}
COMMAND_HANDLER: {
@@ -1163,24 +1164,39 @@ sub sendRetainedMessages($) {
Set
+ AttrTemplate
+ - Helps to easily configure your devices. Just get a list of all available attrTremplates by issuing
+
+ Have a look at the descriptions and choose a suitable one. Then use the drop-down list and click "set" or issue a.
+
+
+ clear
-
set <name> clear
clears MySensors EEPROM area and reboot (i.e. "factory" reset) - requires MY_SPECIAL_DEBUG
+ flash
-
set <name> flash
Checks whether a newer firmware version is available. If a newer firmware version is
available the flash procedure is started. The sensor node must support FOTA for
this.
+ fwType
-
set <name> fwType <value>
assigns a firmware type to this node (must be a numeric value in the range 0 .. 65536).
Should be contained in the FOTA configuration
file.
+ time
-
set <name> time
sets time for nodes (that support it)
+ reboot
-
set <name> reboot
reboots a node (requires a bootloader that supports it).
Attention: Nodes that run the standard arduino-bootloader will enter a bootloop!
Dis- and reconnect the nodes power to restart in this case.
diff --git a/fhem/FHEM/lib/AttrTemplate/mysensors.template b/fhem/FHEM/lib/AttrTemplate/mysensors.template
new file mode 100644
index 000000000..366aacab4
--- /dev/null
+++ b/fhem/FHEM/lib/AttrTemplate/mysensors.template
@@ -0,0 +1,110 @@
+###########################################
+# $Id: $
+#
+# Comments start with #. Empty lines are ignored.
+# Syntax of one entry: name: line, one optional filter: line, zero or more par: lines, FHEM-Commands
+# filter:INTERNAL=VALUE (optional)
+# par: name of the parameter; comment; perl_code (optional)
+# perl_code returns a value for the parameter, or undef.
+# If undef, the user has to specify them (the comment is shown to the user)
+
+
+###########################################
+# Example sketches from MySensors.org
+# simple stateFormat versions
+name:A_01a1_air_humidity_dht
+filter:TYPE=MYSENSORS_DEVICE
+desc:Applies to standard DHT sketch without battery reading
NOTE: Untested first template version
+attr DEVICE stateFormat T: temperature1 H: humidity
+attr DEVICE model A_01a1_air_humidity_dht
+
+name:A_01a2_air_humidity_Si7021
+filter:TYPE=MYSENSORS_DEVICE
+desc:Applies to standard DHT sketch with battery reading
NOTE: Untested first template version
+attr DEVICE stateFormat T: temperature1 H: humidity Bat: batteryLevel
+attr DEVICE model A_01a2_air_humidity_Si7021
+
+name:A_02a_atmospheric_pressure
+filter:TYPE=MYSENSORS_DEVICE
+desc:Applies to standard Atmospheric Pressure sketch (BME280)NOTE: Untested first template version
+attr DEVICE stateFormat T: temperature H: humidity1 P: pressure2 Forecast: forecast2
+attr DEVICE model A_02a_atmospheric_pressure
+
+name:A_03a_bed_occupancy
+filter:TYPE=MYSENSORS_DEVICE
+desc:Applies to standard bed occupancy sketch (MPR121)
NOTE: Sketch is still in MySensors 1.x format and has to be changed for use with recent arduino libs.NOTE: Untested first template version
+attr DEVICE stateFormat Left: motion Right: motion1
+attr DEVICE model A_03a_bed_occupancy
+
+#A_04a_Dimmer - LED
+#A_05a_Display and Time
+#A_06a_Distance
+#A_07a_Dollhouse
+#A_08a_Door/Window/Button
+#A_09a_Dust
+#A_10a_Gas Detection
+#A_11a_Gesture Controller
+#A_12a_GPS Sensor
+#A_13a_Heatpump Control
+#A_14a_IR Sender/Receiver
+#A_15a_Irrigation Controller
+#A_16a1_Light Level - BH1750
+#A_16a2_Light Level - LM393
+
+name:A_17a_Motion
+filter:TYPE=MYSENSORS_DEVICE
+desc:Applies to standard motion sketch
+attr DEVICE stateFormat Motion: motion1
+attr DEVICE model A_17a_Motion
+
+#A_18a_Orientation Actuator
+#A_19a_Orientation Sensor
+#A_20a_Parking Sensor
+#A_21a_Pulse Power Meter
+#A_22a_Pulse Water Meter
+#A_23a_Rain Gauge
+#A_24a_Relay Actuator
+#A_25a_RFID
+#A_26a_Scene Controller
+#A_27a_Secret Knock
+#A_28a_Servo
+#A_29a_Smart Alarm Clock
+#A_30a_Soil Moisture
+#A_31a_Sonoff Relay
+#A_32a_Starry Sky
+
+
+name:A_33a_temperature
+filter:TYPE=MYSENSORS_DEVICE
+desc:Applies to standard temperature sketch (DS18B20) NOTE: Untested first template version
+attr DEVICE stateFormat T0: temperature T1: temperature1 T2: temperature2
+attr DEVICE model A_33a_temperature
+
+#A_34a_UV
+#A_35a_Whole House Fan
+
+###########################################
+# Example sketches from MySensors.org
+# Advanced stateFormat and devStateIcon versions
+
+
+###########################################
+# Advanced sketches
+
+#4 relay
+name:C_04_4ch_unified_icon
+filter:TYPE=MYSENSORS_DEVICE
+desc:Device with 4 relays attached
NOTE: Clicking on icons will issue a corresponding toggle command
+attr DEVICE devStateIcon {\
+ ""\
+ . " status3:"\
+ . FW_makeImage(lc ReadingsVal($name, "status3", "off")) . ""\
+ . " status4:"\
+ . FW_makeImage(lc ReadingsVal($name, "status4", "off")) . ""\
+ }
+attr DEVICE stateFormat P1: status1 P2: status2 P3: status3 P4: status4 Status: state
+attr DEVICE webCmd :
+attr DEVICE model C_04_4ch_unified_icon
diff --git a/fhem/MAINTAINER.txt b/fhem/MAINTAINER.txt
index df444d5e5..af5827f32 100644
--- a/fhem/MAINTAINER.txt
+++ b/fhem/MAINTAINER.txt
@@ -565,6 +565,7 @@ FHEM/lib/*deviceconfig.xml.gz krikan ZWave
FHEM/lib/*manufacturer_specific.xml krikan ZWave
FHEM/lib/AttrTemplate/httpmod.template Beta-User https://forum.fhem.de/index.php/topic,97694.0.html
FHEM/lib/AttrTemplate/mqtt2.template Beta-User https://forum.fhem.de/index.php/topic,94494.0.html
+FHEM/lib/AttrTemplate/mysensors.template Beta-User Bastelecke/MySensors
FHEM/lib/Device/Firmata/* jensb Sonstige Systeme
FHEM/lib/Device/MySensors/* Hauswart/Beta-User Bastelecke/MySensors
FHEM/lib/MP3/* Reinerlein Multimedia