Seite 2 von 2

Re: XML Befehl per http post an URL senden

Verfasst: 29. Sep 2022 10:15
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.

Re: XML Befehl per http post an URL senden

Verfasst: 2. Okt 2022 01:19
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

Re: XML Befehl per http post an URL senden

Verfasst: 2. Okt 2022 19:07
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

Re: XML Befehl per http post an URL senden

Verfasst: 3. Okt 2022 22:31
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!

Re: XML Befehl per http post an URL senden

Verfasst: 3. Okt 2022 23:56
von udo1toni
Cool!