FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 13 Juni 2025, 16:49:15

Titel: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Torxgewinde am 13 Juni 2025, 16:49:15
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: enno am 13 Juni 2025, 18:12:30
...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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Jamo am 13 Juni 2025, 18:35:17
Geht auch als Einzeiler:
defmod InternetIP at +*00:10:00 {readingsSingleUpdate( $defs{ $SELF }, 'IPv4', GetFileFromURL( 'https://v4.ident.me/',5,,1,0 ), 1 );return}
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: betateilchen am 13 Juni 2025, 19:12:44
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;
}
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Torxgewinde am 13 Juni 2025, 20:03:39
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?
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: betateilchen am 13 Juni 2025, 21:16:09
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 10Eine 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)


--
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Torxgewinde am 13 Juni 2025, 21:28:04
@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.
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: betateilchen am 13 Juni 2025, 21:53:35
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.
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: passibe am 14 Juni 2025, 13:34:15
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).
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Torxgewinde am 16 Juni 2025, 17:01:36
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: passibe am 16 Juni 2025, 23:02:14
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>
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Gisbert am 18 Juni 2025, 11:51:40
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: JoWiemann am 18 Juni 2025, 12:10:55
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: JoWiemann am 18 Juni 2025, 12:26:42
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: rabehd am 18 Juni 2025, 12:34:19
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.
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: passibe am 18 Juni 2025, 13:44:21
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'
                                               }
        };
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: JoWiemann am 18 Juni 2025, 13:51:10
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: passibe am 18 Juni 2025, 14:44:10
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.
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: JoWiemann am 18 Juni 2025, 16:37:21
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
Titel: Aw: 🌐 öffentliche IP ermitteln, public IPv4 and IPv6
Beitrag von: Torxgewinde am 18 Juni 2025, 20:43:35
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.