Blockly Noob braucht hilfe

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

fetze82
Beiträge: 14
Registriert: 21. Mai 2022 14:56
Answers: 0

Blockly Noob braucht hilfe

Beitrag von fetze82 »

Hallo Forum,
ich bin noch ein Frischling bei openHAB und gerade dabei an meiner ersten Blockly Rule zu verzweifeln.

Ich hätte gerne ein Bit, welches mir "Tag bzw. Nacht" zurück gibt. Dafür habe ich mir mit dem Astrobinding die Zeiten für die Dämmerung am Morgen und am Abend ausgeben lassen. Die Items sehe ich in der "Developer Sidebar" auch.
Blockly 1.jpg
Leider schaltet mein "Tag/Nacht" bin nicht.
Ich vermute ich muss die Zeit für die Dämmerungen umformatieren, aber wie?

Kann mir jemand weiterhelfen, wäre super!
Vielen Dank schonmal
Grüße
Chris
von udo1toni » 1. Nov 2022 18:52
Da herrscht vermutlich ein Missverständnis.

Ein Dimmer hat einen Status und kann über verschiedene Befehle gesteuert werden. Das ist letztlich bei allen Dimmern gleich.
Ein knx Dimmer hat gewöhnlich 5+x Kommunikationsobjekte (KO), von denen mindestens drei KO für die Steuerung über Tasten gebraucht werden und drei andere KO für die vollständige Steuerung über eine Visu (auch wenn openHAB weit mehr als eine Visu ist, möchte ich den Begriff mal so nutzen, weil dieser Punkt nicht openHAB-spezifisch ist)
Die KO im einzelnen, in ungewöhnlicher Reihenfolge :) :
Heller/Dunkler Befehl (4 Bit) - Ein/Aus Status (1 Bit) - Ein/Aus Befehl (1 Bit) - Absolute Helligkeit Befehl (1 Byte) - Absolute Helligkeit Status (1 Byte)
Wahlweise käme noch Zwangssteuerung und/oder Szenen mit dazu.
Für die Wandtaster (solange keine Displays verbaut sind) reichen die ersten drei KO, für die Visu reichen die letzten drei KO.

Du kannst gewöhnlich über die ETS die Einschalthelligkeit eines knx Dimmers vorgeben, also entweder ein fixer Wert, oder die letzte gewählte Helligkeit. Dies ist aber eine generelle Einstellung, nicht ständig anzupassen. Die Einschalthelligkeit wird nur dann verwendet, wenn der Dimmer einen ON-Befehl über das Ein/Aus KO empfängt.
Das Status KO Ein/Aus signalisiert ON, sobald ein Dimmwert ungleich 0 anliegt, das Absolut KO signalisiert stets die aktuelle Helligkeit (eventuell nur statisch, also nicht während eines Regelvorgangs, kommt aber auf den Dimmer an).
Über den Absolutwert Befehl wird immer der Befehl gegeben, unmittelbar die gewünschte Helligkeit auszugeben.
Wenn Blendzeiten definiert sind, wird die neue Helligkeitsstufe allmählich erreicht.

Es gibt keine Möglichkeit - jedenfalls wären mir keine Dimmer, die so etwas bieten bekannt - eine Helligkeitsstufe dynamisch vorauszuwählen.

Nun zu Deinem Problem, die Helligkeit tageszeitabhängig unterschiedlich zu gestalten:

Der einfachste Weg führt über eine Rule. Die Rule triggert, wenn der Status von OFF auf ON wechselt. Abhängig von der Zeit sendet die Rule dann den gewünschten absoluten Helligkeitswert. Gewöhnlich wird man im Dimmer als Einschalthelligkeit den niedrigeren beider Werte hinterlegen. Wenn openHAB ausgeschaltet ist, wird das Licht also in bestimmten Zeitabschnitten zu dunkel sein.
Läuft openHAB, so erfasst die Rule den Einschaltvorgang und übersteuert die Helligkeitsstufe, das Licht leuchtet in der helleren Stufe.
Die Rule muss also nur dann eingreifen, wenn die Helligkeit höher sein soll.

In openHAB wird ein Dimmer immer über ein Item dargestellt, das Item kennt die Befehle ON/OFF/INCREASE/DECREASE sowie die Zahlen 0 - 100.
Als Status sind ausschließlich die Zahlen 0 - 100 vorhanden.
Die Befehle INCREASE/DECREASE wird man nur im Ausnahmefall verwenden, warum sollte man relativ steuern, wenn man auch absolut steuern kann? Es reicht auch nicht, die Befehle an den Dimmer zu senden, denn die meisten modernen knx Dimmer sprechen ausschließlich start/stop Dimming, während openHAB sendend kein start/stop-Dimming beherrscht. Das bedeutet, dass die Helligkeit immer von <aktuelle Helligkeit> bis 100 durchlaufen wird, wenn man einmal INCREASE sendet, während bei DECREASE die Gegenrichtung bis 0 durchlaufen wird. Es ist also in den meisten Fällen nicht sinnvoll, die GA in openHAB zu hinterlegen, welche für heller/dunkler zuständig ist.

Der korrekte Trigger für eine Rule, welche sich um die Helligkeit kümmert lautet wegen des Status 0-100 also nicht "changed to ON", sondern "changed from 0"
Geht es um die aktuelle Uhrzeit, ist es oftmals einfacher, den Wert anders als als Zeit darzustellen, z.B. now.getHour liefert de Stundenanteil einer Digitalanzeige, also beispielsweise die Zahl 16, in der Zeit von 16:00:00 Uhr bis 16:59:59.999 Uhr, aber ab 17:00:00 Uhr springt dieser Wert dann schlagartig auf 17 um. Willst Du also zwischen 6 Uhr und 23 Uhr helleres Licht haben, reicht ein doppelter Vergleich:

Code: Alles auswählen

if(now.getHour > 5 && now.getHour < 23)
Das funktioniert in Blockly genauso, aber Text ist nun mal wesentlich effizienter und benötigt keine Screenshots...
Gehe zur vollständigen Antwort
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Harka
Beiträge: 312
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Blockly Noob braucht hilfe

Beitrag von Harka »

Hi,
das Astrobinding gibt Dir bessere Möglichkeiten. Ich nehme gern den Höhenwinkel (wenn < 0 ist Nacht) oder die Sonnenphase. Für OpenHab ist der Trigger (When-Option der Rule) wichtig. Wie lauter der bei Dir?
Hier ein Beispiel, bei welchem auf die Änderung des Höhenwinkels reagiert wird. An Stelle von " contextual info ..." kannst Du auch "get state of item -Höhenwinkel" nehmen.

Edit: habe nicht daran gedacht das Maßeinheiten manchmal Probleme bereiten und daher sicherheitshalber nachgebessert
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

fetze82
Beiträge: 14
Registriert: 21. Mai 2022 14:56
Answers: 0

Re: Blockly Noob braucht hilfe

Beitrag von fetze82 »

Hey,
vielen dank für deine Antwort. Mit dem Sonnenwinkel habe ich es jetzt gelöst und so wie es aussieht funktioniert es auch. Vielen dank
Blockly 2.jpg
Als When Trigger habe ich alle 5 Minuten festgelegt zwischen 4-9Uhr und 16-22Uhr. Was die Sonnenauf und Untergangszeiten vom längsten biszum kürzesten Tag abdecken sollte.
Blockly 3.jpg
Kann mir jemand erklären, was mein Fehler bei meiner ersten Variante (aus Post1) war.

Vielen dank schonmal.
Viele Grüße
Christian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Harka
Beiträge: 312
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Blockly Noob braucht hilfe

Beitrag von Harka »

Hi,
versuch es mal mir "datetime from item ..." (aus dem Date & Times - Menü) an stelle von "item ...".
Anscheinend ist es nur ein Formaterkennungsproblem.
"item ..." zu nutzen ist in den meisten Fällen kein zum Ziel führenderAnsatz. Üblicherweise möchtest Du wissen welchen Status das Item hat und nutzt dazu "get state of item ..."

Zu Deiner Lösung: das mit den alle 5 Minuten als Trigger ist unnötig aufwendig. Nutz doch die Aktualisierung des Status von "Astro_Sonnen_Hohenwinkel" als Auslöser. Also: WHEN - Item - Astro_Sonnen_Hohenwinkel - was updated. Den Aktualisierungsintervall stellst Du in der Konfiguration des Astro-Things auf 300 (Sekunden) ein.
Zuletzt geändert von Harka am 31. Okt 2022 17:37, insgesamt 1-mal geändert.

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

Re: Blockly Noob braucht hilfe

Beitrag von udo1toni »

Es reicht sogar ein changed Ereignis, (wobei sich der Höhenwinkel eh immer ändert...)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

fetze82
Beiträge: 14
Registriert: 21. Mai 2022 14:56
Answers: 0

Re: Blockly Noob braucht hilfe

Beitrag von fetze82 »

Guten Abend,

vielen dank für eure freundliche und schnelle Hilfe, das scheint jetzt zu klappen, das freut mich Mega!!

Jetzt hänge ich direkt am nächsten Problem. Ich würde gerne den Dimmwert abhängig von einer Uhrzeit machen. Für mich sieht das mega logisch aus, für Blockly aber leider nicht. Kann mir jemand helfen, was mein Fehler ist.
Blockly 4.jpg
In dem einfachen Beispiel soll vor 6 Uhr der Dimmwert auf 60% gestellt werden, danach auf 100%. Das ist nur eine Spielrule und soll dann noch verfeinert werden....wenn ich blockly mal ansatzweiße verstehe.

Viele Grüße
Chris

PS: kann mir jemand ein Quelle nennen wo ich mir das Wissen für Blockly aneignen kann.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Harka
Beiträge: 312
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Blockly Noob braucht hilfe

Beitrag von Harka »

Moin,

Wenn Du etwas mit Zeit regeln möchtest: datetime... kommt imho mit reiner Zeiteingabe nicht klar und brauch auch das Datum. Hier hätte ich die Funktion hour of - now genutzt.

zum Lernen finde ich die Videos 1. Wahl und gut investierte Zeit -> https://www.youtube.com/c/OpenhabOrg

Edit: Ja, jetzt sehe ich es auch (was Udo hat im folgendem Beitrag bezüglich des Triggers meint) und habe den ersten Teil mal gelöscht.
Zuletzt geändert von Harka am 1. Nov 2022 14:03, insgesamt 1-mal geändert.

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

Re: Blockly Noob braucht hilfe

Beitrag von udo1toni »

Nein, ich denke, der Trigger ist hier eher, dass ein Bewegungsmelder angesprochen hat. Meine Vermutung lautet, dass tagsüber mehr Licht als nachts gebraucht wird.

Einfachste Möglichkeit, statt kompliziert mit Zeiten zu jonglieren: Man definiert sich ein ungebundenes Item. Dieses Item wird durch zwei simple Rules auf die Status ON bzw. OFF gesetzt. Die beiden simplen Rules werden entweder durch Time cron oder auch z.B. durch Astro RangeEvent Channel getriggert.
Damit reicht die Prüfung auf Item.state ON oder OFF.

Ja, das mit der Uhrzeit funktioniert "sofort" nach Systemstart, das Proxy Item muss gezielt über die Rule gesetzt werden. Im täglichen Gebrauch (speziell, wenn man das Item in mehreren Rules verwenden kann) ist das vernachlässigbar.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

fetze82
Beiträge: 14
Registriert: 21. Mai 2022 14:56
Answers: 0

Re: Blockly Noob braucht hilfe

Beitrag von fetze82 »

Guten Abend,
und wieder vielen Dank. Ein bisschen klarer ist mir das ganze jetzt schon. Vorallem das mit der Uhrzeit!

Jetzt stell ich mir direkt die nächste Frage. Mein Chanel für den KNX Dimmer hat eine Verknüpfung zu drei Gurppenadressen. (Ein/Aus, Absoluter Wert, Erhöhen bzw. Verringern).

Wenn ich jetzt ein Item damit verknüpfe erschliest es mir noch nicht wie ich z.B. nur einen Wert davon ändere.
In meinem Fall stolpere ich gerade darüber, dass ich zwar den absoluten Wert ändern möchte, dabei den Chanel aber nicht einschalten. Das soll dann über den Bewegungsmelder geschehen.

Hintergund, wenn ich Nachts das Treppenhaus runter gehe, will ich nicht von zu viel licht Wach gemacht werden. Tagsüber soll es aber "normal" Hell sein und nicht zu schummrig. Damit ich keine Schalter suchen muss, geht das an und aus Schalten im Treppenhaus über Bewegungsmelder.

Vielen dank und grüße
Chris

PS: die videos werde ich mir auf jeden Fall anschauen.

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

Re: Blockly Noob braucht hilfe

Beitrag von udo1toni »

Da herrscht vermutlich ein Missverständnis.

Ein Dimmer hat einen Status und kann über verschiedene Befehle gesteuert werden. Das ist letztlich bei allen Dimmern gleich.
Ein knx Dimmer hat gewöhnlich 5+x Kommunikationsobjekte (KO), von denen mindestens drei KO für die Steuerung über Tasten gebraucht werden und drei andere KO für die vollständige Steuerung über eine Visu (auch wenn openHAB weit mehr als eine Visu ist, möchte ich den Begriff mal so nutzen, weil dieser Punkt nicht openHAB-spezifisch ist)
Die KO im einzelnen, in ungewöhnlicher Reihenfolge :) :
Heller/Dunkler Befehl (4 Bit) - Ein/Aus Status (1 Bit) - Ein/Aus Befehl (1 Bit) - Absolute Helligkeit Befehl (1 Byte) - Absolute Helligkeit Status (1 Byte)
Wahlweise käme noch Zwangssteuerung und/oder Szenen mit dazu.
Für die Wandtaster (solange keine Displays verbaut sind) reichen die ersten drei KO, für die Visu reichen die letzten drei KO.

Du kannst gewöhnlich über die ETS die Einschalthelligkeit eines knx Dimmers vorgeben, also entweder ein fixer Wert, oder die letzte gewählte Helligkeit. Dies ist aber eine generelle Einstellung, nicht ständig anzupassen. Die Einschalthelligkeit wird nur dann verwendet, wenn der Dimmer einen ON-Befehl über das Ein/Aus KO empfängt.
Das Status KO Ein/Aus signalisiert ON, sobald ein Dimmwert ungleich 0 anliegt, das Absolut KO signalisiert stets die aktuelle Helligkeit (eventuell nur statisch, also nicht während eines Regelvorgangs, kommt aber auf den Dimmer an).
Über den Absolutwert Befehl wird immer der Befehl gegeben, unmittelbar die gewünschte Helligkeit auszugeben.
Wenn Blendzeiten definiert sind, wird die neue Helligkeitsstufe allmählich erreicht.

Es gibt keine Möglichkeit - jedenfalls wären mir keine Dimmer, die so etwas bieten bekannt - eine Helligkeitsstufe dynamisch vorauszuwählen.

Nun zu Deinem Problem, die Helligkeit tageszeitabhängig unterschiedlich zu gestalten:

Der einfachste Weg führt über eine Rule. Die Rule triggert, wenn der Status von OFF auf ON wechselt. Abhängig von der Zeit sendet die Rule dann den gewünschten absoluten Helligkeitswert. Gewöhnlich wird man im Dimmer als Einschalthelligkeit den niedrigeren beider Werte hinterlegen. Wenn openHAB ausgeschaltet ist, wird das Licht also in bestimmten Zeitabschnitten zu dunkel sein.
Läuft openHAB, so erfasst die Rule den Einschaltvorgang und übersteuert die Helligkeitsstufe, das Licht leuchtet in der helleren Stufe.
Die Rule muss also nur dann eingreifen, wenn die Helligkeit höher sein soll.

In openHAB wird ein Dimmer immer über ein Item dargestellt, das Item kennt die Befehle ON/OFF/INCREASE/DECREASE sowie die Zahlen 0 - 100.
Als Status sind ausschließlich die Zahlen 0 - 100 vorhanden.
Die Befehle INCREASE/DECREASE wird man nur im Ausnahmefall verwenden, warum sollte man relativ steuern, wenn man auch absolut steuern kann? Es reicht auch nicht, die Befehle an den Dimmer zu senden, denn die meisten modernen knx Dimmer sprechen ausschließlich start/stop Dimming, während openHAB sendend kein start/stop-Dimming beherrscht. Das bedeutet, dass die Helligkeit immer von <aktuelle Helligkeit> bis 100 durchlaufen wird, wenn man einmal INCREASE sendet, während bei DECREASE die Gegenrichtung bis 0 durchlaufen wird. Es ist also in den meisten Fällen nicht sinnvoll, die GA in openHAB zu hinterlegen, welche für heller/dunkler zuständig ist.

Der korrekte Trigger für eine Rule, welche sich um die Helligkeit kümmert lautet wegen des Status 0-100 also nicht "changed to ON", sondern "changed from 0"
Geht es um die aktuelle Uhrzeit, ist es oftmals einfacher, den Wert anders als als Zeit darzustellen, z.B. now.getHour liefert de Stundenanteil einer Digitalanzeige, also beispielsweise die Zahl 16, in der Zeit von 16:00:00 Uhr bis 16:59:59.999 Uhr, aber ab 17:00:00 Uhr springt dieser Wert dann schlagartig auf 17 um. Willst Du also zwischen 6 Uhr und 23 Uhr helleres Licht haben, reicht ein doppelter Vergleich:

Code: Alles auswählen

if(now.getHour > 5 && now.getHour < 23)
Das funktioniert in Blockly genauso, aber Text ist nun mal wesentlich effizienter und benötigt keine Screenshots...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Antworten