ioBroker – Aufzählungen für das Zählen von offenen Fenstern oder Türen verwenden

In diesem Artikel zeige ich Dir, wie Du eigene Aufzählungen in ioBroker für das Zählen von offenen Fenstern oder Türen nutzen kannst. 

Nach der Installation und Einrichtung von ioBroker verfügt die Installation bereits über eigene Aufzählungen. Diese können über den Bereich links im Menü geöffnet werden. Mit weiteren Adaptern wie z.B. Homematic werden die Aufzählungen erweitert und die Geräte bereits zugeordnet. In meiner Produktivumgebung nutze ich Homematic, eigene Sensoren über MQTT und Xiaomi über den zigbee Adapter. Aus diesem Grund habe ich mich dazu entschieden eine eigenen Aufzählung anzulegen, mit der ich den Status von offenen Fenstern und Türen besser steuern kann.

Verwendete Sensoren:

 

Im ersten Schritt wechseln wir nun in den Bereich Aufzählungen und legen dort über die Plus-Schaltfläche eine neue Aufzählung an.

 

Nach dem Klick auf die Plus-Schaltfläche wählen wir hier den Menüpunkt „Benutzerdefinierte Gruppe“ aus.

 

Im neuen Fenster können wir hier den Name der Aufzählung, oder hier Kategorie genannt, vergeben. Ich lege in diesem Schritt eine Aufzählung mit dem Namen „windowStatus“ an. Nach dem die Aufzählung gespeichert wurde, können wir direkt eine weitere mit dem Namen „doorStatus“ anlegen. Damit können wir nun den Status von Türen und Fenstern getrennt auswerten.

 

In der Übersicht der Aufzählungen sind nun zwei neue Aufzählungen (Enums…) zu finden.

 

Im nächsten Schritt müssen wir den JavaScript-Adapter neu starten, sodass die Aufzählungen neu initialisiert werden. Bei mehreren Adaptern, bitte alle JavaScript-Adapter neustarten.

 

Nach dem wir nun die Aufzählungen angelegt haben, können wir im nächsten Schritt den Datenpunkt der jeweiligen Sensoren von Türen und Fenstern der Funktion „doorStatus“ oder „windowStatus“ zuordnen. Dazu klicken wir bei dem Datenpunkt, der den aktuellen Zustand des Fensters (true=offen, false=geschlossen) speichert, in die Spalte Funktion und wählen dort unsere neue Aufzählung „doorStatus“ oder „windowStatus“ an.

 

 



 

Nach dem wir diese Zuordnung vorgenommen haben, sollten wir den jeweiligen Sensor unterhalb der Aufzählung finden. In meiner Umgebung habe ich die HomeMatic Sensoren den Datenpunkt „STATE“ verwendet. Die Zigbee Sensoren von Xiaomi laufen über den Datenpunkt „is open“.

 

Nun wechseln wir in den Bereich Skripte. Im Berech Skripte erstellen wir uns ein neues leeres JavaSkript.

Mit dem folgenden Skript-Code können wir nun die zugeordneten Sensoren aus der Auflistung auslesen. In der Schleife werden alle zugeordneten Datenpunkt ausgegeben. Somit können wir per getState() Funktion den aktuellen Zustand ermitteln.

function listEnumDevices() {
  log("Liste der Fenster und Status:");
  var windows = getObject("enum.functions.windowstatus").common.members;
  for(let i = 0; i < windows.length; i++) {
    var Status = getState(windows[i]).val;
    log(windows[i] + " " + Status);
  }
    
  log("Liste der Türen und Status:");
  var doors = getObject("enum.functions.doorstatus").common.members;
  for(let i = 0; i < doors.length; i++) {
    var Status = getState(doors[i]).val;
    log(doors[i] + " " + Status);
  }    
}

listEnumDevices();

Die Ausführung der Funktion bringt nun folgendes Ergebnis:

 

Im folgenden Skript-Code gehe ich noch einen Schritt weiter. Zum einen zähle ich die offenen Fenster und Türen und schreibe dann das Ergebnis in eigene Datenpunkte. Diese Datenpunkte nutze ich in meiner Visualisierung um damit den Zustand von geöffneten Fenstern und Türen zu visualisieren. Folgende Datenpunkte müssen in den Objekten angelegt werden:

Datenpunkte.0.StatusWindowOpenText (Zeichenfolge, Schreibzugriff)
Datenpunkte.0.StatusDoorOpenText (Zeichenfolge, Schreibzugriff)
Datenpunkte.0.StatusWindowOpen (Zahl, Schreibzugriff)
Datenpunkte.0.StatusDoorOpen (Zahl, Schreibzugriff)

 

function countOpenWindowsDoors()
{
var openWindows = 0;
var openDoors = 0;

// Fenster
var windows = getObject("enum.functions.windowstatus").common.members;
for(let i = 0; i < windows.length; i++) {
var Status = getState(windows[i]).val;
if ( Status ) { openWindows = openWindows + 1; }
}

// Türen
var doors = getObject("enum.functions.doorstatus").common.members;
for(let i = 0; i < doors.length; i++) { var Status = getState(doors[i]).val; if ( Status ) { openDoors = openDoors + 1; } } var openWindowsText = "Kein Fenster geöffnet"; var openDoorText = "Keine Tür geöffnet"; if ( openWindows > 0 ) {
openWindowsText = openWindows + " Fenster geöffnet";
}
if ( openDoors > 0 ) {
openDoorText = openDoors + " Türe(n) geöffnet";
}

setState('Datenpunkte.0.StatusWindowOpenText', openWindowsText );
setState('Datenpunkte.0.StatusDoorOpenText', openDoorText );
setState('Datenpunkte.0.StatusWindowOpen', openWindows, true );
setState('Datenpunkte.0.StatusDoorOpen', openDoors, true );
}

function registerSubscription()
{
$('state(functions=windowstatus)').on(function(obj) {
countOpenWindowsDoors();
});

$('state(functions=doorstatus)').on(function(obj) {
countOpenWindowsDoors();
});
}

registerSubscription();
countOpenWindowsDoors();

 

Bei einer Änderung eines Fenster- oder Türstatus kann über den jQuery Selektor eine on-Subscription auf die Aufzählung „windowStatus“ und „doorStatus“ eingerichtet werden um damit automatisch die aktuelle geöffneten Fenster oder Türen zu ermitteln.



In meiner Visualisierung kann ich so den Status der geöffneten Fenster und Türen darstellen. Mehr Informationen zur Visualisierung bekommst Du in meiner Artikel-Serie über die Planung und die Implementierung meiner ioBroker Visualisierung.

Mittels dieser Vorgehensweise ist es auch deutlich leichter neue Sensoren in das Smart-Home einzubinden. Ich werde in Zukunft mehr über Aufzählungen lösen, auch Beleuchtungsszenarien sind damit noch einfach und flexibler handhabbar.

 

Ich hoffe Dir gefällt der Artikel. Schreibe mir bei Fragen oder Problemen einfach einen Kommentar unter den Artikel oder eine E-Mail 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

43 Gedanken zu „ioBroker – Aufzählungen für das Zählen von offenen Fenstern oder Türen verwenden

  • Pingback:Visualisierung – Teil 4.1 – Implementierung – Datenpunkte – smarthome-tricks.de

  • 30. Oktober 2018 um 13:10
    Permalink

    Hallo!
    Ich habe bei mir die beiden Punkte wie beschrieben angelegt
    doorStatusenum.rooms.doorstatus und windowStatusenum.rooms.windowstatus
    Wen ich jetzt aber auf Datenpunkte Funktion gehe sehe ich aber doorStatus und windowStatus nicht!
    Es werden mir nur die Gewerke angezeigt die in der RaspberryMatic angelegt sind.

    Antwort
  • Pingback:Visualisierung – Teil 4.2 – Implementierung – Übersicht – smarthome-tricks.de

  • 6. November 2018 um 6:34
    Permalink

    Hallo,
    ich bin ein absuluter Neuling was Scripte betrifft, entschuldige deshabb mein Frage:
    Bei mir steht bei deinem Script „countOpenWindowsDoors“ eine Hinweismeldung in Zeile 16 und zwar „‚Status‘ is already defined“.
    Gehärt sich das so?

    Gruß
    Ja.rod

    Antwort
  • 7. November 2018 um 10:34
    Permalink

    Bin ein absoluter Anfänger im Script-Bereich. ich habe dein Script angelegt, dabei wird aber in Zeile 16 die Meldung angezeit „‚Status‘ is already defined“. Es läuft daher nicht durch. Wo liegt der Fehler?

    Über einen Tipp würde ich mich freuen.

    Gruß
    Ja.rod

    Antwort
    • 7. November 2018 um 10:41
      Permalink

      Hallo,

      hast Du den Code exakt so wie oben übernommen, das sollte so problemlos funktionieren?

      Viele Grüße,
      Matthias

      Antwort
      • 22. November 2018 um 22:32
        Permalink

        Hallo Matthias,
        ich habe das ganze nochmals von Anfang an gestartet und erstmal mit deinem Script zur Auflistung der Geräte gestartet. Hier das log, paßt schon mal nicht
        22:26:13.107 [info] javascript.0 Stop script script.js.common.listEnumDevices
        22:26:13.121 [info] javascript.0 Start javascript script.js.common.listEnumDevices
        22:26:13.121 [info] javascript.0 script.js.common.listEnumDevices: registered 0 subscriptions and 0 schedules

        Als Sensoren nutze ich einen Fenstersensor von Homematic und einen von Xiaomi.

        Gruß
        Ja.rod

        Antwort
  • 7. November 2018 um 22:22
    Permalink

    Bekomme den selben Fehler wie Jarod, in Zeite 16 sagt er mir genau das Status schon definiert wurde.

    Außerdem setzt du einfach so in all deinen Tutorials einige dinge vorraus die als Anfänger nicht selbst verständlich sind das man weiß was mit den anzufangen ist in diesem Tutorial jetzt den Code ich hab erst überlegt hau ich den jetzt irgendwie in ein Vis Teil rein oder wie.

    Und das zieht sich leider bisschen so durch durch fast alle Teile auch bei deinem Vis anfang auf einmal hast du ein Hintergrund in deine Vis implementiert schreibst aber nicht wie du das gemacht hast

    Antwort
    • 8. November 2018 um 6:35
      Permalink

      Moin Hendrik,
      danke für Deine Rückmeldung.

      Der Hinweis „Status is already defined“ ist eine Warnung im Skript, dass die Variable Status bereits definiert ist. Das kann aber nicht der Grund sein, warum das Skript nicht funktioniert. Deklarierte Variablen innerhalb von Schleifen haben ihren Gültigkeitsbereich auch nur in der deklarierten Schleife, von daher kann das hier nicht das Problem sein.

      Ich setze weiter unten im Skript voraus, dass bestimmte Datenpunkte angelegt sind, habt ihr die Datenpunkte dazu angelegt?

      Bitte schickt mir doch mal den Auszug aus dem ioBroker Log, dass wir dort den wirklichen Fehler erkennen können.

      Wenn in anderen Artikeln Vorgehensweisen unklar sind oder Wissen vorausgesetzt wird, welches nicht vorhanden ist, dann postet das bitte unter dem jeweiligen Artikel und nicht hier. Wir wollten hier nur das Thema des Artikels behandeln, da es sonst ziemlich unübersichtlich wird. Danke!

      Antwort
  • 17. Dezember 2018 um 0:24
    Permalink

    Hallo,
    ich versuche gerade deinen Code zu verstehen. Habe allerdings wenig Erfahrung mit JS und bin eher Gelegenheitsprogrammierer und versuche durch Beispiel zu lernen.
    Das meiste kann ich nachvollziehen, habe allerdings mit folgender Zeile Schwierigkeiten.
    getObject(„enum.functions.windowstatus“).common.members;
    Leider hilft mir auch die Beschreibung von „http://www.iobroker.net/docu/?page_id=5809&lang=en#getObject “ nicht weiter.
    Folgende Fragen: Wie sieht den das Objekt aus das nachher in „windows“ gespeichert wird?
    Was bewirkt „common.members“? Sind das Methoden? Woher kennst Du die? Ich finde dazu einfach keine Beschreibung etc.
    Ich hoffe die Fragen sind nicht zu dämlich.
    Ich will aber nicht einfach Code kopieren und fertig.
    Danke auf alle Fälle für Deine Mühe
    Gruß
    Thorsten

    Antwort
    • 27. Dezember 2018 um 11:12
      Permalink

      Hallo,
      mit dem Aufruf getObject(…) wird das eigentliche Objekt geholt. Über die Anweisung common.members werden nun die einzelnen Objekte der Auflistung members zurückgegeben. Common ist hier keine Methode sondern eine Eigenschaft. Ich habe die Vorgehensweise aus der Hilfe entnommen. Alternativ im iobroker Forum nochmals nachschauen, da sind auch einige Erklärungen vorhanden.

      Antwort
  • 22. Januar 2019 um 13:13
    Permalink

    Hallo Matthias,

    super Beitrag, gefällt mir gut.
    Für mein Einsatzszenario wäre es jedoch wichtig, dass die jeweils erkannten und hoch gezählten (z.B. offenen Fenster) auch namentlich ausgegeben werden. Also konkret soll in den State „openWindowsText“ nicht ein vorgegebener Text, sondern die Bezeichnungen der Fenster (mit Komma separiert) z.B. ausgegeben werden.
    Egal ob für vis oder auch als Email, mich interessiert WELCHE Fenster konkret offen sind.
    Vielleicht kannst Du ja die dazu nötigen Codezeilen noch spendieren 🙂

    Dankeschön vorab,
    Grüße
    Fabian

    Antwort
  • 24. Januar 2019 um 22:38
    Permalink

    Zuerst: Sehr gute Anleitung(en)!! Vielen Dank dafür!

    Nachdem ich jetzt einige Stunden mit meinen ersten „Gehversuchen“ in JS gemacht habe, habe ich endlich auch dieses Beispiel adaptiert und zum Laufen gebracht 🙂
    Dazu ein Hinweis: Nach der Anlage eigner Aufzählungen muss der Javascript-Adapter neu gestartet werden! Hat einige Zeit gedauert, bis ich die Ursache ergooglet hatte, warum die subscription nicht geklappt hat…
    Wäre evtl. sinnvoll, den Hinweis zu ergänzen, denn darüber werden alle stolpern, die das (ansonsten sehr gute) Tutorial Schritt für Schritt durchführen wollen…

    Antwort
  • 14. Februar 2019 um 0:05
    Permalink

    Hallo zusammen,
    leider wird mir bei der Zeile getObject(„enum.functions.windowstatus“).common.members; beim klick auf members folgende Meldung angezeigt:

    „Property ‚members‘ does not exist on type ‚StateCommon | ObjectCommon | ChannelCommon | OtherCommon‘.
    Property ‚members‘ does not exist on type ‚StateCommon‘. “

    Kann mir jemand erklären wo der Fehler liegt?
    Vielen Dank!

    Antwort
  • 14. Februar 2019 um 20:58
    Permalink

    Also erst mal danke für den Guide. Leider bekomme ich es nicht zum laufen:
    20:55:45.916 [info] javascript.0 Stop script script.js.Aufzählung.listEnumDevices
    20:55:45.932 [info] javascript.0 Start javascript script.js.Aufzählung.listEnumDevices
    20:55:45.935 [info] javascript.0 script.js.Aufzählung.listEnumDevices: registered 0 subscriptions and 0 schedules

    Trotz neustart des JS adapter.
    Interessanterweise will ich die enom function per id einfügen. Das geht aber nicht da ich die nicht finden kann im JS editor. Wenn ich unter objekten schaue sind sie aber da. Ist das normal?

    Antwort
    • 20. Februar 2019 um 6:59
      Permalink

      Hallo,
      hast Du den Code als neues JavaScript Script eingefügt und aktiviert? Stehen evtl. noch Fehler im Log?

      Antwort
  • 15. Februar 2019 um 23:27
    Permalink

    Hallo zusammen,
    ich habe mit der Zeile
    var windows = getObject(„enum.functions.windowstatus“).common.members;

    ein Problem. Es wird angezeigt Property ‚members‘ does not exist on type…

    Ich hab keine Ahnung wo ich ansetzen muss um den Fehler zu beheben.
    Vielleicht könnt ihr mir weiterhelfen.
    Gruß
    Christoph

    Antwort
    • 20. Februar 2019 um 6:55
      Permalink

      Versuche mal bitte folgenden Code:

      var windows = getObject('enum.functions.windowstatus').common.members;

      Antwort
      • 3. März 2019 um 11:12
        Permalink

        Ich habe den gleichen Hinweis wie Christoph, die Anpassung des Codes hat den Fehler aber auch nicht behoben.

        Antwort
        • 16. Mai 2019 um 13:17
          Permalink

          Auch bei mir der gleiche Fehler. Was hat es mit dem common.mnembers auf sich? Muss ich dafür noch irgend etwas anlegen? Wenn ja, wo?

          Antwort
  • 17. Februar 2019 um 10:56
    Permalink

    Hallo Leute!

    iobroker ist für mich noch recht NEU ….Ich komm leider nicht ganz zurecht.

    Datenpunkte anlegen und die Skripte im JavaSkript Editor erzeugen (wie oben) alles kein Problem.

    Doch wie lasse ich mir die Sachen im Vis darstellen? Welches Widget muss ich da nehmen?
    Und wo schriebe ich das Skript:

    $(’state(functions=windowstatus)‘).on(function(obj) {
    countOpenWindowsDoors();
    });
    $(’state(functions=doorstatus)‘).on(function(obj) {
    countOpenWindowsDoors();
    });

    hin??????

    Vielen Dank für die Hilfe und einen schönen Sonntag.

    Antwort
    • 20. Februar 2019 um 6:54
      Permalink

      Moin Carsten,

      den JavaScript-Code musst Du im Bereich der Scripts einfügen. Nicht in VIS!
      Die Datenpunkte kannst Du nun z.B. Number Widget darstellen. Dazu einfach die Object-ID auswählen 🙂

      Viele Grüße,
      Matthias

      Antwort
  • 13. März 2019 um 16:03
    Permalink

    Hallo Matthias,
    ich versuche mich hier durch deine tollen Tutorials durchzukämpfen und diese für mich zu nutzen.
    Momentan habe ich das Problem, dass ich dein Script übernommen habe, und um Lichter ergänzt habe, da ich noch auf Fenster- und Türsensoren warte.
    Leider ändert sich aber der Wert des Datenpunkts „StatusLightOpen“ nicht. Er zeigt „0%“ an und bleibt auch so, egal ob ich Lichter einschalte.
    Wo genau muss der Codeteil:
    „$(’state(functions=windowstatus)‘).on(function(obj) {
    countOpenWindowsDoors();
    });

    $(’state(functions=doorstatus)‘).on(function(obj) {
    countOpenWindowsDoors();
    }); “
    eingefügt werden? Ist das ein eigenens JS oder wird es einfach an den vorherigen Code unten angehängt?
    Ausserdem habe ich ebenfalls das Problem wie meine Vorredner mit dem Eintrag „commom.members“
    Wäre Dir unendlich dankbar, wenn Du einem Noob etwas auf die Sprünge helfen könntest.

    Danke im Voraus!

    Grüße
    Chester

    Antwort
    • 13. März 2019 um 20:42
      Permalink

      Hallo Chester,

      Du kannst den Code einfach an den bestehenden Code anfügen. Bitte prüfe die genaue Schreibweise, nicht dass hier die Anführungszeichen wie im Eintrag weiter oben falsch sind.

      Grüße,
      Matthias

      Antwort
  • 26. März 2019 um 13:25
    Permalink

    Kann man über doors[i] auch den channelName in den Datenpunkt schreiben?

    Antwort
    • 31. März 2019 um 21:15
      Permalink

      ja, ich benutze es so fuer die Fenster, name aus objectID:

      …..
      var openWindowslist =““;

      // Fenster
      var windows = getObject(‚enum.functions.windowstatus‘).common.members;
      for(let i = 0; i 0 ) {
      openWindowsText = openWindows + “ Fenster geöffnet: „+openWindowslist;

      Antwort
  • 5. Mai 2019 um 15:49
    Permalink

    Hallo zusammen,

    ich habe das gleiche Problem wie o.a.:

    In der Zeile

    > var windows = getObject(„enum.functions.windowstatus“).common.members;

    bekomme ich die Fehlermeldung

    Property ‚members‘ does not exist on type ’stateCommon | Object Common | ChannelCommon | OtherCommon‘.

    angezeigt. Hat sich die API ggf. geändert?

    lg
    Alex

    Antwort
    • 6. Mai 2019 um 6:37
      Permalink

      Moin,
      ich habe das gerade mal mit neuesten Stand in meiner Test-Umgebung geprüft und hierbei keinerlei Probleme feststellen können. Bitte prüfe ob die Aufzählung auch wirklich sauber unter „Funktions“ angelegt wurde. Kannst Du den Objekten die Funktion zuweisen? Bitte prüfe zudem die genaue Schreibweise der Id im Code.

      Antwort
  • 16. Mai 2019 um 13:52
    Permalink

    Gerade Habe ich dieses Script 1:1 übernommen. Auch ich erhalte die Fehlermeldung
    Property ‚members‘ does not exist on type ’stateCommon | Object Common | ChannelCommon | OtherCommon‘.
    Mir scheint da ist tatsächlich irgendwo der Wurm drin. Angelegt sind die Aufzählungen unter Funktionen. Ich habe ausschließlich TFK von Homematic. Muss ich noch irgendwelche Datenpunkte anlegen?

    Antwort
    • 13. Juni 2019 um 12:47
      Permalink

      Hallo,

      danke für Dein Feedback, ich habe gerade nochmals den Artikel angepasst, damit sollte es laufen. Bitte gebe mir eine kurze Rückmeldung. Danke 🙂

      Viele Grüße,
      Matthias

      Antwort
  • 23. Mai 2019 um 19:28
    Permalink

    Hallo ich habe ebenfalls dieses Problem
    In der Zeile

    var windows = getObject(„enum.functions.windowstatus“).common.members;

    bekomme ich die Fehlermeldung

    Property ‚members‘ does not exist on type ’stateCommon | Object Common | ChannelCommon | OtherCommon‘.

    angezeigt. Meine ScripEngine ist Version 4.1.12.

    lg
    Torsten

    Antwort
    • 13. Juni 2019 um 12:47
      Permalink

      Hallo,

      danke für Dein Feedback, ich habe gerade nochmals den Artikel angepasst, damit sollte es laufen. Bitte gebe mir eine kurze Rückmeldung. Danke 🙂

      Viele Grüße,
      Matthias

      Antwort
  • 8. Juni 2019 um 17:49
    Permalink

    Hallo,

    bei mir wird bei beiden Skripten ebenfalls members markiert und dieser Fehler angezeigt. Beide Skripte laufen nicht, geben in den Logs aber auch keine besonderen Fehler aus. Da bei mir andere Skripte einwandfrei laufen, scheint irgendeine Voraussetzung nicht erfüllt zu sein, die in der eigentlich tollen Beschreibung als Selbstverständlich vorausgesetzt wird. Die Frage ist nun, wo ist der Unterschied, was fehlt, was ist nicht oder noch nicht definiert?

    Ich würde das Skript schon gerne einsetzen, denn es ist, im Vergleich zu anderen Skripten und Ansätzen bei weiten nicht so groß und aufwendig und nutzt die Möglichkeiten von iobroker.

    Ich hoffe, wir finden den Grund und eine Lösung.

    Antwort
    • 13. Juni 2019 um 12:46
      Permalink

      Hallo,

      danke für Dein Feedback, ich habe gerade nochmals den Artikel angepasst, damit sollte es laufen. Bitte gebe mir eine kurze Rückmeldung. Danke 🙂

      Viele Grüße,
      Matthias

      Antwort
  • 13. Juni 2019 um 11:11
    Permalink

    Hey ho, erstmal super Guide, bis hier hin, leider.

    Ich komme gerade über den VIS Guide, wie wahrscheinlich die meisten, die am Script zum Auszählen gescheitert sind.

    Gerade dieser entscheidende Knackpunkt wurde etwas „vernachlässigt“. In den beiden Beiträgen wirken die Infos „dahingeworfen“.

    Mag vielleicht mackern auf hohem Niveau sein, doch die anderen Guides sind sehr ausführlich nach dem Prinzip klick hier, klick da.

    Der Code Bereich allerdings is einfach so: „Da is der Code. Kuck wies weiter geht!“

    Nicht falsch verstehen, ich weiss das solche Dinge wirklich sehr umfangreich und zeitaufwendig sind, doch das ist ein Hilferuf meinerseits. Ich komm nemme weiter.

    Meine Scripte sind kopiert, gespeichert.
    Einziger Fehler ist der bereits bekannte „…. common.members“ Fehler, brauche ich sicher net nochmal zu posten.
    Das Script startet auch, wirft keine auffälligen Meldungen, Mir scheint es so als würde der StatusDoorOpenText Datenpunkt einfach nicht befüllt werden.

    Danke schonmal für die Hilfe im Voraus.

    Gruß
    Maddin

    Antwort
    • 13. Juni 2019 um 12:46
      Permalink

      Hallo,

      danke für Dein Feedback, ich habe gerade nochmals den Artikel angepasst, damit sollte es laufen. Bitte gebe mir eine kurze Rückmeldung. Danke 🙂

      Viele Grüße,
      Matthias

      Antwort
      • 16. Juni 2019 um 11:57
        Permalink

        Hallo,

        sie funktionieren hier weiterhin nicht. Ich habe schon mehrfach Javaskript und sogar komplett ioBroker neu gestartet ohne einer Änderung. Das einzige was bei mir nach dem Start der Skripte ausgegeben wird, ist folgendes:

        11:54:07.072 info javascript.0 Stop script script.js.common.Visualisierung.StatusTuerFenster
        11:54:07.072 info javascript.0 Start javascript script.js.common.Visualisierung.StatusTuerFenster
        11:54:07.072 info javascript.0 script.js.common.Visualisierung.StatusTuerFenster: registered 0 subscriptions and 0 schedules

        Mehr passiert nicht. Wenn wenigstens das erste Skript laufen würde, dann wüßte ich das etwas mit den angelegten Datenpunkten nicht stimmt, aber auch das einfachere tuts „noch“ nicht.

        Ich hoffe dir fällt noch was ein.

        Thomas

        Antwort
  • 20. Juni 2019 um 16:46
    Permalink

    Hallo Matthias,

    kannst Du kurz erklären, wie das gemeint ist bzw. funktionier?
    „…Bei einer Änderung eines Fenster- oder Türstatus kann über den jQuery Selektor eine on-Subscription auf die Aufzählung „windowStatus“ und „doorStatus“ eingerichtet werden um damit automatisch die aktuelle geöffneten Fenster oder Türen zu ermitteln….“

    Danke,
    Stefan

    Antwort
  • 22. Juni 2019 um 21:29
    Permalink

    hallo, das skript funktioniert bei mir soweit fast komplett ,danke dafür schon mal.
    allerdings wenn ich einen kontakt verändere passiert zunächst nichts, erst wenn ich das javaskript neu starte werden die offenen kontakte gezählt und richtig in die datenpunkte geschrieben. Fehlt mir da noch etwas? vielleicht ist es der letzte absatz, den ich nicht verstehe bzw. heißt dass das ich noch was machen muss zum aktualisieren/zählen der kontakte oder macht dass das script automatisch?
    danke

    Antwort
  • 1. Juli 2019 um 16:03
    Permalink

    Hallo zusammen,

    danke für die Scripte, bei mir funktioniert es gut. Allerdings werden bei mir die Fenster gezählt, die geschlossen sind. Heißt, wenn alle geschlossen sind, wird angezeigt „10 Fenster geöffnet“.

    Wie kann ich den Wert „umkehren“?

    Antwort
    • 2. Juli 2019 um 12:37
      Permalink

      Hallo Klaus,

      in der Funktion countOpenWindowsDoors wird mit der folgenden Zeile geprüft ob das Fenster geöffnet ist:

      if ( Status ) { openWindows = openWindows + 1; }

      Wenn bei Dir die Objekte anders aussehen, dann einfach die Abfrage so umdrehen:

      if ( !Status ) { openWindows = openWindows + 1; }

      Viele Grüße,
      Matthias

      Antwort
  • 12. Juli 2019 um 20:54
    Permalink

    Jetzt muss ich doch nochmal nerven. Das Script zählt immer 2 Fenster zu viel. Wenn keines geöffnet ist, wird angezeigt „Es sind 2 Fenster geöffnet“.
    In den Objekten werden alle Fenster auf 1 angezeigt. Heißt alles geschlossen.

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere