KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[Frage] [V4.0.1] HTTP-API: Antwort in XML-Struktur/Text auswerten?

Wissen, Planung & Diskussion zur Unterstützung von Rest-API & Webabfragen im Timberwolf Server.
Stellt uns hier Eure Projekte und Ideen vor.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
AndererStefan
Reactions:
Beiträge: 262
Registriert: Sa Mär 02, 2024 11:04 am
Hat sich bedankt: 138 Mal
Danksagung erhalten: 161 Mal

[V4.0.1] HTTP-API: Antwort in XML-Struktur/Text auswerten?

#1

Beitrag von AndererStefan »

Hallo zusammen,

ich betreibe zu Hause noch Reste eines Homematic Smarthomes mit einer CCU2 und ein paar Funksteckdosen. Auf der CCU2 läuft (evtl. aufgrund irgendwelcher Plugins?) eine HTTP-API.

Wie ich die Steckdosen über die HTTP-API schalten könnte, habe ich bereits herausgefunden. Wie ich den Schaltstatus abfragen kann, ebenfalls. Wo ich gerade nicht weiterkomme ist die Übersetzung der HTTP-Antwort in ein KNX-Objekt.
Die Antwort auf meine Statusabfrage lautet:

Code: Alles auswählen

<xml><exec>/http://192.168.1.20:8181/alchy.exe</exec><sessionId></sessionId><httpUserAgent>User-Agent: Privately used Timberwolf Server HTTP-API Daemon, Designed by service@elabnet.de</httpUserAgent><sagt>false</sagt></xml>
Ich würde gerne den String "false/true" zwischen <sagt> und </sagt> auswerten und in ein KNX-Objekt DTP 1.* umwandeln. Wie kann ich das erreichen?

Die Umstellung/Nachrüstung der CCU2 um einen MQTT-Client würde die Kommunikation vermutlich einfacher machen, aber auf der CCU laufen ein paar komplizierte Logiken, dass ich das System nicht anfassen möchte. In einem älteren Thread war der Stand "XML Dekodieren geht noch nicht, kommt vielleicht später." Gibt es da inzwischen ein Update oder gar eine Lösung?

Viele Grüße
Stefan
Zuletzt geändert von Parsley am So Jun 23, 2024 3:09 am, insgesamt 2-mal geändert.
TWS 3500XL ID:1486, VPN aktiv, Reboot nach Rücksprache

gbglace
Reactions:
Beiträge: 4088
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1415 Mal
Danksagung erhalten: 1901 Mal

#2

Beitrag von gbglace »

Ganz nativ mit dem TWS habe ich da hier noch nichts gelesen.
Wenn die Strategie aber klar definiert ist die CCU möglichst komplett vom TWS abzulösen, würde ich persönlich auf dem TWS z.N.neinen NodeRed Container anlegen und dort die Übersetzung der XML auf z.B. MQTT machen lassen.
Auch wenn NR direkt KNX könnte, wäre der Weg via MQTT aber eben näher am Ziel es später im TWS aufzulösen. Du könntest es es auch extremer lösen und per API in dem TWS holen und das Ergebnis als String per MQTT an NR weiter reichen dort das auflösen und per MQTT an den TWS in einem binärem Signal zurück. Diese Weiche kann dann schnell ausgebaut werden wenn der TWS das XML direkt zerlegen kann.

Aber wo ich das gerade so tippe. Schaue mal in dem Logikmodulen bei Textmodulen nach. Da gibt es mittlerweile ja auch welche die einen Text nach Text durchsuchen können. Wenn die zwei Ergebnisse für An/AUs da bekannt sind ist das da ggf eine Lösung. Ein solchen Text Sucher für den Status AN und es wäre der binäre Status. Das ist dann noch nicht die direkte Dekodierung am API Objekt aber nativ im TWS.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Ersteller
AndererStefan
Reactions:
Beiträge: 262
Registriert: Sa Mär 02, 2024 11:04 am
Hat sich bedankt: 138 Mal
Danksagung erhalten: 161 Mal

#3

Beitrag von AndererStefan »

Hallo Göran,

der letzte Ansatz nach Durchsuchen des Texts klingt gut, da sehr einfach und übersichlich. Nur leider klappt es nicht.
Kann es sein, dass die Länge der Eingabestrings auf 20 Zeichen begrenzt ist? Im Doktormodus kann ich jedenfalls nicht mehr als 20 Zeichen eingeben. Ist das die richtige Logik?

Bild

Wenn ich in einem Test-String manuell "true" zwischen ein paar Zeichen und/oder xml-Tags verstecke klappt es immerhin.

EDIT: Die Such-Funktion beschränkt sich sogar auf die 15 Zeichen, die man im roten Vorschaufenster sieht. Wird das "true" in der Vorschau hinten abgeschnitten schlägt auch die Funktion auf "false" um.

Viele Grüße
Stefan
Zuletzt geändert von AndererStefan am Fr Jun 21, 2024 10:10 am, insgesamt 1-mal geändert.
TWS 3500XL ID:1486, VPN aktiv, Reboot nach Rücksprache

Ersteller
AndererStefan
Reactions:
Beiträge: 262
Registriert: Sa Mär 02, 2024 11:04 am
Hat sich bedankt: 138 Mal
Danksagung erhalten: 161 Mal

#4

Beitrag von AndererStefan »

Hi,

da ich mit den String-Werkzeugen nicht weiterkam, habe ich es mit node-red im Docker-Container versucht.
Mit den entsprechenden Homematic- und KNX-Ultimate nodes war es eigentlich recht einfach das umzusetzen.
Off Topic
OT, aber als Hilfe für andere:
Falle 1: Ich habe node-red-contrib-ccu für die Verbindung zur CCU2 genutzt. Beim Eintragen der IP-Adresse der CCU2 passiert Auto-Discovery und der Adresse wird die Seriennummer/Bezeichnung angefügt. Das muss man wieder löschen!
Falle 2: Für die Verbindung zu KNX habe ich KNX-Ultimate 2.5.1 genutzt. Beim Eintragen des KNX-Gateways funktionierte bei mir (das mag an spezifischen Netzwerkeigenschaften liegen) die DNS-Auflösung nicht. Mit IP-Adresse gings dann.
Allerdings machte sich das zunächst in der CPU-Auslastung des TWS bemerkbar. Die Load-Average erhöhte sich von ~ 0,4 auf >1,5, mit häufigen Spikes der CPU-Auslastung von 30%, ohne dass eigentlich viel zu tun gewesen wäre. Es lag klar am node-red Container (getestet durch Anhalten) und eventuell dem ganzen Rumprobieren? Abschließend hatte ich alle Flows gelöscht und meine Test-Verbindung eines Homematic-Datenpunktes zu einer KNX-GA neu erstellt. Danach hat sich die Load wieder normalisiert.

Also für mich ist node-red im Container auf dem TWS damit erstmal eine Lösung um meine Homematic-Steckdosen ins KNX zu bekommen. So ganz schön finde ich die Lösung derzeit nicht, da es etwas unübersichtlicher ist, als alles zentral im TWS zu managen. Ich denke, ich würde mich mit der Zeit daran gewöhnen, aber hinsichtlich Wartbarkeit (v.a. durch andere) ist eine zentrale Schnittstelle schöner.

Daher meine Fragen an Elabnet (@StefanW ):
a) Gibt es Pläne (bzw. Bedarf) die HTTP-API auf die Auswertung von xml zu erweitern?
b) Sind Logikbausteine möglich bzw. geplant die mit längeren Strings umgehen können, oder ggf. gar spezielle Logik-Bausteine um xlm-Strukuren auswerten zu können?
Sorry, jetzt wirds etwas visionär:
c) Habt ihr schon überlegt, ob ihr node-red nativ in den TWS einbinden und einen direkten Zugriff auf das Objekt-System des TWS könnt/wollt?
d) Gibt es Pläne für eine direkte Homematic-Schnittstelle? (Ich kenne aber den HM-Markanteil nicht und ob das wirtschaftlich interessant ist. Technisch/optisch/preislich sind die Geräte nicht schlecht, die CCU2/CCU3 Oberfläche aber aus der Zeit gefallen.)

Einen schönen Sonntag,
Stefan
TWS 3500XL ID:1486, VPN aktiv, Reboot nach Rücksprache
Antworten

Zurück zu „HTTP-API, REST & Web-Abfragen“