Tag und Nacht Erkennung via Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
HiG
Beiträge: 136
Registriert: 16. Jun 2021 13:39
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von HiG »

udo1toni hat geschrieben: 26. Jan 2022 23:49 Nacht.postUpdate(ON)
Leider...funktioniert das nicht richtig bei mir

Rules:

Code: Alles auswählen

rule "Tag"
when
    Channel "astro:sun:local:civilDawn#event" triggered START
then
    sNacht.postUpdate(OFF)
    sTag.postUpdate(ON)
    logInfo("Zeiten", "Der Tag beginnt")
end

Code: Alles auswählen

rule "Nacht"
when
    Channel "astro:sun:local:civilDusk#event" triggered START
then
    sNacht.postUpdate(ON)
    sTag.postUpdate(OFF)
    logInfo("Zeiten", "Die Nacht beginnt")
end
Wenn ich das jetzt aber in einer Rule auswerte...
egal ob mit

Code: Alles auswählen

sNacht
oder

Code: Alles auswählen

sNacht.state 
bekomme ich ein NULL

Code: Alles auswählen

2022-01-29 15:56:04.885 [INFO ] [g.openhab.core.model.script.Bewegung] - xxxx     oh3_LogLogger29.01.22 15:56:04:sNacht (Type=SwitchItem, State=NULL, Label=Nacht?, Category=sunset, Tags=[Entry], Groups=[gSystem, gPersist])
Das Model zeigt den Wert korrekt an
night.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Tag und Nacht Erkennung via Rule

Beitrag von violine21 »

HiG hat geschrieben: 29. Jan 2022 16:10 Wenn ich das jetzt aber in einer Rule auswerte...
In dem Fall würde ich in der Rule statt den Ausdrücken

Code: Alles auswählen

sNacht.postUpdate(ON)
sTag.postUpdate(OFF)
die Ausdrücke

Code: Alles auswählen

sNacht.sendCommand(ON)
sTag.sendCommand(OFF)
verwenden.
sendCommand wirkt sicher über Rules und Bindings, was mit postUpdate nicht gewährleistet ist.

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

Re: Tag und Nacht Erkennung via Rule

Beitrag von udo1toni »

Nein?!?

Ich hab keine Ahnung, warum es bei Dir nicht so funktioniert, aber postUpdate ist nicht die Ursache. Hast Du openHAB schon mal neu gestartet?

postUpdate() setzt den Status eines Items und tut sonst nichts.
sendCommand() sendet einen Befehl und setzt erst mal nicht den Status. Allerdings "errät" openHAB anhand des gesendeten Befehls den wahrscheinlichen neuen Status und setzt diesen mit postUpdate. Im Allgemeinen klappt das auch ganz gut, es kann aber auch schief gehen und für zusätzliche Verwirrung sorgen. Dann muss man dieses autoupdate gezielt abschalten.

Den Status kannst Du ausschließlich mit Item.state abfragen, z.B. so:

Code: Alles auswählen

logInfo("Bewegung","sNacht: {}",sNacht.state)
oder als Bedingung:

Code: Alles auswählen

if(sNacht.state == ON)
Ich verstehe ehrlich gesagt auch nicht, warum Du zwei Items verwendest, um einen komplementären Zustand abzubilden. Man könnte natürlich eine "Grauzone" zwischen Tag und Nacht schaffen, aber dann wäre es sinnvoller, dafür ein Number Item zu verwenden, oder alternativ ein String Item, in welchem dann die verschiedenen Zustände als Text hinterlegt werden. Im englischen Forum gab es dazu eine Beispiel-Rule, welche diverse Tageszeiten über ein Item abdeckte.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Tag und Nacht Erkennung via Rule

Beitrag von int5749 »

HiG hat geschrieben: 29. Jan 2022 16:10
udo1toni hat geschrieben: 26. Jan 2022 23:49 Nacht.postUpdate(ON)
Leider...funktioniert das nicht richtig bei mir
:-/
HiG hat geschrieben: 29. Jan 2022 16:10 Das Model zeigt den Wert korrekt an
night.jpg
Hmm, hier hat die GUI - aus meiner Sicht - einen kleinen Nachteil, welcher verwirren kann. Denn: Der Status eines Switch-Items sieht gleich aus, egal ob dieser OFF - UDEF oder NULL ist, nur ON wird in der GUI anders dargestellt. Ausnahme sind hier Switch-Items mit einem dynamischen Icon bei dem sich bereits OFF oder ON von anderen Unterscheiden, wobei dann nur das Icon anders dargesteltl wird, der "Switch" in der GUI ist bei nicht-ON immer grau.

Was sagt denn das Log?? Da muß ja auch zu beiden Einträgen ein "Befehl" erfolgt sein. Evtl. stimmt der Aufruf der Nacht nicht und der Wert wird somit nicht gesetzt?
HiG hat geschrieben: 29. Jan 2022 16:10 Wenn ich das jetzt aber in einer Rule auswerte...
Ich bin immer neugierig, und mir hilft es dies etwas genauer zu sehen. Kannst Du evtl. einmal zeigen, wie genau die Items definiert sind die Rule, welche den Status auswertet?? Klappt denn die Abfrage des sTag Status?

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Tag und Nacht Erkennung via Rule

Beitrag von peter-pan »

...hab grad gesehen, dass du deine Items in Textform angelegt hast und keinen Suffix/Pattern enthalten ist. Probier mal [%s] mit im Label zu definieren. Vielleicht sieht die Welt dann schon anders aus ;) oder du hängst den Pattern in die Metadaten.

Ich drück dir die Daumen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
HiG
Beiträge: 136
Registriert: 16. Jun 2021 13:39
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von HiG »

peter-pan hat geschrieben: 30. Jan 2022 12:49 Ich drück dir die Daumen.
Das wars ;-) Danke

Benutzeravatar
HiG
Beiträge: 136
Registriert: 16. Jun 2021 13:39
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von HiG »

udo1toni hat geschrieben: 30. Jan 2022 02:55 Ich verstehe ehrlich gesagt auch nicht, warum Du zwei Items verwendest
Ich jetzt auch nicht mehr ;-) Wahrscheinlich weil Tag nicht gleich Nacht heißt...keine Ahnung.

Aber eine ander Sache beschäftigt mich noch....

Ich hatte überlegt dieses Item zu persistieren...das dann aber verworfen, da es keinen Sinn macht. Denn... wenn das System heute abend (Nacht=on) ausfällt...und morgen vormittag wieder da ist (Nacht=off) stimmt ja der persistierte Wert nicht mehr. Aber... wenn ich nich persistiere und das o.g. Szenario tritt auf...dann ist das Item bis aktuell knapp 17:00 undefiniert (Null?). Frage ich es nun in Rules ab....dann "knallts". Oder hab ich da nen Denkfehler?

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Tag und Nacht Erkennung via Rule

Beitrag von int5749 »

HiG hat geschrieben: 31. Jan 2022 15:02
udo1toni hat geschrieben: 30. Jan 2022 02:55 Ich verstehe ehrlich gesagt auch nicht, warum Du zwei Items verwendest
Ich jetzt auch nicht mehr ;-) Wahrscheinlich weil Tag nicht gleich Nacht heißt...keine Ahnung.
Da reicht doch dennoch 1 Item?
Ich arbeite z.B. nur mit einem Item Night Wenn ON ist es Nacht, wenn OFF eben das Gegenteil = Tag :roll:
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Benutzeravatar
HiG
Beiträge: 136
Registriert: 16. Jun 2021 13:39
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von HiG »

int5749 hat geschrieben: 31. Jan 2022 15:47 Ich arbeite z.B. nur mit einem Item Night Wenn ON ist es Nacht, wenn OFF eben das Gegenteil = Tag

ja doch. :lol: Habs ja schon geändert

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Tag und Nacht Erkennung via Rule

Beitrag von int5749 »

HiG hat geschrieben: 31. Jan 2022 16:11
int5749 hat geschrieben: 31. Jan 2022 15:47 Ich arbeite z.B. nur mit einem Item Night Wenn ON ist es Nacht, wenn OFF eben das Gegenteil = Tag

ja doch. :lol: Habs ja schon geändert
:mrgreen: geht doch ;)

Ich würde das Item auch nicht persistieren, aber es sollte/könnte wie folgt klappen.
Du triggerst ja auf die Bürgerliche Morgendämmerung und diese hat natürlich auch eine Uhrzeit, wlche wiederum mit der aktuellen vergliechen werden kann.

Neues Item

Code: Alles auswählen

DateTime civilDawnTime		"civilDawn [%1$td.%1$tm.%1$tY %1$tH:%1$tM]"		{channel="astro:sun:local:civilDawn#start"}
kleine Rule

Code: Alles auswählen

rule Initialisierung
when
    System started
then
    val day_start = (civilDawnTime.state as DateTimeType).getZonedDateTime()

    if (now.isAfter(day_start)) {
        sNacht.postUpdate(OFF)
    } else {
        sNacht.postUpdate(ON)
    }
end
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Antworten