Ankündigung

Einklappen
Keine Ankündigung bisher.

Hager Domovea - Tipps & Tricks (Version 1.0: TJA 450, TJ 701A)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hallo Leute,
    ich habe an meiner Rolladensteuerung einwenig rum experementiert. Wollte folgendes erreichen. Wenn der PM im Flur einen Wert < 4Lux liefert (Istwert wird zyklisch auf den Bus gesendet) sollen die Rolladen runterfahren. Das funktioniert auch soweit. Jetzt habe ich mir mal den Gruppenmonitor angeschaut und festgestellt, dass jedes mal wenn der PM den Helligkeitswert sendet, bekommt der Rolladenaktor den Auftrag die Rolladen runterzufahren. Was auch logisch ist.
    Meine Frage wäre, ob man das so programmieren kann das der Rol.aktor nur einmal den Signal bekommt?

    Kommentar


      Scrady

      Ja, ganz einfach:

      ich setze voraus, Du hast in der Domo eine Sequenz programmiert, die auf den Helligkeitswert reagiert ("bei jeder Änderung").
      Dann vergleichst Du den Helligkeitswert mit 4 Lux und fährst entsprechend die Rolläden runter.
      Merke Dir doch einfach in einer Binärvariablen (vom Typ "Wahrheitswert"), ob der Luxwert beim letzten Aufruf der Sequenz bereits unter 4 Lux war.
      Nur wenn das nicht der Fall ist, fährst Du die Rolläden.
      Du musst das mit der Variablen nur richtig managen, dann klappt das so.

      Falls Du die Steuerung nicht über die Domovea machst, melde Dich nochmal.

      Viel Erfolg,
      Jörg

      Kommentar


        HM... leider schnale ich das noch nicht so ganz was die Kosntanten und die variablen bewirken sollen. Dachte zuerst, dass man mit deren Hilfe irgenwas simulieren kann, aber ist anscheinend nicht der Fall.

        Kommentar


          Damit kann man rechnen.

          Kommentar


            Scrady

            Konstanten und Variablen funktionieren in der Domovea wie in anderen Programmiersprachen oder Skriptsprachen auch.

            Hier also mal ein kleines Konstanten- und Variablen-Tutorial:

            1.
            alle Konstanten und Variablen sind immer global, d.h. sie gelten in allen Sequenzen. Wird eine Variable in einer Sequenz verändert, so gilt die Änderung auch in den anderen Sequenzen sofern dort diese Variable ebenfalls verwendet wird.

            2.
            der Inhalt von Variablen bleibt auch nach einem Neustart der Domovea erhalten.

            3.
            Domovea Sequenzen laufen gleichzeitig, parallel zueinander ab.

            Die Variablen sind dabei nicht geschützt. Man kann zwar den Inhalt von Variablen in mehreren Sequenzen gleichzeitig auslesen, aber wenn man im gleichen Moment den Inhalt der Variable verändert, kann das zu einem Fehlerabbruch einer oder mehrerer Sequenzen führen. Es gibt Strategien, sich davor zu schützen. Wie das im Detail geht, würde hier jetzt zu weit führen.

            Mit fehlerhaften Abbrüchen von Sequenzen muss man übrigens bei der Domovea immer mal rechnen. Deshalb sollten kritische Funktionen (wie Heizungssteuerung oder Alarmanlage etc.) möglichst nicht in der Domovea programmiert werden. Zumindest sollte man die Sequenzen fehlersicher programmieren und den Fehlerfall erkennen und darauf reagieren. Aber das geht jetzt zu sehr ins Detail, dass kann ich vielleicht ein andermal genauer erläutern.

            4.
            Alle Domovea Konstanten und Variablen haben eine interne Kennung, die ihnen direkt beim Anlegen zugewiesen wird. Damit wird in Wirklichkeit in den Sequenzen gearbeitet. Benennt man später eine Konstante oder Variable um, so wird nur der Name, aber nicht die Kennung verändert. Die Umbenennung damit automatisch gleichzeitig in allen Sequenzen statt.

            Ich halte das für sehr praktisch, da man problemlos alle Konstanten und Variablen später noch umbenennen kann, ohne dabei durch jede Sequenz gehen und korrigieren zu müssen.

            5.
            wichtig: es gibt keine Möglichkeit zu sehen, in welcher Sequenz eine Konstante oder Variable verwendet wird.

            Deshalb empfehle ich unbedingt, sich ein festes Namensschema für Konstanten und Variablen zuzulegen, so dass man sofort sieht für was sie verwendet werden. Sonst kommt es bei der Verwendung in mehreren Sequenzen ganz leicht zu Verwechslungen.

            Folgendes Namensschema möchte ich empfehlen (wie man es dann macht ist jedem selbst überlassen):

            1. Konstanten = <Name der Konstante> + (<Wert> + <Einheit>) Beispiel: Grenzwert PM Flur (4 Lux)

            warum: will man die Konstante später einsetzen, sieht man auch gleich den Wert ohne nachschauen zu müssen. Änder sich mal der Wert, kann man einfach den Namen editieren, das steht dann ja gleich wieder richtig in allen Sequenzen.

            2. Variablen = <Kürzel für Sequenz> - (<Typ>) <Name der Variablen> Beispiel: RSF - (Binär) Status Rolladen hochgefahren

            Nennt man die Sequenz für die PM-Steuerung der Rolläden dann noch: "RSF - Rolladen Steuerung Flur", so ist eine eindeutige Zuordnung möglich.

            Noch etwas: Es gibt in Sequenzen oft die Notwendigkeit für lokale Hilfsvariablen, die nur für Zwischenwerte benötigt werden und keine Bedeutung mehr haben, wenn die Sequenz durchlaufen wurde. Leider kennt die Domovea keine lokalen Variablen und damit entsteht eine Flut an extern nicht genutzten Globalvariablen.

            Man kann sich hier mit einer speziellen Benennung helfen:
            Lokalvariablen benennt man zum Beispiel so: <Kürzel für Sequenz> - (<Typ>) <Var n> Beispiel: RSF - (1 Byte) Var 1
            Somit erkennt man lokale Variablen und kann sie innerhalb einer Sequenz auch mehrfach einsetzen.

            Ok, ich hoffe das hilft ein wenig weiter.

            Grüße, Jörg

            Kommentar


              Hallo Jörg,

              danke für das ausführliche Tutorial. Ich muss dich leider nochmal nerven bzgl. der Konstanten und Variablen.
              1. Die Variable setze ich in der Sequenz "Rolladen bei Dämmerung runterfahren" als Auslöser..richtig?
              2. Wie sage ich der Variablen, dass diese den Wert 1 bei Helligkeit < 4Lux bzw. Wert 0 bei Heligkeit >4Lux

              Mein Problem ist, dass ich nicht verstehe wie ich eine Konstante bzw. variable auslöse. :-(

              Kommentar


                Scrady

                Hallo,
                ich glaube bei Dir liegt noch eine ganz falsche Vorstellung über den Sinn von Variablen vor.
                Es sind erstmal nur Speicherzellen für Daten jeglicher Art, die man Setzen, Verändern und Auslesen kann.
                Das macht man immer innerhalb von Sequenzen.
                Dass man mit einer Variable auch Sequenzen auslösen kann, ist ein nur sehr selten genutzter Mechanismus.
                Am besten vergisst Du das mal zunächst.

                So, was sollte unseren „Verarbeitungsprozess“ in der Domovea denn auslösen?

                Da gibt es eigentlich nur zwei Möglichkeiten:

                1. ein neuer Helligkeitswert, der vom PM gesendet wurde
                2. eine zyklische Auslösung nach Zeit, zum Beispiel jede Minute

                In unserem Fall scheint 1. die Auslösung per neuem Datenwert die richtige Lösung zu sein, wenn der Datenwert nicht zu oft gesendet wird, also nicht schneller als alle 20 Sekunden zum Beispiel. Sonst würde unsere Domovea durch die vielen Sequenzaufrufe irgendwann überlastet und man wählt besser Aufrufmethode 2.

                Also, trage die Gruppenadresse der Helligkeitswerte als Auslöser für die neue Sequenz „RSF - Rolladen Steuerung Flur“ ein.
                Achte dabei auf den richtigen Datentyp (vermutlich 1 Byte) und setze als Auslösekriterium „bei jeder Änderung“, d.h. bei jedem neuen Datenwert wird unsere Sequenz aufgerufen.

                Dann vergleichst Du den Helligkeitswert (Gruppenadresse und erneut richtiger Datentyp) mit einer Konstante „Grenzwert PM Flur (4 Lux)“, die Du vorher angelegt hast (vom Typ 1 Byte und mit dem Datenwert „4“).

                Jetzt benötigst Du eine verschachtelte Abfrage:

                WENN der aktuelle Helligkeitswert < der Konstante ist, dann
                WENN der Rolladen bisher nicht heruntergefahren worden (vorher angelegte Variable „RSF - (Binär) Status Rolladen Flur“ vom Typ „Wahrheitswert“ steht auf „unwahr“), so setze die Variable „RSF - (Binär) Status Rolladen Flur“ auf „wahr“ und fahre den Rolladen runter.

                Im „sonst“-Zweig des ersten WENN (also Helligkeitswert nicht kleiner der Konstante) setzt Du die Variable wieder auf „unwahr“, damit der Rolladen wieder erneut gefahren wird, nachdem es dann auch mal wieder heller war.

                Damit wäre die Aufgabe prinzipiell gelöst. Die Sequenz hat in der Praxis noch Schwächen, weil der Rolladen bei ständig schwankender Helligkeit immer wieder runtergefahren wird, das könnte man noch mit einem Zeitvergleich lösen (runterfahren nur einmal jede Stunde oder was auch immer man möchte). Noch eleganter wäre es, das automatische Fahren für eine bestimmte Zeit zu blockieren, nachdem man den Rolladen manuell betätigt hat, also der Mensch Vorrang vor der Maschine hat. Aber das ginge jetzt zunächst mal zu weit und macht die Lösung nur komplizierter.

                So long,
                Jörg

                Kommentar


                  azzkikrboy


                  Zum Thema "Aktion speichern" (Caching) siehe Dokumentation:

                  img_001.jpg

                  Also, wenn man hier auf "ignorieren" stellt, wird ein erneutes Auslöse-Ereignis während der Ausführung einer
                  Sequenz nicht gespeichert, d.h. die Sequenz wird nicht gleich darauf erneut ausgelöst.

                  Das macht insofern Sinn, als man ja gerade bereits das Ereignis abarbeitet, ein erneutes Auslösen also
                  nicht notwendig ist. Anders wäre das bei einem Zähler, hier möchte man jedes Ereignis mitbekommen
                  und wählt demzufolge "Speichern".

                  Grüße,
                  ​​​​​​​Jörg

                  Kommentar


                    Wenn wir schon dabei sind, hier noch weitere Infos zum Thema "Auslösung von Sequenzen":

                    In den Auslösekriterien findet sich noch die Einstellung "kein Auslöser".

                    Was hat es damit auf sich?
                    Die Domovea Dokumentation schreibt dazu:

                    img_001.jpg

                    Nun, das ist kurz gesagt einfach falsch. Hier wurde in der Dokumentation etwas verwechselt:

                    Einen "Auslöser, der bei jeder Änderung des Eigenschaftswertes gestartet wird" gibt es eigentlich gar nicht.
                    Es gibt aber ein Auslösekriterium, das heisst "bei jeder Änderung", löst aber in Wirklichkeit nicht bei einer Änderung, sondern bei jedem Ereignis, also jedem beliebigen Datenpaket auf der angegebenen Gruppenadresse aus. Dabei ist es egal, ob sich zum Beispiel "0" und "1" abwechseln, oder mehrere "1"-en nacheinander empfangen werden, es löst einfach bei jedem Datenpaket aus. Daher wäre der Name "bei jedem Ereignis" wohl passender.

                    img_002.jpg
                    Nun, zurück zu der Einstellung "Kein Auslöser". Die hat tatsächlich eine sinnvolle Bedeutung:

                    Nehmen wir an, wir haben einen Präsenzmelder mit zwei Ausgängen:
                    1. der Helligkeit im Raum als 2-Byte Wert (Lux) sendet Werte von 0 bis 65535
                    2. dem Bewegungsauslöser als 1-Bit Wert (Alarm) sendet immer eine "1" bei Erkennung einer Bewegung

                    Folgende Aufgabe soll die Domovea dabei durchführen:
                    - schalte das Licht im Raum ein, wenn der Helligkeitswert im Raum < 50 Lux ist und eine Bewegung erkannt wird (ich ignoriere mal, dass ein Bewegungsmelder so eine Bedingung selbst abfragen kann, es geht hier nur um ein anschauliches Beispiel).

                    Man erstellt eine Domovea-Sequenz mit zwei Auslösekriterien:
                    1. Gruppenadresse Helligkeit (2-Byte Zahl) < 50 Lux
                    UND
                    2. Gruppenadresse Bewegungsauslösung (Wahrheitswert) = "Wahr"

                    In der Sequenz schaltet man dann das Licht ein.

                    Das funktioniert in einem ersten Versuch soweit auch schon mal.
                    Dummerweise schaltet sich später das Licht aber auch ein, wenn nur die Helligkeit kleiner 50 Lux wird, ohne dass jemand sich im Raum befindet.

                    Warum?
                    Solange der Bewegungsauslöser nur eine "1" sendet, gilt die erste Bedingung als erfüllt.
                    Die zweite Bedingung ist zudem erfüllt, wenn die Helligkeit < 50 Lux wird.

                    Beide Bedingungen funktionieren aber auch als aktive Auslöser, d.h. auch ein Helligkeits-Datenpaket kann die Sequenz auslösen. Und wenn vorher eine "1" bei der Bewegungsbedingung empfangen wurde (und nicht wieder durch eine "0" gelöscht), so gelten beide Kriterien als erfüllt und die Sequenz wird gestartet.

                    Hier kommt jetzt die Einstellung "kein Auslöser" ins Spiel:
                    Hiermit kann man die Auslösung der Sequenz für ein Kriterium (hier das Helligkeits-Signal) unterdrücken, d.h. dieser Eintrag löst die Sequenz nicht aus, gilt aber nach wie vor als Bedingung für eine Auslösung.

                    img_003.jpg

                    Zum Abschluss noch eine Information:

                    Liegen für eine abgefragte Gruppenadresse noch keine Daten vor (zum Beispiel wurde das Bewegungs-Ereignis noch nicht ausgelöst), so fragt die Domovea über den Bus nach dem aktuellen Wert. Deshalb sollte man darauf achten, dass solche Fragen auch beantwortet werden können (gegebenenfalls auch das L-Flag bei einem Kommunikationsobjekt setzen).

                    Die Domovea hört permament alles auf dem Bus mit und speichert die aktuellen Werte eine Zeitlang, damit nicht ständig Rückfrage gehalten werden muss. Nach einiger Zeit jedoch (20 Minuten?) werden die gespeicherten Werte verworfen.

                    Wichtig ist, dass die Datentypen genau stimmen. Erwartet die Domovea einen speziellen Datentyp (zum Beispiel 2-Byte) und kommt vom Bus etwas anderes, so wird die Sequenz *nicht* ausgeführt. Diese Fehler sind recht schwer zu entdecken, vor allem wenn der falsche Datentyp nicht von jeder Quelle falsch gesendet wird.

                    Grüße,
                    Jörg

                    Kommentar


                      You do not have permission to view this gallery.
                      This gallery has 2 photos.

                      Kommentar


                        Domovea Pro mit neuer Hard und Software. IoT und Accessgateway ist integriert. Erscheint im September Preis Wie gehabt.
                        Das Accessgate ist zur Einbindung der Elcom Sprechanlagen.
                        Zuletzt geändert von jurwa; 18.03.2018, 20:11.

                        Kommentar


                          jurwa

                          Prima, Danke für die Info.

                          Läuft die neue Software auch auf der "alten" Domovea? Das war ja immer versprochen worden.
                          Lassen sich ansonsten die Konfigurationen der "alten" Domovea in der Pro weiterverwenden?

                          Falls jemand auf der L+B danach fragen könnte, wäre prima!

                          Grüße,
                          Jörg

                          Kommentar


                            Software benötigt neue Hardware. Dies war auch schon immer die Aussage die ich bekam. Es wird auch versucht die Konfigurationsdaten übernehmen zu können. Szenen und Logiken werden nicht übernommen.

                            Kommentar


                              Die Livevorstellung war ein wenig kurz um wirklich viel sehen zu können. Die Oberflächengestaltung soll jedoch sehr viel flexibler sein. Ich werde mir jedenfalls eine bestellen sobald verfügbar. Das Domoveaportal gibt es hierfür nicht mehr. Verschlüsselung zum Endgerät über VPN. Es gibt jedoch hier die Möglichkeit intern(zu Hause) und extern zu unterscheiden
                              Zuletzt geändert von jurwa; 18.03.2018, 20:10.

                              Kommentar


                                Aber sollte das Accessgateway dann nicht auch integriert sein? Also ein kompaktes Gerät ? Oder hab ich mich da verhört?

                                Kommentar

                                Lädt...
                                X