Seite 3 von 4

Re: OH3 Grünbeck SC18

Verfasst: 24. Okt 2022 21:31
von lenschith
Super Udo, so bekomme ich eine Antwort. An den Codereiter hab ich gar nicht gedacht, muss auch gestehen da bin ich total planlos.
Jetzt bekomme ich dieses Ergebnis und ich schaffe es nicht die einzelne Wert zu extrahieren via XPath. Ist mir schon fast peinlich das ich das nicht hinbekomme. Hab jetzt schon einiges getestet aber irgendwie klappt das nicht.

Ergebnis:

Code: Alles auswählen

<data><code>ok</code><D_Y_2_01>162</D_Y_2_01><D_A_1_3>6.0</D_A_1_3><D_D_1>16.0</D_D_1><D_D_2>-</D_D_2><D_C_4_2>21:21</D_C_4_2><D_A_1_6>-</D_A_1_6><D_A_1_1>0.00</D_A_1_1><D_A_1_2>0.28</D_A_1_2><D_A_2_2>000</D_A_2_2><D_A_3_1> 16</D_A_3_1><D_A_3_2>56</D_A_3_2><D_Y_1>162</D_Y_1><D_A_1_3>6.0</D_A_1_3><D_A_2_3>99</D_A_2_3><D_Y_5>0</D_Y_5></data>
XPath ist installiert, mir ist nur nicht klar wie ich die vielen einzelne Ergebnisse dort in eigene Items parse.

dachte ich muss einfach (/*[name()='data']/*[name()='D_Y_2_01']/) in die Transformation schreiben um das Ergebnis aus <D_Y_2_01>162</D_Y_2_01> zu erhalten, also nur die Zahl 162.
Wäre hier nochmal sehr dankbar für Nachhilfe wie ich das korrekt angehen muss.

Schon mal Danke
Gruß Lenschi

Re: OH3 Grünbeck SC18

Verfasst: 24. Okt 2022 22:59
von udo1toni
Also, gewöhnlich sollte die Formatierung so aussehen:

Code: Alles auswählen

XPATH:/data/D_Y_2_01
Dies sollte dann 162 liefern.
Es kann auch sein, dass Du noch ein /text() anhängen musst, so ganz habe ich XPATH auch noch nicht verstanden...

Der Punkt ist aber, dass der XPATH Ausdruck quasi den Pfad zum Wert angibt. Nutzerfreundlich formatiert sieht der Output ja so aus:

Code: Alles auswählen

<data>
	<code>ok</code>
	<D_Y_2_01>162</D_Y_2_01>
	<D_A_1_3>6.0</D_A_1_3>
	<D_D_1>16.0</D_D_1>
	<D_D_2>-</D_D_2>
	<D_C_4_2>21:21</D_C_4_2>
	<D_A_1_6>-</D_A_1_6>
	<D_A_1_1>0.00</D_A_1_1>
	<D_A_1_2>0.28</D_A_1_2>
	<D_A_2_2>000</D_A_2_2>
	<D_A_3_1> 16</D_A_3_1>
	<D_A_3_2>56</D_A_3_2>
	<D_Y_1>162</D_Y_1>
	<D_A_1_3>6.0</D_A_1_3>
	<D_A_2_3>99</D_A_2_3>
	<D_Y_5>0</D_Y_5>
</data>
Da kann man schön erkennen, dass da gar nicht so viel zum entschlüsseln nötig ist.

Wen alle Stricke reißen, kannst Du auch REGEX verwenden, das sähe dann (für den ersten Messwert, wie oben) so aus:

Code: Alles auswählen

REGEX:*.<D_Y_2_01>(.*)</D_Y_2_01>*.
Man könnte hier auch noch besser eingrenzen, aber die Werte müssen eh alle separat heraus gezogen werden, da kann man auch den plumpen Weg gehen.
Aber probiere ruhig noch mal mit XPATH, das sollte eigentlich auch funktionieren.

Das Wichtigste ist ja, dass die Daten nun schon mal in openHAB ankommen. Wie oben erwähnt, verlinke einfach für jeden Wert ein zusätzliches Item. Fange mit einem String Item an, in dem Du bequem im Profile mit XPATH oder notfalls mit REGEX experimentieren kannst, bis der Output dem entspricht, was Du erwartest. Anschließend legst Du die einzelnen Number Items an und nutzt das identische Profile (natürlich jeweils angepasst für den jeweiligen Wert). Ab dem Zeitpunkt sollten alle Werte als Zahlen in openHAB bereitstehen.

Noch ein Tipp: Es ist vermutlich irgendwie möglich, die entsprechenden Einheiten im Profile mit dazu zu zaubern, aber das artet schnell in einen ermüdenden Kampf aus. Für die reine Anzeige eines Wertes kannst Du die Einheit leicht später über die Metadaten des Items hinzufügen. Das Item bleibt vom Typ her ein Number Item (nicht - als Beispiel - Number:Pressure oder sowas), in der Anzeige steht dann trotzdem hPa oder bar oder was auch immer. Wenn Du aber auf den Wert z.B. innerhalb einer Rule Bezug nimmst, musst Du Dich nicht damit rumschlagen, dass eine Einheit an der Zahl dran hängt.

UoM (Units of Measurement) ist eine tolle Funktion, wenn die Werte schon entsprechend angeliefert werden, weil man sich keine Gedanken um die Umrechnung machen muss, einfach gewünschte Einheit angeben, fertig. Um aber eigene Werte in das System einzubringen, ist unverhältnismäßig viel Arbeit nötig.

Re: OH3 Grünbeck SC18

Verfasst: 25. Okt 2022 21:40
von lenschith
Hallo Udo,

ich bin immer wieder total geflasht von deinem Know-how und der schnellen Response. Vielen Dank für deine Hilfe. Ich war gestern wahrscheinlich nur zu ungeduldig. Heute mit etwas mehr Ruhe hat das auch alles geklappt so wie gewollt.

Ich habe im Code wie von dir vorgeschlagen die Daten abgerufen

Code: Alles auswählen

UID: http:url:gruenbeck_softliQSC18
label: Grünbeck softliQ:SC18
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://10.10.1.123/
  delay: 0
  stateMethod: POST
  refresh: 60
  commandMethod: GET
  contentType: text/xml
  timeout: 10000
  bufferSize: 2048
channels:
  - id: xmldata
    channelTypeUID: http:string
    label: xmlimport
    description: import der XML Daten
    configuration:
      mode: READONLY
      stateExtension: mux_http
      stateContent: data=getXML("id="+getCookie("id")+"&show=D_D_1|D_C_4_2|D_A_1_1|D_A_1_2|D_A_2_2|D_A_3_1|D_A_3_2|D_A_1_3|D_A_2_3|D_Y_5|D_A_1_3|D_Y_5|D_Y_10_1|D_B_1|D_Y_4_1|D_Y_2_1|D_Y_2_2|D_Y_2_3|D_Y_2_4|D_Y_2_5|D_Y_2_6|D_Y_2_7|D_Y_2_8|D_Y_2_9|D_Y_2_10|D_Y_2_11|D_Y_2_12|D_Y_2_13|D_Y_2_14|D_A_1_9|D_Y_2_01~",1);
Falls es jemanden interessiert, die einzelnen Werte habe ich hier gefunden: https://homematic-forum.de/forum/downlo ... 554b93e046

Daraufhin im Channel die einzelnen Werte mit Items gelinkt via XPath z.B.

Code: Alles auswählen

/data/D_A_1_2[1]/text()
Screenshot 2022-10-25 213433.png
Und dann in der StateDescription die Einheiten dazu gepackt z.B.

Code: Alles auswählen

%s m³
Vielen Dank
Grüße Lenschi

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 18. Nov 2022 07:47
von Grandlhuber
Hi Leute,

ich besitze ebenfalls eine SC18 und habe eure Lösung ausprobiert. Funktioniert soweit :) .

Nun möchte ich aber den aktuellen Durchfluss anzeigen lassen. Dafür wird ein Code benötigt (005). Habe schon einiges probiert, komm aber nicht dahinter was ich da eintragen muss?!?

Hier der Ausschnitt der Webserver-Doku für den aktuellen Durchfluss:
Aktueller_Durchfluss.jpg
PS: Das war z.B. ein rumgeteste von mir im stateContent in einem neuen Kanal:

Code: Alles auswählen

data=getXML("id="+getCookie("625")+"&show=D_H_2~"+"&code=("005")",1);
xPath im Link:

Code: Alles auswählen

/data/D_H_2[1]/text()
...Zeigt leider nichts an.

Kann wer helfen?

Gruß Oli

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 18. Nov 2022 10:23
von udo1toni
Ich denke, es müsste eher so aussehen:

Code: Alles auswählen

stateContent: data=getXML("id=625&show=D_H_2&code=005",1);
Das ist natürlich nur der eine Parameter des Channels, der Rest muss noch dazu.
Ich nehme an, das Cookie wird bei irgendeinem Anmeldeprozess gesetzt und mit der ID gefüllt, "id" ist im Beispiel oben also der Name des Cookies, in dem die ID gespeichert ist, nicht die konkrete Nummer.

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 20. Nov 2022 21:10
von lenschith
Also bei mir ist der aktuelle Durchfluss unter D_A_1_1 und ich brauche diesen Parameter nicht. Aber ich frage das nicht ab. Ich frage die Anlage nur alle paar Std. ab. Da ich festgestellt habe, das sich der Webserver verabschiedet wenn zu häufig anfragen kommen. Hier noch ein link mit der Übersicht für die Parameter https://homematic-forum.de/forum/downlo ... bcee5ddded

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 21. Nov 2022 10:35
von Grandlhuber
@Udo: Danke, scheint zu gehen. Zumindest zeigt er mir irgendwas an. :lol:

Habe aber das Problem, dass ich hier solche Meldungen von allem Items der Grünbeck-Anlage bekomme:

Code: Alles auswählen

2022-11-21 10:19:36.826 [WARN ] [.profiles.XPathTransformationProfile] - Could not transform state '' with function '/data/D_A_1_2[1]/text()' and format '%s'
Wie damit umgehen? Die ausgelesen Werte scheinen trotz Fehler zu passen.

Grüße :ugeek:

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 21. Nov 2022 11:00
von udo1toni
Das bedeutet, dass ab und zu der gesuchte Datenpunkt nicht im XML enthalten ist. Da müsste man halt mal schauen, was regulär geliefert wird. Der einfachste Weg hier: lege ein weiteres Item an (Typ String) und verlinke es parallel zum vorhandenen Item. Trage dort kein Profile ein. Nun bekommst Du in diesem Item das gesamte XML ausgeliefert, parallel zum transformierten Wert. Immer wenn nun der Fehler im Log auftritt, suchst Du Dir das Item mit dem xml raus und kannst im Klartext sehen, was die Grünbeck geantwortet hat.

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 22. Nov 2022 13:31
von Grandlhuber
Habe ein Item so angelegt wie du gesagt hast. Im Log ist dann auch dieses Item mit genau dem selben Fehler vorhanden. Vielleicht mal die Refresh-Time im Thing erhöhen weil evtl. der Webserver nicht rechtzeitig die Daten liefern kann?!? Ansonsten ist es es halt so. Die Daten werden ja angezeigt...

Re: Gelöst: OH3 Grünbeck SC18

Verfasst: 22. Nov 2022 14:03
von udo1toni
Genau. Refresh höher, und vor allem Timeout höher einstellen. refresh ist in Sekunden anzugeben, timeout sind Millisekunden.

refresh * 1000 sollte immer deutlich höher als timeout sein (wobei man vielleicht auch mal schauen muss, wie die typische Antwortzeit des Servers aussieht, ich denke, dass man dazu das http Binding in den DEBUG Modus versetzen muss)