[erledigt] Thing mittels Rule aktivieren

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
oliverbaush
Beiträge: 24
Registriert: 4. Jan 2022 23:01
Answers: 0
Wohnort: Aschaffenburg

[erledigt] Thing mittels Rule aktivieren

Beitrag 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
Zuletzt geändert von oliverbaush am 22. Okt 2022 09:15, insgesamt 2-mal geändert.
openHAB4.3.1, installiert unter openhabian

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Item mittels Rule aktivieren

Beitrag 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.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

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

Re: Item mittels Rule aktivieren

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

oliverbaush
Beiträge: 24
Registriert: 4. Jan 2022 23:01
Answers: 0
Wohnort: Aschaffenburg

Re: Things mittels Rule aktivieren

Beitrag 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
openHAB4.3.1, installiert unter openhabian

Antworten