FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Wernieman am 14 September 2022, 10:39:44

Titel: Datenübernahme bei HTTPMOD
Beitrag von: Wernieman am 14 September 2022, 10:39:44
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
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: MadMax-FHEM am 14 September 2022, 10:45:20
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
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: betateilchen am 14 September 2022, 10:45:44
my $ip = GetFileFromURL("http://whatismyip.akamai.com/")
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: Wernieman am 14 September 2022, 10:47:39
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 .......
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: betateilchen am 14 September 2022, 11:28:24

defmod Get_IP_1 HTTPMOD http://whatismyip.akamai.com/
attr Get_IP_1 reading01Name IP
attr Get_IP_1 reading01Regex (\d+\.\d+\.\d+\.\d+)
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: Wernieman am 14 September 2022, 11:34:01
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.
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: betateilchen am 14 September 2022, 11:48:55
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.
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: Wernieman am 14 September 2022, 11:52:32
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?
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: betateilchen am 14 September 2022, 12:13:46
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?
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: Wernieman am 14 September 2022, 12:19:07
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 ...
Titel: Antw:Datenübernahme bei HTTPMOD
Beitrag von: frank am 14 September 2022, 13:12:49
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