Hallo,
Wenn man von FHEM die öffentliche IP ermitteln möchte kann man öffentliche Server ansurfen und die zeigen einem die gerade genutzte IP an. Ich habe mal ein paar Dienste ausprobiert, die man ohne Anmeldung nutzen kann und dazu ein HTTPMOD erstellt:
defmod PublicIP HTTPMOD none 0
attr PublicIP enforceGoodReadingNames 1
attr PublicIP extractAllJSON 1
attr PublicIP get01Name ipify.org
attr PublicIP get01URL https://api64.ipify.org/?format=json
attr PublicIP get02Name ipwho.de
attr PublicIP get02URL https://ipwho.de/json/
attr PublicIP get03Name ipinfo.io
attr PublicIP get03URL https://ipinfo.io/json/
attr PublicIP get04Name myip.com
attr PublicIP get04URL https://api.myip.com/
attr PublicIP stateFormat IP: ip
Testweise/temporär läuft das bei Cooltux: https://demo-fhem.cooltux.net/fhem?detail=PublicIP
...ich bekomme diese Info von meiner Fritzbox und dem Modul geliefert.
box_ipv4_Extern
box_ipv6_Extern
box_ipv6_Prefix
Für die mit der Fritzbox arbeiten.
Gruss
Enno
Geht auch als Einzeiler:
defmod InternetIP at +*00:10:00 {readingsSingleUpdate( $defs{ $SELF }, 'IPv4', GetFileFromURL( 'https://v4.ident.me/',5,,1,0 ), 1 );return}
Bei mir werden die Adressen in den %data hash geschrieben, damit sind sie FHEM-weit als Variablen verfügbar.
sub ip_test {
use Net::Address::IP::Local;
my $address = eval {Net::Address::IP::Local->public};
$data{myip} = $address unless ($@);
$address = eval {Net::Address::IP::Local->public_ipv4};
$data{myipv4} = $address unless ($@);
$address = eval { Net::Address::IP::Local->public_ipv6};
$data{myipv6} = $address unless ($@);
return;
}
Hey, danke für die vielen, alternativen Methoden.
defmod PublicIP HTTPMOD none 0
attr PublicIP enforceGoodReadingNames 1
attr PublicIP extractAllJSON 1
attr PublicIP get01Name ipify.org
attr PublicIP get01URL https://api64.ipify.org/?format=json
attr PublicIP get02Name ipwho.de
attr PublicIP get02URL https://ipwho.de/json/
attr PublicIP get03Name ipinfo.io
attr PublicIP get03URL https://ipinfo.io/json/
attr PublicIP get04Name myip.com
attr PublicIP get04URL https://api.myip.com/
attr PublicIP get05Name ident.me
attr PublicIP get05URL https://a.ident.me/json
attr PublicIP stateFormat IP: ip
Wenn man es kompakt haben möchte und man sich für einen Anbieter entscheiden kann (sagen wir mal ident.me, alle zehn Sekunden abfragen) wird die HTTPMOD Definition natürlich auch kürzer:
defmod PublicIP HTTPMOD https://a.ident.me/json 10
attr PublicIP extractAllJSON 1
attr PublicIP stateFormat IP: ip
@Jamo: GetFileFromURL() (https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURL) könnte in der Konfig bis zu fünf Sekunden blockieren, was erstmal nicht so wild ist, aber bei einer Funktion die alle zehn Minuten aufgerufen wird dann ggf. doch mal stört. Den Anbieter aus deinem Snippet habe ich mit aufgenommen, danke!
@enno: Klar, wenn man eine Fritzbox hat ist die Info IMHO sogar zu bevorzugen, da man dann nicht so sehr auf externe Dienste angewiesen ist (die ggf. auch mal ausfallen können). Falls die eigene Fritzbox ausfällt, ist man dann eh nicht im Internet und hat ganz andere Probleme :-)
@betateilchen: Das ist natürlich erstmal jeweils die lokale Adresse, ob einem das hilft hängt vom Netzwerk ab. Die öffentliche Adresse IPv4 Adresse ist häufig eine andere (bei NAT), bei IPv6 kann es ggf. identisch sein. Du weist das bestimmt, aber falls mal hier jemand drüber stolpert schreibe ich es lieber mit dran.
Soll ich das mal in eine Wiki-Seite packen, oder gibt es da schon eine?
Zitat von: Torxgewinde am 13 Juni 2025, 20:03:39Soll ich das mal in eine Wiki-Seite packen, oder gibt es da schon eine?
Das Thema wurde im Forum schon mehrfach, z.B. in 2013 behandelt:
https://forum.fhem.de/index.php?topic=12918.0
Das ist m.E. völlig ausreichend.
(offtopic)
defmod PublicIP HTTPMOD https://a.ident.me/json 10
Eine externe URL alle 10 Sekunden aufzurufen, finde ich komplett unsinnig.
Dann lieber auf Betriebssystemebene den IP Wechsel feststellen lassen und FHEM darüber informieren.
Und warum eigentlich HTTPMOD, wenn man in der url schon angibt, dass man json zurückhaben möchte? Dann ist doch JsonMod das Modul der Wahl. Aber vermutlich nutzt Du auch Excel zum Briefeschreiben 8)
--
@betateilchen
Danke für den Link – aber der Thread ist über zehn Jahre alt, und ein nennenserter Teil der damals verlinkten Dienste ist inzwischen offline. Insofern ist das Thema durchaus wieder bzw. immer noch aktuell.
Was den Ton betrifft: Fachliche Kritik ist immer willkommen, aber persönliche Spitzen wie der Excel-Vergleich helfen der Diskussion nicht weiter.
Zitat von: Torxgewinde am 13 Juni 2025, 21:28:04Danke für den Link – aber der Thread ist über zehn Jahre alt, und ein nennenserter Teil der damals verlinkten Dienste ist inzwischen offline.
Aber an den damals beschriebenen
Lösungswegen hat sich auch nach 10 Jahren wenig bis nichts geändert. Und darauf kommt es doch an. Wenn Du jetzt einen Wiki-Artikel schreibst, sind die darin enthaltenen Informationen in 10 Jahren vermutlich genau so veraltet.
Zitat von: Torxgewinde am 13 Juni 2025, 20:03:39Die öffentliche Adresse IPv4 Adresse ist häufig eine andere (bei NAT)
ok, aber auch das ist lösbar:
sub myip {
use STUN::Client;
my $stun_client = STUN::Client->new;
$stun_client->stun_server('stun.ekiga.net');
my (undef, $result) = $stun_client->get;
return $result->{'attributes'}->{'0001'}->{'address'};
}
Meine Server laufen inzwischen alle ausschließlich mit IPv6, deshalb hatte ich das Thema NAT komplett verdrängt.
Zitat von: Torxgewinde am 13 Juni 2025, 21:28:04Was den Ton betrifft
Oh, sind wir hier im VHS-Kurs "wir töpfern einen Aschenbecher für Vati?"
Zitat von: Torxgewinde am 13 Juni 2025, 21:28:04Fachliche Kritik ist immer willkommen,
Die zwei Sätze vor dem augenzwinkernden Excel-Vergleich waren durchaus als ernstgemeinte fachliche und sachliche Kritik gedacht.
Zitat von: betateilchen am 13 Juni 2025, 21:53:35ok, aber auch das ist lösbar:
Naja gut, damit hat man jetzt nicht wirklich viel gewonnen. Ob man sich das nun extern per HTTP(S)-Request holt oder – ebenfalls extern – vom STUN-Server ...
Mit HTTPS ist das Zeug wenigstens verschlüsselt (und vermutlich ist auch das error handling von HTTPMOD ootb besser).
Ich habe die Infos als Wikiseite zusammengefasst: https://wiki.fhem.de/wiki/%C3%96ffentliche_IP-Adresse
Damit man nichts extra auf einem typischem Debian installieren muss, habe ich ein AT-Device, dass die IPs des FHEM Servers abfragt und auflistet, ergänzt. Als Testdevice ist es temporär bei Cooltux: https://demo-fhem.cooltux.net/fhem?detail=LocalIPs
define LocalIPs at +*00:01:00 {\
my $hash = $defs{$SELF};;\
my (@ipv4, @ipv6);;\
\
#Abfragen der IP Adressen mittels CLI:\
my $json = qx(ip -j addr show scope global);;\
my $data = decode_json($json);;\
\
for my $iface (@$data) {\
for my $addr (@{$iface->{addr_info} || []}) {\
next unless $addr->{local};;\
if ($addr->{family} eq 'inet') {\
push @ipv4, $addr->{local};;\
} elsif ($addr->{family} eq 'inet6') {\
push @ipv6, $addr->{local};;\
}\
}\
}\
\
readingsBeginUpdate($hash);;\
readingsBulkUpdate($hash, "allIPv4", join(',', @ipv4));;\
readingsBulkUpdate($hash, "allIPv6", join(',', @ipv6));;\
readingsEndUpdate($hash, 1);;\
}
attr LocalIPs alignTime 00:00:00
attr LocalIPs event-on-change-reading .*
attr LocalIPs stateFormat IPv4: allIPv4<br />IPv6: allIPv6
Cool, danke!
Vielleicht eine kleine Anmerkung: Mir ist gerade aufgefallen, dass es bei meiner Fritzbox keine Readings mit box_ip* gibt (6660 Cable, Mietgerät von Vodafone, im ex KabelBW/Unitymedia-Gebiet).
Müsste man vermutlich im Fritzbox-Modul anpassen, hat mich bis jetzt aber noch nicht gestört, weil ich die IP in FHEM nicht brauche.
Ich frage die IPv6-GUA außerhalb von FHEM über folgendes cURL ab:
#!/bin/bash
FRITZ_USER="<USER>"
FRITZ_PASS="<PASS>"
FRITZ_HOSTNAME="<HOST>"
FRITZ_IPV6_GUA=$(curl -s --max-time 10 \
--anyauth --user "${FRITZ_USER}:${FRITZ_PASS}" \
http://${FRITZ_HOSTNAME}:49000/upnp/control/wanipconnection1 \
-H "Content-Type: text/xml; charset="utf-8"" \
-H "SoapAction:urn:dslforum-org:service:WANIPConnection:1#GetExternalIPAddress" \
-d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:dslforum-org:service:WANIPConnection:1'></u:GetExternalIPAddress> </s:Body> </s:Envelope>" | egrep -o "(::)?[0-9a-fA-F]{1,4}(::?[0-9a-fA-F]{1,4}){1,7}(::)?")
if [ -z "$FRITZ_IPV6_GUA" ]; then
echo "Error! Can't get IPv6 GUA from FRITZ!Box"
exit 0
else
echo "FRITZ!Box IPv6 GUA is: $FRITZ_IPV6_GUA"
fi
Erinnere mich aber nicht mehr, woher ich den Schnipsel habe. Weiß auch nicht, wie man da die IPv4 kriegt, ist bei DS-lite aber sowieso egal. Das volle XML, das man zurückkriegt (wenn man egrep weglässt) lautet:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:GetExternalIPAddressResponse xmlns:u="urn:dslforum-org:service:WANIPConnection:1">
<NewExternalIPAddress>2a02:xxxx:xxx::xxx</NewExternalIPAddress>
</u:GetExternalIPAddressResponse>
</s:Body>
</s:Envelope>
Zitat von: betateilchen am 13 Juni 2025, 19:12:44sub ip_test {
use Net::Address::IP::Local;
my $address = eval {Net::Address::IP::Local->public};
$data{myip} = $address unless ($@);
$address = eval {Net::Address::IP::Local->public_ipv4};
$data{myipv4} = $address unless ($@);
$address = eval { Net::Address::IP::Local->public_ipv6};
$data{myipv6} = $address unless ($@);
return;
}
Hallo betateilchen,
ich hab die sub in 99_myUtils.pm reinkopiert, gespeichert und per reload verfügbar gemacht.
Ich brauche Unterstützung, wie ich den Inhalt verfügbar bekomme.
Mit
{ip_test()}
in der Kommandoteile bekomme ich kein Ergebnis zurück. Das notwendige Perl-Paket ist installiert. Im Logfile sehe ich keine Hinweise, die darauf hindeuten könnten, dass etwas in Schieflage ist.
Mein Fhem-Server hängt in einem eigenen IP-Bereich in meinem Netzwerk, das wiederum an der Fritzbox hängt. Könnte das die Ursache sein?
Viele Grüße Gisbert
Hallo Gisbert,
betateilchen hatte auch geschrieben:
Bei mir werden die Adressen in den %data hash geschrieben, damit sind sie FHEM-weit als Variablen verfügbar.
siehe auch: https://wiki.fhem.de/wiki/DevelopmentModuleIntro#:~:text=Der%20Hash%20einer%20Ger%C3%A4teinstanz,-Eine%20Besonderheit%20in&text=Der%20zentrale%20Speicherort%20f%C3%BCr%20Informationen,dem%20globalen%20Hash%20%DEfs%20abgelegt.
Grüße Jörg
Hallo passibe,
mich wundert, dass das FritzBox Modul Deine IPv4/IPv6 nicht ermittelt. Würdest Du bitte einmal das Ergebnis von
get get <name> tr064Command WANPPPConnection:1 wanpppconn1 GetInfo
posten.
Grüße Jörg
Zitat von: JoWiemann am 18 Juni 2025, 12:26:42Hallo passibe,
mich wundert, dass das FritzBox Modul Deine IPv4/IPv6 nicht ermittelt. Würdest Du bitte einmal das Ergebnis von
get get <name> tr064Command WANPPPConnection:1 wanpppconn1 GetInfo
posten.
Grüße Jörg
Ich habe zwar ein Reading für die IPv4, aber das passt nicht zur Antwort von get, welche aber zur Fritzbox passt.
Das Datum des Reading stammt von einer der letzten Störungsbeseitigungen und nicht von der letzten Aktualisierung.
Hi,
Zitat von: JoWiemann am 18 Juni 2025, 12:26:42das Ergebnis von
Code Auswählen Erweitern
get get <name> tr064Command WANPPPConnection:1 wanpppconn1 GetInfo
da kriege ich nur:
Service='WANPPPConnection:1' Control='wanpppconn1' Action='GetInfo'
----------------------------------------------------------------------
$VAR1 = {
'UPnPError' => {
'errorCode' => '401',
'errorDescription' => 'Invalid Action'
}
};
Hab mal mit den Werten aus dem cURL request rumprobiert, das hier funktioniert:
get <NAME> tr064Command WANIPConnection:1 wanipconnection1 GetExternalIPAddress
---
Service='WANIPConnection:1' Control='wanipconnection1' Action='GetExternalIPAddress'
----------------------------------------------------------------------
$VAR1 = {
'GetExternalIPAddressResponse' => {
'NewExternalIPAddress' => '2a02:xxxx:xxx::xxx'
}
};
Macht wohl auch Sinn, dass WANPPPConnection nichts ausgibt, sondern es WANIPConnection ist, weil ich mich bei DOCSIS eben nicht über PPPoE (wie bei DSL/FTTH) einlogge.
Vielleicht kannst du das ja dann für die Kabelboxen einbauen. Wenn ich mehr testen soll, sag gerne Bescheid!
Vielleicht noch ein paar mehr Infos, nachdem ich mal in der tr64desc.xml gelesen habe:
get <NAME> tr064Command WANIPConnection:1 wanipconnection1 GetInfo
---
Service='WANIPConnection:1' Control='wanipconnection1' Action='GetInfo'
----------------------------------------------------------------------
$VAR1 = {
'GetInfoResponse' => {
'NewConnectionType' => 'IP_Routed',
'NewDNSOverrideAllowed' => '1',
'NewEnable' => '1',
'NewPossibleConnectionTypes' => 'IP_Routed, IP_Bridged',
'NewConnectionTrigger' => 'OnDemand',
'NewExternalIPAddress' => '2a02:xxxx:xxx::xxx',
'NewMACAddress' => '48:5D:35:xx:xx:xx',
'NewUptime' => '2457037',
'NewDNSEnabled' => '1',
'NewName' => 'internet',
'NewLastConnectionError' => 'ERROR_NONE',
'NewDNSServers' => '2a02:908:2:b::1, 2a02:908:2:a::1',
'NewRSIPAvailable' => '0',
'NewConnectionStatus' => 'Connected',
'NewRouteProtocolRx' => 'Off',
'NewNATEnabled' => '1'
}
};
get <NAME> tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetCommonLinkProperties
---
Service='WANCommonInterfaceConfig:1' Control='wancommonifconfig1' Action='GetCommonLinkProperties'
----------------------------------------------------------------------
$VAR1 = {
'GetCommonLinkPropertiesResponse' => {
'NewLayer1DownstreamMaxBitRate' => '273920000',
'NewX_AVM-DE_DownstreamCurrentMaxSpeed' => '31238',
'NewX_AVM-DE_UpstreamCurrentUtilization' => '3003,2802,3679,1786,5153,5343,2572,16984,3214,4109,9354,3979,2887,1560,874,12711,1626,3257,1840,3108',
'NewX_AVM-DE_DownstreamCurrentUtilization' => '5474,9271,8996,11246,2186,5182,19059,4730,31238,887,1629,7386,9381,3127,1344,29896,7989,4140,8864,3548',
'NewLayer1UpstreamMaxBitRate' => '52480000',
'NewWANAccessType' => 'X_AVM-DE_Cable',
'NewPhysicalLinkStatus' => 'Up',
'NewX_AVM-DE_UpstreamCurrentMaxSpeed' => '16984'
}
};
Hallo passibe,
im FritzBox Modul prüfe ich für die Cable Boxen das Ergebnis von get get <name> tr064Command WANPPPConnection:1 wanpppconn1 GetInfo
und ermittle dann die IPv4/6 über die TR064 Funktion WANIPConnection:1. Somit sollte box_ipv4 und box_ipv6 vorhanden sein.
Grüße Jörg
Hi, dann läuft bei mir wohl was schief.
Vielleicht hängt das damit zusammen, dass NewExternalIPAddress bei mir direkt schon eine IPv6 ist?
Wobei, ich habe mal mit verbose 5 getestet und sehe da nur 500er:
2025.06.18 14:05:11 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6551] - EXPANDED:uptimeConnect- start getting TR064 data
2025.06.18 14:05:11 4:[box | 6660 | 252.07.58 | SOAP_Request.12580] - EXPANDED:SOAP response error: 500 Internal Server Error
2025.06.18 14:05:11 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6555] - EXPANDED:SOAP-ERROR -> SOAP response error: 500 Internal Server Error
2025.06.18 14:05:11 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6586] - EXPANDED:uptimeConnect- end getting TR064 data
2025.06.18 14:05:11 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6591] - EXPANDED:ipExtern- start getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | SOAP_Request.12580] - EXPANDED:SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6597] - EXPANDED:SOAP-ERROR -> SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6610] - EXPANDED:ipExtern- end getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6618] - EXPANDED:ipv6 - start getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | SOAP_Request.12580] - EXPANDED:SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6625] - EXPANDED:SOAP/TR064-ERROR -> SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Add_Reading.7228] - EXPANDED:box_ipv6_Extern:
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6638] - EXPANDED:ipv6 - end getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6643] - EXPANDED:ipv6_Prefix - start getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | SOAP_Request.12580] - EXPANDED:SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6650] - EXPANDED:SOAP/TR064-ERROR -> SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Add_Reading.7228] - EXPANDED:box_ipv6_Extern:
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6663] - EXPANDED:ipv6_Prefix - start getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6667] - EXPANDED:AccessType - start getting TR064 data
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | SOAP_Request.12580] - EXPANDED:SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6674] - EXPANDED:SOAP/TR064-ERROR -> SOAP response error: 500 Internal Server Error
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Add_Reading.7228] - EXPANDED:box_wan_AccessType:
2025.06.18 14:05:12 4:[box | 6660 | 252.07.58 | Readout_Run_Web_TR064.6693] - EXPANDED:AccessType - end getting TR064 data
Irgendwie scheint da also der SOAP Aufruf nicht zu passen?
get <NAME> tr064Command WANIPConnection:1 wanipconnection1 GetInfo
funktioniert aber nach wie vor.
Hallo passibe,
vielen Dank für die Rückmeldung. Ist aber ein Fehler im Code oder eine Änderung von AVM, die ich nicht mitbekommen habe. Muss ich mir jetzt mal genauer ansehen.
Ich würde das Thema dann ab jetzt im passenden Bereich für das FritzBox Modul weiter bearbeiten. https://forum.fhem.de/index.php?msg=1343435
Grüße Jörg
Zitat von: Gisbert am 18 Juni 2025, 11:51:40in der Kommandoteile bekomme ich kein Ergebnis zurück. Das notwendige Perl-Paket ist installiert. Im Logfile sehe ich keine Hinweise, die darauf hindeuten könnten, dass etwas in Schieflage ist.
Den Code kann man auch so ausprobieren:
define at_number at +*00:10 {\
use Net::Address::IP::Local;;\
my $address = eval {Net::Address::IP::Local->public};;\
$data{myip} = $address unless ($@);;\
$address = eval {Net::Address::IP::Local->public_ipv4};;\
$data{myipv4} = $address unless ($@);;\
$address = eval { Net::Address::IP::Local->public_ipv6};;\
$data{myipv6} = $address unless ($@);;\
\
my $hash = $defs{$SELF};;\
readingsBeginUpdate($hash);;\
readingsBulkUpdate($hash, "IP", $data{myip});;\
readingsBulkUpdate($hash, "IPv4", $data{myipv4});;\
readingsBulkUpdate($hash, "IPv6", $data{myipv6});;\
readingsEndUpdate($hash, 1);;\
}
Testweise/Temporär auch bei Cooltux: https://demo-fhem.cooltux.net/fhem?detail=at_number&fw_id=#
Der Snippet von @betateilchen ermittelt allerdings maximal eine IPv4 und maximal eine IPv6 Adresse. Sollte dein FHEM mehrere Adressen haben tauchen diese nicht auf (Doku dazu: https://metacpan.org/pod/Net::Address::IP::Local (https://metacpan.org/pod/Net::Address::IP::Local), falls das Perl Modul nicht installiert ist dann
sudo apt install libnet-address-ip-local-perl). Der Snippet (https://forum.fhem.de/index.php?topic=141872.msg1343332#msg1343332) der im Kern das Programm "
ip" nutzt kann mehrere IPs auflisten.