Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst]Zustand invertieren, Fenster offen Script

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    906

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[gelöst]Zustand invertieren, Fenster offen Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 4 Kommentatoren 2.8k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • coyoteC Offline
    coyoteC Offline
    coyote
    Most Active
    schrieb am zuletzt editiert von
    #1

    Hallo,

    bräuchte eine Lösung für folgendes Problem:

    Ich nutze das "Fenster offen" Script von Pix, um die offenen Fenster mit Drehgriff und TFK anzeigen zu lassen.

    Jetzt habe ich jedoch seit gestern noch 3 Fenster an den Digital Eingängen eines 12/14er wired Modul hängen (hab sonst nix mehr frei :-)) Diese melden aber bei geschlossenem ReedKontakt den Zustand "true".

    Für das Script ist das natürlich schlecht, da "true = offen" ist.

    Wie könnte ich die 3 Fensterkontakte mit in das Script einbauen? Kann ich irgendwie den Zustand invertieren?

    1 Antwort Letzte Antwort
    0
    • arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      reagiere doch per Script auf den zustand des Datenpunktes und invertiere es

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      1 Antwort Letzte Antwort
      0
      • coyoteC Offline
        coyoteC Offline
        coyote
        Most Active
        schrieb am zuletzt editiert von
        #3

        Naja, glaube so einfach ist es nicht.

        Das Script holt ja alle Werte vom Gewerk Fenster

        Hier mal das Script:

        /* System Zahl Fenster
        
        zählt die Fenster in allen Räumen und meldet die offenen Fenster namentlich
        Daten kommen vom Gewerk 'Fenster'
        
        erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
        05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=20#p9267
        02.12.2015 Fehler beseitigt bei Anzahl Fenster, wenn offen (Unterscheidung RHS und TFK)
                   Überprüfung des Zustandes (function fensterstatus) und Übergabe an Text
        25.01.2016 Fenster Nummer in Log korrigiert (+1)
        02.03.2016 Ansage für TTS aufbereitet
        */
        
        function fensterstatus(zustand) {
            var meldung;
            switch (zustand) {
                case 1:
                    meldung = 'RHS gekippt';
                break;
                case 2:
                    meldung = 'RHS offen';
                break;
                case true:
                    meldung = 'TFK offen';
                break;
                default:
                    meldung = 'geschlossen';
                break;
            }
            return(meldung);
        }
        
        createState('zählen_Fenster.anzahlFenster', {     // wenn benötigt: Anzahl der vorhandenen Fenster
            type: 'number',
            min: 0,
            def: 0,
            role: 'value'
        });
        createState('zählen_Fenster.anzahlFensterauf', {  // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
            type: 'number',
            min: 0,
            def: 0,
            role: 'value'
        });
        createState('zählen_Fenster.textFensterauf', {      // Anzahl der offenen Fenster und deren Namen als Variable unter Javascript.0 anlegen
            type: 'string',
            def: ' ',
            role: 'value'
        });    
        
        var cacheSelectorState  = $('channel[state.id=*.STATE](functions="Fenster")');
        
        function countFenster(obj) {
             // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
            var anzahlFenster = 0;
            var anzahlFensterauf = 0;
            var textFensterauf = [];
        
            log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);              // Info im Log, welcher Zustand sich geändert hat
        
            cacheSelectorState.each(function (id, i) {                                  // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
                var obj    = getObject(id);
                var name = getObject(id).common.name;
                var devicename = name.substring(0, name.indexOf(".STATE"));             //.state aus Text entfernen
                if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
                     ++anzahlFensterauf;
                     textFensterauf.push(devicename + ' (' + fensterstatus(status) + ')');  // Name und Zustand zum Array hinzufügen
                }                
                log('Fenster #' + (i+1) + ': ' + devicename + ' ' + fensterstatus(status)/* + ' (' + status + ' / ' + typeof status + ')'*/);
                ++anzahlFenster;                                                        // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
            }); 
        
            // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                log("Text: " + textFensterauf);
                log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster auf: " +  anzahlFensterauf);
        
            // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
            setState("zählen_Fenster.textFensterauf", textFensterauf.join(',
        '));    // Schreibt die aktuelle Namen der offenen Fenster
            setState("zählen_Fenster.anzahlFensterauf", textFensterauf.length);         // Schreibt die aktuelle Anzahl der offenen Fenster
            setState("zählen_Fenster.anzahlFenster", anzahlFenster);                    // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
        }
        
        cacheSelectorState.on(function(obj) {    // bei Zustandänderung *. STATE im Gewerk Fenster
            countFenster(obj);
        });
        
        // Variable für Ansage aufbereiten
        createState('zählen_Fenster.textFensteraufAnsage', {
            type: 'string',
            def: ' ',
            role: 'value'
        });  
        // Anzahl der Fenster, die auf sind, für Ansage aufbereitet
        var idQuelle = 'javascript.0.zählen_Fenster.textFensterauf',
            idAnsage = 'javascript.0.zählen_Fenster.textFensteraufAnsage';
        
        on(idQuelle, function (obj) {
            var text = obj.state.val;
            text = text.replace(/RHS/g, 'Drehgriff');
            text = text.replace(/TFK/g, 'Reedkontakt');
            text = (text.length > 1) ? text : 'Alle Fenster sind verschlossen';
            setState(idAnsage, text);
        });
        
        1 Antwort Letzte Antwort
        0
        • W Offline
          W Offline
          weimaraner
          schrieb am zuletzt editiert von
          #4

          Ist das mit homematic und einer ccu? Falls ja, dort kannst du -zumindest bei den Funk TFKs- einstellen, ob offen=true oder offen=false ist. Habe ich bei einem auch so gemacht.

          Grüße Andreas

          1 Antwort Letzte Antwort
          0
          • coyoteC Offline
            coyoteC Offline
            coyote
            Most Active
            schrieb am zuletzt editiert von
            #5

            Das ist korrekt, mit den TFK's geht das, aber leider nicht mit den Digital Eingängen des 12/14 Wired Moduls.

            1 Antwort Letzte Antwort
            0
            • coyoteC Offline
              coyoteC Offline
              coyote
              Most Active
              schrieb am zuletzt editiert von
              #6

              Keiner eine Idee wie ich das lösen könnte?

              Gesendet von meinem Pixel mit Tapatalk

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @coyote:

                Keiner eine Idee wie ich das lösen könnte? `
                Du kannst die Tatsache auswerten, dass die wired Geräte in einer anderen Instanz (z.B. 1) von hm-rpc sind.

                ...
                        var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
                        if(id.split('.')[1] == '1') status = !status;  // wired in Instanz hm-rpc.1 ?
                        ...
                
                

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • coyoteC Offline
                  coyoteC Offline
                  coyote
                  Most Active
                  schrieb am zuletzt editiert von
                  #8

                  Hallo paul,

                  Danke für deine Hilfe, die Idee ist an sich gar nicht schlecht, nur muss ich dann wohl doch noch etwas umverdraten, da ich einmal Kontakte an den TTL Eingängen und einmal an den anderen analog/digital Eingängen habe.

                  Muss mich wohl für eine Richtung entscheiden, was anderes bleibt mir wohl nicht oder fällt dir noch was ein wie ich es über Script lösen kann?

                  Gesendet von meinem Pixel mit Tapatalk

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    @coyote:

                    fällt dir noch was ein wie ich es über Script lösen kann? `
                    Du kannst auch noch die Kanäle auswerten:

                    ...
                            var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
                            var ch = parseInt(id.split('.')[3]);
                            if(id.split('.')[1] == '1' && ch >= 15 && ch <= 20)) status = !status;  // wired Instanz hm-rpc.1 und Kanäle 15 bis 20
                            ...
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • coyoteC Offline
                      coyoteC Offline
                      coyote
                      Most Active
                      schrieb am zuletzt editiert von
                      #10

                      Aha, na das ist ja klasse. Das sollte gehen. Und wie baue ich das jetzt in das obige Script ein, damit ich zum Schluss nur einen Javascript Datenpunkt bzww ein Array hab mit allen Fenstern?

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @coyote:

                        Und wie baue ich das jetzt in das obige Script ein, `
                        Hinter die Zeilen

                            cacheSelectorState.each(function (id, i) {                                  // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                                var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
                        
                        

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • coyoteC Offline
                          coyoteC Offline
                          coyote
                          Most Active
                          schrieb am zuletzt editiert von
                          #12

                          Ok, werde ich gleich mal testen.

                          Hab aber noch ne Frage dazu. Ich habe auf 2 Modulen die Kontakte auf unterschiedlichen und auch mal auf gleichen Kanälen bzw. auf einem Modul ist auf Kanal 15 ein Reedkontakt vom Fenster auf dem zweiten Modul ist mein Klingelsignal.

                          Das sollte aber kein Problem sein oder? Da das Script ja nur im Gewerk Fenster sucht

                          1 Antwort Letzte Antwort
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #13

                            @coyote:

                            Das sollte aber kein Problem sein oder? Da das Script ja nur im Gewerk Fenster sucht `
                            Sehe ich auch so.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Antwort Letzte Antwort
                            0
                            • coyoteC Offline
                              coyoteC Offline
                              coyote
                              Most Active
                              schrieb am zuletzt editiert von
                              #14

                              Funktioniert wie jetzt gewünscht. Danke Paul [THUMBS UP SIGN]

                              Gesendet von meinem Pixel mit Tapatalk

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              583

                              Online

                              32.6k

                              Benutzer

                              82.2k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe