Von: Simon

Mit Home Assistant Webseiten-Daten auslesen & in EntitÀten sichern

Wenn du Daten von Webseiten mithilfe von Home Assistant auslesen und in EntitĂ€ten speichern willst, bist du hier genau richtig. Ich zeige dir, wie du fĂŒr den Scrape-Sensor den passenden Selektor findest und des Weiteren eine alternative Möglichkeit fĂŒr komplexe Webseiten ĂŒber Node-RED.

Das Ganze erklĂ€re ich am Beispiel der Web-OberflĂ€che meines IBC-Solar Servemaster Plus Wechselrichters (Danfoss) 🙌

Inhaltsverzeichnis

Empfohlenes Vorwissen

Genutzt Integration

Konfigurierte Scrape-Sensoren

Beispiele mit der Home Assistant Seite

Aktuelle Version

scrape:
  - resource: https://www.home-assistant.io
    sensor:
      - name: "Current version"
        select: ".current-version h1"

Test aus dem Video

scrape:
  - resource: https://www.home-assistant.io
    sensor:
      - name: "Join The Community Sensor"
        select: "body > div.page-content > div.grid-wrapper > div > div > article > div > div > div.grid__item.one-third.lap-one-third.palm-one-whole > div.join-community.material-card.text > h1"
  - resource: https://www.home-assistant.io
    sensor:
      - name: "Alternative fĂŒr Join The Community Sensor"
        select: ".join-community h1"

Beispiel fĂŒr den Wechselrichter

curr_power

scrape:
  - resource: http://192.168.20.67/cgi-bin/overview.tcl?sid=4618340214069137192&menuParentId=3
    authentication: basic
    username: admin
    password: admin
    scan_interval: 10
    sensor:
      - name: Aktuelle Leistung in Watt SI
        select: "#curr_power"
        value_template: '{{ value.split(" ")[0] }}'
        unit_of_measurement: 'W'
        device_class: "power"
        state_class: "measurement"

Node-RED Flow zum Auslesen des Wechselrichters

google chrome node red home assistant 2022 12 10 1440422x

[{"id":"93eabd9642fa1cd8","type":"tab","label":"Get Solar Power Values","disabled":false,"info":"","env":[]},{"id":"783cae8c9aa1054c","type":"http request","z":"93eabd9642fa1cd8","name":"Get Session ID","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://192.168.20.67/cgi-bin/handle_login.tcl","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"multipart/form-data"},{"keyType":"other","keyValue":"Accept","valueType":"other","valueValue":"*/*"},{"keyType":"other","keyValue":"Accept-Encoding","valueType":"other","valueValue":"gzip, deflate, br"}],"x":1180,"y":540,"wires":[["4f4dd65560a20597","b0da5025fc2d3c9c"]]},{"id":"0c757c80cca49353","type":"function","z":"93eabd9642fa1cd8","name":"Set form-data via fnc","func":"msg.payload = {\n    \"user\": \"admin\",\n    \"pw\": \"admin\",\n    \"submit\": \"Anmelden\"\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":960,"y":540,"wires":[["783cae8c9aa1054c"]]},{"id":"e11e51d067a9acf7","type":"api-call-service","z":"93eabd9642fa1cd8","name":"Set SID Helper","server":"c520191b.82f468","version":5,"debugenabled":true,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.solaranlage_session_sid_text"],"data":"{\"value\": \"\" & msg.ddNewSID & \"\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1600,"y":540,"wires":[[]]},{"id":"3f815e9ef1f042f7","type":"inject","z":"93eabd9642fa1cd8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"20","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":380,"wires":[["f4f5170e0fb22860"]]},{"id":"429bdfa84b96d42b","type":"http request","z":"93eabd9642fa1cd8","name":"Get Website Data","method":"GET","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"basic","senderr":false,"headers":[],"x":130,"y":540,"wires":[["4139277f3680d37f"]]},{"id":"6d4c20806cd4d4c4","type":"ha-get-entities","z":"93eabd9642fa1cd8","name":"","server":"c520191b.82f468","version":0,"rules":[{"property":"","logic":"is","value":"","valueType":"str"}],"output_type":"array","output_empty_results":false,"output_location_type":"msg","output_location":"CurrentSessionID","output_results_count":1,"x":90,"y":940,"wires":[[]]},{"id":"f4f5170e0fb22860","type":"api-render-template","z":"93eabd9642fa1cd8","name":"Get SID","server":"c520191b.82f468","version":0,"template":"{{ states('input_text.solaranlage_session_sid_text') }}","resultsLocation":"CurrentSIDFromTemplate","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":260,"y":380,"wires":[["ce4517086692314f"]]},{"id":"d8fafe7ea29f8eb8","type":"debug","z":"93eabd9642fa1cd8","name":"total_yield","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"total_yield","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":740,"wires":[]},{"id":"316b7ad651661c6e","type":"debug","z":"93eabd9642fa1cd8","name":"curr_power","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"curr_power","targetType":"msg","statusVal":"","statusType":"auto","x":310,"y":740,"wires":[]},{"id":"ce4517086692314f","type":"function","z":"93eabd9642fa1cd8","name":"Set form-data via fnc","func":"msg.payload = {\n};\nmsg.url = \"http://192.168.20.67/cgi-bin/overview.tcl?sid=\" + msg.CurrentSIDFromTemplate + \"&menuParentId=3\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":380,"wires":[["429bdfa84b96d42b"]]},{"id":"4139277f3680d37f","type":"switch","z":"93eabd9642fa1cd8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"Die Webschnittstelle wird momentan anderweitig","vt":"str"},{"t":"cont","v":"Wechselrichterstatus","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":370,"y":540,"wires":[["9d8a11cde92e2665"],["16e89a62f7d046b3"],["9d8a11cde92e2665"]]},{"id":"16e89a62f7d046b3","type":"html","z":"93eabd9642fa1cd8","name":"Get curr_power","property":"payload","outproperty":"curr_power","tag":"#curr_power","ret":"text","as":"multi","x":140,"y":680,"wires":[["316b7ad651661c6e","58916ff0bafbae3c","e424a601110803e8"]]},{"id":"e424a601110803e8","type":"html","z":"93eabd9642fa1cd8","name":"Get total_yield","property":"payload","outproperty":"total_yield","tag":"#total_yield","ret":"text","as":"multi","x":400,"y":680,"wires":[["08a44f7c0bde0989","d8fafe7ea29f8eb8","12b9ad486ba22fe8"]]},{"id":"08a44f7c0bde0989","type":"html","z":"93eabd9642fa1cd8","name":"Get prod_today","property":"payload","outproperty":"prod_today","tag":"#prod_today","ret":"text","as":"multi","x":640,"y":680,"wires":[["ec7471c0cab9f9e9","50a14453a1f889a1"]]},{"id":"ec7471c0cab9f9e9","type":"debug","z":"93eabd9642fa1cd8","name":"prod_today","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"prod_today","targetType":"msg","statusVal":"","statusType":"auto","x":810,"y":740,"wires":[]},{"id":"58916ff0bafbae3c","type":"api-call-service","z":"93eabd9642fa1cd8","name":"Set Raw Value","server":"c520191b.82f468","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.solaranlage_curr_power_raw"],"data":"{\"value\": \"\" & msg.curr_power & \"\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":300,"y":820,"wires":[[]]},{"id":"12b9ad486ba22fe8","type":"api-call-service","z":"93eabd9642fa1cd8","name":"Set Raw Value","server":"c520191b.82f468","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.solaranlage_total_yield_raw"],"data":"{\"value\": \"\" & msg.total_yield & \"\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":580,"y":800,"wires":[[]]},{"id":"50a14453a1f889a1","type":"api-call-service","z":"93eabd9642fa1cd8","name":"Set Raw Value","server":"c520191b.82f468","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.solaranlage_prod_today_raw"],"data":"{\"value\": \"\" & msg.prod_today & \"\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":820,"y":800,"wires":[[]]},{"id":"4f4dd65560a20597","type":"debug","z":"93eabd9642fa1cd8","name":"Web-Response","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1360,"y":600,"wires":[]},{"id":"b0da5025fc2d3c9c","type":"function","z":"93eabd9642fa1cd8","name":"Extract SID","func":"msg.payload = msg.payload.split(\"?sid=\")[1]\nmsg.payload = msg.payload.split(\"'\\\">Anm\")[0]\nmsg.ddNewSID = msg.payload\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1390,"y":540,"wires":[["ae141368bd20230a","e11e51d067a9acf7"]]},{"id":"ae141368bd20230a","type":"debug","z":"93eabd9642fa1cd8","name":"New SID","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"ddNewSID","targetType":"msg","statusVal":"","statusType":"auto","x":1560,"y":600,"wires":[]},{"id":"f200918891981606","type":"switch","z":"93eabd9642fa1cd8","name":"Is 10 min?","property":"curminutes","propertyType":"msg","rules":[{"t":"eq","v":"11","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"21","vt":"str"},{"t":"eq","v":"31","vt":"str"},{"t":"eq","v":"41","vt":"str"},{"t":"eq","v":"51","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":7,"x":750,"y":540,"wires":[["0c757c80cca49353"],["0c757c80cca49353"],["0c757c80cca49353"],["0c757c80cca49353"],["0c757c80cca49353"],["0c757c80cca49353"],["4bf2db22f9ebbd2f"]]},{"id":"9d8a11cde92e2665","type":"function","z":"93eabd9642fa1cd8","name":"Get Minutes","func":"var time = new Date();\nmsg.curminutes = time.getMinutes();\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":540,"wires":[["f200918891981606"]]},{"id":"4bf2db22f9ebbd2f","type":"delay","z":"93eabd9642fa1cd8","name":"","pauseType":"delay","timeout":"60","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":950,"y":620,"wires":[[]]},{"id":"c520191b.82f468","type":"server","name":"Home Assistant","addon":true}]

Zugehörige Template-Sensoren

template:
  - sensor:
    # Errechnet aus den Rohdaten den kWh Wert
      - name: Ertrag heute Solaranlage (kWh) Total Inc
        unique_id: "ErtragHeuteSolaranlagekWh"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {% if 'kWh' in states('input_text.solaranlage_prod_today_raw') %}
            {{ states('input_text.solaranlage_prod_today_raw').split(" ")[0] | float }}
            {% else %} 
            {{ states('input_text.solaranlage_prod_today_raw').split(" ")[0] | float / 1000 }}
            {% endif %}
  - sensor:
    # Errechnet aus den Rohdaten den MWh Wert
      - name: Gesamtertrag Solaranlage
        unique_id: "GesamtertragSolaranlageMWh"
        unit_of_measurement: 'MWh'
        device_class: "energy"
        state_class: "total"
        state: >-
            {% if 'kWh' in states('input_text.solaranlage_total_yield_raw') %}
            {{ states('input_text.solaranlage_total_yield_raw').split(" ")[0] | float / 1000 }}
            {% else %} 
            {{ states('input_text.solaranlage_total_yield_raw').split(" ")[0] | float }}
            {% endif %}
  - sensor:
    # Errechnet aus den Rohdaten den Watt Wert
      - name: Aktuelle Leistung Solaranlage
        unique_id: "AktuelleLeistungSolaranlageWatt"
        unit_of_measurement: 'W'
        device_class: "power"
        state_class: "measurement"
        state: >-
            {% if 'Kilo' in states('input_text.solaranlage_curr_power_raw') %}
            {{ states('input_text.solaranlage_curr_power_raw').split(" ")[0] | float / 1000 }}
            {% else %} 
            {{ states('input_text.solaranlage_curr_power_raw').split(" ")[0] | float }}
            {% endif %}

Fazit

Ich hoffe die hat mein Video zum Auslesen von Webseiten mit Home Assistant und den Scrape Sensoren gefallen, und du kannst nun auch nach Belieben EntitÀten erstellen, die Werte von Webseiten beinhalten.

NatĂŒrlich kannst du, wenn du ebenfalls so einen IBC Solar Wechselrichter hast, den Code einfach kopieren… Aber ich denke mal, das ist bei den wenigsten der Fall 😅

Falls du Fragen oder Anregungen hast, zögere bitte nicht, mir ein Kommentar zu schreiben.

HomeKit GerĂ€te Übersicht

smarte News

Erfahre als Erster, wenn wir neue Artikel zu Smart Home oder anderen interessanten Themen veröffentlichen!

Wir senden keinen Spam und verkaufen keine Daten! Erfahre mehr in unserer DatenschutzerklÀrung.

GrĂŒnder von simon42. Schreibt hier ehrlich und leidenschaftlich ĂŒber Smart Home und Technik Themen, denn das Zuhause wurde bereits von Sprachassistenten ĂŒbernommen und die Kontrolle abgegeben 😁

Nennenswerte Antworten

  1. Hallo,

    vielen Dank fĂŒr die Video-Anleitung zum Scraper.
    Ich habe das einmal anhand eines sehr einfachen Beispiels versucht nachzubauen.
    Nach deiner Anleitung komme ich bei der Seite:

    https://raw.githubusercontent.com/Blueforcer/awtrix-light/main/version

    auf den CSS-Selector: body > pre:nth-child(1)

    Auf der Seite ist nur eine einzige Zahl dargestellt, die ich gern auslesen möchte.
    Das funktioniert aber nicht.

    Das ganze ist nicht per YAML eingetragen, sondern ĂŒber das user interface.

    Ich vermute der CSS Selector stimmt nicht. Sehe ich das richtig?

    Gruß
    Riverghost

  2. CSS-Selector: body pre sollte auf dieser Seite reichen.

  3. Vielen Dank fĂŒr die schnelle Antwort.

    Der Selector funktioniert bei mir leider auch nicht.

    Irgendwie ist da der Wurm drin.

  4. Ich habe es jetzt mal nur mit body ausprobiert und siehe da, es geht.

    Manchmal denke ich, mit Logik hat das nix zu tun. :wink:

    Gruß
    Riverghost

  5. Schön, daß du es hinbekommen hast!

    Ich glaub, das Problem kommt daher, dass die Ausgabe ein Frame ist und nicht der original Quelltext geladen wird.

Setze die Diskussion fort unter community.simon42.com

4 mehr antworten

Teilnehmer

Avatar for system Avatar for SvePu Avatar for joenes Avatar for Rene83 Avatar for Riverghost

22 Gedanken zu „Mit Home Assistant Webseiten-Daten auslesen & in EntitĂ€ten sichern“

  1. Hallo Simon!
    Vielen Dank fĂŒr deine ausfĂŒhrlichen Beschreibungen, konnte schon viele Lehren daraus ziehen! Habe erfolgreich die Scrape Integration am laufen und es klappt hervorragend. Habe jetzt einen Wert von einer Website und möchte ihn durch 1000 dividieren, kann man das gleich in die configuration.yaml mit eintragen oder muss ich da einen eigenen Template sensor anlegen?
    WĂ€re dir fĂŒr deine Hilfe sehr dankbar!
    Gruß

  2. Hallo Simon,
    das ist echt ne Tolle Idee und Beschreibung.

    Ich habe da auch gleich eine Idee, wie ich das benutzen könnte.

    Allerdings wird mir bei dem Wert welchen ich benötige beim MenĂŒ kopieren nicht “selector kopieren” angezeigt.

    Es handelt sich hier bei um den Liveticker:
    https://www.adler-mannheim.de/livecenter
    hier wĂŒrde ich gerne oben die Torzahl von der Heim und Gastmanschaft jeweils in eine EntitĂ€t schreiben.

    Mache ich hier etwas falsch oder geht es mit diesen Daten einfach nicht?

  3. Moin Simon,
    ein sehr geile Sache und perfekt von dir erklÀrt .
    Mir sind gleich dutzende von Anwendungen eingefallen und von daher bin ich dir sehr sehr dankbar.
    Leider bin ich offenbar zu blöd das umzusetzen. Ich will Pegelmessung auslesen und in HA ĂŒbernehmen um mich und andere vor Hochwasser zu warnen.
    Ich aber zu doof den richtigen “select” zufinden.

    Das ist die Website: https://www.elwis.de/DE/dynamisch/gewaesserkunde/wasserstaende/index.php?target=2&pegelId=6b1b5c70-a23f-46de-954d-02bdc5bf2ecc

    Ich möchte die Werte bzw.einen Wert aus Spalte (heute) 9 lesen.
    Kann jemand einemalten Mann helfen ?

    DANKE

    scrape:
     – resource: https://www.elwis.de/DE/dynamisch/gewaesserkunde/wasserstaende/index.php?target=2&pegelId=6b1b5c70-a23f-46de-954d-02bdc5bf2ecc

      sensor:
       – name: “Pegel PORTA”
        select: ?????

    • Oh nein, das habe noch nicht gesehen â˜șAuch sehr schön und wirklich hilfreich und extrem sinnvoll fĂŒr Menschen die in der NĂ€he von FlĂŒssen leben.
      Werde ich sicher gleich testen â˜șAber die Sache mit dem auslesen von Webseiten gebe noch nicht auf da ich jede Menge sinnvolle Anwendungen sehe.
      Und Einbindung diverser GerÀte ist offenbar extrem preiswert möglich. Man muss nicht erst noch Modbus, Can Bus, und und und teuer realisierten.
      Ich z.B. eine sehr große Wago Steuerung und die eine WebVisu an Bord. Eigentlich wollte ich die ganzen Modbus Adressen abfragen, nun werde ich es deutlich einfacher und sehr schnell realisieren können
      .
      Vielen Dank und falls jemand einen Tipp hat wĂ€re ich sehr dankbar 👍â˜șïžđŸ€

    • hallo Simon,leider sind die Pegel der Bundeswasserstrassen nicht dabei bzw. nicht wie in dem Beispiel von stephan192 zugĂ€nglich.
      es bleibt da nur das Portal ELWIS (elwis.de) wie es ja oben beschrieben habe.

    • Aber wie auch immer, der Selector könnte so klappen: #main > table:nth-child(2) > tbody > tr:nth-child(3) > td:nth-child(15) > b

  4. Hallo Simon,
    Ich habe mir in den letzten Tagen Dein Video zigmal angeguckt und mich StĂŒck fĂŒr StĂŒck auch mit Hilfe der ausfĂŒhrlichen Beschreibung zum Video durch dieses Thema gekĂ€mpft. Wirklich toll gemacht.
    Dank Deiner Beschreibungen habe ich es auch tatsĂ€chlich geschafft, die Webseitendaten von meinem alten SMA Wechselrichter auszulesen. Vielen Dank fĂŒr das Video -und auch alle anderen- sehr hilfreichen Videos, die mir beim Einstieg in HA sehr geholfen haben.
    Aber eine Frage habe ich:
    Ist es möglich, den von der Webseite ausgelesenen Zeitstempel in HA zusammen mit den Ertragsdaten zu ĂŒbernehmen statt des Importdatums?
    Hintergrund:
    Die Daten auf der Webseite sind zum Zeitpunkt des Auslesens teilweise schon mehrere Stunden alt (Ursache/Lösung habe ich noch nicht herausgefunden).Tagesertrag war zB um 16 Uhr 1,6 kwh. Import war um 20 Uhr.
    Nach Import der Webseitendaten wird im Energy Dashboard ein Ertrag von 1,6 kwh um 20 Uhr angezeigt statt um 16 Uhr.

    Viele GrĂŒĂŸe
    Helmut

    • Leider nein 😱, wĂ€re nur durch ein Update-Statement möglich, was man relativ kompliziert ĂŒber ein eigenes Skript lösen könnte. Aber wie genau: Keine Ahnung 😅

Kommentare sind geschlossen.

Send this to a friend