remote script interface Problem

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
juro65
Beiträge: 2
Registriert: 28.06.2023, 13:57
System: CCU und Access Point

remote script interface Problem

Beitrag von juro65 » 28.06.2023, 14:38

Hallo allerseits,
ich muss mich dann auch mal fragend an Euch wenden....

Ich schreibe an einem python script welches via remote script mit der ccu kommuniziert.

Das Absetzen einzelner Zeilen funktioniert soweit, z.B. zum Setzen einer Systemvariable oder zum Starten oder Retriggern eines cuxd Timers.
Alles fein. Aber nun kommt's:

Eine Variable möchte ich lesen und danach deren Value (string) clearen.

Der entsprechende HM-Script Befehl sind aus wie folgt:

Code: Alles auswählen

(dom.GetObject(ID_SYSTEM_VARIABLES).Get("sysvar-dev.cmd")).State(); (dom.GetObject(ID_SYSTEM_VARIABLES).Get("sysvar-dev.cmd")).State('');
Diese Zeile kommt als Teil eines parameterdict URLencoded an die URL dran und ich werte den Response aus.
Das gleiche mache ich noch mit ein paar anderen Scriptzeilen und eigentlich funzt das sauber.
NUR: das löschen des Variablenwertes (Teil2 des obigen Befehls) funktioniert nicht.
Im Response bekomme ich den ursprünglichen Wert geliefert (erster Teil der Zeile), nur der Wert bleibt in der Variable und wird halt nicht gelöscht.

Wenn ich die gleiche Zeile jedoch im CCU Gui in den Scriptinterpreter paste, dann funktioniert es. Die Sysvar wir gelesen und gelöscht.

Der python code sind in etwa aus wie folgt:

Code: Alles auswählen

hostname="ccu.my.network"
port="8181"
newState=1
headers={}
headers['User-Agent'] = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17"
ccusystemvar="sysvar-dev"
timerVar ="CUxD.CUX2800002:16"
timerDuration = 15
url = 'http://' + hostname + ':' + port + '/test.exe'
regaScriptStatus="dom.GetObject(ID_SYSTEM_VARIABLES).Get(\"" + ccusystemvar + "\").State(\"" + str(newState) + "\");"
regaScriptTimer="dom.GetObject(\"" + timerVar + ".TIMER_SET\").State(\"" + str(15) + "\");"
regaScriptCmd="(dom.GetObject(ID_SYSTEM_VARIABLES).Get(\"" + ccusystemvar + ".cmd\")).State(); dom.GetObject(ID_SYSTEM_VARIABLES).Get(\"" + ccusystemvar + ".cmd\")).State(\"\");"
print("regaScriptStatus: '" + regaScriptStatus + "'")
print("regaScriptTimer: '" + regaScriptTimer + "'")
print("regaScriptCmd: '" + regaScriptCmd + "'")
params = {}
params['setStatus']=regaScriptStatus
params['watchdogTriggered']=regaScriptTimer
params['getCommand']=regaScriptCmd
url = url + "?" + urllib.parse.urlencode(params)
print("Resulting URL: '{}'".format(url))

request = urllib.request.Request(url, headers = headers)
try:
    with urllib.request.urlopen(request, timeout=10) as response:
        print(response.msg + " <" + str(response.status) + ">")
        body = response.read()
        character_set = response.headers.get_content_charset()
        bodyStr = body.decode(character_set)
        print("Body: '" + bodyStr + "'")
        root = ET.fromstring(bodyStr)
        for child in root:
            print(child.tag, child.attrib, child.text)
    except urllib.error.URLError as e:
        pass
Für irgendeinen Tip wäre ich echt dankbar.


Gruß
Jürgen
RaspberryMatic auf Raspberry 4 im ArgonOne Case mit m2-SSD mit RPI-RF-MOD via USB

mademyday
Beiträge: 272
Registriert: 03.10.2014, 12:46
System: CCU
Wohnort: Enzkreis
Hat sich bedankt: 3 Mal
Danksagung erhalten: 43 Mal

Re: remote script interface Problem

Beitrag von mademyday » 28.06.2023, 15:30

denke da ist eine Klammer zuviel oder zuwenig in der "regaScriptCmd="-Zeile:

Code: Alles auswählen

...; dom.GetObject(ID_SYSTEM_VARIABLES).Get(\"" + ccusystemvar + ".cmd\")).State(\"\");
also entweder so:

Code: Alles auswählen

...; dom.GetObject(ID_SYSTEM_VARIABLES).Get(\"" + ccusystemvar + ".cmd\").State(\"\");
oder so:

Code: Alles auswählen

...; (dom.GetObject(ID_SYSTEM_VARIABLES).Get(\"" + ccusystemvar + ".cmd\")).State(\"\");

juro65
Beiträge: 2
Registriert: 28.06.2023, 13:57
System: CCU und Access Point

Re: remote script interface Problem

Beitrag von juro65 » 28.06.2023, 17:02

:roll: Ja, das war's dann doch....
hätte schwören können das ich die Klammer vor dem .State() einfügen musste, weil der Parser sonst ein Problem hatte.
Und einmal gesetzt und für gut befunden.... Und schon funktioniert die eigene Mustererkennung nicht mehr :lol:

Aber jetzt nochmal getestet.... und alles gut....

Vielen Dank für's drauf schauen.... :D
RaspberryMatic auf Raspberry 4 im ArgonOne Case mit m2-SSD mit RPI-RF-MOD via USB

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“