Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

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

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von udo1toni »

ModjoMc06 hat geschrieben: 22. Okt 2023 17:48 jedoch kam keine reaktion von den taster
Und die Channel UID stimmt? Ist der Typ des Channels auch tatsächlich Trigger?
Ich gehe davon aus, dass das Thing per Autodiscovery erzeugt wurde. Wenn der Channel im Thing gelistet wird, sollte es dort auch möglich sein, den Link in die Zwischenablage zu kopieren.
Außerdem sollte es eigentlich in events.log jeweils einen Eintrag geben, wenn der Taster gedrückt wird.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ModjoMc06
Beiträge: 91
Registriert: 3. Jul 2018 06:28
Answers: 0

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von ModjoMc06 »

Hallo udu1toni.
es wir mehr als eventbuton angegeben, und der Trigger als event. nun ich hab das nun so gelöst eine rule für on also 1002 und eine rule 1004 dubleklick für off. bin auch dabei meine ganzen Items zu ändern. und stecke zu dem auch fest mit den Bewegungs sensoren.
zb für den sensor items

Code: Alles auswählen

// Bewegungsmelder
Number FlurBewegungsmelder_Motion        "Bewegungsmelder[MAP(esp-pir.map):%s]"  <motion>  (gFlur)       {channel="deconz:presencesensor:00212E09BD82:00158d0004499f8a010406:presence" [category="motion"]}
und mit der Rules:

Code: Alles auswählen

var Timer lichtTimer = null

rule "FlurBewegungsmelder_Motion"
when
    Item FlurBewegungsmelder_Motion received update
then
    if (Bewegungsmelder.state == ON) {
        if ((now.isAfter(now.withTimeAtStartOfDay.plusHours(3)) && now.isBefore(now.withTimeAtStartOfDay.plusHours(5))) ||
            (now.isAfter(now.withTimeAtStartOfDay.plusHours(16)) && now.isBefore(now.withTimeAtStartOfDay.plusHours(22)))) {

            // Bewegungsmelder aktiv während der vorgegebenen Zeiten
            if (FlurLicht_Light.state != ON) {
                // Licht ist aus, schalte es ein und starte den Timer
                FlurLicht_Light.sendCommand(ON)
                lichtTimer = createTimer(now.plusMinutes(5)) [
                    // Timer ist abgelaufen, schalte das Licht aus
                    FlurLicht_Light.sendCommand(OFF)
                    lichtTimer = null
                ]
            } else {
                // Licht ist bereits an, setze den Timer zurück
                lichtTimer.reschedule(now.plusMinutes(5))
            }
        }
    } else {
        // Bewegungsmelder ist aus, schalte das Licht aus und stoppe den Timer
        FlurLicht_Light.sendCommand(OFF)
        if (lichtTimer !== null) {
            lichtTimer.cancel
            lichtTimer = null
        }
    }
end
im event.log wird folgendes ausgegeben. was ich nachträglich installiert hab.

Code: Alles auswählen

2023-10-29 05:03:24.920 [WARN ] [dule.handler.ItemStateTriggerHandler] - Item 'FlurBewegungsmelder_Motion' needed for rule 'Motion Sensor Flur Lights On-1' removed. Trigger '0' will no longer work.

==> /var/log/openhab/events.log <==

2023-10-29 05:03:24.274 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Flur1Bewegungsmelder_Motion' changed from NULL to 1

==> /var/log/openhab/openhab.log <==

2023-10-29 05:03:29.832 [WARN ] [e.internal.SseItemStatesEventBuilder] - Attempting to send a state update of an item which doesn't exist: FlurBewegungsmelder_Motion

==> /var/log/openhab/events.log <==

2023-10-29 05:03:29.242 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'deconz:presencesensor:00212E09BD82:00158d0004499f8a010406' changed from ONLINE to UNKNOWN

2023-10-29 05:03:29.278 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'deconz:presencesensor:00212E09BD82:00158d0004499f8a010406' changed from UNKNOWN to ONLINE

2023-10-29 05:03:32.501 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Flur1Bewegungsmelder_Motion' changed from 1 to 0

2023-10-29 05:03:44.648 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Flur1Bewegungsmelder_Motion' changed from 0 to 1

023-10-29 05:03:57.531 [WARN ] [dule.handler.ItemStateTriggerHandler] - Item 'FlurBewegungsmelder_Motion' needed for rule 'Motion Sensor Flur Lights On-1' is missing. Trigger '0' will not work.

2023-10-29 05:04:11.376 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Motion Sensor Flur Lights On-1' failed: The name 'Bewegungsmelder' cannot be resolved to an item or type; line 7, column 9, length 15 in Motion Sensor Flur Lights On

==> /var/log/openhab/events.log <==

2023-10-29 05:05:14.695 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Flur1Bewegungsmelder_Motion' changed from 1 to 0
Nun,ja. alles andere läuft nun wieder selbst die Heizungen lassen sich steuern und die echos auch. nach dem ich alle items chennel umgebaut hab. nur diese Bewegungs Sensoren nicht

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

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von udo1toni »

Innerhalb der Rule, die durch ein Update ausgelöst wird, fragst Du den Zustand eines Items Bewegungsmelder ab, welches ansonsten nicht in Erscheinung tritt. Insbesondere wird des durch die Rule nicht gesteuert.
Ich gehe davon aus, dass es sich hierbei um einen Schalter handelt, der den Bewegungsmelder deaktivieren soll. Die Implementierung sorgt allerdings dafür, dass bei deaktiviertem Bewegungsmelder jede erfasse Bewegung das Licht ausschaltet. Ich denke nicht, dass dies die Idee dahinter ist.

Weiter: Du verwendest ein (absurd kompliziertes) Konstrukt mit now.withTimeAtStartOfDay, das gibt es nicht mehr, und zwar schon seit openHAB3.
.withTimeAtStartOfDay gehört zu Joda Time,in JavaTime wäre der adäquate Ersatz .with(LocalTime.MIDNIGHT)

Unter openHAB2 bedeutet now.isAfter(now.withTimeAtStartOfDay.plusHours(3)): nach 3 Uhr. Das ist ab 03:00:00.001 erfüllt.
Da die Zeitumstellung immer um 3 Uhr (zurück auf 2) oder 2 Uhr (vor auf 3) stattfindet (das ist der Grund, warum man überhaupt .withTimeAtStartOfDay einsetzen muss), ist diese Formulierung unnötig.
Du kannst stattdessen einfach now.getHour > 2 schreiben.
.getHour liefert die Stundenanzeige einer Digitaluhr, einen Integerwert von 0 - 23, d.h. die Bedingung ist ab 03:00:00.000 Uhr erfüllt.
Ich denke, die eine Millisekunde wirst Du verschmerzen können :)
Es ergibt sich also als vollständiger Ausdruck:

Code: Alles auswählen

if((now.getHour > 2 && now.getHour < 5) || (now.getHour > 15 && now.getHour < 22))
Das heißt, zwischen 3 Uhr und 5 Uhr sowie zwischen 16 Uhr und 22 Uhr ist die Bedingung erfüllt. (wie gesagt... eine Millisekunde möchte ich hier unterschlagen)

Das reschedule() ist eine durchaus übliche Variante, ich bevorzuge allerdings eine andere Lösung, nämlich den Timer erneut anzulegen.
Dein Code ist nicht thread safe, denn Du prüfst nur bei Bewegungsmelder.state != ON überhaupt ab, ob die Timer Variable gesetzt ist, nicht aber, wenn Du den Timer erzeugst. Wenn die Rule neu geladen wird, während der Timer aktiv ist, führt das beim nächsten Trigger zu zwei laufenden Timern, und der erste ist dann nicht mehr erreichbar, wird also auch nicht gelöscht. In der Folge wird das Licht dann ausgeschaltet, obwohl der letzte Timer noch läuft.

Gegenvorschlag:

Code: Alles auswählen

var Timer tLicht = null // Globale Variablen vor der ersten Rule platzieren!

rule "Bewegungsmelder Flur"
when
    Item FlurBewegungsmelder_Motion received update
then
    if(Bewegungsmelder.state != ON)                                                  // Automatik inaktiv?
        return;                                                                      // dann raus!

    if(now.getHour < 3 || (now.getHour > 4 && now.getHour < 16) || now.getHour > 21) // außerhalb des Zeitfensters?
        return;                                                                      // raus!

    if(FlurLicht_Light.state != ON)                                                  // Falls Licht aus
        FlurLicht_Light.sendCommand(ON)                                              // einschalten

    tLicht?.cancel                                                                   // Falls Timer vorhanden, canceln
    tLicht = createTimer(now.plusMinutes(5), [                                       // Setze Timer auf 5 Minuten
        if(FlurLicht_Light.state != OFF)
            FlurLicht_Light.sendCommand(OFF)                                         // schalte das Licht aus
    ])
end
Zunächst wird geprüft, ob die Rule aktiv sein soll. Ist das nicht der Fall, wird sie abgebrochen. Dies passiert einmal für den Schalter Bewegungsmelder und einmal über die Zeitbedingung.
now.getHour < 3 ist von 00:00:00.000 bis 02:59:59:999 gültig,
(now.getHour > 4 && now.getHour < 16) ist von 05:00:00.000 bis 15:59:59.999 gültig.
now.getHour > 21 ist von 22:00:00.000 bis 23:59:59.999 gültig,

Läuft die Rule zu diesem Zeitpunkt noch, so muss das Licht eingeschaltet werden, falls das noch nicht geschehen ist.
Danach wird ein eventuell gerade laufender Timer gelöscht. Das ? bedeutet, .cancel wird nur ausgeführt, wenn tLicht !== null ist.
Zuletzt muss der Ausschalttimer auf 5 Minuten gesetzt werden, in dem ebenfalls geprüft wird, ob das Licht noch an ist.

Die ganzen anderen Befehle (Timer erneut mit null initialisieren usw.) sind nur unnötiger Ballast.

Durch den Einsatz von return; wird die Schachtelung der Rule reduziert, was wiederum die Übersichtlichkeit erhöht :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ModjoMc06
Beiträge: 91
Registriert: 3. Jul 2018 06:28
Answers: 0

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von ModjoMc06 »

Hallo, und ein Schönen Sonntag gewünsch an Herrn Udo1Toni.

Nun,warum es auf switch läuft keine ahnung ehrlich gesagt eigentlich sollte es auf Number laufen.Und meine überlegung waren eher so gedacht
Wenn eine bewegung erkannt wurde soll tLicht.send.comend auf On gehen. und ca 25 Min An sein, und wenn eine weitere Bewegung erkannt wurde innerhalb der Bewegung, und des licht soll das licht weiter anbleiben, und nicht gleich wieder aus gehen.
was ja bei dieser Rule war
Zb Motion Sensor Bad Lights On.rules:

Code: Alles auswählen

var Timer LightTimer = null

rule "GF_Hallway_Motion2"
when
    Item FF_Bathroom_Motion changed from 0 to 1
then
    if(FF_Bathroom_Motion.state == ON)                                                 // Licht bereits an
        return;
		
    if((now.getHour < 3 || (now.getHour > 5 && now.getHour < 21) || now.getHour > 23 ))  // ab 23 Uhr bis 3 Uhr und ab 9 Uhr bis 21 Uhr kein Licht 
    
        return;
	
    FF_1Bathroom_Light.sendCommand(ON)
    LightTimer = createTimer(now.plusMinutes(15), [ |
        FF_1Bathroom_Light.sendCommand(OFF)                   
    ])
end
Leider hat diese Rule es immer so gemacht wenn Bewegung erkannt wurde und der now.pulsMintues auf 15Minuten war nach weiner weiteren Bewegung das licht aus ging. sprich der teimer lief nicht mehr ab.

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

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von udo1toni »

Was willst Du mit Deinem Posting sagen?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ModjoMc06
Beiträge: 91
Registriert: 3. Jul 2018 06:28
Answers: 0

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von ModjoMc06 »

Nabend Udo1toni.

Ich wollte mit dem postig sagen das deine rule vorschglag gut ist. was ich selbst auch in OH3 genutzt haben. sehe rule. allerdings ist mir aufgefallen, was ich auch etwas gestört hatte bei den Philips Heu Bewegungs Sensoren der Timer läuft 10Secunden auf on. Nun,ja. wenn man aber Zb, aber zu den zeiten die eigentragen sind sagen wir mal 3Uhr Morgens bis 5Uhr Morgens soll das licht per bewegung an gehen. und mit dem Gewünschten Timer aus gehen sagen wir mal 15Minuten. was auch so ganz gut läuft, aber wenn man sich nicht weiter bewegt. Den wenn man sich innerhalb des Timer von 15Minuten bewegt und der Sensor auf O=Off steht geht das licht sofort auf Aus. ob wohl die abgegebene zeit nicht abgelaufen ist.

Und meine Anregung war mehr so gedacht. das wenn eine weitere Bewegung zumindest erkannt wurde soll der timer weiter laufen. kurz gesagt der Melder soll nichts weiter machen, innerhalb der zeit angaben.

vielleicht hab ich auch hier ein denk fehler

Zb dies hab ich aus dem log

Code: Alles auswählen

2023-10-30 17:35:00.895 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Flur1Bewegungsmelder1_Motion' changed from 1 to 0
2023-10-30 17:35:04.622 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Flur1Bewegungsmelder1_Motion' changed from 0 to 1
2023-10-30 17:39:48.874 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'FlurLicht_Light' changed from ON to OFF

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

Re: Benötige Hilfe bei Homematic IP Heizungen lassen sich nicht mehr Steuern von OH

Beitrag von udo1toni »

Also, wenn Du meine Rule nimmst, wird da nichts ausgeschaltet :)
Falls das Item Bewegungsmelder nur ein Überbleibsel ist, lass die betreffenden Zeilen einfach weg, dann läuft die Rule auf jeden Fall.

Die Rule wird nur im angegebenen Zeitfenster aktiv.
Die Rule schaltet das Licht ein, falls es nicht an ist.
Falls ein Timer läuft, wird der Timer entfernt.
Die Rule startet einen 5-Minuten-Timer. Die Zeit kannst Du natürlich beliebig ändern, aber nur in vollen Minuten, ansonsten müsste man zu einer anderen Methode greifen, plusMinutes() erwartet einen Integer Wert.
Läuft der Timer ab, ohne zurückgesetzt zu werden, wird das Licht ausgeschaltet.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten