Öffentliche IP-Adresse
Einleitung
In FHEM kann die aktuell verwendete öffentliche IP-Adresse (IPv4/IPv6) auf verschiedene Arten ermittelt werden. Eine Methode ist der Abruf über externe Webdienste. Es kann auch auf lokale Router-Informationen (z. B. Fritzbox) oder systemnahe Module (z.B. STUN) zurückgegriffen werden.
HTTPMOD-Definition zum ermitteln der öffentlichen IPv4 und IPv6 via HTTPS-Webdienst
Die öffentliche IP kann man mit Webdiensten ermitteln, die einem die IPv4 und/oder IPv6 anzeigen mit der die Seite abgerufen wird:
defmod PublicIP HTTPMOD https://ipwho.de/json/ 600
attr PublicIP extractAllJSON 1
Ein Abfrageintervall von 300 bis 600 Sekunden (5 bis 10 Minuten) wird empfohlen – häufigere Abfragen belasten die externen Dienste unnötig.
Weitere Dienste
Anbieter | Adresse | Zuletzt erfolgreich getestet im Jahr |
---|---|---|
ipify.org
|
https://api64.ipify.org/?format=json | 2025 |
ipwho.de
|
https://ipwho.de/json/ | 2025 |
ipinfo.io
|
https://ipinfo.io/json/ | 2025 |
myip.com
|
https://api.myip.com/ | 2025 |
ident.me
|
https://a.ident.me/json | 2025 |
Fritzbox nutzen
Wird eine Fritzbox als Router in das Internet verwendet, kann man die öffentliche IP sehr einfach vom Router abfragen. Der Vorteil dieser Lösung besteht darin, dass kein externer Dienst abgefragt werden muss:
defmod Fritzbox FRITZBOX 192.168.123.123
attr Fritzbox INTERVAL 300
attr Fritzbox boxUser <dein Fritzbox User>
attr Fritzbox nonblockingTimeOut 100
Hierbei sind die Attribute wie die IP Adresse und Nutzername auf der Fritzbox anzupassen.
Die IPv4 und IPv6 der Fritzbox, als auch das IPv6 Prefix des lokalen Netzes sind als Readings direkt abfragbar:
box_ipv4_Extern
box_ipv6_Extern
box_ipv6_Prefix
STUN Server nutzen
Alternativ kann ein STUN-Server zur Ermittlung der externen IP genutzt werden. Beispiel-Snippet (Perl):
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'};
}
Hinweis: Das Perl-Modul STUN::Client
ist ggf. nicht in jeder Distribution verfügbar und muss über CPAN installiert werden.
Weitere Details und Diskussion: https://forum.fhem.de/index.php?topic=141872.msg1343225#msg1343225