Seite 1 von 1

[erledigt] Thing mittels Rule aktivieren

Verfasst: 21. Okt 2022 19:25
von oliverbaush
Moin zusammen,

mein Problem ist, dass der Deconz Stick zwischendurch inaktiv ist und damit alle Thermostate und damit alles was sonst noch am Zigbee hängt. Per Shellscript hab ich einen Workaround gebaut, würde das aber gerne über eine Rule abfangen, bekomme das leider nicht hin :roll:

Wenn der Status != "Aktiv" ist, sollte das Item wieder aktiviert werden. Per curl hab ich den Aufruf zusammen

Code: Alles auswählen

curl -X "PUT" "http://192.168.X.Y:8080/rest/things/deconz:temperaturesensor:UID/enable" -H "accept: */*" -H "Content-Type: text/plain" -H "Authorization: Bearer {hierIstDerToken}" -d "true"
und kann damit den Status wie gewünscht ändern.

Einer der zahlreichen Versucht war folgender:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "3"
    configuration:
      thingUID: deconz:temperaturesensor:{UID}
    type: core.ThingStatusChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      type: application/javascript
      script: >+
        var logger =
        Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' +
        ctx.ruleUID);

        server = {server.fqdn}
        sendHttpPutRequest("http://{hierIstDerToken}:@server:8080/rest/things/deconz:temperaturesensor:{UID}/enable", "text/plain", "true")

    type: script.ScriptAction
Wenn ich das Item von Hand deaktiviere und dann die Rule starte, ist das Item immer noch inaktiv.

Danke und VG
Oliver

Re: Item mittels Rule aktivieren

Verfasst: 21. Okt 2022 20:25
von scotty
Das Problem hatte ich auch häufiger. Beseitigt ist es, seitdem ich einen Wlan Verstärker verwende. Natürlich können auch noch andere Ursachen vorliegen.

Re: Item mittels Rule aktivieren

Verfasst: 21. Okt 2022 21:02
von udo1toni
Man kann ein Item nicht deaktivieren oder aktivieren.
Du möchtest ein Thing aktivieren.

Das mag pedantisch wirken, aber falsche Begriffe führen zu unnötiger Verwirrung. :)

Du versuchst, eine Variable innerhalb eines Strings zu verwenden (server). Das kann so nicht funktionieren. Entweder zu baust den String aus Teilstrings zusammen, oder Du setzt den fqdn direkt im String ein.
Eventuell (ich bin in JavaScript nicht all zu firm) fehlt an der einen oder anderen Stelle noch ein Semikolon am Ende der Zeile.

Ich bin mir auch nicht sicher, ob die Action sendHttpPutRequest() überhaupt für javaScript zur Verfügung steht, eventuell kannst Du die nur in der DSL verwenden.

Re: Things mittels Rule aktivieren

Verfasst: 22. Okt 2022 09:14
von oliverbaush
udo1toni hat geschrieben: 21. Okt 2022 21:02 Man kann ein Item nicht deaktivieren oder aktivieren.
Du möchtest ein Thing aktivieren.

Das mag pedantisch wirken, aber falsche Begriffe führen zu unnötiger Verwirrung. :)
yepp, das unterschreibe ich :D

Die Variablen kamen aus dem Shellscript und dann hab ich es nicht bereinigt...

Hab es jetzt nach einiger Recherche folgenden "ersten Wurf":

Script:

Code: Alles auswählen

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var Exec = Java.type("org.openhab.core.model.script.actions.Exec");
var HTTP=Java.type("org.openhab.core.model.script.actions.HTTP");

var headers = [];
headers["Authorization"] = "Bearer {hierIstDerAPIKey}";
headers["WWW-Authenticate"] =  "Basic";
var returnvalue = HTTP.sendHttpPutRequest("http://127.0.0.1:8080/rest/things/{HierIstDieUID}/enable", "text/plain",  "true" ,headers, 10*1000);
Im gesamten sieht die Rule folgendermaßen aus:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      thingUID: {HierIstDieUID}
      status: ""
      previousStatus: ONLINE
    type: core.ThingStatusChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: >
        var logger =
        Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' +
        ctx.ruleUID);

        var Exec = Java.type("org.openhab.core.model.script.actions.Exec");

        var HTTP=Java.type("org.openhab.core.model.script.actions.HTTP");


        var headers = [];

        headers["Authorization"] = "Bearer {hierIstDerAPIKey}";

        headers["WWW-Authenticate"] =  "Basic";

        var returnvalue = HTTP.sendHttpPutRequest("http://127.0.0.1:8080/rest/things/{HierIstDieUID}/enable", "text/plain",  "true" ,headers, 10*1000);
    type: script.ScriptAction