Hallo Freunde,
die automatische Erkennung der externen IP und setzen beim "Dienstleister" mache ich mittlerweile mit FHEM. Jetzt hat nur einer der Websides, womit ich meine IP erkenne, den Dienst eingestellt. Beim definieren einer Neuen bekomme ich gerade ein Problem.
Funktioniert:
Bei Aufruf von http://checkip.dyndns.com/ giebt es als Ergebnis "Current IP Address: <IP>", also habe ich definiert:
defmod Get_IP_2 HTTPMOD http://checkip.dyndns.com/ 300
attr Get_IP_2 event-on-change-reading .*
attr Get_IP_2 reading01Name IP
attr Get_IP_2 reading01Regex Current IP Address: ([\d\.]+)
attr Get_IP_2 room System
attr Get_IP_2 stateFormat IP
Funktioniert nicht:
Bei Aufruf von http://whatismyip.akamai.com/ bekomme ich gleich die IP als Ergebnis, passend definiert:
defmod Get_IP_1 HTTPMOD http://whatismyip.akamai.com/ 300
attr Get_IP_1 event-on-change-reading .*
attr Get_IP_1 reading01Name IP
attr Get_IP_1 reading01Regex ([\d\.]+)
attr Get_IP_1 room System
attr Get_IP_1 stateFormat IP
Der Inhalt von IP ist dann aber immer 1.0 ... das kommt mit meiner aktuellen IP aber überhaupt nicht hin. Kann mirr jemand beim Auflösen des Knotens helfen?
Hatte auch einen anderen Anbieter Probiert, dort ist die Zeile IP=<IP>, was ich auch hinbekomme. Ich möchte nur Wissen, warum ich es bei einer reinen IP-Zeile nicht hinbekomme ....
P.S. Bei Bedarf kann ich auch gerne ein List schicken, nur ist es so unübersichtlich .... mit Obigen "RAW" kann maan das Problem gerne und schnell nachbauen ....
Gruß,
Werner
Hallo Wernieman,
im Forum gibt es einiges wie man externe/WAN-IP bestimmen kann.
Ich mache es so (RawDef):
defmod httpmodWANIP HTTPMOD https://www.wieistmeineip.de/ 43200
attr httpmodWANIP alias WAN IP
attr httpmodWANIP enableControlSet 1
attr httpmodWANIP reading01Name WAN-IP-Address
attr httpmodWANIP reading01Regex wimip.ip = "([0-9]*.[0-9]*.[0-9]*.[0-9]*)
attr httpmodWANIP webCmd reread
enableControlSet ist glaube ich nicht mehr nötig...
Evtl. fehlt bei deiner Regex nur ein Punkt statt dem Leerzeichen?
Bin aber jetzt auch kein RegEx-Experte, sondern kämpfe mich auch immer durch...
Gruß, Joachim
my $ip = GetFileFromURL("http://whatismyip.akamai.com/")
Stimmt .. so geht es auch. Danke für die Tips.
Nur wüste ich gerne, wo ich jetzt den "Fehler" bei HTTPMOD gemacht habe. Es Ärgert mich schon "Beruflich", es nicht gelöst zu bekommen .......
defmod Get_IP_1 HTTPMOD http://whatismyip.akamai.com/
attr Get_IP_1 reading01Name IP
attr Get_IP_1 reading01Regex (\d+\.\d+\.\d+\.\d+)
Mist .. Ärgere mich gerade, das ich das so nicht ausprobiert habe ...... war ich wohl Betriebsblind ....
Wobei ich mich wundere, das die Expliziete Angabe Funktioniert, aber das mit ([\d\.]+) nicht ...
Und an fehlenden html-Tags dürfte es nicht liegen, da die funktionierende (s.o.) auch keine verwendet.
Zitat von: Wernieman am 14 September 2022, 11:34:01
Und an fehlenden html-Tags dürfte es nicht liegen, da die funktionierende (s.o.) auch keine verwendet.
Deshalb habe ich ja meine Vermutung auch schon wieder entfernt.
Mich würde vielmehr interessieren, woher die 1 und die 0 überhaupt stammen, die bei Deiner ursprünglichen regex im Ergebnis landen - in meiner IP Adresse kommen beide Ziffern gar nicht vor.
Bei mir eben auch nicht .. und ich habe nicht rausgefunden, woher es kam
Edit:
Bei der Verwendung von (.*) kommt als Ergebnis:
HTTP/1.0 200 OK
Da läuft irgendetwas schief ...
Edit:
kann es sein, das HTTPMOD beim ersten passenden Ergebnis aufhört zu suchen?
Zitat von: Wernieman am 14 September 2022, 11:52:32
kann es sein, das HTTPMOD beim ersten passenden Ergebnis aufhört zu suchen?
Macht es Sinn, dass HTTPMOD auch im header der http Antwort nach readings sucht?
Das kann nur der Modulauthor beantworten ...
Auf jedem Falle danke, jetzt ist mir einiges Klarer .. bin nicht auf die Idee gekommen, das im Header auch gesucht wird ...
Zitatkann es sein, das HTTPMOD beim ersten passenden Ergebnis aufhört zu suchen?
genau.
will man mehrere:
Zitat(get|set|reading)[0-9]+RegOpt
Lets the user specify regular expression modifiers. For example if the same regular expression should be matched as often as possible in the HTTP response, then you can specify RegOpt g which will case the matching to be done as /regex/g
The results will be trated the same way as multiple capture groups so the reading name will be extended with -number. For other possible regular expression modifiers see http://perldoc.perl.org/perlre.html#Modifiers Example:
attr myWebDevice reading0088Regex temperature:.([0-9]+)
attr myWebDevice reading0088RegOpt g