Seite 2 von 4

Re: OH3 Grünbeck SC18

Verfasst: 2. Mai 2021 17:02
von udo1toni
Letztlich solltest Du das über das http Binding machen, wobei die Vorarbeit (also herausfinden, was Du senden musst und was Du dann empfängst) eher mit einem Werkzeug wie Postman erledigen solltest, von openHAB aus gerät das sonst zum Trial-and-Error, mit der klaren Tendenz zu Error.
Ich kenne mich mit Postman aber auch nicht aus, da muss ich Dich leider allein lassen. :)

Re: OH3 Grünbeck SC18

Verfasst: 2. Mai 2021 20:25
von lenschith
Schade, ich habe jetzt alles versucht was mir in den Sinn gekommen ist, aber leider erhalte ich keine Ausgabe. Dann werde ich das vorerst nicht weiter verfolgen. Ich habe keine Idee mehr und das Internet hat mir an dieser stelle nicht die richtige Infos gegeben wie ich das machen kann. Hört sich in den Foren so leicht :(
Screenshot 2021-05-02 202235.png
Trotzdem vielen Dank.

Gruß Lenschi

Re: OH3 Grünbeck SC18

Verfasst: 3. Mai 2021 09:39
von HansDampf
Falls hier jemand schon eine implementierung hat. Bitte mal posten, hätte auch interesse

Re: OH3 Grünbeck SC18

Verfasst: 4. Mai 2021 05:40
von udo1toni
Ich habe keinen Zugriff auf ein solches System, aber nach der Doku sollte es wirklich nicht weiter schwer sein. Einzig die Sache mit der ID scheint mir fehlerträchtig - die muss halt die korrekte sein. Laut Doku hast Du die mal selbst festgelegt, im Zweifel müsstest Du sie aber auch über die Weboberfläche einsehen können, weil die ID in jeder Antwort enthalten ist (also auch wenn Du konventionell über den Browser auf die Anlage zugreifst).

In der Doku wird das Addon httpRequester für Firefox genutzt, leider ist das Addon nicht mehr verfügbar, ich habe aber den HTTP Request Maker gefunden, der evtl. auch ausreichend sein könnte - In Deinem Screenshot sieht es so aus, als habe Postman das Zeichen & durch %26 und = durch %3D ersetzt, was an dieser Stelle falsch ist.

Re: OH3 Grünbeck SC18

Verfasst: 4. Mai 2021 06:36
von lenschith
Hallo Udo,
das Tool habe ich auch schon probiert aber mit dem selben Ergebnis. Ich habe im Chrome die Konsole geöffnet und folgende Einträge gefunden. Evtl. hilft das weiter.
//Falls keine id in den Coockies gespeicher ist wird eine zufällige id erstellt und in den coockies gespeichert
if (getCookie("id") == "")setCookie("id",parseInt( Math.random() * ( (9999+1) - 1000 )));
So sieht das aus wenn ich die Seite direkt vom Browser öffne
Screenshot 2021-05-04 063047.png
Screenshot 2021-05-04 061845.png
Im Postman sind die Zeichen in der Konsolenausgabe korrekt und werden nicht konvertiert.
Screenshot 2021-05-04 062726.png
Mit dem HTTPrequestMaker bekomme ich keine Ausgabe und auch keine Logausgabe.

Re: OH3 Grünbeck SC18

Verfasst: 4. Mai 2021 18:53
von udo1toni
Nein?
Screenshot 2021-05-04 185243.png

Re: OH3 Grünbeck SC18

Verfasst: 23. Okt 2022 21:38
von lenschith
Ich habe mich nach langer Zeit mal wieder an das Problem gemacht und bin auch einen Schritt weiter aber irgendwie scheitere ich dennoch. Aber vielleicht hat ja nochmal jemand einen Tipp. Ich habe es mittlerweile geschafft über den Postman an die gewünschten Daten zu kommen, bin mir allerdings nicht ganz klar wie ich diese jetzt in OH3 mit dem HTTP Binding erhalten bzw. wie ich diese dann mittels XPATH in die Channels bekomme.
postman_01.png
Ich frage die Daten im Body an.

HTTP Binding:
Ich habe das Thing mit dem HTTP Binding angelegt aber ich bekomme keine Daten, habe ich was falsch eingetragen?
http_03.png

Code: Alles auswählen

data=getXML("id="+getCookie("id")+"&show=D_Y_2_01|D_A_1_3|D_D_1|D_D_2|D_C_4_2|D_A_1_6|D_A_1_1|D_A_1_2|D_A_2_2|D_A_3_1|D_A_3_2|D_Y_1|D_A_1_3|D_A_2_3|D_Y_5~",1);
Ich habe auch einen Channel konfiguriert und mit der XPATH Transformation versucht die Daten zu extrahieren aber da bleib das Item leider leer.

Code: Alles auswählen

[name()='data']/*[name()='D_Y_2_01']/
Als State Foramt %s

Re: OH3 Grünbeck SC18

Verfasst: 24. Okt 2022 00:48
von udo1toni
Wenn Du weißt, was Du senden musst, wäre der nächste Schritt, einen Channel anzulegen, in dem die gesamte Antwort ankommt (ein String Channel). Ich gehe stark davon aus, dass Du ohnehin nur lesen kannst. Auf der anderen Seite bekommst Du aber mehrere Werte im XML angeliefert, es wäre also ohnehin sinnvoll, einen Channel zum Empfang der Daten zu verwenden und die Daten erst anschließend zu extrahieren. Also einfach ein String Channel ohne alles anlegen und zunächst mit einem String Item verbinden.
Jetzt kannst Du prüfen, ob Daten ankommen.
Wenn daten kommen, kannst Du im nächsten Schritt weitere Items mit dem selben Channel verlinken. Dies müssen nicht unbedingt String Items sein!
Im Link selbst hast Du dann die Möglichkeit, XPATH als Profile zu konfigurieren (immer vorausgesetzt, dass XPATH auch installiert ist).

Re: OH3 Grünbeck SC18

Verfasst: 24. Okt 2022 06:24
von lenschith
Danke für die super schnelle Antwort. Ich habe einen Channel erstellt und mit einem Item verlinkt aber ich bekomme da keine Daten rein.
import.png
Ich kann die Anfrage nur über den Body mitsenden, hab ich da im Openhab was falsch konfiguriert?
Die Anfrage wurde unter Fallback Encoding angegeben?
body.png
Im Log sehe ich leider auch keine Daten kommen.

Code: Alles auswählen

2022-10-24 06:17:10.541 [INFO ] [nding.http.internal.HttpThingHandler] - Using the secure client for thing 'http:url:Gruenbeck_TEST'.

2022-10-24 06:17:31.879 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HTTPURLThing_GruenbeckXMLimport' changed from NULL to 

Re: OH3 Grünbeck SC18

Verfasst: 24. Okt 2022 13:23
von udo1toni
Ich denke, Du hast die Abfrage falsch eingetragen.

Kennst Du die Code-Anzeige? Das ist der rechte Karteireiter im Thing mit dem Titel Code.
Ich habe mal versucht, das Thing nachzubauen und so zu konfigurieren, wie ich denke, dass es korrekt ist:

Code: Alles auswählen

UID: http:url:gruenbeck
label: Grünbeck per http
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://10.10.1.35/
  delay: 0
  stateMethod: POST
  refresh: 60
  commandMethod: GET
  contentType: text/xml
  timeout: 5000
  bufferSize: 2048
channels:
  - id: xmldata
    channelTypeUID: http:string
    label: Daten
    description: ""
    configuration:
      mode: READONLY
      stateExtension: mux_http
      stateContent: data=getXML("id="+getCookie("id")+"&show=D_Y_2_01|D_A_1_3|D_D_1|D_D_2|D_C_4_2|D_A_1_6|D_A_1_1|D_A_1_2|D_A_2_2|D_A_3_1|D_A_3_2|D_Y_1|D_A_1_3|D_A_2_3|D_Y_5~",1);
Keine Ahnung, ob Du Credentials angeben musst, aus den vorherigen Posts habe ich das nicht rausgeleesen, entsprechend habe ich hier nichts eingetragen und somit taucht auch der entsprechende Parameter im Code nicht auf.
Wichtig ist aber: Die base URL ist der grundsätzliche Zugriff auf das Gerät. Im Prinzip könnte man auch die gesamte URL eintragen, hier möchte ich aber davon abweichen, damit wir im Channel gezielt die state Extension setzen können. Bei jedem Zugriff wird die base URL exakt so, wie sie ist, vor die commandExtension bzw. stateExtension gehängt.
Die state Method ist POST und als content Type habe ich text/xml angegeben. Vermutlich wäre raw korrekt, aber das steht uns nicht zur Verfügung. Dieser Parameter wäre also ein potenzieller Knopf, um auszuprobieren, ob es mit einem anderen Wert funktioniert, falls es nicht direkt klappt.
Als Refresh habe ich 60 angegeben, das heißt eine Abfrage pro Minute. Evtl. könnte man auch einen (wesentlich) höheren Wert nehmen, z.B. 300 für fünf Minuten, die Daten der Anlage sind ja nicht so volatil. timeout wäre die Zeit, die openHAB dem entfernten System gibt, um zu antworten. Auch dieser Wert könnte testweise wesentlich erhöht werden, um auszuschließen, dass die Antwort einfach nicht rechtzeitig eintrifft.

Nun zum Channel: Dort ist als Modus READONLY angegeben, die stateExtension steht auf mux_http, das ist der Teil, den ich bei der base URL entfernt habe. Und da wir den Status per POST abfragen, gibt es auch noch den stateContent, das ist der Teil, der per POST gesendet wird, um eine Antwort zu bekommen (Fallback-Encoding ist definitiv nicht der korrekte Parameter dafür).

Du kannst den Code auch einfach über den bestehenden Code des Things kopieren, wenn Du die Parameter nicht manuell anpassen willst. Lediglich die Thing UID muss passen.

Ich bin aber kein Experte, was das http Binding betrifft, ist also ein wenig stochern im Nebel ;)