FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: LotharRappsilber am 06 November 2023, 12:18:27

Titel: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 12:18:27
Hallo zusammen,

verstehe leider die Optionen von Regex nicht. Ich möchte aus einer Webseite IPv6 und IPv4 rausholen. Mein Code, der sicher falsch ist, da er nicht funktioniert. Brauche Hilfe.

define IP HTTPMOD https://www.wieistmeineip.de/ipv6-test/ 300
setuuid IP 6548ae69-f33f-9284-8080-72ceb1d34bbc6494
attr IP alias IP
attr IP reading01Name IPv6
attr IP reading01Regex title"><strong>(\d+\:\d+)</strong></div>
attr IP reading02Name IPv4
attr IP reading02Regex ipv4-value">(\d+\.\d+)<\/span>
attr IP room IP
attr IP stateFormat IPv6, IPv4
attr IP timeout 5

Danke für die Hilfe!!!
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 12:47:54
defmod test HTTPMOD https://www.wieistmeineip.de/ipv6-test/
attr test reading01Name ipv4
attr test reading01Regex lautet[\s\S]+>(\d+\.\d+\.\d+\.\d+)
attr test reading02Name ipv6
attr test reading02Regex lautet[\s\S]+>([0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+)

Für ipv6 konnte ich das nicht testen, in der Antwort, die mein FHEM bekommt, sind keine Werte für ipv6 enthalten, weder hier lokal, noch auf einem externen Server.
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 13:18:14
Danke für deine Hilfe, aber ich mache bestimmt noch etwas fasch, denn es funktioniert leider nicht. Mein Code:


define IP HTTPMOD https://www.wieistmeineip.de/ipv6-test/ 300
setuuid IP 6548ae69-f33f-9284-8080-72ceb1d34bbc6494
attr IP alias IP
attr IP reading01Name IPv6
attr IP reading01Regex title"><strong>[\s\S]+>([0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+)</strong></div>
attr IP reading02Name IPv4
attr IP reading02Regex ipv4-value">[\s\S]+>(\d+\.\d+\.\d+\.\d+)<\/span>
attr IP room IP
attr IP stateFormat IPv6, IPv4
attr IP timeout 5
attr IP userReadings holeInOne {ReadingsVal($NAME,"IPv6","")." ".ReadingsVal($NAME,"IPv4","")}
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 13:19:56
Zitat von: LotharRappsilber am 06 November 2023, 13:18:14aber ich mache bestimmt noch etwas fasch, denn es funktioniert leider nicht.

Ja, Du doktorst immer noch an Deinem nicht funktionierenden Code rum, anstatt mein Beispiel als Basis zu verwenden. Mein Beispiel liefert zumindest für ipv4 korrekte Werte.

Außerdem wäre interessant zu sehen, was denn bei Dir als Ergebnis kommt. "funktioniert nicht" ist als Fehlerbeschreibung wenig hilfreich.
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 13:36:03
IPv4 funktioniert, an IPv6 arbeite ich noch! Verstehe den Code trotzdem nicht, da nach keinem String gesucht wird wie in meinem vorigem Code.
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 13:40:06
Jetzt kann ich bestimmt gleich auch noch was lernen...

Zitat von: LotharRappsilber am 06 November 2023, 13:36:03da nach keinem String gesucht wird

reading01Regex lautet[\s\S]+>(\d+\.\d+\.\d+\.\d+)
Was ist denn "lautet" sonst, wenn es kein String ist?
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 13:43:37
Zitat von: LotharRappsilber am 06 November 2023, 13:36:03an IPv6 arbeite ich noch

Schau doch im HTTPMOD device mal im Inhalt des body, ob da überhaupt eine IPv6 auftaucht, bei mir ist der Wert nicht vorhanden. Auf der Webseite sehe ich aber eine IPv6.
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 13:51:24
Beim Inhalt der Seite taucht natürlich ipv6 auf.

<div id="ipv6" class="ip">
  <div>Ihre IP-Adresse lautet:</div>
  <div class="title"><strong>2a00:6020:b304:f700:5015:754c:62f6:52bc</strong></div>
</div>

Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 13:57:51
Hier der Code für die externe ipv6:

  var wimip = wimip || [];
  wimip.ip = "2a00:6020:b304:f700:5015:754c:62f6:52bc";

Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 14:06:25
Woher kopierst Du den HTML Code?
Aus dem Seitenquelltext im Browser oder aus dem body im HTTPMOD device?
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 14:10:32
Aus dem Seitenquelltext!
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 14:23:10
Das dachte ich mir. Deshalb hatte ich ja schon vor fast einer Stunde geschrieben:

Zitat von: betateilchen am 06 November 2023, 13:43:37Schau doch im HTTPMOD device mal im Inhalt des body, ob da überhaupt eine IPv6 auftaucht, bei mir ist der Wert nicht vorhanden. Auf der Webseite sehe ich aber eine IPv6.

Aber Du machst halt lieber Deinen eigenen Stiefel...
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 14:35:25
Ich dachte ich muss immer nach einem String suchen, wie soll das auch anders sein?
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 14:57:07
Trotz das ich meinen Code abgeändert habe, geht es nicht. Nicht mal ipv6 wird bei den Readings angezeigt.

attr IP reading02Name IPv6
attr IP reading02Regex wimip.ip = "[\s\S]+>([0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+)";

Bitte nochmals um Hilfe!
Titel: Aw: Regex Optionen
Beitrag von: KernSani am 06 November 2023, 14:59:57
@Lothar, du bist irgendwie sehr spärlich mit deinen Informationen.
Nimm dir doch mal die response aus dem HTTPMOD Device, wie von betateilchen beschrieben, geh damit auf regex101.com und probiere die IP6-Adresse zu extrahieren. Wenn dir das nicht gelingt, poste die den HTTPMOD body und deinen besten deinen "nahe dran" Versuch.
Grüße,
Oli 
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 15:03:43
Der Inhalt der Webseite, der an den Browser geliefert wird, ist nicht automatisch identisch zu dem Inhalt, der in HTTPMOD ankommt, wenn die gleiche URL aufgerufen wird.

Im HTTPMOD body ist die IPv6 nicht enthalten.
Deshalb kann die ip darin nicht gefunden werden.

Das versuche ich seit mehr als zwei Stunden zu erklären...
Titel: Aw: Regex Optionen
Beitrag von: frank am 06 November 2023, 15:14:54
ZitatIm HTTPMOD body
ich denke hier fehlt schon das "wissen", was hier mit body gemeint ist.


attr showBody
ZitatshowBody
if set to 1 then the body of http responses will be visible as internal httpbody.

Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 15:50:11
Hab ich verstanden, aber wie bekomme ich ipv6 anders?
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 16:13:00
Das geht auch ganz ohne HTTPMOD.

sub ip_test {
  use Net::Address::IP::Local;

  my $address      = eval {Net::Address::IP::Local->public};
  if ($@) {
    Debug "Could not determine IP address";
  } else {
    Debug $address;
  }

  my $address_ipv4 = eval {Net::Address::IP::Local->public_ipv4};
  if ($@) {
    Debug 'Failed via IPv4';
  } else {
    Debug $address_ipv4;
  }

  my $address_ipv6 = eval { Net::Address::IP::Local->public_ipv6};
  if ($@) {
    Debug 'Failed via IPv6';
  } else {
    Debug $address_ipv6;
  }
}

Das Ganze läßt sich problemlos so einbinden, dass z.B. per at regelmäßig die readings in einem dummy beschrieben werden.
Oder man stellt die Daten einfach systemweit in %data zur Verfügung und braucht überhaupt kein extra device zur Ablage.
Oder oder oder...

Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 06 November 2023, 17:00:02
Danke das Du Dir so viel Mühe gemacht hast, aber wo soll ich Deine Datei in der cfg einbinden?
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 06 November 2023, 17:18:29
Perl code in Form von Funktionen gehört nicht in die Konfiguration, sondern in die 99_myUtils.pm.

Das war auch nur ein grobes Schema, um zu zeigen, wie man an die IPs kommen könnte.
Im Beispiel landen die ip-Adressen als Debug-Ausgabe im Logfile, auch das müsste man noch anpassen.
Titel: Aw: Regex Optionen
Beitrag von: JudgeDredd am 07 November 2023, 13:10:14
Hallo LotharRappsilber,

ich möchte mich nicht groß einmischen, aber eine Adressermittlung habe ich z.B. in einem AT so umgesetzt.
(als RAW einfügen)
defmod myIP at *04:00:00 { \
  readingsSingleUpdate( $defs{ $SELF }, 'IPv4', GetFileFromURL( 'http://checkip4.spdyn.de/' ), 1 );;\
  readingsSingleUpdate( $defs{ $SELF }, 'IPv6', GetFileFromURL( 'http://checkip6.spdyn.de/' ), 1 )\
}

Gruß,
JudgeDredd
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 07 November 2023, 14:40:42
Danke für den Tipp, aber was bedeutet RAW?
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 07 November 2023, 14:42:08
Danke für den Tipp, aber was bedeutet RAW und wo sollte ich den Code einfügen?
Titel: Aw: Regex Optionen
Beitrag von: betateilchen am 07 November 2023, 15:20:01
Bildschirmfoto 2023-11-07 um 15.18.54.png

Da oben auf das Pluszeichen klicken und dann den Code in das Fenster eingeben.
Mit "Execute" ausführen.
Titel: Aw: Regex Optionen
Beitrag von: LotharRappsilber am 07 November 2023, 15:39:12
Danke!!!