HTTP Umstellung V1 => V3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

So, in der Hoffnung, dass Du nicht genug von mir hast, noch eine Frage :D

Bisher matche ich ja mit Regex auf bestimmte Schlagworte und capture dann den dazugehörigen Wert.
Jetzt gibt es für die Wärmepume auf einer Seite aber auch Status (Plural) der Anlage (ohne Werte) die ich gerne mit Switch-Items linken möchte. D.h. wird der entsprechende Status angezeigt ist der Switch ON, ist der Status nicht vorhanden OFF.

Ich habe das testweise aufgebaut und wie bisher den entsprechenden Status (zB "EVU-SPERRE") per Regex gecaptured. Dieses Schlagwort habe ich als onValue für das Switch-Item eingestellt und siehe da, der Switch war ON als die EVU-SPERRE aktiv war.

Nur habe ich 2 Probleme:
1) NULL als offValue hat nicht funktioniert um den Switch auf OFF zu stellen
2) die verschiedenen Zustände werden auf der Website nur angezeigt wenn sie aktiv sind. Es kann da also gar nichts stehen, oder nur "EVU-SPERRE" oder "ABTAUEN-LLWT" und "SCHALTPROGRAMM AKTIV" oder, oder, oder... Ich habe also keine feste Folge auf die ich matchen kann. Außer logischweise die Schlagworte selbst. Die Regex sieht dann ja auch easy aus, nur was bekomme ich dann zurück falls es einen match gibt (=onValue) oder eben nicht (=offValue)?

P.S.: irgendwo schließt die Frage 2) die Frage 1) mit ein, stelle ich gerade fest :D

Beispiel für 2 Anlagenstatus und 2 Betriebsstatus:

Code: Alles auswählen

    <div class="span-11 append-1" style="float:left"><table class="info"><tr><th colspan="2" class="round-top">ANLAGENSTATUS</th></tr>  <tr class="even">
    <td class="key">EVU-SPERRE</td>
    <td class="value"><img height="15" src="./pics/tec-symbol_an-8e8e8e.png" /> </td>
  </tr>
  <tr class="odd">
    <td class="key">ABTAUEN LL-WT</td>
    <td class="value"><img height="15" src="./pics/tec-symbol_an-8e8e8e.png" /> </td>
  </tr>
</table></div><div class="span-11 prepend-1" style="float:right"><table class="info"><tr><th colspan="2" class="round-top">BETRIEBSSTATUS</th></tr>  <tr class="even">
    <td class="key">SCHALTPROGRAMM AKTIV</td>
    <td class="value"><img height="15" src="./pics/tec-symbol_an-8e8e8e.png" /> </td>
  </tr>
  <tr class="odd">
    <td class="key">HEIZKREISPUMPE</td>
    <td class="value"><img height="15" src="./pics/tec-symbol_an-8e8e8e.png" /> </td>

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: HTTP Umstellung V1 => V3

Beitrag von udo1toni »

get(0)... Oh wie peinlich... hätte mir auffallen müssen... Sorry dafür. Auf der anderen Seite ;) hast Du einen kleinen Einblick erhalten, was man aus Verzweiflung tut, um dem Fehler auf die Spur zu kommen...

Was das Capture von nicht vorhandenen Texten angeht... das wird vermutlich nicht so ganz einfach... Ich würde vermutlich den kompletten Inhalt in einen String speichern und in einer Rule die einzelnen Teilstrings suchen:

Code: Alles auswählen

abtauenSwitch.postUpdate(if(StringItem.state.toString.contains("ABTAUEN LL-WT")) ON else OFF)
Die Rule läst Du auf StringItem changed triggern und packst alle Switch Items in diese Rule, so wie im gezeigten Code. Der ternäre Operator (if(bedingung) ON else OFF) ist hier ideal. Falls vorhanden ON, ansonsten OFF.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

Na, Fehler passieren mal. Ich fand es eigentlich ganz interessant, weil ich so doch recht gut verstehen konnte was genau in den einzelnen Steps der rule passiert. Es hatte also auch sein gutes :D

Die Idee mit den Switches ist ebenso genial! Der Aufbau ist super easy und es funktioniert perfekt, danke auch dafür!

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

Da das Auslesen der Werte meiner Heizung einwandfrei läuft (nochmals DANKE an @udo1toni für die Hilfe!!), frage ich mich, ob es auch möglich ist bestimmte Werte über OH auf der website zu ändern? Ich habe das tatsächlich in OH2 mit dem http1 binding schon für meine Kameras gemacht. Als Beispiel der Einfachheit halber mit 3 Variablen, die für ganzen den hier nicht relevanten Text stehen, bei dem das false gesetzt wurde:

Code: Alles auswählen

sendHttpPutRequest(httpUrl, "application/json", preStateChangeContent+'false'+postStateChangeContent)
Daher gehe ich davon aus, dass das in OH3 / http2 ebenso geht. Es gibt ja neben den bisher von mit verwendeten state-Optionen im Channel und der Festlegung ob das Item Read / Write darf, auch die command-Optionen Command URL Extension (das ist soweit klar) und Command Transformation. Und genau da bleibe ich schon hängen...

Ich habe also ein Item LWZFusspunktHK1_IN, bei dem ich mit folgender Regex als state transformation den String ziehe:

Code: Alles auswählen

REGEX:.*jsvalues.'16'..'val'.='(.{1,4})';.*
Der string wird dann über die obige rule als Number in das Item LWZFusspunktHK1_OUT geschrieben. Soweit so gut. Nur wie kann ich nun einen Wert bzw. in dem Fall wegen den Komma einen String vorgeben? Ich gehe davon aus, dass die Regex (Command Transformation) recht ähnlich aussehen wird, nur wo genau kommt der Vorgabewert in der Expression hin bzw. kommt er da überhaupt hin?

Konkretes Beispiel: Aktuell ist der Fusspunkt 0,5 (String). Nun möchte ich ihn auf 0,0 ändern. Wie sieht die Command Transformation dafür aus?

Die zweite Frage ist, wie und wo gebe ich den "Wert" (es ist ja ein String) 0,0 vor? Ändere ich über

Code: Alles auswählen

sendCommand(LWZFusspunktHK1_IN, "0,0")
einfach das Item?

Irgendwie ist mir überhaupt nicht klar, wie daraus ein PutRequest werden soll? Vermutlich so wie ich das oben skizziere gar nicht... :?: Ich hoffe erneut auf Hilfe :) Danke!

Edit: hier mal noch der Code der website. Evtl. bedarf es hier JSONPATH als Command Transformation?

Code: Alles auswählen

    <script language="javascript" type="text/javascript">
      valSettings['val16'] = new Array();
      valSettings['val16']['type'] = 'float';       valSettings['val16']['min'] = '0';
      valSettings['val16']['max'] = '20';
      
            
      jsvalues['16'] = new Array();
      jsvalues['16']['id']='val16';
      jsvalues['16']['val']='0,5'; //die 0,5 möchte ich auf zB 0,0 ändern
    </script>

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

Ich habe nun einiges ausprobiert - leider ohne Erfolg. Es findet sich zu putRequests in OH3 auch kaum etwas im englischen Forum... Hat jemand eine kleine Hilfestellung für mich? :)

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

Hallo, ich hole mal den Thread wieder hoch, da ich nach dem Update von 3.0.1 auf 3.1.0 ein Problem habe, das ich weder verstehe noch selbst lösen kann:

Ich ziehe mir per REGEX von der Website meiner Wärmepumpe diverse Werte in String-Items (_IN). Diese werden über die rule von Udo

Code: Alles auswählen

rule "LWZ Komma zu Punkt" 
when
    Member of gIN changed
then
    logInfo("LWZKommaPunkt","Triggerndes Item: {}",triggeringItem.name)
    val myOut = gOUT.members.filter[i|i.name == triggeringItem.name.split("_").get(0)+"_OUT"].head
    logInfo("LWZKommaPunkt","Item Out: {}",myOut.name)
    myOut.postUpdate(Float::parseFloat(String::format("%s",triggeringItem.state).replace(',','.')))
end
in ein Number-Item (_OUT) geschrieben.

Die String-Items (_IN) passen alle, allerdings funktioniert die Umwandlung in die Number-Items nur manchmal richtig, hier mal ein Auszug aus dem log:

Code: Alles auswählen

2021-09-07 18:54:12.631 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZUeberhitzungVDIst_IN' changed from 2,3 to 2,5
2021-09-07 18:54:12.633 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZUeberhitzungVDIst_OUT' changed from 2.3 to 25
2021-09-07 18:54:12.640 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZUeberhitzungVDIst_OUT' changed from 25 to 2.5
wie man sieht verliert er im ersten Schritt den Punkt und macht aus 2.5 eine 25. In dem Fall wird der Fehler unmittelbar danach (s. timestamp) "korrigiert". Dies ist aber wohl nicht immer so, wie das folgende Bild zeigt:

Bild

Die Abstände sind total unregelmäßig :?:

Die rule lief die letzten Monate ohne Probleme. Vor kurzem hatte ich ein Problem mit den bindings, bei dem mir Udo schon geholfen hat (Stichwort bintray). Wie ich danach gemerkt habe, waren nicht nur alle bindings weg, sondern auch alles andere (Transformations, persitence...). Nachdem ich alles wieder installiert habe, läuft es zwar soweit wieder, aber ich habe eben o.g. Problem.

Hat jemand eine Idee woran das liegen könnte?

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: HTTP Umstellung V1 => V3

Beitrag von udo1toni »

Da hilft nix... Du musst die Berechnung des Zahlenwertes in eine Variable schreiben und das mit ins Log schreiben, damit man das nachvollziehen kann...
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

Ich hoffe was ich gemacht habe, bringt was:

Code: Alles auswählen

rule "LWZ Komma zu Punkt" 
when
    Member of gIN changed
then
    logInfo("LWZKommaPunkt","Triggerndes Item: {}",triggeringItem.name)
    logInfo("LWZKommaPunkt","Triggerndes Item: {}",triggeringItem.state)
    val myOut = gOUT.members.filter[i|i.name == triggeringItem.name.split("_").get(0)+"_OUT"].head
    logInfo("LWZKommaPunkt","Item Out: {}",myOut.name)
    myOut.postUpdate(Float::parseFloat(String::format("%s",triggeringItem.state).replace(',','.')))
    logInfo("LWZKommaPunkt","Item Out: {}",myOut.state)
end
Ergebnis:

Code: Alles auswählen

2021-09-07 20:28:48.709 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZIstwertHK1_OUT' changed from 285 to 286
2021-09-07 20:28:48.709 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZIstwertHK1_IN' changed from 28,5 to 28,6
2021-09-07 20:28:48.712 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZIstwertHK1_OUT' changed from 286 to 28.6

2021-09-07 20:28:48.710 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Triggerndes Item: LWZIstwertHK1_IN
2021-09-07 20:28:48.710 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Triggerndes Item: 28,6
2021-09-07 20:28:48.711 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Item Out: LWZIstwertHK1_OUT
2021-09-07 20:28:48.712 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Item Out: 286
Edit: nun mit anderem Beispiel sowie beide logs.

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: HTTP Umstellung V1 => V3

Beitrag von udo1toni »

Nein, ich habe das anders gemeint. Übrigens ist die Formel suboptimal... Hier mal überarbeitet (mit zusätzlichem Logging):

Code: Alles auswählen

rule "LWZ Komma zu Punkt" 
when
    Member of gIN changed
then
    logInfo("LWZKommaPunkt","Triggerndes Item: {}",triggeringItem.name)
    logInfo("LWZKommaPunkt","Triggerndes Item: {}",triggeringItem.state)
    val myOut = gOUT.members.filter[i|i.name == triggeringItem.name.split("_").get(0)+"_OUT"].head
    logInfo("LWZKommaPunkt","Item Out: {}",myOut.name)
    val myString = triggeringItem.state.toString.replace(",",".")
    val myVal = Float::parseFloat(myString)
    logInfo("LWZKommaPunkt","stringValue: {} Value: {}",myString, myVal)
    myOut.postUpdate(myVal)
end
toString ist eine Methode, die für alle Objekte zur Verfügung steht. String::format() braucht man nur, wenn es um spezielle Formatierungen geht.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

wosch
Beiträge: 53
Registriert: 30. Dez 2020 08:36
Answers: 0

Re: HTTP Umstellung V1 => V3

Beitrag von wosch »

Ist so umgesetzt:

Code: Alles auswählen

2021-09-07 21:59:48.753 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Triggerndes Item: LWZRLTemperatur_IN
2021-09-07 21:59:48.754 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Triggerndes Item: 27,7
2021-09-07 21:59:48.758 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Item Out: LWZRLTemperatur_OUT
2021-09-07 21:59:48.758 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - stringValue: 27.7 Value: 27.7

2021-09-07 21:59:47.983 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZRLTemperatur_OUT' changed from 27.9 to 277
2021-09-07 21:59:47.984 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZRLTemperatur_IN' changed from 27,9 to 27,7
2021-09-07 21:59:48.767 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LWZRLTemperatur_OUT' changed from 277 to 27.7

Antworten