Datenübernahme bei HTTPMOD

Begonnen von Wernieman, 14 September 2022, 10:39:44

Vorheriges Thema - Nächstes Thema

Wernieman

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
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

MadMax-FHEM

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
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)

betateilchen

my $ip = GetFileFromURL("http://whatismyip.akamai.com/")
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

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 .......
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen


defmod Get_IP_1 HTTPMOD http://whatismyip.akamai.com/
attr Get_IP_1 reading01Name IP
attr Get_IP_1 reading01Regex (\d+\.\d+\.\d+\.\d+)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

#5
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.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

#7
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?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

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?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

#9
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 ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

frank

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
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html