Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Auslesen mehrerer Sensoren in EINEN Status

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Auslesen mehrerer Sensoren in EINEN Status

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      neuneu last edited by

      Hallo zusammen,

      leider habe ich zu meiner Frage bislang im Forum nichts finden können und bin neu im Thema.

      Einiges habe ich mir im Bezug auf vis bereits aneignen können, stehe allerdings vor einem Problem, welches ich momentan nicht lösen kann.

      Ich möchte den Status mehrerer Homematic Sensoren/Aktoren auslesen und einen gemeinsamen Status ausgeben. Konkret möchte ich z.B. für meine beiden Küchenfenster den aktuellen Sensorstatus (offen/geschlossen) auslesen und für den gesamten Raum den Status bestimmen. Soll heißen, gibt mind. einer der Sensoren den Status offen, soll der Status für den gesamten Raum "offen" sein. Liefern beide Sensoren den Status geschlossen, soll der Status für den gesamten Raum "geschlossen" sein.

      Mit einer Szene kann ich das nach meinem (geringen) Verständnis nicht abbilden, da hier ja ein Sensor als Trigger für weitere Aktionen dient und nicht der Status zweier Sensoren ausgelesen wird.

      Über einen kurzen Hint wäre ich sehr glücklich, um mit der vis fortfahren zu können.

      Lieben Dank und VG

      1 Reply Last reply Reply Quote 0
      • Y
        ykuendig last edited by

        Schätze Du müsstest das mit JavaScript im ScriptAdapter oder direkt im Vis machen

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo,

          ich nutze seit einigen Jahren dieses Javascript. Es tut genau, das:

          Wenn eines von mehreren Fenstern im Raum geöffnet wird, ist dessen Status maßgeblich. Wird ein weiteres Fenster weiter geöffnet (Reihenfolge: zu,[ggf. gekippt],geöffnet), wird dessen Zustand maßgeblich, usw. Jeweils das am weitesten geöffnete Fenster gibt den Status der neu erstellten Variable (State) vor.

          Bluefox war damals eine große Hilfe!

          Es ist eigentlich klar, aber ich erwähne es dennoch: Das Skript arbeitet mit Gewerken und Räumen. Die Sensoren müssen also zugeordnet sein. Ich verwende nur Homematic-Sensoren, die in der CCU den Gewerken und Räumen zugeordnet wurden.

          ! ````
          /*
          Skript zum Feststellen des Status mehrerer Fenster im Raum Küche
          Das Skript erstellt pro Raum eine Variable und meldet in Abhängigkeit vom
          Öffnungszustand aller Fensterdrehgriffkontakte RHS eine Gesamtstatus
          Der Status kann für VIS farbige Grundrisse oder die HM-OU-LED16 verwendet werden
          Pro Raum ein Skript erstellen
          Unterscheidung nach einzelnen Fenstern im Skript status_fenster_tueren
          ! erstellt: 24.10.2014 von Pix (für CCU.IO)
          portiert: 21.03.2015 mit Hilfe von Bluefox http://forum.iobroker.org/viewtopic.php?f=21&t=535&sid=c758980908bb09871b9145d463543a3b#p3653
          geändert: 22.03.2015
          06.05.2015 Array zur Bennenung des Zustands im Klartext im Log erstellt
          30.07.2015 neue Variablen Struktur Status.Raum.alleFenster
          31.08.2015 Korrektur Variablen Status (erst nach einem Monat gemerkt :()
          01.12.2015 neue Variablen Struktur Status.Raum.Fenster.alle
          */
          ! // Select and show (for debug) all sensors in "Wohnzimmer" and with type "Fenster"
          var sensors = $('channelstate.id=*.STATE(functions=Fenster)');
          ! function getCurrentState() {
          var commonState = 0;
          sensors.each(function (id) {
          if (id.indexOf('Statistik') != -1) return;
          var val = toInt(getState(id).val);
          // Find the maximum (2 - opened, 1 - tilted, 0 - closed)
          if (val > commonState) commonState = val;
          });
          return commonState;
          }
          ! // On change
          sensors.on(function(obj) {
          // if (obj.id.indexOf('Statistik') == -1) setState('Status.Wohnzimmer.Fenster.alle', getCurrentState());
          setState("javascript.0.Status.Wohnzimmer.Fenster.alle"/Status.Wohnzimmer.Fenster.alle/, getCurrentState());
          var zustand = ['offen','gekippt','geschlossen'];
          log('Status aller Wohnzimmerfenster: ' + zustand[getState('Status.Wohnzimmer.Fenster.alle').val]);
          });

          createState('Status.Wohnzimmer.Fenster.alle', getCurrentState(), {
          name: 'alle Fenster Wohnzimmer',
          type: 'number',
          min: 0,
          max: 3,
          def: 0,
          role: 'value'
          });

          ! ````
          Gruß

          Pix

          1 Reply Last reply Reply Quote 0
          • N
            neuneu last edited by

            Hi pix,

            vielen Dank für die schnelle Antwort.

            Kannst Du mir noch sagen, wo ich das Skript einbinden kann ?

            Den Adapter habe ich bereits installiert, aber bei mir fehlt in der Admin Ansicht der "Skripte" Tab.

            Lieben Dank und viele Grüße

            1 Reply Last reply Reply Quote 0
            • Y
              ykuendig last edited by

              Das kann mal passieren (weiss auch nicht wieso)

              Rechts oben hatts ein Stift-Button. Damit kann man die Bearbeitung der Reiter einschalten (und den Script Reiter wieder freigeben)

              1 Reply Last reply Reply Quote 0
              • N
                neuneu last edited by

                Hi Yves,

                prima, vielen Dank !

                1 Reply Last reply Reply Quote 0
                • N
                  neuneu last edited by

                  So, alles installiert, das Objekt dem Skript zugewiesen und in VIS über eine Boolean abgefragt.

                  Technisch funktioniert alles, nur scheint das Skript bei mir nicht richtig zu reagieren.

                  Ich habe es für meine Küche mit 2 Fenstersensoren verwendet. Es erkennt die richtige Anzahl der Sensoren und auch einen Statuswechsel. Allerdings zeigt mir das Skript bei jeder Änderung, dass alle Fenster geschlossen sind. Egal ob ich öffne oder schließe.

                  ! ` > 22:32:24.962

                  [info]

                  javascript.0 script.js.Verschluss_Kueche: registered 2 subscriptions and 0 schedules

                  22:32:27.328

                  [info]

                  javascript.0 Stop script script.js.Verschluss_Kueche

                  22:32:40.258

                  [info]

                  javascript.0 Start javascript script.js.Verschluss_Kueche

                  22:32:40.259

                  [info]

                  javascript.0 script.js.Verschluss_Kueche: registered 2 subscriptions and 0 schedules

                  22:32:58.392

                  [info]

                  javascript.0 script.js.Verschluss_Kueche: Status aller Küchenfenster: geschlossen

                  22:33:01.642

                  [info]

                  javascript.0 script.js.Verschluss_Kueche: Status aller Küchenfenster: geschlossen

                  22:33:15.888

                  [info]

                  javascript.0 script.js.Verschluss_Kueche: Status aller Küchenfenster: geschlossen

                  22:33:27.403

                  [info]

                  javascript.0 script.js.Verschluss_Kueche: Status aller Küchenfenster: geschlossen `

                  Das Skript sieht bei mir wie folgt aus :

                  ! ` > var sensors = $('channelstate.id=*.STATE(functions=Verschluß)');

                  function getCurrentState() {

                  var commonState = 0;

                  sensors.each(function (id) {

                  if (id.indexOf('Statistik') != -1) return;

                  var val = toInt(getState(id).val);

                  // Find the maximum (2 - opened, 1 - tilted, 0 - closed)

                  if (val > commonState) commonState = val;

                  });

                  return commonState;

                  }

                  // On change

                  sensors.on(function(obj) {

                  if (obj.id.indexOf('Statistik') == -1) setState('Status.Küche.Fenster.alle', getCurrentState());

                  setState("javascript.0.Status.Küche.Fenster.alle"/Status.Küche.Fenster.alle/, getCurrentState());

                  var zustand = ['offen','gekippt','geschlossen'];

                  log('Status aller Küchenfenster: ' + zustand[getState('Status.Küche.Fenster.alle').val]);

                  });

                  createState('Status.Küche.Fenster.alle', getCurrentState(), {

                  name: 'alle Fenster Küche',

                  type: 'number',

                  min: 0,

                  max: 3,

                  def: 0,

                  role: 'value'

                  }); `

                  Hat jemand einen Tipp für mich, was hier flasch läuft ?

                  VG

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  880
                  Online

                  32.1k
                  Users

                  80.7k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  1902
                  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