Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Umfassendes Alarmanlagen-Skript

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Umfassendes Alarmanlagen-Skript

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      Tirador @andreaskos last edited by Tirador

      Steuerung

      @andreaskos

      "Solche Dinge passieren, wenn von einem scharf-Zustand auf einen anderen scharf-Zustand geschaltet wird, in deinem Fall direkt von scharf extern auf scharf intern. Ein Rückesetzen wird immer nur beim Schalten auf unscharf durchgeführt (auch die Texte stimmen nur so). Ich wollte das vorerst nicht per Programmierung sperren. Jetzt mit der Möglichkeit über den Number-Datenpunkt zu schalten passiert das natürlich noch leichter. Sollte ich das Abfangen im Code? Was soll dann aber passieren?"

      Ich denke das gehört zur vernünftigen Steuerung dazu, dass solche "Zwischenzustände" nicht existieren.
      Grundsätzlich ist ein "Zurücksetzen" des Alarms ja pinzipbedingt nicht verkehrt. Technisch sollte es aber unterbunden sein, dann den Zustand auf einen anderen ALARM-Modus zu setzen. D.h. es müsste eine Fehlermeldung geben, wenn man den Modus intern/extern scharf wechselt und es existiert ein ALARM.

      Redundante Datenpunkte

      Grundsätzlich würde ich es begrüßen, wenn Du die redundanten Datenpunkte/States wieder aus dem Skript entfernst, um zusätzliche "Klarheit" zu schaffen. D.h. durch den Switch gibt es ja alle Möglichkeiten der Steuerung. die folgenden Datenpunkte könnten entfernt werden:

      2020-05-03 19_07_57-objects - ioBroker.png

      Das gilt natürlich analog für die Ausgabe-Datenpunkte. Ich sehe darin keinen Mehrwert (auch für eine VIS-Aufbereitung nicht).

      Räume/Funktionen

      Die Idee mit den Rollen/Funktionen fände ich auch Klasse. Das ermöglicht ausserdem später die Ausgaben nochmal anders aufzubereiten, d.h. an der Zuteilung der Räume und Funktionen selbst ist eine Ausgabe für VIS später möglich.
      Als Orientierung wie man das umsetzt verweise ich mal auf das Fensterskript von Pitini, welches ähnliche Optionen bietet (d.h. den Fenstern werden Funktionen und Räume zugeordnet). Das Skript stellt eine Liste der offenen Fenster als HTML-Tabelle für VIS zur Verfügung. Das könnte ich mir analog für das Alarm-Skript vorstellen, um zu erkennen welcher Sensor angeschlagen hat.

      [Vorlage] Generisches Fensteroffenskript + Vis

      1 Reply Last reply Reply Quote 0
      • andreaskos
        andreaskos last edited by andreaskos

        OK, dann versuche ich, das wechseln der Schaltzustände von scharf intern auf scharf extern (oder umgekehrt) zu verhindern. Ich würde aber dann auch ohne anstehenden Alarm den Wechsel verbieten. Der Error "Fehler bei der Scharfschaltung" sollte dann ja auch dafür verwendet werden können.

        Der Ursprung der drei boolschen Datenpunkte für die Schaltzustandseingabe- und -anzeige ist das KNX Sicherheitsmodul von ABB, mit dem ich schon oft gearbeitet hab und es damit auch liebgewonnen hab. 😉
        Ich verwende diese Datenpunkte dabei am liebsten. Der Mehrwert im Falle des ioBroker-Skripts besteht darin, dass diese zum Beispiel ganz einfach mit einer Code-Tastatur (oder sonst einer Hardware-Schaltstelle), die true/false liefert, verbunden werden können. Einfach, indem die beiden States mit einer Subscription gekoppelt werden. 2 Codes für extern und intern (d.h. jeweils ein Relais, das anzieht) - fertig.
        Genau auf diese Art könnte auch der Wunsch von @Homer-J umgesetzt werden, wo er schreibt:

        telenot Alarmanlagen die habe ich auch bei mir im Büro, die kann man ja über Chip aktivieren deaktivieren kannst du das vielleicht mit einbauen das wäre mal richtig genial.

        Ebenso verwende ich die Ausgabe-Datenpunkte, für zB true/false Status-Anzeigen. Insofern sind sie nicht tatsächlich redundant. Nur eine zusätzliche Möglichkeit für die Schaltzustandseingabe und -anzeige. Ich verwende kaum eine Visualisierung dafür.

        Was die Liste der Melder angeht, so würde ich nach meinem Gefühl eher auf einen JSON-String setzen, das ist noch universeller als HTML. Daraus kann man sich dann ja eine beliebige HTML-Struktur erstellen für seine eigene Visu.

        Danke mal wieder für die Inputs @Tirador ! - Die Arbeit geht mir also nicht aus... 😉
        LG Andreas

        1 Reply Last reply Reply Quote 0
        • andreaskos
          andreaskos last edited by andreaskos

          OK, die nächste Version ist da:

          • Die Melder werden aus den ENUMs geholt, by default von diesen:
            "Alarmanlage_Aussenhaut"
            "Alarmanlage_Innenraum"
            "Alarmanlage_Verzoegert"
          • Direktes Wechseln von einem Scharf-Zustand zu einem andern wird verhindert.
          • Instanz muss nicht eingegeben werden, sondern kommt von der Variable instance

          Nächstest ToDo: Ausgabe der ausgelösten Melder in 3 JSON-Strings, einmal alle Melder, einmal nur Außenhaut und einmal nur Innenraum-Melder.

          Homer.J. 1 Reply Last reply Reply Quote 2
          • Homer.J.
            Homer.J. @andreaskos last edited by

            @andreaskos Hallo Andreas kannst du mal bitte ein Beispiel Arrays für die Melder mit ins Script packen, hab jetzt schon einiges Probiert bekomme es aber nicht ans laufen. Danke

            Grüße

            1 Reply Last reply Reply Quote 0
            • andreaskos
              andreaskos last edited by andreaskos

              Hi! Du brauchst keine Arrays mehr anlegen im Skript, das wurde mit der letzten Version geändert.
              Einfach drei Aufzählungen anlegen. Dazu gehst du im ioBroker-Admin auf Aufzählungen. Falls die in der Auswahl links nicht angezeigt werden, dann kannst du sie einblenden.
              Dort dann die drei neuen Aufzählungen unter "Functions" (Funktionen) anlegen und die States einfügen deiner Sensoren.
              Achtung auf die Groß/Kleinschreibung bei der id!
              Hast du das gemeint?

              Homer.J. 1 Reply Last reply Reply Quote 0
              • Homer.J.
                Homer.J. @andreaskos last edited by Homer.J.

                @andreaskos
                Hab es musste nur die Funktion neu anlegen.

                Kleiner Fehler in deinem Script ist mir noch aufgefallen. Soll sicher Innenraum heißen.

                const functionIndoor = "Alarmanlage_Inneraum";
                

                Beim Bewegungsmeldern sollte doch eigentlich nur Motion Triggern oder. ?


                Fenstergriff Flur.STATE, Bewegungsmelder Flur.CURRENT_ILLUMINATION, Bewegungsmelder Flur.ILLUMINATION, Bewegungsmelder Flur.MOTION, Bewegungsmelder Flur.MOTION_DETECTION_ACTIVE, Bewegungsmelder Schlafzimmer.CURRENT_ILLUMINATION, Bewegungsmelder Schlafzimmer.ILLUMINATION, Bewegungsmelder Schlafzimmer.MOTION_DETECTION_ACTIVE, Bewegungsmelder Abstellraum.CURRENT_ILLUMINATION, Bewegungsmelder Abstellraum.ILLUMINATION, Bewegungsmelder Abstellraum.MOTION_DETECTION_ACTIVE, Bewegungsmelder Küche.CURRENT_ILLUMINATION, Bewegungsmelder Küche.ILLUMINATION, Bewegungsmelder Küche.MOTION_DETECTION_ACTIVE, Bewegungsmelder Wohnzimmer.CURRENT_ILLUMINATION, Bewegungsmelder Wohnzimmer.ILLUMINATION, Bewegungsmelder Wohnzimmer.MOTION_DETECTION_ACTIVE, Bewegungsmelder Badezimmer.CURRENT_ILLUMINATION, Bewegungsmelder Badezimmer.ILLUMINATION, Bewegungsmelder Badezimmer.PRESENCE_DETECTION_ACTIVE

                man muss die Funktion per Hand anlegen und nicht über die CCU dann geht es.

                Wieder Klasse Arbeit von dir. 👍

                1 Reply Last reply Reply Quote 0
                • andreaskos
                  andreaskos last edited by

                  Danke für dein Feedback @Homer-J !
                  Ja - klassischer Copy-Paste-Fehler, sorry. Innenraum sollte es heißen, genau.

                  1 Reply Last reply Reply Quote 0
                  • Homer.J.
                    Homer.J. @Tirador last edited by Homer.J.

                    Hi @Tirador hab jetzt meine Vis auf das Script angepasst nochmal Vielen Dank an Andreas für die Umsetzung.
                    Funktioniert hervorragend. 👍
                    Hab noch meine Pineingabe mit integriert.
                    Hier mal 2 Screenshots wie meine Vis jetzt Aussieht.
                    Sag Bescheid ob du es haben willst dann stelle ich alles hier ein.

                    Grüße
                    2020-05-05 vis.png Screenshot_2020-05-05 vis.png

                    Hier meine Alarmanlage als Vorlage.
                    Bitte die einzelnen View genau so anlegen wie die Textdatei heißen dann sollte es sofort funktionieren ansonsten alles an die eigene Struktur anpassen.
                    Voraussetzung ist das [Projekt] MDCSS v2: Material Design CSS Version 2 von Uhula.
                    Für die Pineingabe das Blocklyscript ist auch dabei und angepasst, es muss nur der vierstellige Pin im Datenpunkt PW_Auswertung eingegeben werden.

                    Viel Spaß.

                    Alarmanlage.rar

                    M sigi234 T 4 Replies Last reply Reply Quote 3
                    • M
                      MartyBr @Homer.J. last edited by

                      @Homer-J
                      Hallo @Homer-J , ich würde mich sehr über die View freuen.

                      Gruß
                      Martin

                      1 Reply Last reply Reply Quote 0
                      • sigi234
                        sigi234 Forum Testing Most Active @Homer.J. last edited by

                        @Homer-J sagte in Umfassendes Alarmanlagen-Skript:

                        Viel Spaß.
                        Alarmanlage.rar

                        Danke, wollte es auch mal testen, aber da fehlen einige Pages im Rar?

                        Homer.J. 1 Reply Last reply Reply Quote 0
                        • Homer.J.
                          Homer.J. @sigi234 last edited by Homer.J.

                          Morgen @sigi234 war mir was durchgerutscht, hab ich ergänzt sollte jetzt alles da sein.

                          sigi234 1 Reply Last reply Reply Quote 1
                          • sigi234
                            sigi234 Forum Testing Most Active @Homer.J. last edited by

                            @Homer-J sagte in Umfassendes Alarmanlagen-Skript:

                            Morgen @sigi234 war mir was durchgerutscht, hab ich ergänzt sollte jetzt alles da sein.

                            Ok, da gibt es noch einen Fehler bei der cardAlarmanlageFenster:

                            Screenshot (2408).png

                            1 Reply Last reply Reply Quote 0
                            • sigi234
                              sigi234 Forum Testing Most Active @Homer.J. last edited by

                              @Homer-J sagte in Umfassendes Alarmanlagen-Skript:

                              es muss nur der vierstellige Pin im Datenpunkt PW_Auswertung eingegeben werden.

                              Wo?

                              Homer.J. 1 Reply Last reply Reply Quote 0
                              • Homer.J.
                                Homer.J. @sigi234 last edited by Homer.J.

                                @sigi234 wo die 2054 steht dort deinen gewünschten Pin eintragen.
                                Es kann sein das ich die Fenster gruppiert habe löse diese mal auf, dann sollte es gehen.
                                Hab die Gruppierung jetzt raus genommen.

                                Screenshot_2020-05-06 javascript - ioBroker.png

                                sigi234 1 Reply Last reply Reply Quote 0
                                • sigi234
                                  sigi234 Forum Testing Most Active @Homer.J. last edited by sigi234

                                  @Homer-J sagte in Umfassendes Alarmanlagen-Skript:

                                  @sigi234 wo die 2054 steht dort deinen gewünschten Pin eintragen.
                                  Es kann sein das ich die Fenster gruppiert habe löse diese mal auf, dann sollte es gehen.
                                  Hab die Gruppierung jetzt raus genommen.

                                  Screenshot_2020-05-06 javascript - ioBroker.png

                                  wo die 2054
                                  ?

                                  Irgendwas stimmt nicht:

                                  Screenshot (2411).png

                                  Screenshot (2413)_LI.jpg

                                  Homer.J. 1 Reply Last reply Reply Quote 0
                                  • Homer.J.
                                    Homer.J. @sigi234 last edited by Homer.J.

                                    @sigi234 im Timeoutblock Pineingabe den du offen hast, hab es bei mir gerade nochmal eingefügt und läuft.

                                    sigi234 1 Reply Last reply Reply Quote 0
                                    • sigi234
                                      sigi234 Forum Testing Most Active @Homer.J. last edited by

                                      @Homer-J sagte in Umfassendes Alarmanlagen-Skript:

                                      ast, hab es bei mir gerade nochmal eingefügt und läuft.

                                      Aha, gecheckt

                                      1 Reply Last reply Reply Quote 0
                                      • andreaskos
                                        andreaskos @pix last edited by andreaskos

                                        @pix said in Umfassendes Alarmanlagen-Skript:

                                        die Ausgabe des Sensor Namens hast du über common.name schon realisiert ("Die Namen der Melder sollten gut gepflegt sein"). Es gibt aber sehr viel mehr Infos im Objekt, die man ausgeben könnte;

                                        Frage dazu: Für das feststellen der offenen Melder mit der Funktion checkDetectors wird das Array der Melder durchgearbeitet. Jedes Element des Arrays ist eine id (als String). Jede id wird geprüft mit getState(id).val, ob der Melder ausgelöst ist oder nicht.

                                        Über diese id kann ich mir das Objekt dazu holen mit getObject(id) und dort properties wie common.name etc. auslesen. Was aber sind das für properties, die du oben angegeben hast? Das sieht so HomeMatic-spezifisch aus (channelID, deviceID, etc.)? Ich bekomme hier nur Objekte, die den folgenden Aufbau haben, als Beispiel:

                                         {
                                          "type": "state",
                                          "common": {
                                            "def": false,
                                            "type": "boolean",
                                            "read": true,
                                            "write": false,
                                            "name": "Kueche grosses Fenster.SENSOR"
                                          },
                                          "native": {
                                            "CONTROL": "DOOR_SENSOR.STATE",
                                            "DEFAULT": false,
                                            "FLAGS": 1,
                                            "ID": "SENSOR",
                                            "MAX": true,
                                            "MIN": false,
                                            "OPERATIONS": 5,
                                            "TAB_ORDER": 0,
                                            "TYPE": "BOOL",
                                            "UNIT": ""
                                          },
                                          "from": "system.adapter.hm-rpc.1",
                                          "ts": 1549734551707,
                                          "_id": "hm-rpc.1.IEQ0064219.1.SENSOR",
                                          "acl": {
                                            "object": 1636,
                                            "state": 1636,
                                            "owner": "system.user.admin",
                                            "ownerGroup": "system.group.administrator"
                                          }
                                        }
                                        

                                        Komme ich von der State-id, wie sie im Array drin ist, überhaupt auf das von dir gezeigte Objekt über irgendwelche parent-Beziehungen o.ä.? Dafür bin ich zu sehr node.js-noob... 🙄

                                        Bitte um Hilfe.
                                        LG Andreas

                                        andreaskos 1 Reply Last reply Reply Quote 0
                                        • andreaskos
                                          andreaskos @andreaskos last edited by

                                          @andreaskos said in Umfassendes Alarmanlagen-Skript:

                                          Komme ich von der State-id, wie sie im Array drin ist, überhaupt auf das von dir gezeigte Objekt über irgendwelche parent-Beziehungen o.ä.?

                                          OK - moment mal, ich glaube, ich hab schon eine Lösung. Ich kann ja über die id-Struktur selbst eine oder zwei Ebenen hochsteigen und mir dann von dort über getObject properties wie den Device-Namen holen etc.

                                          1 Reply Last reply Reply Quote 0
                                          • andreaskos
                                            andreaskos last edited by

                                            Hi zusammen,

                                            ich habe jetzt drei weitere Datenpunkte hinzugefügt (die jetzt auch alle eine Rolle zugeordnet bekomen) für die Ausgabe der offenen Melder (jeweils für alle / nur Außenhaut / nur Innenraum) und für den alarmierenden Melder als String im JSON-Format.
                                            Ich habe dafür die kompletten Objekte reingeschmissen, die von ioBroker zur Verfügung gestellt werden. Siehe Beschreibung im ersten Thread bzw. das aktualisierte Skript.

                                            Ich würde - sofern es keine Fehlerbehebungen gibt - die Arbeit an diesem Skript einmal vorläufig abschließen. Ich danke euch sehr für eure Hilfe, die Inputs und die Beschäftigung mit dem Skript, auch in Verbindung mit den anderen Projekten wie der coolen Ereignisliste!

                                            Liebe Grüße,
                                            Andreas

                                            sigi234 Homer.J. 2 Replies Last reply Reply Quote 2
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            890
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript security
                                            27
                                            145
                                            21945
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo