mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 07:56:03 +00:00
change: cleanup
git-svn-id: https://svn.fhem.de/fhem/trunk@17309 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
640e3f444c
commit
721043f3eb
@ -76,16 +76,8 @@ sub MQTT_GENERIC_BRIDGE_Initialize($) {
|
|||||||
#CTRL_ATTR_NAME_GLOBAL_PREFIX.CTRL_ATTR_NAME_SUBSCRIBE.":textField-long ".
|
#CTRL_ATTR_NAME_GLOBAL_PREFIX.CTRL_ATTR_NAME_SUBSCRIBE.":textField-long ".
|
||||||
CTRL_ATTR_NAME_GLOBAL_TYPE_EXCLUDE.":textField-long ".
|
CTRL_ATTR_NAME_GLOBAL_TYPE_EXCLUDE.":textField-long ".
|
||||||
CTRL_ATTR_NAME_GLOBAL_DEV_EXCLUDE.":textField-long ".
|
CTRL_ATTR_NAME_GLOBAL_DEV_EXCLUDE.":textField-long ".
|
||||||
#"mqttTopicPrefix ".
|
|
||||||
"disable:1,0 ".
|
"disable:1,0 ".
|
||||||
"debug:0,1 ".
|
"debug:0,1 ".
|
||||||
#"qos ".
|
|
||||||
#"retain ".
|
|
||||||
#"publish-topic-base ".
|
|
||||||
#"publishState ".
|
|
||||||
#"publishReading_.* ".
|
|
||||||
#"subscribeSet ".
|
|
||||||
#"subscribeSet_.* ".
|
|
||||||
$main::readingFnAttributes;
|
$main::readingFnAttributes;
|
||||||
|
|
||||||
main::LoadModule("MQTT");
|
main::LoadModule("MQTT");
|
||||||
@ -97,7 +89,6 @@ sub MQTT_GENERIC_BRIDGE_Initialize($) {
|
|||||||
if(defined($defs{$d}{TYPE})) {
|
if(defined($defs{$d}{TYPE})) {
|
||||||
if($defs{$d}{TYPE} eq "MQTT_GENERIC_BRIDGE") {
|
if($defs{$d}{TYPE} eq "MQTT_GENERIC_BRIDGE") {
|
||||||
$defs{$d}{".initialized"} = 0;
|
$defs{$d}{".initialized"} = 0;
|
||||||
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> !!!!!!!!!!!!!!! $d");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,8 +181,6 @@ sub publishDeviceUpdate($$$$);
|
|||||||
sub UpdateSubscriptionsSingleDevice($$);
|
sub UpdateSubscriptionsSingleDevice($$);
|
||||||
sub InitializeDevices($);
|
sub InitializeDevices($);
|
||||||
sub firstInit($);
|
sub firstInit($);
|
||||||
sub reFirstInit($);
|
|
||||||
sub checkFirstInit($);
|
|
||||||
sub removeOldUserAttr($;$$);
|
sub removeOldUserAttr($;$$);
|
||||||
sub IsObservedAttribute($$);
|
sub IsObservedAttribute($$);
|
||||||
sub defineGlobalTypeExclude($;$);
|
sub defineGlobalTypeExclude($;$);
|
||||||
@ -208,14 +197,12 @@ sub retrieveIODev($);
|
|||||||
sub isIODevMQTT2($);
|
sub isIODevMQTT2($);
|
||||||
sub isIODevMQTT($);
|
sub isIODevMQTT($);
|
||||||
sub initUserAttr($);
|
sub initUserAttr($);
|
||||||
|
sub createRegexpForTopic($);
|
||||||
|
sub isDebug($);
|
||||||
|
|
||||||
sub isDebug($) {
|
sub isDebug($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
return AttrVal($hash->{NAME},"debug",0);
|
return AttrVal($hash->{NAME},"debug",0);
|
||||||
#if($hash->{'.debug'}) {
|
|
||||||
# return 1;
|
|
||||||
#}
|
|
||||||
#return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Device define
|
# Device define
|
||||||
@ -263,7 +250,8 @@ sub Define() {
|
|||||||
# $hash->{subscribeExpr} = [];
|
# $hash->{subscribeExpr} = [];
|
||||||
# }
|
# }
|
||||||
|
|
||||||
checkFirstInit($hash);
|
# noetig hier beim Anlegen im laufendem Betrieb
|
||||||
|
firstInit($hash);
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -277,7 +265,6 @@ sub Undefine() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub retrieveIODev($) {
|
sub retrieveIODev($) {
|
||||||
return 'MQTT'; # TEST!
|
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
my $iodn = AttrVal($hash->{NAME}, "IODev", undef);
|
my $iodn = AttrVal($hash->{NAME}, "IODev", undef);
|
||||||
my $iodt = undef;
|
my $iodt = undef;
|
||||||
@ -327,31 +314,15 @@ sub initUserAttr($) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub checkFirstInit($) {
|
|
||||||
my ($hash) = @_;
|
|
||||||
#Log3($hash->{NAME},1,"checkFirstInit : ".Dumper($hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE}));
|
|
||||||
return if $hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE};
|
|
||||||
firstInit($hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub reFirstInit($) {
|
|
||||||
my ($hash) = @_;
|
|
||||||
#Log3($hash->{NAME},1,"reFirstInit : ".Dumper($hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE}));
|
|
||||||
$hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE} = 0;
|
|
||||||
firstInit($hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Erstinitialization.
|
# Erstinitialization.
|
||||||
# Variablen werden im HASH abgelegt, userattr der betroffenen Geraete wird erweitert, MQTT-Initialisierungen.
|
# Variablen werden im HASH abgelegt, userattr der betroffenen Geraete wird erweitert, MQTT-Initialisierungen.
|
||||||
sub firstInit($) {
|
sub firstInit($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
|
|
||||||
|
# IO
|
||||||
AssignIoPort($hash);
|
AssignIoPort($hash);
|
||||||
|
|
||||||
#Log3($hash->{NAME},1,"firstInit [start] : ".Dumper($hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE}));
|
|
||||||
if ($main::init_done) {
|
if ($main::init_done) {
|
||||||
# IO
|
|
||||||
|
|
||||||
$hash->{+HELPER}->{+HS_FLAG_INITIALIZED} = 0;
|
$hash->{+HELPER}->{+HS_FLAG_INITIALIZED} = 0;
|
||||||
|
|
||||||
return unless defined(AttrVal($hash->{NAME},"IODev",undef));
|
return unless defined(AttrVal($hash->{NAME},"IODev",undef));
|
||||||
@ -373,13 +344,7 @@ sub firstInit($) {
|
|||||||
InternalTimer(gettimeofday()+$hash->{+HELPER}->{+HS_PROP_NAME_INTERVAL}, "MQTT::GENERIC_BRIDGE::timerProc", $hash, 0);
|
InternalTimer(gettimeofday()+$hash->{+HELPER}->{+HS_PROP_NAME_INTERVAL}, "MQTT::GENERIC_BRIDGE::timerProc", $hash, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#Log3($hash->{NAME},1,"firstInit [isMqtt: ".isIODevMQTT($hash)."] : ".Dumper($hash->{subscribe}));
|
|
||||||
MQTT::client_start($hash) if isIODevMQTT($hash); #if defined $hash->{+HELPER}->{+IO_DEV_TYPE} and $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
|
MQTT::client_start($hash) if isIODevMQTT($hash); #if defined $hash->{+HELPER}->{+IO_DEV_TYPE} and $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
|
||||||
$hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE} = 1;
|
|
||||||
#Log3($hash->{NAME},1,"firstInit [done] : ".Dumper($hash->{+HELPER}->{HS_FLAG_FIRST_INIT_DONE}));
|
|
||||||
#Log3($hash->{NAME},1,"firstInit [done] : ".Dumper($hash->{IODev}));
|
|
||||||
} else {
|
|
||||||
Log3($hash->{NAME},1,"firstInit [main init not done!]");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,8 +608,6 @@ sub getDevicePublishRecIntern($$$$$) {
|
|||||||
$topic = $globalReadingMap->{'topic'} if (defined($globalReadingMap) and !defined($topic));
|
$topic = $globalReadingMap->{'topic'} if (defined($globalReadingMap) and !defined($topic));
|
||||||
$topic = $globalDefaultReadingMap->{'topic'} if (defined($globalDefaultReadingMap) and !defined($topic));
|
$topic = $globalDefaultReadingMap->{'topic'} if (defined($globalDefaultReadingMap) and !defined($topic));
|
||||||
|
|
||||||
#Log3('xxx',1,"MQTT-GB:DEBUG:> getDevicePublishRec> topic ".Dumper($topic));
|
|
||||||
|
|
||||||
return undef unless defined $topic;
|
return undef unless defined $topic;
|
||||||
# eval
|
# eval
|
||||||
if($topic =~ m/^{.*}$/) {
|
if($topic =~ m/^{.*}$/) {
|
||||||
@ -751,7 +714,7 @@ sub _evalValue($$$$$$) {
|
|||||||
# return: map (device1->{reading}=>reading1, device1->{expression}=>{...}, deviceN->{reading}=>readingM)
|
# return: map (device1->{reading}=>reading1, device1->{expression}=>{...}, deviceN->{reading}=>readingM)
|
||||||
sub searchDeviceForTopic($$) {
|
sub searchDeviceForTopic($$) {
|
||||||
my($hash, $topic) = @_;
|
my($hash, $topic) = @_;
|
||||||
# TODO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
|
|
||||||
my $ret = {};
|
my $ret = {};
|
||||||
my $map = $hash->{+HS_TAB_NAME_DEVICES};
|
my $map = $hash->{+HS_TAB_NAME_DEVICES};
|
||||||
if(defined ($map)) {
|
if(defined ($map)) {
|
||||||
@ -860,10 +823,6 @@ sub CreateSingleDeviceTableAttrSubscribe($$$$) {
|
|||||||
my $topic = _evalValue($hash->{NAME},$val,$base,$dev,'$reading','$name');
|
my $topic = _evalValue($hash->{NAME},$val,$base,$dev,'$reading','$name');
|
||||||
$rmap->{'topicOrig'} = $val;
|
$rmap->{'topicOrig'} = $val;
|
||||||
|
|
||||||
#$rmap->{'wildcardDev'}=index($topic, '$device');
|
|
||||||
#$rmap->{'wildcardReading'}=index($topic, '$reading');
|
|
||||||
#$rmap->{'wildcardName'}=index($topic, '$name');
|
|
||||||
|
|
||||||
$rmap->{'topicExp'}=createRegexpForTopic($topic);
|
$rmap->{'topicExp'}=createRegexpForTopic($topic);
|
||||||
|
|
||||||
$topic =~ s/\$reading/+/g;
|
$topic =~ s/\$reading/+/g;
|
||||||
@ -891,13 +850,6 @@ sub deleteEmptyDevices($$$) {
|
|||||||
return unless defined $map->{$devMapName};
|
return unless defined $map->{$devMapName};
|
||||||
|
|
||||||
# Wenn keine Eintraege => Device loeschen
|
# Wenn keine Eintraege => Device loeschen
|
||||||
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> >>> deleteEmptyDevices: ".(keys %{$map->{$devMapName}})." - ".Dumper($map->{$devMapName}));
|
|
||||||
if(defined($map->{$devMapName}->{':publish'})) {
|
|
||||||
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> >>> deleteEmptyDevices: :publish ".(keys %{$map->{$devMapName}->{':publish'}})." - ".Dumper($map->{$devMapName}->{':publish'}));
|
|
||||||
#if(keys %{$map->{$devMapName}->{':publish'}} == 0) {
|
|
||||||
# delete($map->{$devMapName}->{':publish'});
|
|
||||||
#}
|
|
||||||
}
|
|
||||||
if(keys %{$map->{$devMapName}} == 0) {
|
if(keys %{$map->{$devMapName}} == 0) {
|
||||||
delete($map->{$devMapName});
|
delete($map->{$devMapName});
|
||||||
}
|
}
|
||||||
@ -906,7 +858,6 @@ sub deleteEmptyDevices($$$) {
|
|||||||
sub CreateSingleDeviceTable($$$$$) {
|
sub CreateSingleDeviceTable($$$$$) {
|
||||||
my ($hash, $dev, $devMapName, $prefix, $map) = @_;
|
my ($hash, $dev, $devMapName, $prefix, $map) = @_;
|
||||||
# Divece-Attribute fuer ein bestimmtes Device aus Device-Attributen auslesen
|
# Divece-Attribute fuer ein bestimmtes Device aus Device-Attributen auslesen
|
||||||
#my $prefix = $hash->{+HS_PROP_NAME_PREFIX};
|
|
||||||
CreateSingleDeviceTableAttrDefaults($hash, $devMapName, $map, AttrVal($dev, $prefix.CTRL_ATTR_NAME_DEFAULTS, undef));
|
CreateSingleDeviceTableAttrDefaults($hash, $devMapName, $map, AttrVal($dev, $prefix.CTRL_ATTR_NAME_DEFAULTS, undef));
|
||||||
CreateSingleDeviceTableAttrAlias($hash, $devMapName, $map, AttrVal($dev, $prefix.CTRL_ATTR_NAME_ALIAS, undef));
|
CreateSingleDeviceTableAttrAlias($hash, $devMapName, $map, AttrVal($dev, $prefix.CTRL_ATTR_NAME_ALIAS, undef));
|
||||||
CreateSingleDeviceTableAttrPublish($hash, $devMapName, $map, AttrVal($dev, $prefix.CTRL_ATTR_NAME_PUBLISH, undef));
|
CreateSingleDeviceTableAttrPublish($hash, $devMapName, $map, AttrVal($dev, $prefix.CTRL_ATTR_NAME_PUBLISH, undef));
|
||||||
@ -1000,12 +951,9 @@ sub UpdateSubscriptionsSingleDevice($$) {
|
|||||||
|
|
||||||
sub UpdateSubscriptions($) {
|
sub UpdateSubscriptions($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
#RemoveAllSubscripton($hash);
|
|
||||||
#return;
|
|
||||||
|
|
||||||
updateDevCount($hash);
|
updateDevCount($hash);
|
||||||
|
|
||||||
#return unless defined $hash->{+HELPER}->{+IO_DEV_TYPE};
|
|
||||||
return unless isIODevMQTT($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
return unless isIODevMQTT($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
||||||
|
|
||||||
my $topicMap = {};
|
my $topicMap = {};
|
||||||
@ -1015,13 +963,8 @@ sub UpdateSubscriptions($) {
|
|||||||
my $smap = $gmap->{$dname}->{':subscribe'};
|
my $smap = $gmap->{$dname}->{':subscribe'};
|
||||||
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> UpdateSubscriptions: smap = ".Dumper($gmap->{$dname}));
|
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> UpdateSubscriptions: smap = ".Dumper($gmap->{$dname}));
|
||||||
if(defined($smap)) {
|
if(defined($smap)) {
|
||||||
# foreach my $rname (keys %{$smap}) {
|
|
||||||
# my $topic = $smap->{$rname}->{'topic'};
|
|
||||||
# $topicMap->{$topic}=1 if defined $topic;
|
|
||||||
# }
|
|
||||||
foreach my $rmap (@{$smap}) {
|
foreach my $rmap (@{$smap}) {
|
||||||
my $topic = $rmap->{'topic'};
|
my $topic = $rmap->{'topic'};
|
||||||
#$topicMap->{$topic}=1 if defined $topic;
|
|
||||||
$topicMap->{$topic}->{'qos'}=$rmap->{'qos'} if defined $topic;
|
$topicMap->{$topic}->{'qos'}=$rmap->{'qos'} if defined $topic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1060,17 +1003,14 @@ sub UpdateSubscriptions($) {
|
|||||||
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> UpdateSubscriptions: subscribe: topic = ".Dumper($topic).", qos = ".Dumper($qos).", retain = ".Dumper($retain));
|
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> UpdateSubscriptions: subscribe: topic = ".Dumper($topic).", qos = ".Dumper($qos).", retain = ".Dumper($retain));
|
||||||
client_subscribe_topic($hash,$topic,$qos,$retain) ;
|
client_subscribe_topic($hash,$topic,$qos,$retain) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub RemoveAllSubscripton($) {
|
sub RemoveAllSubscripton($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
#return unless defined $hash->{+HELPER}->{+IO_DEV_TYPE};
|
|
||||||
return unless isIODevMQTT($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
return unless isIODevMQTT($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
||||||
|
|
||||||
# alle Subscription kuendigen (beim undefine)
|
# alle Subscription kuendigen (beim undefine)
|
||||||
|
|
||||||
if (defined($hash->{subscribe}) and (@{$hash->{subscribe}})) {
|
if (defined($hash->{subscribe}) and (@{$hash->{subscribe}})) {
|
||||||
my $msgid = send_unsubscribe($hash->{IODev},
|
my $msgid = send_unsubscribe($hash->{IODev},
|
||||||
topics => [@{$hash->{subscribe}}],
|
topics => [@{$hash->{subscribe}}],
|
||||||
@ -1084,7 +1024,7 @@ sub RemoveAllSubscripton($) {
|
|||||||
|
|
||||||
sub InitializeDevices($) {
|
sub InitializeDevices($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
# alles neu aifbauen
|
# alles neu aufbauen
|
||||||
# Deviceliste neu aufbauen, ggf., alte subscription kuendigen, neue abonieren
|
# Deviceliste neu aufbauen, ggf., alte subscription kuendigen, neue abonieren
|
||||||
CreateDevicesTable($hash);
|
CreateDevicesTable($hash);
|
||||||
#UpdateSubscriptions($hash);
|
#UpdateSubscriptions($hash);
|
||||||
@ -1102,11 +1042,6 @@ my %getsDebug = (
|
|||||||
"debugReinit" => "",
|
"debugReinit" => "",
|
||||||
"debugShowPubRec" => ""
|
"debugShowPubRec" => ""
|
||||||
);
|
);
|
||||||
# if ($DEBUG) {
|
|
||||||
# $getsDebug{"debugInfo"}="";
|
|
||||||
# $getsDebug{"debugReinit"}="";
|
|
||||||
# $getsDebug{"debugShowPubRec"}="";
|
|
||||||
# }
|
|
||||||
|
|
||||||
sub Get($$$@) {
|
sub Get($$$@) {
|
||||||
my ($hash, $name, $command, $args) = @_;
|
my ($hash, $name, $command, $args) = @_;
|
||||||
@ -1225,21 +1160,15 @@ sub Get($$$@) {
|
|||||||
}
|
}
|
||||||
sub Notify() {
|
sub Notify() {
|
||||||
my ($hash,$dev) = @_;
|
my ($hash,$dev) = @_;
|
||||||
#Log3($hash->{NAME},1,">>>>>>>>>>>>>> : ".Dumper($dev));
|
|
||||||
if( $dev->{NAME} eq "global" ) {
|
if( $dev->{NAME} eq "global" ) {
|
||||||
#Log3($hash->{NAME},1,">>>>>>>>>>>>>> : ".Dumper($dev));
|
|
||||||
if( grep(m/^(INITIALIZED|REREADCFG)$/, @{$dev->{CHANGED}}) ) {
|
if( grep(m/^(INITIALIZED|REREADCFG)$/, @{$dev->{CHANGED}}) ) {
|
||||||
#Log3($hash->{NAME},1,">INITIALIZED>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>: ".Dumper(AttrVal($hash->{NAME},"IODev",'-')));
|
firstInit($hash);
|
||||||
#Log3($hash->{NAME},1,">INITIALIZED>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>: ".Dumper($main::attr{$hash->{NAME}}));
|
|
||||||
checkFirstInit($hash);
|
|
||||||
#InternalTimer(gettimeofday()+1, "MQTT::GENERIC_BRIDGE::checkFirstInit", $hash, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
my $max = int(@{$dev->{CHANGED}});
|
my $max = int(@{$dev->{CHANGED}});
|
||||||
for (my $i = 0; $i < $max; $i++) {
|
for (my $i = 0; $i < $max; $i++) {
|
||||||
my $s = $dev->{CHANGED}[$i];
|
my $s = $dev->{CHANGED}[$i];
|
||||||
$s = "" if(!defined($s));
|
$s = "" if(!defined($s));
|
||||||
#Log3($hash->{NAME},1,">>>>>>>>>>>>>> : ".Dumper($s));
|
|
||||||
if($s =~ m/^RENAMED ([^ ]*) ([^ ]*)$/) {
|
if($s =~ m/^RENAMED ([^ ]*) ([^ ]*)$/) {
|
||||||
# Device renamed
|
# Device renamed
|
||||||
my ($old, $new) = ($1, $2);
|
my ($old, $new) = ($1, $2);
|
||||||
@ -1290,43 +1219,12 @@ sub Notify() {
|
|||||||
return "" unless ($size>0);
|
return "" unless ($size>0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#Log3($hash->{NAME},1,"Notify for $dev->{NAME}>>>>>>>> ".Dumper($dev)) if $dev->{NAME} eq 'sonoff_8';
|
|
||||||
#Log3($hash->{NAME},1,"Notify for $dev->{NAME}>>>>>>>> ".Dumper(deviceEvents($dev,1))) if $dev->{NAME} eq 'sonoff_8';
|
|
||||||
|
|
||||||
#foreach my $event (@{$dev->{CHANGED}}) {
|
|
||||||
foreach my $event (@{deviceEvents($dev,1)}) {
|
foreach my $event (@{deviceEvents($dev,1)}) {
|
||||||
#Log3($hash->{NAME},1,"Notify for $dev->{NAME} event: $event STATE: $dev->{STATE}");
|
#Log3($hash->{NAME},1,"Notify for $dev->{NAME} event: $event STATE: $dev->{STATE}");
|
||||||
$event =~ /^([^:]+)(: )?(.*)$/;
|
$event =~ /^([^:]+)(: )?(.*)$/;
|
||||||
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> event: $event, '".((defined $1) ? $1 : "-undef-")."', '".((defined $3) ? $3 : "-undef-")."'");
|
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> event: $event, '".((defined $1) ? $1 : "-undef-")."', '".((defined $3) ? $3 : "-undef-")."'");
|
||||||
my $devreading = undef;
|
my $devreading = $1;
|
||||||
my $devval = undef;
|
my $devval = $3;
|
||||||
# pruefen, ob der neue Wert dem 'state' des Devices entspricht
|
|
||||||
# {$defs{$dev}{STATE}}
|
|
||||||
#Log3($hash->{NAME},1,"Notify for $dev->{NAME} : state: ".ReadingsVal($dev->{NAME},'state','nö'));
|
|
||||||
# Wenn Readings 'state' existiert. Nicht STATE! Wenn der Wert dem neuen 'change' gleich ist. Wenn der ReadingsTimestamp frisch ist => dann state annehmen.
|
|
||||||
#my $vState = ReadingsVal($dev->{NAME},'state',undef);
|
|
||||||
#my $tState = ReadingsTimestamp($dev->{NAME},'state',undef);
|
|
||||||
#my $aState = ReadingsAge($dev->{NAME},'state',-1);
|
|
||||||
#Log3($hash->{NAME},1,"Notify for $dev->{NAME}>>>>>>>> vState: $vState, tState: $tState, age: $aState ");# if $hash->{NAME} eq 'sonoff_8';
|
|
||||||
#unless (defined ($vState) and ($vState eq $event) and ($aState <= 1)) {
|
|
||||||
#if (!defined ($vState) or ($vState ne $event)) {
|
|
||||||
#if ($dev->{STATE} ne $event) {
|
|
||||||
#if (defined $3 and $3 ne "") {
|
|
||||||
# $vState = 'undef' unless defined $vState;
|
|
||||||
#Log3($hash->{NAME},1,"Notify recognise state change = no : event: $event, old_state: $vState, state age: $aState");
|
|
||||||
#send reading=$1 value=$3
|
|
||||||
#publishDeviceUpdate($hash, $dev, $1, $3);
|
|
||||||
$devreading = $1;
|
|
||||||
$devval = $3;
|
|
||||||
# } else {
|
|
||||||
# #Log3($hash->{NAME},1,"Notify recognise state change = yes : event: $event, old_state: $vState, state age: $aState");
|
|
||||||
# #send reading=state value=$1
|
|
||||||
# #publishDeviceUpdate($hash, $dev, 'state', $1);
|
|
||||||
# $devreading = 'state';
|
|
||||||
# #$devval = $1;
|
|
||||||
# $devval = $event;
|
|
||||||
# }
|
|
||||||
#Log3($hash->{NAME},1,"Notify for $dev->{NAME} reading: $devreading, val: $devval");
|
|
||||||
if(defined $devreading and defined $devval) {
|
if(defined $devreading and defined $devval) {
|
||||||
# wenn ueberwachtes device and reading
|
# wenn ueberwachtes device and reading
|
||||||
publishDeviceUpdate($hash, $dev, $devreading, $devval);
|
publishDeviceUpdate($hash, $dev, $devreading, $devval);
|
||||||
@ -1438,7 +1336,7 @@ sub isTypeDevReadingExcluded($$$$) {
|
|||||||
|
|
||||||
sub doPublish($$$$$) {
|
sub doPublish($$$$$) {
|
||||||
my ($hash,$topic,$message,$qos,$retain) = @_;
|
my ($hash,$topic,$message,$qos,$retain) = @_;
|
||||||
#return unless defined $hash->{+HELPER}->{+IO_DEV_TYPE};
|
|
||||||
if (isIODevMQTT2($hash)){ #if ($hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER') {
|
if (isIODevMQTT2($hash)){ #if ($hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER') {
|
||||||
# TODO: publish MQTT2
|
# TODO: publish MQTT2
|
||||||
|
|
||||||
@ -1524,12 +1422,6 @@ sub publishDeviceUpdate($$$$) {
|
|||||||
doPublish($hash,$topic,$message,$qos,$retain);
|
doPublish($hash,$topic,$message,$qos,$retain);
|
||||||
}
|
}
|
||||||
|
|
||||||
# #Log3($hash->{NAME},1,"publishDeviceUpdate for $devn, $reading, $value, topic: $topic, message: $message");
|
|
||||||
# if(defined($topic) and defined($message)) {
|
|
||||||
# $msgid = send_publish($hash->{IODev}, topic => $topic, message => $message, qos => $qos, retain => $retain);
|
|
||||||
# readingsSingleUpdate($hash,"transmission-state","outgoing publish sent",1);
|
|
||||||
# }
|
|
||||||
# $hash->{message_ids}->{$msgid}++ if defined $msgid;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1597,26 +1489,20 @@ sub Attr($$$$) {
|
|||||||
}
|
}
|
||||||
last;
|
last;
|
||||||
};
|
};
|
||||||
#
|
|
||||||
$attribute eq "IODev" and do {
|
$attribute eq "IODev" and do {
|
||||||
my $ioDevType = undef;
|
my $ioDevType = undef;
|
||||||
$ioDevType = $defs{$value}{TYPE} if defined ($value) and defined ($defs{$value});
|
$ioDevType = $defs{$value}{TYPE} if defined ($value) and defined ($defs{$value});
|
||||||
$hash->{+HELPER}->{+IO_DEV_TYPE} = $ioDevType;
|
$hash->{+HELPER}->{+IO_DEV_TYPE} = $ioDevType;
|
||||||
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: attr: ??? IODev");
|
|
||||||
|
|
||||||
if ($command eq "set") {
|
if ($command eq "set") {
|
||||||
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: attr: set IODev");
|
|
||||||
my $oldValue = $main::attr{$name}{IODev};
|
my $oldValue = $main::attr{$name}{IODev};
|
||||||
if ($main::init_done) {
|
if ($main::init_done) {
|
||||||
#unless (defined ($hash->{IODev}) and ($hash->{IODev} eq $value) ) {
|
|
||||||
unless (defined ($oldValue) and ($oldValue eq $value) ) {
|
unless (defined ($oldValue) and ($oldValue eq $value) ) {
|
||||||
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: attr: change IODev");
|
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: attr: change IODev");
|
||||||
MQTT::client_stop($hash) if defined($main::attr{$name}{IODev}) and ($main::attr{$name}{IODev} eq 'MQTT');
|
MQTT::client_stop($hash) if defined($main::attr{$name}{IODev}) and ($main::attr{$name}{IODev} eq 'MQTT');
|
||||||
$main::attr{$name}{IODev} = $value;
|
$main::attr{$name}{IODev} = $value;
|
||||||
#$hash->{IODev} = $value;
|
firstInit($hash);
|
||||||
reFirstInit($hash);
|
|
||||||
#RemoveAllSubscripton($hash);
|
|
||||||
#MQTT::client_start($hash) if defined ($ioDevType) and ($ioDevType eq 'MQTT');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1635,16 +1521,20 @@ sub ioDevConnect($) {
|
|||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
return if isIODevMQTT2($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
return if isIODevMQTT2($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
||||||
|
|
||||||
|
# ueberraschenderweise notwendig fuer eine subscribe-Initialisierung.
|
||||||
MQTT::client_start($hash) if isIODevMQTT($hash);
|
MQTT::client_start($hash) if isIODevMQTT($hash);
|
||||||
|
|
||||||
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: ioDevConnect");
|
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: ioDevConnect");
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ioDevDisconnect($) {
|
sub ioDevDisconnect($) {
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
return if isIODevMQTT2($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
return if isIODevMQTT2($hash); #if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
|
||||||
|
|
||||||
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: ioDevDisconnect");
|
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: ioDevDisconnect");
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user