Webhook-Rule mit HTTP-Binding

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
neuling10
Beiträge: 56
Registriert: 26. Mär 2022 18:15
Answers: 0

Webhook-Rule mit HTTP-Binding

Beitrag von neuling10 »

Hallo zusammen,

ich würde gerne zu bestimmten Tageszeiten (0,5h nach Sonnenaufgang und 0,5h vor Sonnenuntergang) einen Webhook (Aufruf einer https-URL) senden. Dies soll Aktionsregeln auf meiner Synology Surveillance Station auslösen (z.B. Schnappschuss erstellen, bestimmten Preset-Punkt mit PTZ anfahren etc.)

Ich habe mir nun das Astro Binding geholt, um die lokalen Sonnenauf- und -untergangszeiten zu erhalten. Weiters habe ich das HTTP-Binding installiert, um die https-URL aufrufen zu können.

Gedanklich hänge ich nun...
Mein Plan ist es, ein Thing für die Aktionsregeln anzulegen, mit jeweils einem Channel für jede auszulösende Aktion (=> diese haben alle eine separate URL als Webhook). Für das Auslösen der ersten Aktion sieht mein Thing-Code folgendermaßen aus:

Code: Alles auswählen

UID: http:url:e76f03e469
label: HTTP_Kamera_Aktionsregeln
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: https://xxxxxxx.teil1
  delay: 0
  stateMethod: POST
  refresh: 30
  commandMethod: POST
  timeout: 3000
  bufferSize: 2048
channels:
  - id: Schwenken_Zentral_Weitblick
    channelTypeUID: http:string
    label: Schwenken Zentral Weitblick
    description: ""
    configuration:
      mode: READWRITE
      commandExtension: teil2.xxxxxxx
Die zu öffnende URL soll sich einfach aus der baseURL und der commandExtension textuell zusammensetzen. Stimmt die hierfür notwendige Thing- und Channel-Konfiguration?

Meine Rule sieht folgendermaßen aus:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: LokaleSonnendatenWien_Startzeit
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      itemName: HTTPKameraAktionsregeln_SchwenkenZentralWeitblick
    type: core.ItemStateUpdateAction
Meine Vermutung ist es, dass ich mit ItemStateUpdateAction nicht die gewünschte Aktion (Aufruf der URL) starten kann und das so nicht stimmen kann? Wie müsste hier die Konfiguration geändert werden? Benötige ich hier ein Switch und kein String?
Wo im Code muss das "sleep(30*60)" eingefügt werden (=> Website soll 30 Minuten nach Sonnenaufgang aufgerufen werden)?

Danke Euch :-)

Grüße
neuling10

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

Re: Webhook-Rule mit HTTP-Binding

Beitrag von udo1toni »

Punkt 1: Der Trigger der Rule ist falsch.
Das ist allerdings ein gern genommenes Missverständnis.

tldr; Du musst den Trigger Channel "astro:sun:local:sunset#event" triggered START verwenden (für Sonnenuntergang)

Lange Version:
Das Astro Binding berechnet viele verschiedene Werte, die es bei jeder Neuberechnung in den Channels zur Verfügung stellt. Bei den meisten Channels sind dies konkrete Zeitpunkte in Form eines Zeitstempels. Das Update erfolgt dann z.B. alle fünf Minuten, wenn Astro auf ein Refresh von fünf Minuten eingestellt ist. Der Wert selbst (z.B. Sonnenuntergang) ändert sich allerdings nur einmal täglich, um Mitternacht.
Für ein paar andere Werte ist das anders, z.B. Azimut und Elevation (die Position des Himmelskörpers anhand des Höhenwinkels und der Himmelsrichtung in Grad) werden bei jeder Berechnung einen anderen Wert ausgeben.
Du benötigst allerdings einen "Impuls" zum Starten einer Rule. Das geschieht mit den Range Event Channels. Der Channel sunset#event sendet zwei verschiedene Trigger, nämlich START und END. Warum zwei? Weil die Sonne kein Punkt ist... Der Zeitpunkt des Sonnenuntergangs ist definiert als der Zeitpunkt, zu dem die Sonne am Horizont untergeht. Nun gibt es aber den Zeitpunkt, an dem die Sonne beginnt, unterzugehen (der untere Teil berührt den Horizont) und den Zeitpunkt, wenn sie damit aufhört (der obere Teil der Sonne verschwindet hinter dem Horizont). Deshalb gibt es für den Transit über die Höhenlinie 0° eben immer zwei Zeitpunkte, und die stehen auch als getrennte Zeitangaben zur Verfügung (Beginn Sonnenuntergang und Ende Sonnenuntergang)
Da diese Event Channel aber per Definition keinen Status haben (es ist ja ein Impuls), kann man sie nicht mit einem Item verlinken. Stattdessen muss man den Trigger selbst auswerten.

Da Du jeweils einen Offset zum echten Zeitpunkt haben möchtest, kannst Du diesen Offset auch im Channel einstellen. Aber: Achte darauf, dass Du diesen Versatz beim Range Event Channel setzen musst. Willst Du die Zeitpunkte z.B. in der UI mit anzeigen, so musst Du zusätzlich den Versatz auch in den DateTime Channels mit eintragen - alle Channel sind unabhängig voneinander konfigurierbar.
Möchtest Du Zeitpunkte nach Sonnenuntergang nutzen (z.B. um Rollläden automatisch zu öffnen oder zu schließen) gibt es noch etliche andere Zeitpunkte wie die bürgerliche Dämmerung, die nautische Dämmerung oder die atronomische Dämmerung. (für das Unter/Überschreiten von -6°, -12° und -18° Höhenwinkel). Es gibt sozusagen vier Sonnenuntergänge und Sonnenaufgänge pro Tag :) und jeder der Zeitpunkte kann individuell verschoben werden. Außerdem kann man Ober- und Untergrenzen definieren, ebenfalls getrennt pro Wert, so dass man z.B. bei Morgendämmerung den Rollladen auffahren lässt, aber bitte nicht vor 6 Uhr und keinesfalls nach 8 Uhr.

Punkt 2: Wenn Du zum Steuern direkt unterschiedliche Channel anlegst, musst Du pro Aktion auch ein eigenes Item anlegen, welches dann nur diesen einen konkreten Befehl auslösen kann. Vermutlich ist es in diesem Fall besser, die Befehle direkt als httpSendRequest innerhalb der Rule abzusetzen.

In der offiziellen Doku sind die verschiedenen Arten aufgeführt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

neuling10
Beiträge: 56
Registriert: 26. Mär 2022 18:15
Answers: 0

Re: Webhook-Rule mit HTTP-Binding

Beitrag von neuling10 »

Hallo udo1toni,

danke vielmals für die Hilfe, nun funktioniert es :D

Grüße
neuling10

neuling10
Beiträge: 56
Registriert: 26. Mär 2022 18:15
Answers: 0

Re: Webhook-Rule mit HTTP-Binding

Beitrag von neuling10 »

Hallo udi1toni,

da ich gerade an der Rule-Optimierung dran bin, würde ich gerne nochmals folgenden Hinweis von Dir aufgreifen:
Punkt 2: Wenn Du zum Steuern direkt unterschiedliche Channel anlegst, musst Du pro Aktion auch ein eigenes Item anlegen, welches dann nur diesen einen konkreten Befehl auslösen kann. Vermutlich ist es in diesem Fall besser, die Befehle direkt als httpSendRequest innerhalb der Rule abzusetzen.
In habe im Script der Rule einfach mal ohne HTTP-Binding versucht mit

Code: Alles auswählen

sendHttpPostRequest("https://<MeineWebhookAdresse>")
einen Aufruf der angegebenen Website umzusetzen... leider ohne Erfolg, die Webhook wird nach Start der Rule nicht aufgerufen. Passt da irgendwas in der Script-Zeile an der Syntax nicht?

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

Re: Webhook-Rule mit HTTP-Binding

Beitrag von udo1toni »

Keine Ahnung, gibt es Informationen in openhab.log?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten