Die Kommunikation (lesen und schreiben) via API funktioniert nach Erhalt des Syntax vom Lieferant. Getestet habe ich mit Postman und umgesetzt mit Node Red.
Das Auslesen der Daten über die Website verfolge ich nicht mehr weiter.
Nochmals vielen Dank für die Unterstützung und die Tipps.
NEWS

Best posts made by bugs
-
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
Latest posts made by bugs
-
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
Die Kommunikation (lesen und schreiben) via API funktioniert nach Erhalt des Syntax vom Lieferant. Getestet habe ich mit Postman und umgesetzt mit Node Red.
Das Auslesen der Daten über die Website verfolge ich nicht mehr weiter.
Nochmals vielen Dank für die Unterstützung und die Tipps. -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
Ich erstellte noch einige Screenshot die eventuell helfen meine Idee, die Selection einer Variablen (Wassertemperatur), umzusetzen.
Screenshots_HTML.pdf@OliverIO
Unter Network gibt es ein ajax.php (siehe Screenshot), vielleicht hilft das weiter. -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
@OliverIO
Die Screenshots sind aus dem Reiter Network, der Reiter Response war immer leer. -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
@OliverIO Hier einige Screenshots, vielleicht helfen die weiter, dort kann ich jedoch die Wassertemperatur nicht finden.
Screenshots_HTML-Seite.pdf
Heisst das jetzt, dass die Daten vom Server nicht direkt zur Verfügung gestellt werden und somit nicht einfach mit Select erfasst werden können? -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
@rewenode Hier die gespeicherte HTML-Seite:
Anlage Control 1.2 GatewayControl 1.2.html -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
Da ich vom Lieferant betreffend API immer noch keine näheren Infos erhalten habe versuche ich die Daten via html und Selector herauszufiltern. Wenn ich jedoch mit Chrome-Entwicklertools unter Elements nach der Wassertemperatur suche kann ich diese nicht finden. Liegt das eventuell daran, dass der Server die Daten erst nach dem Durchlauf mit javascripts bereitstellt, so wie OliverO das im Beitrag vom 4.3.2020 15:14h beschreibt und deshalb die Daten garn nicht zur Verfügung stehen? Unter Sources sehe ich die Variable mit der Wassertemperatur.
So wie ich verstanden habe funktioniert das Prinzip via html-Site und Selector nur dann (meistens) richtig wenn die Daten (Aufbau der html-Site) immer gleich bleiben. Bei meiner Applikation möchte ich die Wassertemperatur herauslesen und dieser Wert ändert sich logischerweise. Ist es denkbar den String, welcher die Wassertemperatur beinhaltet mit einem Selector zur filtern und anschliessend mit String-Manipulationen eventuell mit RegEx den Wert der Wassertemperatur zu separieren oder funktioniert der Selector nicht mehr richtig sobald sich der Zahlenwert der Wassertemperatur ändert?
@rewenode
Kann es sein, dass mit dem neusten Node Red V1.0.3 XPath funktioniert, egal ob ich mit selector arbeite oder mit XPath oder full XPath erhalte ich die gleichen Ergebnisse.Für die definitive Lösung werde ich versuchen die API-Schnittstelle zu nutzen.
Ist das richtig, dass API-Schnittstellen (REST-API siehe auch Beitrag vom 5.3.2020 12:49h) nicht generell syntaktisch gleich aufgebaut sind, sondern je nachdem wie diese programmiert wurden unterschiedlich sein können und somit eine genaue Beschreibung der zu verwendenden API-Schnittstelle notwendig ist? Einige Versuche mit Postman blieben bis jetzt erfolglos. -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
@rewenode Super, vielen Dank für den ausführlichen, aufwendigen Beitrag. Damit sollte sogar ich einen Schritt weiter kommen. Ich verfolge im Moment noch beide Lösungsvarianten mit und ohne API.
Dass nicht alle Daten im Debug Fenster sichtbar sind habe ich vermutet, unsicher war ich als auch die Daten von payload, gespeichert in ein File, nicht vollständig waren.
Wie entwickelt man so einen CSS-Selector? -
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
Zuerst vielen Dank für die aktive Unterstützung, das ist gar nicht selbstverständlich.
Es ist tatsächlich so, dass mir die Kenntnisse der Syntax mit HTTP und Node Red fehlen. Ich habe sehr vieles ausprobiert aber komme leider zu keinem Ergebnis.Kurz zu meiner Person, ich bin Ü65 und war in meinem aktiven Berufsleben im Bereich Steuerungen tätig. Viele Jahre programmierte ich SPSen und Prozessleitsysteme, vorwiegend mit Siemens-Produkte, für verfahrenstechnische Anlagen. Seit guten einem Jahr, begonnen mit FHEM, versuche ich hobbymässig unser EFH smarter zu machen. Dank Internet, Selbststudium und vor allem hilfreichen Fachleuten in verschiedenen Foren habe ich einiges umgesetzt. Im Einsatz sind zwei Raspberry Pi 3 und 4, einer im technischen Bereich als SPS, projektiert mit Codesys und einer als zentraler Server mit ioBroker und Node Red. Zur Kommunikation sind Ethernet, digitalSTROM, Enocean und Modbus-TCP im einsatz. Realisiert sind Storensteuerungen, Eigenverbrauchsoptimierung der Photovoltaikanlage durch Ladung des Brauchwasserboilers und der Wärmepumpe. Als nächstes möchte ich nun die Poolwasserheizung optimiert ansteuern, abhängig von der Stromproduktion der PVA und dazu brauche ich die Badwassertemperatur und die Möglichkeit die Umwälzpumpe anzusteuern.
Bevor ich die API-Kommunikation mit Node Red versuche muss ich sinnvollerweise den genauen Syntax zum Auslesen der Daten via API-Schnittstelle kennen. Mit dem Browser scheint es jedoch nicht zu funktionieren, ich hoffe noch, dass ich vom Lieferant ein Beispiel bekomme. Aktuell versuche ich ob ich mit Postman weiter komme.
-
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
@OliverIO
Mit Firefox unter Netzwerkanalyse in der Datei ajax.php (POST) und in der Spalte Antwort unter JSON-values[105] ist die Wassertemperatur mit der paramterid: 261678 und dem value: 277 sichtbar.
Sagt das jetzt, dass die Daten direkt vom Server gesendet werden oder erst nach Ausführung eines Javascripts?Inzwischen erhielt ich eine Dokumentation einer REST-API zur Kommunikation mit dem Remoteportal.
Hier einen Ausschnitt der Beschreibung:
REST-API zur Kommunikation mit dem Remoteportal
Die API ist erreichbar unter folgender URL:
api.<FIRMENNAME>.remoteportal.de/...
Die Authentifizierung erfolgt über HTTP-Basic-Auth, d.h. im HTTP-Header muss immer eine Benutzername-/Passwort-Kombination mitgesendet werden.
Weiterhin sollte im HTTP_ACCEPT das Datenformat angegeben werden. Momentan wird nur JSON unterstützt, d.h. im Header sollte „application/json“ angegeben werden. Wird „application/xml“ angegeben wird der Fehlercode „501-Not Implemented“ zurückgegeben. Standardmäßig wird JSON zurückgegeben.
Die mit der Funktion /languages ermittelten Sprachen können im Headerfeld HTTP_ACCEPT_LANGUAGE mit dem Code der Sprache explizit angefordert werden. Werden mehrere Sprachen angegeben, sollte der Quality-Faktor gesetzt werden. Wird das Feld nicht gesetzt, wird die Standardsprache zurückgegeben.
Im Headerfeld IF_NONE_MATCH sollte der ETag der letzten Anfrage mitgesendet werden. So kann entschieden werden, ob Daten gesendet werden müssen, oder ob der Statuscode 304 – Not Modified gesendet wird. Kann eine Benutzer-/Passwort-Kombination nicht verifiziert werden, wird der HTTP-Statuscode 401 – Unauthorized zurückgeliefert. WICHTIG: wenn man sich mit den Controllerdaten authentifizieren will, ist der Benutzername die MAC-Adresse des Controllers. Diese muss ohne die Doppelpunkte übetragen werden. Idealerweise sollte aber in der Anwendung die Eingabe mit Doppelpunkten ermöglicht werden, um das Verhalten mit der Oberfläche des Remoteportals konsistent zu halten.
Wird eine Funktion aufgerufen, die nicht existiert wird der HTTP-Statuscode 404 – Not Found zurückgeliefert.
Alle Datums-/Uhrzeitangaben werden als UNIX-Timestamp übermittelt.Versionen:
Die Versionierung erfolgt über den http-Header. Im Feld HTTP_ACCEPT muss eine Liste der zu verwendende API-Versionen angegeben werden. Sollen mehrere Versionen berücksichtigt werden, muss eine Liste übergeben werden, z.B. „api/v2 api/v3“.Funktionen:
/languages
Liefert eine Liste mit den verfügbaren Sprachen
Akzeptierte Methoden:
• GET
Rückgabe (Liste):
• id: Die ID der Sprache
• title Name der Sprache
• code Der Sprachcode
http-Statuscode:
• 200 OK
• 304 Not Modified/users
Liefert Informationen zum User zurück.
Akzeptierte Methoden:
• GET
Rückgabe:
• login Der verwendete Login-Name
• type Typ des Benutzers (customer, trader)
• user_id Die ID des Users
• firstname Vorname
• lastname Nachname
• company Firma
• time_zone_offset Zeitabweichung der Userzeit von UTC in Minuten
http-Statuscode:
• 200 OK
• 304 Not Modified
• 409 Der Loginname ist kein User, sondern ein ControllerLeider fehlen mir auch hier die Kenntnisse wie ich mit Node Red eine Abfrage erstellen kann.
Ich versuchte im Browser und auch in Node Red mit ‚http request Node‘ z.B. folgende Eingabe:api.behncke.remoteportal.de/users
Rückmeldung vom Browser: The requested URL was not found on this server.Debugging in Node Red:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at api.behncke.remoteportal.de Port 80</address>
</body></html>Der HTTP-Statuscode 404-Not Found sagt, dass es die Funktion (/status) nicht gibt, gemäss API-Dokument ist das aber eine mögliche Funktion. Ich versuchte auch andere Funktionen, erhalte aber immer die Fehlermeldung ‚404‘.
-
RE: Bestimmte Daten aus einer Webseite auslesen und steuern
@OliverIO Danke für die Erklärung.
Wenn ich unter Firefox (F12) schaue finde ich kein Menüpunkt Network, unter Debugger-index.php sind alle Daten inkl. z.B. der Wassertemperatur ersichtlich.
Beim Chrome gibt es den Menüpunkt Network (Filter=all) und dann in einer Tabelle verschiedene Elemente.
Wo genau muss ich schauen?