XML Befehl per http post an URL senden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: XML Befehl per http post an URL senden

Beitrag von udo1toni »

Ah, Du hattest nicht dazu geschrieben, dass Dein System unter Windows läuft. Dann muss der Pfad natürlich anders lauten (und Du hast im Prinzip den korrekten Pfad gefunden).
Auch wenn die Datei von openHAB verarbeitet wurde: Vermeide bitte grundsätzlich Leerzeichen und andere Sonderzeichen in Dateinamen. Am besten nur Kleinbuchstaben und die arabischen Ziffern, den . nur um die Endung abzutrennen, notfalls noch den Unterstrich (aber auch den würde ich so gut es geht vermeiden).

Die Fehlermeldung erscheint mir seltsam. Probiere bitte noch mal die Variante über die Textdatei, aber ändere Zeile 13 ab. Statt

Code: Alles auswählen

        default : return;
schreibst Du

Code: Alles auswählen

        default : { return; }
Zur Erklärung: Das Semikolon ist hier nicht optional, da return als Funktion grundsätzlich einen wert zurückgibt, und zwar den, der nach dem Befehl steht. Nun kann eine Rule aber keinen Rückgabewert übergeben. In der Folge käme es zu einem Fehler. Das Semikolon kennzeichnet das Ende des Befehls. Es wundert mich etwas, dass openHAB im Kontext von case da ein Problem hat. Die geschweiften Klammern bilden einen Code-Block, der hoffentlich dem Compiler dabei hilft, den Code korrekt zu interpretieren.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Beasty
Beiträge: 10
Registriert: 15. Mai 2022 23:20
Answers: 0

Re: XML Befehl per http post an URL senden

Beitrag von Beasty »

Hi Udo! Sorry, war ziemlich busy die letzen Tage. Back on it! ;)
udo1toni hat geschrieben: 29. Sep 2022 10:15 Ah, Du hattest nicht dazu geschrieben, dass Dein System unter Windows läuft

Nur um Missverständnissen vorzubeugen: OH läuft auf einem Pi. Aber ich greife über den Windows Explorer darauf zu und sehe hier unter anderem einen "rules" Ordner.

Ich habe die Rule angepasst, wie du gesagt hast und auch den Dateinamen habe ich ohne Lehrzeichen:

Code: Alles auswählen

rule "send command"
when
    Member of gHeizung received command
then
    var String strPart1 = ""
    var String strPart2 = ""

    switch(triggeringItem.split("_").get(2)){
        case "Solltemperatur" : {
            strPart1 = '"><T_TARGET>'
            strPart2 = '</T_TARGET>'
        }
        default : { return; }
    }
    val strHA = triggeringItem.name.split("_").get(1)
    val strURL = "http://192.168.178.22/data/changes.xml"
    val sbCommand = new StringBuilder()

    sbCommand.append('<?xml version="1.0" encoding="UTF-8"?><Devices><Device><ID>HKV147</ID><HEATAREA nr="')
    sbCommand.append(strHA)
    sbCommand.append(strPart1)
    sbCommand.append(receivedCommand.toString)
    sbCommand.append(strPart2)
    sbCommand.append('</HEATAREA></Device></Devices>')

    sendHttpPostRequest(strURL, "application/xml", sbCommand.toString)
end
Die Fehlermeldung vom letzten Post ist nun weg. Dafür kommt eine neue, wenn die Rule getriggert wird. Jetzt mag er das Wort "split" nicht.
Warum da "heizungsollw-1" steht, weiß ich nicht. Die Textdatei heißt nun heizungsollw.rules

Code: Alles auswählen

2022-10-02 01:12:04.087 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'heizungsollw-1' failed: 'split' is not a member of 'org.openhab.core.items.Item'; line 8, column 12, length 25 in heizungsollw

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

Re: XML Befehl per http post an URL senden

Beitrag von udo1toni »

Oh. Ja, da fehlt tatsächlich noch das Wort name...

Code: Alles auswählen

rule "send command"
when
    Member of gHeizung received command
then
    var String strPart1 = ""
    var String strPart2 = ""
//                        \/\/
    switch(triggeringItem.name.split("_").get(2)){
        case "Solltemperatur" : {
            strPart1 = '"><T_TARGET>'
            strPart2 = '</T_TARGET>'
        }
        default : { return; }
    }
    val strHA = triggeringItem.name.split("_").get(1)
    val strURL = "http://192.168.178.22/data/changes.xml"
    val sbCommand = new StringBuilder()

    sbCommand.append('<?xml version="1.0" encoding="UTF-8"?><Devices><Device><ID>HKV147</ID><HEATAREA nr="')
    sbCommand.append(strHA)
    sbCommand.append(strPart1)
    sbCommand.append(receivedCommand.toString)
    sbCommand.append(strPart2)
    sbCommand.append('</HEATAREA></Device></Devices>')

    sendHttpPostRequest(strURL, "application/xml", sbCommand.toString)
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Beasty
Beiträge: 10
Registriert: 15. Mai 2022 23:20
Answers: 0

Re: XML Befehl per http post an URL senden

Beitrag von Beasty »

udo1toni hat geschrieben: 2. Okt 2022 19:07 Oh. Ja, da fehlt tatsächlich noch das Wort name...
Jeeeha! ;) Es funktioniert!! Wow, tausend Dank, Udo!

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

Re: XML Befehl per http post an URL senden

Beitrag von udo1toni »

Cool!
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten