From b9ed3f47d5af04d3672041679ac543cf808acd36 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Wed, 18 Mar 2020 08:23:24 +0000 Subject: [PATCH] 77_SMAEM: add define option git-svn-id: https://svn.fhem.de/fhem/trunk@21445 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/77_SMAEM.pm | 30 ++++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index b1c5ff412..0e15e7da0 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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: 77_SMAEM: add define option - bugfix: 98_WeekdayTimer: prevent crashes related to weekprofile changes - bugfix: 93_DbRep: fix user rights check for index operation - bugfix: 73_AutoShuttersControl: fix SleepPos conditions in residents diff --git a/fhem/FHEM/77_SMAEM.pm b/fhem/FHEM/77_SMAEM.pm index e07a8c17f..78653c9de 100644 --- a/fhem/FHEM/77_SMAEM.pm +++ b/fhem/FHEM/77_SMAEM.pm @@ -31,11 +31,13 @@ use strict; use warnings; use bignum; use IO::Socket::Multicast; +eval "use IO::Interface;1" or my $IOInterfaceAbsent = 1; use Blocking; eval "use FHEM::Meta;1" or my $modMetaAbsent = 1; # Versions History by DS_Starter our %SMAEM_vNotesIntern = ( + "4.1.0" => "17.03.2020 add define option ", "4.0.1" => "10.02.2020 fix perl warning Forum: https://forum.fhem.de/index.php/topic,51569.msg1021988.html#msg1021988", "4.0.0" => "16.12.2019 change module to OBIS metric resolution, change Readings Lx_THD to Lx_Strom, FirmwareVersion to SoftwareVersion ". "new attribute \"noCoprocess\", many internal code changes ", @@ -167,6 +169,9 @@ sub SMAEM_Define ($$) { my ($success, $gridin_sum, $gridout_sum); my $socket; + my @a = split("[ \t][ \t]*", $def); + my $if = $a[2] ? $a[2] : ""; + $hash->{INTERVAL} = 60; $hash->{HELPER}{FAULTEDCYCLES} = 0; $hash->{HELPER}{STARTTIME} = time(); @@ -186,7 +191,15 @@ sub SMAEM_Define ($$) { Log3 $hash, 3, "SMAEM $name - Multicast socket opened"; - $socket->mcast_add('239.12.255.254'); + if($a[2]) { + eval { $socket->mcast_add('239.12.255.254',$if); }; + if ($@) { + return "Socket error in define ('239.12.255.254',$if): $@"; + } + } else { + $socket->mcast_add('239.12.255.254'); + } + $hash->{TCPDev} = $socket; $hash->{FD} = $socket->fileno(); @@ -195,6 +208,8 @@ sub SMAEM_Define ($$) { $hash->{HELPER}{MODMETAABSENT} = 1 if($modMetaAbsent); # Modul Meta.pm nicht vorhanden + Log3($name, 3, "$name - The perl module \"IO::Interface\" is missing. You should install it.") if($IOInterfaceAbsent); + # Versionsinformationen setzen SMAEM_setVersionInfo($hash); @@ -1085,9 +1100,10 @@ return; Define
    - define <name> SMAEM
    + define <name> SMAEM [<interface>]

    Defines a SMA Energy Meter (SMAEM), a bidirectional energy meter/counter used in photovoltaics. + The optional parameter interface defines a specific network interface to use, e.g. "eth0".

    You need at least one SMAEM on your local subnet or behind a multicast enabled network of routers to receive multicast messages from the SMAEM over the multicast group 239.12.255.254 on udp/9522. Multicast messages are sent by SMAEM once a second (firmware 1.02.04.R, March 2016). @@ -1110,8 +1126,8 @@ return; Set
    • reset
      - The automatically generated file "cacheSMAEM" will be deleted. Then the file will be recreated again by the module. - This function is used to reset the device in possible case of error condition, but may be executed at all times. + The automatically created file "cacheSMAEM" is deleted. The file is reinitialized by the module. + This function is used to reset a possible error state of the device, but can also be executed at any time.

    @@ -1194,9 +1210,10 @@ return; Define
      - define <name> SMAEM
      + define <name> SMAEM [<Interface>]

      - Definiert ein SMA Energy Meter (SMAEM), einen bidirektionalen Stromzähler, der häufig in Photovolatikanlagen der Firma SMA zum Einsatz kommt. + Definiert ein SMA Energy Meter (SMAEM), einen bidirektionalen Stromzähler, der häufig in Photovolatikanlagen der Firma SMA zum Einsatz kommt. + Der optionale Parameter Interface legt das zu benutzende Netzwerk-Interface fest, zum Beispiel "eth0".

      Sie brauchen mindest ein SMAEM in Ihrem lokalen Netzwerk oder hinter einen multicastfähigen Netz von Routern, um die Daten des SMAEM über die Multicastgruppe 239.12.255.254 auf udp/9522 zu empfangen. Die Multicastpakete werden vom SMAEM einmal pro Sekunde ausgesendet (firmware 1.02.04.R, März 2016). @@ -1339,6 +1356,7 @@ return; "Blocking": 0 }, "recommends": { + "IO::Interface": 0, "FHEM::Meta": 0 }, "suggests": {