zwei Fragen zu Variablen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

zwei Fragen zu Variablen

Beitrag von Steinspiel »

Moin,

Ich versuche gerade etwas hinter das Geheimniss der Variablen zu steigen... ;-)

Dazu hätte ich zwei Fragen, zum einen:
Kann man den aktuellen Wert einer Varablen auslesen und anzeigen ? Im Beispiel unten die Variable "testCount", wie kann ich feststellen wie oft diese schon hochgezählt wurde?

Code: Alles auswählen

var Number testCount = 0

rule "test_count"

when   
	Item Test_B changed to ON		//Test_B Schalter  EIN
then
        Flur1_Power.sendCommand(ON)		//Licht AN
           testCount = testCount + 1		//hochzählen um 1
end
zweitens, kann ich den Number Wert eines Item in einer Variablen speichern und diese dann für eine Abfrage benutze? Das Rule hier ist nur ein Muster, es funktioniert nicht, aber das will ich erreichen:

der Lichtlevel Number Wert meines Bewegungsmelders (LL_Bwm) wird ca. alle 5 min von diesem aktualisiert, die Lampe (Flur1_Power) soll erst schalten wenn der Wert unter 1000 liegt

Code: Alles auswählen

var Number LL_var_wert

rule "test_LLBwm"

when   
	Item Test_B changed to ON			//Test_B Schalter  EIN
then
	if(LL_var_wert > 1000) {			// Abfrage wie hoch Wert           
        return;
        }

        Flur1_Power.sendCommand(ON)		//Licht AN
end
Meine Frage: wie kriege ich den Wert des Bewegungsmelders (LL_Bwm) in die Variable (LL_var_wert) und aktualisiere diese alle Minute?

War das zu wirr oder kann damit jemand was anfangen und mir einen Tipp geben?
bis dann, Steinspiel

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: zwei Fragen zu Variablen

Beitrag von Darkwin101 »

Also erste Frage du kannst die Variable in ein Ungebundenes Item schreiben und dir dieses auf der Sitemap anzeigen.
Ein ungebundenes Item ist nicht mit einem Channel verbunden und steht somit nur Openhab zur Verfügung.
Zweite Frage ja du kannst eine Variable zur Abfrage benutzen diese muss natürlich vorher definiert bzw. beschrieben werden.

Code: Alles auswählen

var Integer LL_var_wert = 0 // Am Anfang der Datei erzeugen 

rule"Speichere Wert"
when
    Time cron "0 0/1 * * * ?"  // Ausführung Jede Minute
then
    LL_var_wert = LLBWM.state as Number  //Übergabe Wert des Bewegungsmelder
    end
    
rule "test_LLBwm"

when   
	Item Test_B changed to ON			//Test_B Schalter  EIN
then
	if(LL_var_wert < 1000) 				// Abfrage wie hoch Wert      
	{ Flur1_Power.sendCommand(ON)}				     
end
  
Allerdings erschließt sich mir nicht wieso du diesen Wert in eine Variable schreiben willst und dies 1 mal in der Minute Aktualisieren willst wenn sich der Wert nur alle ca 5Min. ändert du kannst doch mit dem direkten Wert arbeiten bei Abfragen.

Es kann bei den Regeln nun eventuell zu Fehlern kommen da Number kein Integer ist das müsste man testen.

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: zwei Fragen zu Variablen

Beitrag von Steinspiel »

Danke für Deine schnelle Antwort,
Darkwin101 hat geschrieben: 17. Apr 2020 18:21 Also erste Frage du kannst die Variable in ein Ungebundenes Item schreiben und dir dieses auf der Sitemap anzeigen.
[...]
Sitemap ist genau das was ich wollte! "Ungebundenes Item", also ein Dummy Item welches in einer *.ITEMS angelegt ist? Wie soll das deklariert werden?

Code: Alles auswählen

 Number Test_Count       "Testanzeige Counter"

Und wie bekomme ich dann in der Sitemap den Variablenwert in dieses Item?
Allerdings erschließt sich mir nicht wieso du diesen Wert in eine Variable schreiben willst und dies 1 mal in der Minute Aktualisieren willst
[...]
Ich habe den Lichtlevel Wert bisher immer direkt abgefragt (also vom Bewegungsmelder Item). Es passiert allerdings das die zu schaltende Lampe "einfach" an geht obwohl der Wert höher ist als in der Rule angegeben.
Aus dem Log weiß ich das der Wert nur ca. alle 5 min aktualisiert wird. Deshalb vermute ich das der Wert zm Ende der fünf Minuten "irgendwie" verloren geht, der Bewegungsmelder zufällig zu dieser Zeit ON schaltet und das Rule "denkt" das der LichtLevel Wert klein ist...

Meine Idee war den LichtLevel Wert automatisch in eine Variable zu schreiben und diese dann ab zu fragen - so ist immer ein Wert vorhanden, denke ich.
Also wenn das überhaupt mit vertretbaren Aufwand geht.
bis dann, Steinspiel

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: zwei Fragen zu Variablen

Beitrag von Darkwin101 »

Also Werte gehen nicht Verloren wenn sie nicht überschrieben werden sei es über ein Update des Aktors oder durch eine Regel.
Was bei einem BWM allerdings Passiert ist das mit dem ON Befehl auch alle Werte auch das Lichtlevel aktualisiert wird sollte dieser Wert etwas Langsamer sein als das Licht siehst du in deinem Openhab halt den Wert, mit Licht an, der meistens über dem Schwellwert der Schaltung liegt.

In ein Dummy Item Bekommst du den Wert mit einem Postupdate also um deine Regel mal zu Benutzen.
In der Items Datei:

Code: Alles auswählen

Number TestCount_Item "Testanzeige Counter [%s]"
In der Rule :

Code: Alles auswählen

rule "test_count"

when   
	Item Test_B changed to ON		//Test_B Schalter  EIN
then
        Flur1_Power.sendCommand(ON)		//Licht AN
           testCount = testCount + 1		//hochzählen um 1
           TestCount_Item.postUpdate(testCount)  // Sidemap  Item aktualisieren
end
In der Sidemap:

Code: Alles auswählen

Text item=TestCount_Item

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: zwei Fragen zu Variablen

Beitrag von Steinspiel »

Darkwin101 hat geschrieben: 17. Apr 2020 19:49 [...]
Was bei einem BWM allerdings Passiert ist das mit dem ON Befehl auch alle Werte auch das Lichtlevel aktualisiert wird sollte dieser Wert etwas
Gut, wie Du das erklärst kann ich mir das vorstellen. Also kann es immer mal sein das die Schaltung auch bei einem zu niedrigen Wert ausgeführt wird... :-(

Das mit dem postUpdate funktioniert soweit. Da kannte ich bisher nicht, Danke dafür.

Allerdings, setze ich den Counter per Switch Item auf "0 " so wird mir das in der Sitemap nicht angezeigt. Auch nach einer Aktualisierung des Browsers wird nur der letzte Wert angezeigt, erst nach einem neuen Schalten beginnt diese Anzeige wieder bei "1" . Hast Du ne Idee wie man angezeigt bekommt das der Counter auf "0" ist, also noch nicht benutzt wurde??
bis dann, Steinspiel

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: zwei Fragen zu Variablen

Beitrag von Darkwin101 »

Beim Zurücksetzen des Counters wirst du ja eine Regel benutzen, in dieser Regel muss dann ebenfalls das postUpdate rein nachdem du den Counter zurück gesetzt hast.

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: zwei Fragen zu Variablen

Beitrag von Steinspiel »

Moin,
Darkwin101 hat geschrieben: 17. Apr 2020 21:03 Beim Zurücksetzen des Counters wirst du ja eine Regel benutzen, in dieser Regel muss dann ebenfalls das postUpdate rein
[...]
Ja klar, jetzt wo Du es sagst! ;)
Im Ernst, haut gut hin und ist genau das was ich wollte UND ich habe was über Variablen gelernt!

In Deiner Beispielrule zur Übergabe eines Item Wertes an eine Variable bekomme ich zur Zeile

Code: Alles auswählen

LL_var_wert = LLBWM.state as Number  //Übergabe Wert des Bewegungsmelder
die Fehlermeldung "...cannot convert from Number to Integer...". Ich denke es liegt daran der der "LLBWM" Wert ja z.B. "10500.0", also mit Komma ausgegeben wird... Ich habe dann einfach die Variable von INTEGER auf NUMBER geändert und es funktioniert! :D

Wie gesagt, alle meine Fragen beantwortet, Danke für Deine Unterstützung!
bis dann, Steinspiel

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: zwei Fragen zu Variablen

Beitrag von Darkwin101 »

Ja habe ich ja geschrieben :D
Es kann bei den Regeln nun eventuell zu Fehlern kommen da Number kein Integer ist das müsste man testen.

Antworten