Seite 1 von 1

astro:sun:local funktioniert nicht

Verfasst: 1. Jul 2021 14:08
von Rainer
Hallo.
Ich nutze OH3 und habe folgendes Problem. Ich erstelle mit Visual Studio folgende Rule:

Code: Alles auswählen

rule "AutoRolladen1"
    when
        Channel 'astro:sun:local:civilDusk#event' triggered END
    then
        sendCommand(gWohnzimmer_Rolladen, UP)
end
//================================================================
rule "AutoRolladen2"
    when
        Channel 'astro:sun:local:civilDusk#event' triggered START
   then
        sendCommand(gWohnzimmer_Rolladen, DOWN)
end
in OH3 wird mir das nach dem hochladen so angezeigt:

Code: Alles auswählen

// Triggers:
// - When channel astro:sun:local:civilDusk#event was triggered

// context: rolladen2-1
sendCommand(gWohnzimmer_Rolladen, UP)
und

Code: Alles auswählen

// Triggers:
// - When channel astro:sun:local:civilDusk#event was triggered

// context: rolladen2-2
sendCommand(gWohnzimmer_Rolladen, DOWN)
mit dem Ergebnis, dass die Rule nicht erkennt ob START oder END getriggert wurde. Wo liegt mein Fehler?

Re: astro:sun:local funktioniert nicht

Verfasst: 1. Jul 2021 14:33
von scotty
Hast du mal versucht, "sendCommand(100)" oder "sendCommand(0)" (je nachdem ob "100" bei dir geschlossen oder offen ist)?

Re: astro:sun:local funktioniert nicht

Verfasst: 1. Jul 2021 14:37
von Rainer
Hi Scotty,
ist doch jeweils 1 Regel.

Re: astro:sun:local funktioniert nicht

Verfasst: 1. Jul 2021 14:50
von scotty
Zusätzlich kann ich noch darauf verweisen: viewtopic.php?f=15&t=5560&p=35023#p35023

Re: astro:sun:local funktioniert nicht

Verfasst: 2. Jul 2021 06:52
von udo1toni
Erst mal möchte ich hier ein grundsätzliches Missverständnis ansprechen:

civilDusk (bürgerliche Abnddämmerung) END bedeutet nicht, dass der Tag anfängt, sondern dass die bürgerliche Abenddämmerung beendet ist.

Dazu muss man wissen, wie die bürgerliche Abenddämmerung definiert ist, und zwar folgendermaßen: die Sonne unterschreitet die -6° Höhenlinie.

Nun ist die Sonne von uns aus gesehen zwar klein, aber es ist eben kein unendlich kleiner Punkt, sondern eine runde Scheibe. Die Höhenlinie ist wiederum eine gedachte Kreislinie. START bezeichnet also den Zeitpunkt, zu dem die Sonne beginnt, die Kreislinie zu berühren, während END den Zeitpunkt bezeichnet, zu dem die Sonne aufhört, die Kreislinie zu berühren.
Der Zeitraum der Passage variiert abhängig von der Jahreszeit und dem Standort, wir reden in unserer Region aber von etwa 3 bis 5 Minuten.

Du willst zum Öffnen der Läden nicht civilDusk END, sondern civilDawn START, was den Beginn des bürgerlichen Sonnenaufgangs bezeichnet.

Der nächste Punkt: Du möchtest ein Item gWohnzimmer_Rolladen ansteuern. Ich vermute aufgrund des Namens, dass es sich hier um ein Group Item handelt.
Da kommt eine Eigenheit zum Tragen, die nur einen Teil der Befehle betrifft:
Wenn ich ein Group Item vom Typ Switch habe, ist es kein Problem, mittels gGroupItem.sendCommand(OFF) alle zugehörigen Items auszuschalten.
Bei Dimmer funktioniert aber nicht INCREASE/DECREASE und bei Rollershutter funktioniert kein UP/DOWN/STOP.
Meine Vermutung dazu (aber das ist halt auch nur eine Vermutung): Das Group Item kann den Befehl nicht an die Member weitergeben, weil der Befehl nicht als Status im Item vorliegt.
Wenn die Rollläden direktes Positionieren erlauben (also eine Ansteuerung mit 0 oder 100 für auf bzw. zu), kannst Du versuchen, stattdessen eben den Zahlenwert 0 oder 100 als Befehl zu senden.
Sollten die Läden die Zahl als Befehl nicht unterstützen, gibt es einen Trick, um dennoch mit UP und DOWN arbeiten zu können:

Code: Alles auswählen

gWohnzimmer_Rolladen.members.forEach[m|m.sendCommand(UP)] / bzw. DOWN
sorgt dafür, dass nacheinander jedem Member der Gruppe gWohnzimmer_Rolladen der Befehl UP (bzw. DOWN) gesendet wird.

Im Übrigen rate ich immer dazu, die Methode Item.sendCommand(Command) zu verwenden, statt die Action sendCommand(Item as string, Command as string), die Methode ist einfach sicherer, weil sie Teil des Items selbst ist, sie hat also Kenntnis über die "Bedürfnisse" des Items und kann jeden erlaubten Input verarbeiten, während die Action nur mit Strings arbeiten kann und angegebene Parameter immer nach String wandelt (und das kann schief gehen).

EDIT: Satzbau korrigiert.

Re: astro:sun:local funktioniert nicht

Verfasst: 2. Jul 2021 14:39
von peter-pan
Ich weiss nicht, ob ich die Frage des OP richtig verstanden habe.
Sollte es aber darum gehen, ob die beiden Rules zum richtigen Zeitpunkt(event) triggern (START bzw. END), kann ich vielleicht folgendes dazu beitragen.
Ich habe mal zwei Rules in OH3 erstellt:

Code: Alles auswählen

rule "noon_stowing3 Start"
    when
            Channel 'astro:sun:stowing3:noon#event' triggered START
    then
        logInfo("astro-rules" + '_03', " Noon 50 Start. START")
        //EG_gEG_Kind2_Licht.sendCommand(ON)
end
//===============================================================================
rule "noon_stowing3 Ende"
    when
            Channel 'astro:sun:stowing3:noon#event' triggered END
    then
        logInfo("astro-rules" + '_04', " Noon 50 Ende. END")
        //EG_gEG_Kind2_Licht.sendCommand(ON)
end
Die passenden Things:

Code: Alles auswählen

Thing astro:sun:stowing3   "Offset 50"     [geolocation="11.23456789,3.456789,400", interval=300]{
  Channels:
    Type rangeEvent : noon#event [
      offset=50
    ]
}
Als Yaml sehen die Rules so aus:
Event:Start

Code: Alles auswählen

// Triggers:
// - When channel astro:sun:stowing3:noon#event was triggered

// context: astro-7
logInfo("astro-rules" + '_03', " Noon 50 Start. START")
Event:End

Code: Alles auswählen

// Triggers:
// - When channel astro:sun:stowing3:noon#event was triggered

// context: astro-8
logInfo("astro-rules" + '_04', " Noon 50 Ende. END")
Man kann also im Yaml-Code nicht erkennen, ab Start oder End getriggert wird.

Aber das Logging sagt:

Code: Alles auswählen

2021-07-02 14:16:00.013 [INFO ] [hab.core.model.script.astro-rules_03] -  Noon 50 Start. START
2021-07-02 14:17:00.008 [INFO ] [hab.core.model.script.astro-rules_04] -  Noon 50 Ende. END
Das bedeutet (für mich), dass das richtige Trigger-Event erkannt wird.

Sollte das aber nicht gemeint gewesen sein, dann vergesst einfach, was ich hier von mir gegeben habe :lol: :lol: :lol: ;) ;) ;)