IP von öffentlichem DNS Namen in Reading

Begonnen von TWART016, 09 Januar 2018, 20:25:27

Vorheriges Thema - Nächstes Thema

TWART016

Hallo,

ich benötige die IP Adresse von einem öffentlichen DNS Namen in einem Reading.

z.B: die 172.217.22.227

PING google.de (172.217.22.227) 56(84) bytes of data.


Wie bekomme ich das bestmöglich hin?


Gruß
TWART016


dev0


sub getIp($) {
  use Socket;
  my $ip = inet_ntoa(inet_aton(shift));
  setreading(...);
}

TWART016

Zitat von: dev0 am 10 Januar 2018, 10:13:29

sub getIp($) {
  use Socket;
  my $ip = inet_ntoa(inet_aton(shift));
  setreading(...);
}

Muss das setreading nicht in das at? Oder wie muss die Syntax für setreading aussehen?


MadMax-FHEM

Wieso ein 'at'?

Die IP des DNS ändert sich doch nicht (so oft)!?

Ansonsten halt im 'at' die Funktion mit dem Namen des DNS aufrufen...

Wie so vieles steht die Verwendung von setreading in der commandref:

https://fhem.de/commandref_DE.html#setreading

in deinem Fall sowas:

setreading GERÄTENAME_WO_DAS_READING_DRIN_STEHEN_SOLL NAME_WIE_DAS_READING_HEISSEN_SOLL $ip

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TWART016

Ich vermute bei mir schon. Deshalb will ich herausfinden wann sich die IP ändert, und dann mit der IP von meinem FQDN vergleichen.

Setreading kenne ich. Nur wenn ich das so in die Routine einfüge, gibt es einen Syntaxfehler beim at
sub getIp($) {
  use Socket;
  my $ip = inet_ntoa(inet_aton(shift));
  setreading oeffentlicheIP IP $ip;
}


+*00:05:00 {
my $ip=getIp;
setreading oeffentlicheIP IP $ip;
}

MadMax-FHEM

Welcher Fehler wäre hilfreich...
...hellsehen kann ich (noch) nicht... ;)

Entweder im at die Sub aufrufen:

{getIp(DavonWillIchDieIp)}

Oder da du in perl bist ( dies: { } ) für setreading zurück nach fhem:

fhem("setreading OeffentlicheIp IP $ip")

Kurz, da nur Handy...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TWART016

Ups, Fehlermeldung vergessen. Beim speichern des at kommt die Meldung:
Not enough arguments for main::getIp at (eval 1624217) line 2, at EOF


dev0 hatte geschrieben, darüber bekomme ich die IP heraus. Ich kenne die Funktion nicht, ist das ein Systembefehl?
inet_ntoa(inet_aton(shift))

Was muss ich in die Klammern eintragen, wenn ich die IP mit Hilfe der Funktion auslesen möchte?
{getIp(DavonWillIchDieIp)}

MadMax-FHEM

So wie ich geschrieben habe.

Die Funktion getIp braucht einen Parameter.
Ich vermute mal den Namen wozu du die IP willst...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

dev0


{setreading("device","reading",getIp("fqdn")}

device, reading, fqdn ersetzen und die sub getIp inne 99_myUtils.pm.

dev0

Zitatist das ein Systembefehl?
Ist Dein google kaputt? ;) Es ist eine Funktion aus dem Socket Perlmodul.
Man sollte noch erwähnen, dass die Sub getIp blockierend arbeitet, wenn der (lokale) DNS Server keine Antwort liefert, weil zB. der INternetzugang gestört ist. Nicht blockierend kann ich das aber nicht aus dem Kopf...