2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-28 17:12:32 +00:00

mqtt2.template: add sonoff_tasmota_1ch and 2ch

git-svn-id: https://svn.fhem.de/fhem/trunk@17785 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2018-11-19 13:04:10 +00:00
parent 4521fd4ad8
commit 7faa3e781e
3 changed files with 58 additions and 14 deletions

View File

@ -51,7 +51,13 @@ MQTT2_DEVICE_Define($$)
return "wrong syntax for $name: define <name> MQTT2_DEVICE [clientid]" return "wrong syntax for $name: define <name> MQTT2_DEVICE [clientid]"
if(int(@a)); if(int(@a));
$hash->{DEVICETOPIC} = $name; $hash->{DEVICETOPIC} = $name;
$modules{MQTT2_DEVICE}{defptr}{cid}{$hash->{CID}} = $hash if($hash->{CID}); if($hash->{CID}) {
my $dpc = $modules{MQTT2_DEVICE}{defptr}{cid};
if(!$dpc->{$hash->{CID}}) {
$dpc->{$hash->{CID}} = [];
}
push(@{$dpc->{$hash->{CID}}},$hash);
}
AssignIoPort($hash); AssignIoPort($hash);
return undef; return undef;
@ -147,10 +153,9 @@ MQTT2_DEVICE_Parse($$)
} }
return if(!$newCid); return if(!$newCid);
my $cidHash = $modules{MQTT2_DEVICE}{defptr}{cid}{$newCid};
my $nn = $cidHash ? $cidHash->{NAME} : "MQTT2_$newCid";
PrioQueue_add(sub{ PrioQueue_add(sub{
return if(!$defs{$nn}); my $cidArr = $modules{MQTT2_DEVICE}{defptr}{cid}{$newCid};
return if(!$cidArr);
my $add; my $add;
if($value =~ m/^{.*}$/) { if($value =~ m/^{.*}$/) {
my $ret = json2nameValue($value); my $ret = json2nameValue($value);
@ -160,14 +165,19 @@ MQTT2_DEVICE_Parse($$)
$topic =~ m,.*/([^/]+),; $topic =~ m,.*/([^/]+),;
$add = ($1 ? $1 : $topic); $add = ($1 ? $1 : $topic);
} }
for my $ch (@{$cidArr}) {
my $nn = $ch->{NAME};
my $rl = AttrVal($nn, "readingList", ""); my $rl = AttrVal($nn, "readingList", "");
$rl .= "\n" if($rl); $rl .= "\n" if($rl);
my $regexpCid = ($cid eq $newCid ? "$cid:" : ""); my $regexpCid = ($cid eq $newCid ? "$cid:" : "");
CommandAttr(undef, "$nn readingList $rl${regexpCid}$topic:.* $add"); CommandAttr(undef, "$nn readingList $rl${regexpCid}$topic:.* $add");
}
MQTT2_DEVICE_Parse($iodev, $msg); MQTT2_DEVICE_Parse($iodev, $msg);
}, undef); }, undef);
return "UNDEFINED $nn MQTT2_DEVICE $newCid" if(!$cidHash); my $cidArr = $modules{MQTT2_DEVICE}{defptr}{cid}{$newCid};
return "UNDEFINED MQTT2_$newCid MQTT2_DEVICE $newCid" if(!$cidArr);
return ""; return "";
} }
@ -385,7 +395,9 @@ MQTT2_DEVICE_Undef($$)
{ {
my ($hash, $arg) = @_; my ($hash, $arg) = @_;
MQTT2_DEVICE_delReading($arg); MQTT2_DEVICE_delReading($arg);
delete $modules{MQTT2_DEVICE}{defptr}{cid}{$hash->{CID}} if($hash->{CID}); my $dpc = $modules{MQTT2_DEVICE}{defptr}{cid}{$hash->{CID}};
my @nh = grep { $_->{NAME} != $hash->{NAME} } @{$dpc};
$modules{MQTT2_DEVICE}{defptr}{cid}{$hash->{CID}} = \@nh;
return undef; return undef;
} }

View File

@ -5,6 +5,7 @@
# perl_code returns a value for the parameter, or undef. # 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) # If undef, the user has to specify them (the comment is shown to the user)
# The zigbee2mqtt bridge device
name:zigbee2mqtt_bridge name:zigbee2mqtt_bridge
filter:TYPE=MQTT2_DEVICE filter:TYPE=MQTT2_DEVICE
par:BRIDGENAME;name of the zigbee2mqtt bridge in the topics par:BRIDGENAME;name of the zigbee2mqtt bridge in the topics
@ -17,6 +18,7 @@ attr DEVICE setList\
devicelist:noArg zigbee2mqtt/BRIDGENAME/config/devices devicelist:noArg zigbee2mqtt/BRIDGENAME/config/devices
# A dimmable light connected via zigbee2mqtt
name:zigbee2mqtt_bulb name:zigbee2mqtt_bulb
filter:TYPE=MQTT2_DEVICE filter:TYPE=MQTT2_DEVICE
par:NAMEINTHEBRIDGE;name of this device in the bridge;{ AttrVal("DEVICE","readingList","") =~ m,zigbee2mqtt/(.*):, ? $1 : undef } par:NAMEINTHEBRIDGE;name of this device in the bridge;{ AttrVal("DEVICE","readingList","") =~ m,zigbee2mqtt/(.*):, ? $1 : undef }
@ -27,7 +29,7 @@ attr DEVICE setList \
off:noArg zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"OFF"}\ off:noArg zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"OFF"}\
brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"on","$EVTPART0":"$EVTPART1"} brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"on","$EVTPART0":"$EVTPART1"}
# A dimmable color light connected via zigbee2mqtt
name:zigbee2mqtt_colorbulb name:zigbee2mqtt_colorbulb
filter:TYPE=MQTT2_DEVICE filter:TYPE=MQTT2_DEVICE
par:NAMEINTHEBRIDGE;name of this device in the bridge;{ AttrVal("DEVICE","readingList","") =~ m,zigbee2mqtt/(.*):, ? $1 : undef } par:NAMEINTHEBRIDGE;name of this device in the bridge;{ AttrVal("DEVICE","readingList","") =~ m,zigbee2mqtt/(.*):, ? $1 : undef }
@ -38,3 +40,34 @@ attr DEVICE setList \
off:noArg zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"OFF"}\ off:noArg zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"OFF"}\
brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"on","$EVTPART0":"$EVTPART1"}\ brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"on","$EVTPART0":"$EVTPART1"}\
color_temp:colorpicker,CT,250,1,454 zigbee2mqtt/NAMEINTHEBRIDGE/set {"$EVTPART0":"$EVTPART1"} color_temp:colorpicker,CT,250,1,454 zigbee2mqtt/NAMEINTHEBRIDGE/set {"$EVTPART0":"$EVTPART1"}
# Basic sonoff 1 channel device flashed with Tasmota
name:sonoff_tasmota_1ch
filter:TYPE=MQTT2_DEVICE
par:MQTTNAME;Topic in "Configure MQTT", must be unique;{ AttrVal("DEVICE","readingList","") =~ m,tele/(.*)/LWT:, ? $1 : undef }
attr DEVICE stateFormat POWER1
attr DEVICE setList \
off:noArg cmnd/MQTTNAME/POWER1 0\
on:noArg cmnd/MQTTNAME/POWER1 1\
toggle:noArg cmnd/MQTTNAME/POWER1 2
# sonoff 2 channel device flashed with Tasmota.
# NOTE: a second device will be created for the second channel
name:sonoff_tasmota_2ch
filter:TYPE=MQTT2_DEVICE
par:MQTTNAME;Topic in "Configure MQTT", must be unique;{ AttrVal("DEVICE","readingList","") =~ m,tele/(.*)/LWT:, ? $1 : undef }
attr DEVICE stateFormat POWER1
attr DEVICE setList \
off:noArg cmnd/MQTTNAME/POWER1 0\
on:noArg cmnd/MQTTNAME/POWER1 1\
toggle:noArg cmnd/MQTTNAME/POWER1 2
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 stateFormat POWER2
attr DEVICE_CH2 comment Channel 2 for DEVICE
attr DEVICE_CH2 setList \
off:noArg cmnd/MQTTNAME/POWER2 0\
on:noArg cmnd/MQTTNAME/POWER2 1\
toggle:noArg cmnd/MQTTNAME/POWER2 2

View File

@ -1,8 +1,7 @@
FS20.off light_light_dim_00.svg
FS20.on light_light_dim_100.svg
off light_light_dim_00.svg off light_light_dim_00.svg
on light_light_dim_100.svg on light_light_dim_100.svg
OFF light_light_dim_00.svg
ON light_light_dim_100.svg
Aus light_light_dim_00.svg Aus light_light_dim_00.svg
An light_light_dim_100.svg An light_light_dim_100.svg