2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-25 03:39:21 +00:00

fix: define parameters

git-svn-id: https://svn.fhem.de/fhem/trunk@17254 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
hexenmeister 2018-09-02 13:17:10 +00:00
parent f91e47ad00
commit 27cfdd9258

View File

@ -153,6 +153,7 @@ BEGIN {
use constant {
HELPER => ".helper",
IO_DEV_TYPE => "IO_DEV_TYPE",
HS_TAB_NAME_DEVICES => "devices",
HS_TAB_NAME_SUBSCRIBE => "subscribeTab", # subscribed topics
@ -206,8 +207,9 @@ sub isDebug($) {
# Device define
sub Define() {
my ( $hash, $def, $prefix, $devspec ) = @_;
my ($hash, $def) = @_;
# Definition :=> defmod mqttGeneric MQTT_GENERIC_BRIDGE [prefix] [devspec]
my($name, $type, $prefix, $devspec) = split("[ \t][ \t]*", $def);
$prefix="mqtt" unless defined $prefix; # default prefix is 'mqtt'
@ -217,6 +219,8 @@ sub Define() {
$hash->{+HS_PROP_NAME_PREFIX}=$prefix; # store in device hash
$hash->{+HS_PROP_NAME_DEVSPEC} = defined($devspec)?$devspec:".*";
Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> [$hash->{NAME}] Define: params: $name, $type, $hash->{+HS_PROP_NAME_PREFIX}, $hash->{+HS_PROP_NAME_DEVSPEC}");
$hash->{+HS_PROP_NAME_GLOBAL_EXCLUDES_READING} = {};
$hash->{+HS_PROP_NAME_GLOBAL_EXCLUDES_TYPE} = {};
$hash->{+HS_PROP_NAME_GLOBAL_EXCLUDES_DEVICES} = {};
@ -247,7 +251,7 @@ sub Define() {
sub Undefine() {
my ($hash) = @_;
RemoveInternalTimer($hash);
MQTT::client_stop($hash);
MQTT::client_stop($hash) if defined($hash->{+HELPER}->{+IO_DEV_TYPE}) and $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
removeOldUserAttr($hash);
}
@ -271,6 +275,7 @@ sub firstInit($) {
removeOldUserAttr($hash, $prefix_old, $devspec);
}
my @devices = devspec2array($devspec);
Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> [$hash->{NAME}] firstInit: addToDevAttrList: $prefix");
foreach my $dev (@devices) {
addToDevAttrList($dev, $prefix.CTRL_ATTR_NAME_DEFAULTS.":textField-long");
addToDevAttrList($dev, $prefix.CTRL_ATTR_NAME_ALIAS.":textField-long");
@ -296,7 +301,7 @@ sub firstInit($) {
InternalTimer(gettimeofday()+$hash->{+HELPER}->{+HS_PROP_NAME_INTERVAL}, "MQTT::GENERIC_BRIDGE::timerProc", $hash, 0);
}
MQTT::client_start($hash);
MQTT::client_start($hash) if defined $hash->{+HELPER}->{+IO_DEV_TYPE} and $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
}
}
@ -316,7 +321,8 @@ sub timerProc($) {
# Parameter: Bridge-Hash
sub isConnected($) {
my $hash = shift;
return MQTT::isConnected($hash->{IODev});
return MQTT::isConnected($hash->{IODev}) if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
return 1 if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
}
sub updateDevCount($) {
@ -899,6 +905,9 @@ sub UpdateSubscriptions($) {
updateDevCount($hash);
return unless defined $hash->{+HELPER}->{+IO_DEV_TYPE};
return if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
my $topicMap = {};
my $gmap = $hash->{+HS_TAB_NAME_DEVICES};
if(defined($gmap)) {
@ -949,7 +958,7 @@ sub UpdateSubscriptions($) {
$qos = 0 unless defined $qos;
my $retain = 0; # not supported
#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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
@ -957,6 +966,9 @@ sub UpdateSubscriptions($) {
sub RemoveAllSubscripton($) {
my ($hash) = @_;
return unless defined $hash->{+HELPER}->{+IO_DEV_TYPE};
return if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
# alle Subscription kuendigen (beim undefine)
if (defined($hash->{subscribe}) and (@{$hash->{subscribe}})) {
@ -1303,17 +1315,25 @@ sub isTypeDevReadingExcluded($$$$) {
sub doPublish($$$$$) {
my ($hash,$topic,$message,$qos,$retain) = @_;
return unless defined $hash->{+HELPER}->{+IO_DEV_TYPE};
if ($hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER') {
# TODO: publish MQTT2
#Log3($hash->{NAME},1,"publishDeviceUpdate for $devn, $reading, $value, topic: $topic, message: $message");
my $msgid;
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->{+HELPER}->{+HS_PROP_NAME_OUTGOING_CNT}++;
readingsSingleUpdate($hash,"outgoing-count",$hash->{+HELPER}->{+HS_PROP_NAME_OUTGOING_CNT},1);
#Log3($hash->{NAME},1,"publish: $topic => $message");
return;
} elsif ($hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT') {
#Log3($hash->{NAME},1,"publishDeviceUpdate for $devn, $reading, $value, topic: $topic, message: $message");
my $msgid;
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->{+HELPER}->{+HS_PROP_NAME_OUTGOING_CNT}++;
readingsSingleUpdate($hash,"outgoing-count",$hash->{+HELPER}->{+HS_PROP_NAME_OUTGOING_CNT},1);
#Log3($hash->{NAME},1,"publish: $topic => $message");
}
$hash->{message_ids}->{$msgid}++ if defined $msgid;
} else {
# TODO: Error unknown IO
}
$hash->{message_ids}->{$msgid}++ if defined $msgid;
}
sub publishDeviceUpdate($$$$) {
@ -1454,13 +1474,17 @@ sub Attr($$$$) {
};
#
$attribute eq "IODev" and do {
my $ioDevType = undef;
$ioDevType = $defs{$value}{TYPE} if defined $defs{$value};
$hash->{+HELPER}->{+IO_DEV_TYPE} = $ioDevType;
if ($main::init_done) {
if ($command eq "set") {
MQTT::client_stop($hash);
MQTT::client_stop($hash) if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
$main::attr{$name}{IODev} = $value;
MQTT::client_start($hash);
MQTT::client_start($hash) if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
} else {
MQTT::client_stop($hash);
MQTT::client_stop($hash) if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT';
}
}
last;
@ -1471,12 +1495,14 @@ sub Attr($$$$) {
sub ioDevConnect($) {
my $hash = shift;
return if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: ioDevConnect");
# TODO
}
sub ioDevDisconnect($) {
my $hash = shift;
return if $hash->{+HELPER}->{+IO_DEV_TYPE} eq 'MQTT2_SERVER';
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: ioDevDisconnect");
# TODO
}
@ -1511,7 +1537,7 @@ sub doSetUpdate($$$$$) {
sub onmessage($$$) {
my ($hash,$topic,$message) = @_;
CheckInitialization($hash);
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: onmessage: $topic => $message");
Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE DEBUG: onmessage: $topic => $message");
$hash->{+HELPER}->{+HS_PROP_NAME_INCOMING_CNT}++;
readingsSingleUpdate($hash,"incoming-count",$hash->{+HELPER}->{+HS_PROP_NAME_INCOMING_CNT},1);