OH3 Timer

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: OH3 Timer

Beitrag von udo1toni »

Da muss was anderes faul sein. Zeile 0 Spalte 0 gibt es ja gar nicht.

Code: Alles auswählen

Caused by: org.openhab.core.model.script.engine.ScriptExecutionException: 
The name '<unkown>' cannot be resolved to an item or type; line 0, column 0
                                                           ^^^^^^  ^^^^^^^^
Steht in der Datei noch etwas anderes drin, oder sind da nur diese beiden Rules?

Noch was... Du hast da zwei Items, Beduftungtempswitch und Beduftung_An_Aus. Eigentlich sollten die da gleiche machen, nämlich den Strom für den Bedufter ausschalten bzw. einschalten. Oder ist das nur wegen der Testphase?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

Hallo ,
es funktioniert soweit echt gut :)
udo1toni hat geschrieben: 6. Jan 2023 15:53 Innerhalb der Rule den Switch zu betrachten (so von wegen: da steht der Status...) ist Quatsch, die Rule ist dafür viel zu schnell.
openHAB arbeitet asynchron, das heißt, wenn Du einen Befehl Item.postUpdate() oder item.sendCommand() absetzt, dann wird openHAB das irgendwann ausführen, aber sicherlich nicht innerhalb von Mikrosekunden. Vom Initialisieren bis zum letzten log vergehen gerade mal 3 Millisekunden.
Es bringt also gar nichts, das auf diese Weise auszulesen.

Du kannst aber anhand des restlichen Loggings sehr schön sehen, dass der Schalter sauber zwischen Aus und An wechselt. Das Wording ist direkt abhängig vom neuen Soll Status, der immer das Gegenteil vom aktuellen Status ist. Somit ist bewiesen, dass der Status ganz sauber toggelt, alle 5 Sekunden + 10 Millisekunden (Reaktionszeit und Ausführungszeit Timerschleife komplett) - plus Varianz - das ist die Systemlast drum rum.

Welche Persistence verwendest Du denn als Grundlage? Eventuell ist der Fehler tatsächlich in der Auswertung zu suchen...
Jetzt wäre es noch schön es darstellen zu können.
Ich benutze Grafana mit einer InfluxDB .
Aber scheinbar kommt der Impuls der Regel so kurz das es nicht dargestellt wird.
Müßte man da eine Rule schreiben die den Status immer wieder abfragt und in einer temp Variablen schreiben?

Gruß Dirk

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

Re: OH3 Timer

Beitrag von udo1toni »

Was möchtest Du denn persistiert haben? Die Persistence schreibt ausschließlich Itemzustände (.state), keine Befehle. Du solltest in der Persistence also den Wechsel zwischen ON und OFF sehen können, immer vorausgesetzt, das Item ist persistiert mit everyChange.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

Hallo,
wäre das so richtig?

Code: Alles auswählen

rule "an aus Anzeigen"

when 
Item Beduftung_An_Aus changed  
    then
    	if(Beduftung_An_Aus.state == ON)   		
        {
         Beduftung_An_Aus_temp.postUpdate(1) 
        }
else
{
   Beduftung_An_Aus_temp.postUpdate(0) 
}    
end
jetzt sollte doch jeder Zustand angezeigt werden. Oder?

Gruß Dirk

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

Re: OH3 Timer

Beitrag von udo1toni »

Aber Du hast doch schon das Item Beduftung_An_Aus, es reicht, wenn Du das persistierst.

Wenn Du ON und OFF über ein Chart anzeigen lassen willst, musst Du natürlich innerhalb Grafana (genauer: innerhalb der Datenabfrage) eine Übersetzung der Werte von ON/OFF auf 1/0 vornehmen. Dazu brauchst Du aber kein eigenes Item.

Was Deine Rule betrifft (die könntest Du so verwenden) so ist die Formatierung etwas seltsam. Korrekt (im Sinne der Zugehörigkeit der verschiedenen Brefehle zueinander) wäre es so:

Code: Alles auswählen

rule "an aus Anzeigen"
when 
    Item Beduftung_An_Aus changed
then
    if(Beduftung_An_Aus.state == ON) {
         Beduftung_An_Aus_temp.postUpdate(1)
    } else {
         Beduftung_An_Aus_temp.postUpdate(0)
    }
end
oder kürzer:

Code: Alles auswählen

rule "an aus Anzeigen"
when 
    Item Beduftung_An_Aus changed
then
    Beduftung_An_Aus_temp.postUpdate(if(Beduftung_An_Aus.state == ON) 1 else 0)
end
Das then ist semantisch Teil des Rule-Rahmens, genau wie rule, when und end. Es ist NICHT Bestandteil des Codes.
Das else wiederum gehört semantisch zum vorherigen if(), unter der Voraussetzung, dass zwischen if() und else exakt ein Befehl - oder ein Befehlsblock, gekennzeichnet durch {} - steht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten