Sitemap fehlerhaft in VS Code

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

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

Re: Sitemap fehlerhaft in VS Code

Beitrag von udo1toni »

Freut mich zu hören!
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Sitemap fehlerhaft in VS Code

Beitrag von zinnik »

Hab noch ne kurze Frage habe hier noch einige Bewässerungsrules

zb:

Code: Alles auswählen

  if(bodenfeuchtesensorhecke_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorhecke_Bodenfeuchtigkeit.state as Number).floatValue >= 40)     // größer oder gleich 40?
            return;                                                                          // dann Rule abbrechen
    if(bodenfeuchtesensorhecke_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorhecke_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                          // dann Rule abbrechen

    shellyplugsWandprojektion192168180_Betrieb.sendCommand(ON)                               // Gartenwasser Hauptanschluss Ventil einschalten
    Bewaesserung_2_STATE.sendCommand(ON)                                                     // Pumpe einschalten
    // FRITZDECT210_Steckdose.sendCommand(ON)                                                // Ventil einschalten
    createTimer(now.plusSeconds(600), [|                                                     // Timer für Bewässerungsdauer
        // FRITZDECT210_Steckdose.sendCommand(OFF)                                           // Pumpe ausschalten
        Bewaesserung_2_STATE.sendCommand(OFF)                                                // Ventil ausschalten
        shellyplugsWandprojektion192168180_Betrieb.sendCommand(OFF)                          // Gartenwasser Hauptanschluss Ventil ausschalten
    ])
oder die

Code: Alles auswählen

    if(bodenfeuchtesensorkletterrosen_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorkletterrosen_Bodenfeuchtigkeit.state as Number).floatValue >= 45)     // größer oder gleich 45?
            return;                                                                          // dann Rule abbrechen
    if(bodenfeuchtesensorkletterrosen_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorkletterrosen_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                          // dann Rule abbrechen

    shellyplugsWandprojektion192168180_Betrieb.sendCommand(ON)                                // Gartenwasser Ventil einschalten
    Bewaesserung_4_STATE.sendCommand(ON)                                                     // Pumpe einschalten
    // FRITZDECT210_Steckdose.sendCommand(ON)                                                    // Ventil einschalten
    createTimer(now.plusSeconds(600), [|                                                     // Timer für Bewässerungsdauer
        // FRITZDECT210_Steckdose.sendCommand(OFF)                                               // Pumpe ausschalten
        Bewaesserung_4_STATE.sendCommand(OFF)                                                // Ventil ausschalten
        shellyplugsWandprojektion192168180_Betrieb.sendCommand(OFF)                          // Gartenwasser Ventil ausschalten
    ])

Die Triggern beide zu unterschiedlichen Zeiten
9:30Uhr und 9:45Uhr

Kann ich solche rule in eine Datei packen. Derzeit sind sie noch in der Main UI

zb so

Ich hoffe das Format passt so...es soll das gleiche sein was die oberen beiden wiedergeben.

Mit der zeit weiss ich nicht genau wie ich das schreibe.

Im Sommer werde ich es wahrscheinlich mit Cron machen jeden Tag zb9:00Uhr von März bis Oktober

Code: Alles auswählen

rule "Hecke"
when
    
    Time is 9:45 // oder wie schreibt man das

then

 if(bodenfeuchtesensorhecke_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorhecke_Bodenfeuchtigkeit.state as Number).floatValue >= 40)     // größer oder gleich 40?
            return;                                                                          // dann Rule abbrechen
    if(bodenfeuchtesensorhecke_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorhecke_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                          // dann Rule abbrechen

    shellyplugsWandprojektion192168180_Betrieb.sendCommand(ON)                               // Gartenwasser Hauptanschluss Ventil einschalten
    Bewaesserung_2_STATE.sendCommand(ON)                                                     // Pumpe einschalten
    // FRITZDECT210_Steckdose.sendCommand(ON)                                                // Ventil einschalten
    createTimer(now.plusSeconds(600), [|                                                     // Timer für Bewässerungsdauer
        // FRITZDECT210_Steckdose.sendCommand(OFF)                                           // Pumpe ausschalten
        Bewaesserung_2_STATE.sendCommand(OFF)                                                // Ventil ausschalten
        shellyplugsWandprojektion192168180_Betrieb.sendCommand(OFF)                          // Gartenwasser Hauptanschluss Ventil ausschalten
    ])

    end



rule "Kletterrosen"
when
    
    Time is 9:30 // oder wie schreibt man das

then

     if(bodenfeuchtesensorkletterrosen_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorkletterrosen_Bodenfeuchtigkeit.state as Number).floatValue >= 45)     // größer oder gleich 45?
            return;                                                                          // dann Rule abbrechen
    if(bodenfeuchtesensorkletterrosen_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((bodenfeuchtesensorkletterrosen_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                          // dann Rule abbrechen

    shellyplugsWandprojektion192168180_Betrieb.sendCommand(ON)                                // Gartenwasser Ventil einschalten
    Bewaesserung_4_STATE.sendCommand(ON)                                                     // Pumpe einschalten
    // FRITZDECT210_Steckdose.sendCommand(ON)                                                    // Ventil einschalten
    createTimer(now.plusSeconds(600), [|                                                     // Timer für Bewässerungsdauer
        // FRITZDECT210_Steckdose.sendCommand(OFF)                                               // Pumpe ausschalten
        Bewaesserung_4_STATE.sendCommand(OFF)                                                // Ventil ausschalten
        shellyplugsWandprojektion192168180_Betrieb.sendCommand(OFF)                          // Gartenwasser Ventil ausschalten
    ])

    end
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: Sitemap fehlerhaft in VS Code

Beitrag von udo1toni »

Ich habe mir die Rules jetzt nicht exakt angeschaut, aber das Prinzip ist ganz einfach (in beiden Richtungen...)

In einer *.rules Datei steht der Rule Code samt Trigger(n). Dabei können in einer Datei beliebig viele Rules stehen. Eine komplette Rule besteht also aus einem Rahmen, der die gesamte Rule darstellt, innerhalb dieses Rahmens gibt es einen Bereich für die Trigger und einen Bereich für den eigentlichen Code, der ausgeführt wird. Das entspricht fast exakt der UI Rule, nur dass es bei der UI-Variante zusätzlich zum Block für die Trigger und den auszuführenden Code noch einen Block für zusätzliche Bedingungen gibt, die eine Ausführung der Rule verhindern können.
Die Blöcke der Rule sind gleich benannt, also when und then, der but-only-if Block hat keine Entsprechung.
Der Rahmen ist also

Code: Alles auswählen

rule "Name der Rule"
when
    <hier stehen alle Trigger>
then
    <hier steht der Code>
end
Was den Trigger betrifft, so gibt es drei Optionen. Time is ist für zwei Varianten korrekt, allerdings nicht für 9:45 Uhr oder 9:30 Uhr. Stattdessen könntest Du (Variante 1) noon oder midnight angeben.
Variante 2 wäre, dass Du den Namen eines DateTime Items angibst. Die Rule triggert dann zu dem Zeitpunkt, der dem Status des Items entspricht. Damit kann man also die Zeit, zu der ein e Rule triggern soll, ohne Umwege über ein Item steuern.
Variante 3 erlaubt die freie Definition von Zeitpunkten bzw. einem Ausführungsrhythmus. openHAB nutzt Quartz cron für die Definition der Zeitpunkte. Das Format sieht so aus:

Code: Alles auswählen

Time cron "0 1 2 3 4 5 6"
Wobei Position
  • 0 die Sekunde,
  • 1 die Minute,
  • 2 die Stunde,
  • 3 den Tag im Monat,
  • 4 den Monat im Jahr,
  • 5 den Wochentag,
  • 6 das Jahr (dieser Wert ist optional)
beschreibt.
9:30 Uhr ist dann

Code: Alles auswählen

Time cron "0 30 9 * * ?"
Das ? muss exakt einmal im Term vorkommen, und zwar entweder als Tag im Monat oder als Wochentag. Das ? bedeutet genau wie der *, dass der Wert keine Rolle spielt. Das ? dient hier nur dazu, zu verdeutlichen, dass man nicht gleichzeitig einen Tag und einen Wochentag eingrenzen kann, also z.B. ist es nicht möglich, einen Trigger zu erstellen, der nur am Freitag dem 13. auslöst. Für Wochentag und Monat kann man statt Zahlen auch die englischen Kürzel verwenden, also MON=1,TUE=2 ... SAT=6, SUN=7.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten