Denkfehler bei neuer Rule für Lichtsteuerung?

openHAB - open Home Automation Bus

Moderator: Co-Administratoren

echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von echicor » 09.09.2017, 08:55

Hi Dragonfly,

wenn ich die Regeln so übernehme wie von dir funktioniert es leider nicht.

Mit der folgenden Variante funktinoiert aber zumindest das ausschalten der Wandleuchten:

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Deckenlicht"
   when
      Item Licht_Esszimmer changed
then
   if (Licht_Esszimmer.state  >= 80 && Licht_Esszimmer_Wandleuchten.state == ON )
      {
      Licht_Esszimmer_Wandleuchten.sendCommand(OFF)
      }
end

rule "Lichtsteuerung Esszimmer Wandleuchten"
   when
      Item Licht_Esszimmer_Wandleuchten received command
then
   var Licht = Licht_Esszimmer     //Hier Namen des Items hin
   if (receivedCommand == ON && Licht.state >= 50)
      {
            Licht.sendCommand(50)
        }
   else if (receivedCommand == OFF && Licht.state > 0 )
      {
      Licht.sendCommand(100)
      }
end

Benutzeravatar
Dragonfly
Beiträge: 1249
Registriert: 04.01.2010, 11:40
Wohnort: Tyrol
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von Dragonfly » 09.09.2017, 10:40

Das liegt vermutlich daran, daß ich mir deine Screenshots nicht angesehen habe, sondern nur die Rules überarbeitet :mrgreen:

Also das Deckenlicht:

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Deckenlicht"
when
      Item Licht_Esszimmer changed to 80
then
   if (Licht_Esszimmer_Wandleuchten.state == ON )
      {
      Licht_Esszimmer_Wandleuchten.sendCommand(OFF)
      }
end
oder:

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Deckenlicht"
   when
      Item Licht_Esszimmer received command
then
   if (Licht_Esszimmer.state  >= 80 && Licht_Esszimmer_Wandleuchten.state == ON )
      {
      Licht_Esszimmer_Wandleuchten.sendCommand(OFF)
      }
end

echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von echicor » 09.09.2017, 12:19

Hi Dragonfly,

genau, die 2. Variante von der Rule "Lichtsteuerung Esszimmer Deckenlicht" funktioniert.

Magst Du vielleicht noch mal über die Rule "Lichtsteuerung Esszimmer Wandleuchten" schauen? Die läut noch nicht ...

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Wandleuchten"
   when
      Item Licht_Esszimmer_Wandleuchten received command
then
   var Licht = Licht_Esszimmer     //Hier Namen des Items hin
   if (receivedCommand == ON && Licht.state >= 50)
      {
            Licht.sendCommand(50)
        }
   else if (receivedCommand == OFF && Licht.state > 0 )
      {
      Licht.sendCommand(100)
      }
end

Benutzeravatar
Dragonfly
Beiträge: 1249
Registriert: 04.01.2010, 11:40
Wohnort: Tyrol
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von Dragonfly » 09.09.2017, 13:22

Probier mal:

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Wandleuchten"
when
	Item Licht_Esszimmer_Wandleuchten changed
then
	if (Licht_Esszimmer_Wandleuchten.state == ON && Licht_Esszimmer.state > 50)
		{
		Licht.sendCommand(50)
		}
	else if (Licht_Esszimmer_Wandleuchten.state == OFF && Licht_Esszimmer.state > 1 )
		{
		Licht.sendCommand(100)
		}
end
aus dem Screenshot abgeschrieben....

echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von echicor » 09.09.2017, 15:54

Hi Dragenfly,

die Rule alleine scheint zu funktionieren mit der Anpassung meiner Items. Allerdings wenn ich jetzt beide Rules aktiviert lasse, kommen die sich in die Quere. Ein Szenario beschreibt ja, dass die Deckenlampen z.b. auf 100 & stehen und dann jemand die Wandleuchten anschaltet. In diesem Fall soll das Deckenlicht auf 50 & gedimmt werden. Die Rule scheint auch anzufungen zu arbeiten, allerdings wird sie von der ersten Rule dabei unterbrochen dadurch, das die erste Rule die Wandlampen wieder ausschaltet und damit der anderen Rule die Bedingung wegnimmt.

Also. 2 Rules für sich alleine laufen mit den folgenden Einstellungen:

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Deckenlicht"
   when
      Item Licht_Esszimmer changed //received command ON
then
   if (Licht_Esszimmer.state  >= 80 && Licht_Esszimmer_Wandleuchten.state == ON )
      {
      Licht_Esszimmer_Wandleuchten.sendCommand(OFF)
      }
end

rule "Lichtsteuerung Esszimmer Wandleuchten"
when
   Item Licht_Esszimmer_Wandleuchten changed
then
   if (Licht_Esszimmer_Wandleuchten.state == ON && Licht_Esszimmer.state > 50)
      {
      Licht_Esszimmer.sendCommand(50)
      }
   else if (Licht_Esszimmer_Wandleuchten.state == OFF && Licht_Esszimmer.state > 1 )
      {
      Licht_Esszimmer.sendCommand(100)
      }
end
Ich habe gerade schon mal versucht die beiden irgendwie miteinander zu verknüpfen, allerdings kommt dann immer nichts lauffähiges bei raus :-/
Scheinbar aber müssen die Rules nun zusammengefasst werden zu einer, oder? Oder gibt es eine andere Möglichkeit für die beiden Rules, damit sie sich beim Ausführen nicht in die quere kommen?

Benutzeravatar
Dragonfly
Beiträge: 1249
Registriert: 04.01.2010, 11:40
Wohnort: Tyrol
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von Dragonfly » 09.09.2017, 18:31

Wenn ich das richtig interpretiere, löst Rule 2 Rule 1 aus - das könntest du aber mit der CCU gegenprüfen, indem du Rule 1 in OH deaktivierst, und in der CCU das Gegenstück dafür aktivierst.

Ansonsten probier einen anderes Kommando aus:
"Item Licht_Esszimmer changed" scheint ja nicht den gewünschten erfolg zu bringen.

Code: Alles auswählen

Item Licht_Esszimmer received command

echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von echicor » 09.09.2017, 19:08

Hi,

mit "received command" ändert sich nichts am Verhalten.

Deaktiviere ich Rule 1 in OH und aktiviere das entsprechende Programm in der CCU funktioniert es. Ist also so wie du schreibst...

Benutzeravatar
Dragonfly
Beiträge: 1249
Registriert: 04.01.2010, 11:40
Wohnort: Tyrol
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von Dragonfly » 09.09.2017, 22:06

Da fällt mir momentan noch nichts gescheites ein; du könntest aber mal in den Event-Log von OH reinschauen - dann machst ein paar von den Fehlauslösungen und postest mal die zugehörgien Events - dann sehen wir zumindest, was da vor sich geht....

Benutzeravatar
Dragonfly
Beiträge: 1249
Registriert: 04.01.2010, 11:40
Wohnort: Tyrol
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von Dragonfly » 10.09.2017, 04:17

Ich glaub, ich hab´s...

Die CCU wird warscheinlich warten, bis die "Fahrt" vom Dimmer beendet ist, und dann triggern.

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Deckenlicht"
   when
      Item Licht_Esszimmer_working changed to OFF
then
   if (Licht_Esszimmer.state  >= 80 && Licht_Esszimmer_Wandleuchten.state == ON )
      {
      Licht_Esszimmer_Wandleuchten.sendCommand(OFF)
      }
end
Dazu brauchen wir aber ein neues Item - fast gleich wie Licht_Esszimmer:
Licht_Esszimmer_working und ganz hinten statt STATE soll WORKING rein, wenn ich nicht ganz falsch liege. Dann wird erst ausgelöst, wenn der Dimmer sich nicht mehr bewegt und die Bedingung geprüft.


Alternativ könntest du natürlich die 2 Rules zusammenfassen und hoffen, daß die Falschauslösungen korrekt abgefangen werden:

Code: Alles auswählen

rule "Lichtsteuerung Esszimmer Wandleuchten/Deckenlicht"
when
   Item Licht_Esszimmer_Wandleuchten changed or
   Item Licht_Esszimmer changed
then
   if		(Licht_Esszimmer_Wandleuchten.state == ON && Licht_Esszimmer.state > 50)	{Licht_Esszimmer.sendCommand(50)}
   else if	(Licht_Esszimmer_Wandleuchten.state == ON && Licht_Esszimmer.state  >= 80)	{Licht_Esszimmer_Wandleuchten.sendCommand(OFF)}
   else if	(Licht_Esszimmer_Wandleuchten.state == OFF && Licht_Esszimmer.state > 1)	{Licht_Esszimmer.sendCommand(100)}
end
Hattest du eh schon vorgeschlagen...

... so 04:17 alle Angaben ohne Gewähr.

echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

Re: Denkfehler bei neuer Rule für Lichtsteuerung?

Beitrag von echicor » 10.09.2017, 09:32

Moin Dragonfly,

mhh kurz nach 4? Naja, da bin ich auch gerade vom feiern nach Hause gekommen :D
Von daher hab ich es auch erst jetzt getestet und siehe da: Geht leider nicht :?

Setze ich Rule1 um mit dem "_working" statt ".state" wird die Rule nicht ausgeführt. Habe bist jetzt das mit dem "_working" nirgends online gefunden. Daher war ich so frei und habe es auch mal mit ".working" versucht - gleiches Ergebnis

Dann habe ich noch eben die Zusammenfassung aus beiden Rules getestet. Irgendwie scheint da, das hatten meine Versuche die Rules zusammenzulegen gestern auch gezeigt, nur der Anteil aus der 2. Rule (Wandleuchten) abgearbeitet zu werden. Und genau das verstehe ich dann nicht. 2 der if-Bedingungen werden abgearbeitet und die 3. nicht, in dem Fall von dir die mittlere. Und das obwohl die Vorbedingung, zumindest aus meiner Sicht korrekt ist. Ich hätte ja nicht gedacht das dieses Lichtszenario so schwer auf openHAB umzusetzen ist :cry:

Antworten

Zurück zu „openHAB“