Regel mit postUpdate ohne Funktion

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
leupy
Beiträge: 83
Registriert: 21. Nov 2018 19:43
Answers: 0
Wohnort: Saarlouis

Regel mit postUpdate ohne Funktion

Beitrag von leupy »

Hallo zusammen,
ich versuche mich gerade an meiner Heizungsreglung für mein Wohnzimmer und habe Probleme mit der Regel.
Am Anfang der Regel wollte ich eine Initialisierung der Solltemperaturen machen aber Leider funst die nicht.

Code: Alles auswählen

// Heizung Wohnzimmer 
rule "Init Heizung Wohnzimmer"
when
    System started
then
    if (Heizung_W_Soll.state == Uninitialized) 
    {
        Heizung_W_Soll.postUpdate(21.0) 
    }
    if (Heizung_W_Soll_N.state == Uninitialized) 
    {
       Heizung_W_Soll_N.postUpdate(18.0)   
    }
end
Item

Code: Alles auswählen

// Heizung 
//Wohnzimmer
Number Heizung_W_Soll       //Soll Temp. Tag
Number Heizung_W_Soll_N     //Soll Temp. nacht
Switch Heizung_W            //Stellmotor Heizung 
Nach Neustart sieht die Anzeige im Basic UI immer noch so Aus.
Heizung.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von leupy am 17. Nov 2019 15:52, insgesamt 1-mal geändert.
Saarländer
Raspberry Pi 3 & 4 openHAB3.2
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Regel mit postUpdate ohne Funktion

Beitrag von peter-pan »

Hast du schon mal "Uninitialized" (in Gänsefüsschen) probiert ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Regel mit postUpdate ohne Funktion

Beitrag von Cyrelian »

Hi leupy,

da die ITEMS nach den Start entweder NULL oder UNDEF sind, würde ich es so machen:

Code: Alles auswählen

rule "Init Heizung Wohnzimmer"
when
    System started
then
    if (Heizung_W_Soll.state === NULL) 
    {
        Heizung_W_Soll.postUpdate(21.0) 
    }
    if (Heizung_W_Soll_N.state === NULL) 
    {
       Heizung_W_Soll_N.postUpdate(18.0)   
    }
end
CU
Cyrelian

Benutzeravatar
leupy
Beiträge: 83
Registriert: 21. Nov 2018 19:43
Answers: 0
Wohnort: Saarlouis

Re: Regel mit postUpdate ohne Funktion

Beitrag von leupy »

peter-pan hat geschrieben: 17. Nov 2019 15:52 Hast du schon mal "Uninitialized" (in Gänsefüsschen) probiert ?
Hallo, hab ich ausprobiert ohne Erfolg.
Saarländer
Raspberry Pi 3 & 4 openHAB3.2
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

Benutzeravatar
leupy
Beiträge: 83
Registriert: 21. Nov 2018 19:43
Answers: 0
Wohnort: Saarlouis

Re: Regel mit postUpdate ohne Funktion

Beitrag von leupy »

Hallo Cyrelian,
mit Null anstatt Uninitialized gehts. Ich dachte nur bei Neustart steht da gar kein Wert auch nicht Null ?
Danke und Grüße aus dem schönen Saarland
Saarländer
Raspberry Pi 3 & 4 openHAB3.2
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Regel mit postUpdate ohne Funktion

Beitrag von Cyrelian »

Hi leupy,

nach einem Neustart stehen ALLE Items, die nicht direkt über ein Things oder aus einer Persistence gesetzt werden auf NULL. Ich meine in OH1 war das noch "Uninitialized". Seit OH2 ist aber NULL der Wert nach den Neustart.
Wichtig ist die Abfrage mit "===" oder "!==" auf NULL.

CU und viele Grüße aus dem Rheinland

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Regel mit postUpdate ohne Funktion

Beitrag von peter-pan »

Sicher dass das so (=== / !==) verglichen wird ? Ich dachte bisher, das gilt nur für null.

Um den Wert von "Heizung_W_Soll" bzw. "Heizung_W_Soll_N" herauszufinden, kann man ja einfach mal ein

Code: Alles auswählen

logInfo("Heizung Wohnzimmer","W_Soll ist: {} und W_Soll_N ist:  {}",Heizung_W_Soll.state, Heizung_W_Soll_N.state)
einbauen und schauen was das System sagt. Aber eigentlich sollten die Werte doch aus dem Binding (Channel) gesetzt werden ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Regel mit postUpdate ohne Funktion

Beitrag von Cyrelian »

peter-pan hat geschrieben: 17. Nov 2019 16:46 Sicher dass das so (=== / !==) verglichen wird ? Ich dachte bisher, das gilt nur für null.
Hi Peter,

korrekt, so wie ich oben geschrieben habe:
Wichtig ist die Abfrage mit "===" oder "!==" auf NULL.
Aber bitte aufpassen null ist NICHT NULL:

Denn NULL ist ein Zustand, der anzeigt, dass ein Element nicht initialisiert ist.
null hingegen ist etwas, das nur in Regeln sinnvoll ist (var Timer Poolpumpe = null ) und bedeutet, dass eine Variable keinen Wert hat.

CYA
Cyrelian

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

Re: Regel mit postUpdate ohne Funktion

Beitrag von udo1toni »

Ich verwende an einer solchen Stelle lieber die Prüfung auf einen gültigen Wert:

Code: Alles auswählen

rule "Init Heizung Wohnzimmer"
when
    System started
then
    if (!(Heizung_W_Soll.state instanceof Number)) Heizung_W_Soll.postUpdate(21)
    if (!(Heizung_W_Soll_N.state instanceof Number)) Heizung_W_Soll_N.postUpdate(18)
end
Es ist dann egal, welcher ungültige Wert im Item steht (UNINITIALIZED, NULL oder UNDEF)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Regel mit postUpdate ohne Funktion

Beitrag von Cyrelian »

udo1toni hat geschrieben: 17. Nov 2019 23:17 Ich verwende an einer solchen Stelle lieber die Prüfung auf einen gültigen Wert:

Code: Alles auswählen

rule "Init Heizung Wohnzimmer"
when
    System started
then
    if (!(Heizung_W_Soll.state instanceof Number)) Heizung_W_Soll.postUpdate(21)
    if (!(Heizung_W_Soll_N.state instanceof Number)) Heizung_W_Soll_N.postUpdate(18)
end
Es ist dann egal, welcher ungültige Wert im Item steht (UNINITIALIZED, NULL oder UNDEF)
Definitiv die elegantere Lösung :D

Antworten