[Python] Webscraping vloerverwarming controller zonder API

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
Goedendag Tweakers,

Vorige week is een nieuwe verdeler voor de vloerverwarming geplaatst, en daar zit een RJ45 connector op :). Hij geeft zelfs een html pagina op zijn eigen IP met in een tabblad wat status informatie van bijvoorbeeld sensoren en pompsnelheid. Die informatie wil ik graag via MQTT in mijn Home Assistant krijgen. Hoeft alleen maar one-way, alleen uitlezen. Maar de controller heeft geen API dus moet ik het met webscraping eruit krijgen.

Ik ben begonnen met het inspecteren van de elementen op de webpagina. Daar blijken keurig id's te staan voor elke blokje in de tabel. Die id's heb ik in Python uitgelezen via BeautifulSoup, maar dan staat er geen waarde.

Onder aan de HTML pagina blijkt een object script te staan waar die informatie kennelijk geladen wordt uit de controller en in de html gezet. Dus moet ik de script volgens mij uitlezen om de waarden uit de tabel te krijgen. Maar dan loop ik vast. Het lijkt erop dat geen mooi JSON format is. Als ik de script als text inlees blijken er 6 scripts te zijn. De eerste begint met function AJAX(e,t) {var....., dus dat lijkt een AJAX functie te zijn. Scripts 2-5 zijn allemaal var's met systeemData, ingangendata, uitgangenData, communicatieData. Het laatste script begint met (()=>let dictionary={.....

Als ik een text dump maak van de scripts staat daar niet de waarde in die ik zoek. Voor bijvoorbeeld de retoursensor staat er wel iets als:
varSet("retSensor",e,"inputs.return.sensor")
Dit staat dus in het laatste script. Die e verwijst dus weer terug naar de AJAX functie, lijkt me.

Maar hier houdt mijn programmeer kunst op. En mijn Google kunst blijkt kennelijk ook niet genoeg.

Wellicht heeft iemand een tip hoe ik verder kan. Laat even weten als je nog wat nodig hebt, ik kan best een screenshot of de inhoud van de scripts laten zien.

Thanks

Beste antwoord (via Sir Bacon op 18-12-2023 20:16)


  • fopjurist
  • Registratie: Mei 2021
  • Niet online

fopjurist

mr.drs. fopjurist

Sir Bacon schreef op zondag 5 juni 2022 @ 17:48:
Als ik een text dump maak van de scripts staat daar niet de waarde in die ik zoek.
Dan wordt de data waarschijnlijk via een aparte request opgehaald via een andere URL, hopelijk in json-formaat. Via de tab Network in Developer Tools (druk op F12) kun je zien welke requests je browser allemaal maakt.

Beschermheer van het consumentenrecht

Alle reacties


Acties:
  • 0 Henk 'm!

  • KoningsGap
  • Registratie: Augustus 2013
  • Laatst online: 20:32
Check even of je iets met selenium kan, dan kan je als het ware wachten met scrapen tot de pagina is geladen. Heeft iets meer voeten in de aarde maar zou moeten lukken. Succes!

Acties:
  • 0 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
Thanks, zal ik eens even gaan opzoeken. Wel een leuk projectje zo.

Hier trouwens een screenshot van de webpagina waar het om gaat. In dit geval wil ik dus bijvoorbeeld de 22 van de Aanvoertemp. in een MQTT topic posten.

Afbeeldingslocatie: https://tweakers.net/i/wuIwbNrk6wFi35-qpZC_axvrBkk=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/07dVL8VL1d1atzGk1h8qajSl.png?f=user_large

Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • fopjurist
  • Registratie: Mei 2021
  • Niet online

fopjurist

mr.drs. fopjurist

Sir Bacon schreef op zondag 5 juni 2022 @ 17:48:
Als ik een text dump maak van de scripts staat daar niet de waarde in die ik zoek.
Dan wordt de data waarschijnlijk via een aparte request opgehaald via een andere URL, hopelijk in json-formaat. Via de tab Network in Developer Tools (druk op F12) kun je zien welke requests je browser allemaal maakt.

Beschermheer van het consumentenrecht


Acties:
  • 0 Henk 'm!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 23:28
Misschien handig om iets meer informatie te geven over het type verdeler en de software die erop draait? Ik kan me voorstellen dat je niet de enige bent die dit probeert.

Acties:
  • 0 Henk 'm!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 23:28
fopjurist schreef op zondag 5 juni 2022 @ 18:07:
[...]

Dan wordt de data waarschijnlijk via een aparte request opgehaald via een andere URL, hopelijk in json-formaat. Via de tab Network in Developer Tools (druk op F12) kun je zien welke requests je browser allemaal maakt.
Dit zou ook mijn eerste ingeving zijn. De code die @Sir Bacon beschrijft lijkt te refereren aan asynchrone webrequests. Dat is goed nieuws als dat zo is, want dat betekent dat de data al in ruw formaat beschikbaar is en er waarschijnlijk niet gescraped hoeft te worden. Je kunt dan direct de brondata uitlezen.

Acties:
  • 0 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
@fopjurist Dank voor de tip! Daar zie ik dat er inderdaad 4 calls gedaan worden met get.json. Ze krijgen dan variabelen mee. De eerste call is bijvoorbeeld :
GET http://192.168.2.138/get.json?f=$.status.process.*

Betekend dit dat ik vanuit Python rechtstreeks die call kan doen? Dan is het dus geen webscrape meer maar een json vraag.

@MarcoC Het is een WTH verdeler. De nieuwe modulaire verdeler met HT module en een UMR2 als regelaar. Nog pas recent op de markt. Ik hoop hiermee gas te kunnen besparen doordat nu al het water van de CV rechtsreeks de vloer ingaat. De regelaar regelt de pomp bij om de watertemperatuur te bewaken.

Ik zal eens even vanuit python zo'n json request doen.

Acties:
  • 0 Henk 'm!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 23:28
Sir Bacon schreef op zondag 5 juni 2022 @ 20:12:
@fopjurist Dank voor de tip! Daar zie ik dat er inderdaad 4 calls gedaan worden met get.json. Ze krijgen dan variabelen mee. De eerste call is bijvoorbeeld :
GET http://192.168.2.138/get.json?f=$.status.process.*

Betekend dit dat ik vanuit Python rechtstreeks die call kan doen? Dan is het dus geen webscrape meer maar een json vraag.

@MarcoC Het is een WTH verdeler. De nieuwe modulaire verdeler met HT module en een UMR2 als regelaar. Nog pas recent op de markt. Ik hoop hiermee gas te kunnen besparen doordat nu al het water van de CV rechtsreeks de vloer ingaat. De regelaar regelt de pomp bij om de watertemperatuur te bewaken.

Ik zal eens even vanuit python zo'n json request doen.
Je kunt bij het webverzoek op de rechtermuisknop klikken, en dan kopiëren als PowerShell of curl-commando. Als je dat doet en in PowerShell of cmd het commando plakt, en je vervolgens het gewenste resultaat terugkrijgt, dan kun je inderdaad rechtstreeks via Python een call doen naar dat endpoint :) .

Acties:
  • +2 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
Yes! net in python de get.json gedaan, en dan krijg ik netjes de output terug. Nu dus nog een kwestie van alle zaken die ik wil opslaan netjes verzamelen (want die komen dus uit de verschillende get.json?'s) en dan zelf publiceren. Dat gaat wel lukken.

Dank voor de hulp, ik zal nog even updates posten als het gelukt is.

Acties:
  • 0 Henk 'm!

  • roelandk80
  • Registratie: Maart 2017
  • Laatst online: 01-05-2024
Het is geen Python maar c#/mono.
Maar wellicht heb je er wat aan. Heb een module gemaakt voor 2 weg UMR communicatie.

https://github.com/roel80/WTH-UMR2-Communication

Acties:
  • 0 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
He @roelandk80 , dank voor je link! Interessant.

Heb je dit draaien in je setup? Toevallig Home Assistant? Mag ik dan vragen hoe je dat draait?

Acties:
  • 0 Henk 'm!

  • roelandk80
  • Registratie: Maart 2017
  • Laatst online: 01-05-2024
Hoi @Sir Bacon

Ik gebruik geen Home Assistant. Heb Free@home van busch Jeager. Ik gebruik deze module om te connecteren (virtuele devices) met Free@Home via de API.
Maar wellicht kan je het gebruiken als bron voor een connector in HA.

Acties:
  • 0 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
Hallo, even een bump.

Ik heb inmiddels een script draaien op mijn Synology dat continue de UMR2 pollt en de resultaten naar de MQTT server verstuurd. Daar pikt HA ze weer op.

@RedHead heb ik het script gestuurd, die had hier om gevraagd. Als er verder geen problemen zijn zal ik eens kijken of ik het op GitHub kan zetten.

Acties:
  • 0 Henk 'm!

  • Sir Bacon
  • Registratie: Mei 2013
  • Laatst online: 29-05 13:34
@KoningsGap @fopjurist @MarcoC @roelandk80
Dank allemaal voor het meehelpen en aandragen van oplossingen. Ik heb het script nu op GitHub gezet zodat anderen het ook kunnen gebruiken. Uiteindelijk geen heel lange code, maar het doet wat het moet doen.

https://github.com/Sir-Bacon/UMR2toMQTT

@RedHead
Ik heb op GitHub nog een extra script toegevoegd om 1x de json uit te lezen en netjes in een ascii file te zetten om te bekijken. Zie ook de readme.
Pagina: 1