HTTPMOD: prüfen, ob Text auf Website vorhanden ist oder nicht

Begonnen von dora71, 30 August 2020, 09:59:51

Vorheriges Thema - Nächstes Thema

dora71

Hallo Forum,

wahrscheinlich ist die Lösung einfacher, als ich denke, aber mir fehlt der Schubser in die richtige Richtung.

Ich möchte gerne eine Website in regelmäßigen Intervallen abfragen (mit HTTPMOD) und das Vorhandensein eines Textes prüfen.

Ist dieser vorhanden, so soll ein Reading gesetzt werden mit "vorhanden" oder "1" oder eigentlich egal.
Sobald dieser Text fehlt, soll das Reading gesetzt werden auf "fehlt" oder "0".

Natürlich kann ich den Text in eine Regex geben, aber die Beispiele, die ich in der Commandref finde, werten Sachen aus, die nach dem Suchtext erscheinen.

Denke ich zu kompliziert, oder gibt es sogar noch eine einfachere Lösung für mein "Problem"?  :-\

Gruß Rainer

TomLee

Hallo,

Ist der Text statisch oder kann er sich ändern ?
Hast du schon ein HTTPMOD-Device welches den Text in einem Reading zurückgibt wenn er vorhanden ist und sonst (?) leer ist, dann zeig mal ein List oder Raw Definition ?

Mit if würd ich sagen geht man das an, hier im HTTPMOD-Device würde sich mMn. als oneliner der ternäre Operator anbieten .

Gruß

Thomas

amenomade

Ich würde ganz normal den Text als Reading extrahieren (reading01Name und reading01Regex|JSON) und das Attribut reading01DeleteIfUnmatched setzen. Somit ist das Reading da oder nicht.
Mit einem userReading oder stateFormat dazu kann man dann "vorhanden" entspr. setzen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

dora71

Hallo zusammen und danke für die schnellen Antworten.

Wahrscheinlich werde ich sogar noch einen anderen Weg gehen:

Ich werde eine Regex auf die "Fehlerseite" ansetzen und in ein Reading packen, das hätte den entscheidenden Vorteil, dass direkt bei einem Match auch ein Event geworfen wird, auf dass ich dann reagieren kann.

Das Attribut reading01DeleteIfUnmatched kannte ich noch nicht.

Jetzt muss ich aber erst mal warten, bis der Fehler wieder auftritt ...   :-\

Gruß Rainer

dirk.k

Ich hatte die Gleiche Anforderung.
Zuerst hole ich aus der Rückmeldung des Servers einen Textschnipsel.
Dann wird im userreading MELDUNG nach einem Vergleich mit einem Wert gefüllt.
Ausserdem Frage ich eine Webseite ab, welche mir die Laufzeit des Zertifikats ausgibt und schneide diese Information dort aus.
Unerlässlich war dabei der regex Tester von https://regex101.com

Hier der Code: (funktioniert sicher nicht ganz, das Entfernen privater Infos hat bestimmt was kaputt gemacht...)
defmod WebRequests HTTPMOD none 300
attr WebRequests userattr get01Name get01Poll:0,1 get01Regex get01URL get02Name get02Poll:0,1 get02PollDelay get02Regex get02URL get03Name get03Poll:0,1 get03PollDelay get03Regex get03URL get04Name get04Poll:0,1 get04PollDelay get04Regex get04URL get05Name get05Poll:0,1 get05Regex get05URL get06Name get06Poll:0,1 get06Regex get06URL get07Name get07Poll:0,1 get07Regex get07URL get08Name get08Poll:0,1 get08Regex get08URL get09Name get09Poll:0,1 get09Regex get09URL readingMaxAge readingMaxAgeReplacement readingMaxAgeReplacementMode:text,reading,internal,expression,delete
attr WebRequests comment RegEx Tester designer:\
https://regex101.com/\

attr WebRequests get01Name webpage-www.page2.de
attr WebRequests get01Poll 1
attr WebRequests get01Regex <title>(.................)
attr WebRequests get01URL https://www.page2.de/index.htm
attr WebRequests get02Name Zertifikatsablauf_page1
attr WebRequests get02Poll 1
attr WebRequests get02PollDelay 3600
attr WebRequests get02Regex bis.*\n.*"validated">(..........)
attr WebRequests get02URL https://www.xolphin.de/sslcheck/www.page1.de
attr WebRequests get03Name Zertifikatsablauf_TPfl
attr WebRequests get03Poll 1
attr WebRequests get03PollDelay 3600
attr WebRequests get03Regex bis.*\n.*"validated">(..........)
attr WebRequests get03URL https://www.xolphin.de/sslcheck/www.page2.de
attr WebRequests get04Name Zertifikatsablauf_home
attr WebRequests get04Poll 1
attr WebRequests get04PollDelay 3600
attr WebRequests get04Regex bis.*\n.*"validated">(..........)
attr WebRequests get04URL https://www.xolphin.de/sslcheck/home.page1.de
attr WebRequests readingMaxAge 7444
attr WebRequests readingMaxAgeReplacement "outdated - was " . $val
attr WebRequests readingMaxAgeReplacementMode expression
attr WebRequests room 1.9_Technik,9.4_System -> Status
attr WebRequests stateFormat page2: MELDUNG<BR/>Zertifikat page2 Zertifikatsablauf_TPfl_day Tage<BR/>Zertifikat www.page1.de Zertifikatsablauf_page1_day Tage<BR/>Zertifikat home.page1.de Zertifikatsablauf_home_day Tage
attr WebRequests userReadings MELDUNG:webpage-www.page2.de.* { \
  if(ReadingsVal("$NAME","webpage-www.page2.de",0) eq "page2" ) { \
     fhem("set PostIt remove AlarmLevel7 Problem Webseite");;\
     return "Webseite OK";;\
  };; \
  fhem("set PostIt add AlarmLevel7 Problem Webseite");;\
  return "Problem Webseite"\
},\
\
Zertifikatsablauf_page1_day:Zertifikatsablauf_page1.* {\
  return -1 * int((time - time_str2num(ReadingsVal("$NAME","Zertifikatsablauf_page1","1970-01-01 0:00:00"))) /84600)\
},\
Zertifikatsablauf_TPfl_day:Zertifikatsablauf_TPfl.* {\
  return -1 * int((time - time_str2num(ReadingsVal("$NAME","Zertifikatsablauf_TPfl","1970-01-01 0:00:00"))) /84600)\
},\
Zertifikatsablauf_home_day:Zertifikatsablauf_home.* {\
  return -1 * int((time - time_str2num(ReadingsVal("$NAME","Zertifikatsablauf_home","1970-01-01 0:00:00"))) /84600)\
},\