Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Skript reagiert plötzlich anders

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Skript reagiert plötzlich anders

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

      Guten Morgen,

      leider kann ich das Thema nun doch noch nicht zu den Akten legen.
      Heute morgen, als ich das Haus verlassen wollte, ist wieder die Alarmanlage angesprungen.

      Im Log konnte ich lesen, dass der "anwesend" als false erkannt wird. Soweit so verständlich aber der Datenpunkt "0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy" ist in den Objekten als "true" gesetzt.

      Gestern Abend siehe Log von 19:48 Uhr war anwesend noch true. Seit dem hatte auch niemand mehr das Haus verlassen.

      Habt ihr eine Idee, woran es hier jetzt scheitert bzw. was das Problem ist?

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @Chrille1507 last edited by Asgothian

        @Chrille1507
        Ich habe keine genaue Vorstellung von dem Problem, aber eine Option wie du das ggf. umgehen kannst. Ich gehe aktuell davon aus das es am Zeitverhalten liegt, sprich das die Datenpunkte in einer zeitlich ungünstigen Folge gesetzt werden.

        Versuch mal bitte folgendes:

        Der Vollständigkeit halber noch das Skript:
        
        ///////////////////////////////////
        ///                             ///
        /// Auslösung der Alarmanlage   ///
        /// Stand: 02.11.2020           ///
        ///                             ///
        ///////////////////////////////////
         
        on({"0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy", change: "ne"}, function(obj) {
          log('anwesend was changed to ' + obj.state.val + ' source = ' + obj.state.from);
        });
        
        on({id: "0_userdata.0.Türkontakte.alle_Türen_geschlossen", change:"ne"}, function(obj) {
            log('geschlossen: ' + obj.state.val + ' Typ: ' + typeof obj.state.val);
            let anw = getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val;
            log('anwesend: ' + anw + ' Typ: ' + typeof anw);
            if (obj.state.val==false && anw==false) 
            {
                setState("0_userdata.0.Alarmanlage.Alarmanlage_ausgelöst", true);
                sendTo('telegram.0', {text: "Achtung die Alarmanlage hat ausgelöst"});
            }  
        });
         
        

        Warum die Anpassungen ?

        • bei dem Wechsel vom erneuten Datenpunkt holen zum Prüfen des Triggerwertes geht es um das Ausschliessen einer sogenannten "race condition" - Der Thread in dem der Datenpunkt abgefragt wird und der in dem er geändert wird laufen nicht synchron. Daher kann es durchaus vorkommen das beim erneuten holen des Datenpunktwertes der Wert der zur Aktivierung des Triggers geführt hat noch nicht geschrieben ist.
        • bei dem Wechsel vom erneuten holen des Datenpunktes zur Variable "anw" geht es primär darum Ressourcen zu schonen. Du kannst hinterher einfach das 'log' auskommentieren und den rest so lassen.
        • der zusätzliche Trigger überwacht wer wann den Anwesend Datenpunkt umschreibt.

        A.

        C 1 Reply Last reply Reply Quote 0
        • C
          Chrille1507 @Asgothian last edited by

          @Asgothian Vielen Dank für die schnelle Rückmeldung.
          Ich werde das gleich als erstes heute testen.

          1 Reply Last reply Reply Quote 0
          • C
            Chrille1507 last edited by

            Guten Morgen,
            neuer Tag gleiche Probleme.

            Ich hatte gestern mein Skript soweit geändert, wie @Asgothian es vorgeschlagen hat.
            Heute Morgen gab es dann wieder das Problem, dass die Alarmanlage ausgelöst wurde.

            Anbei der Auszug aus dem Log:

            2020-11-04 07:10:45.504 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: false Typ: boolean
            2020-11-04 07:10:45.555 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: true Typ: boolean
            
            2020-11-04 07:11:05.911 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: true Typ: boolean
            2020-11-04 07:11:05.912 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: true Typ: boolean
            
            2020-11-04 07:30:21.443 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: false Typ: boolean
            2020-11-04 07:30:21.467 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
            
            2020-11-04 07:30:45.699 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: true Typ: boolean
            2020-11-04 07:30:45.700 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
            
            2020-11-04 07:31:52.401 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: false Typ: boolean
            2020-11-04 07:31:52.402 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
            
            2020-11-04 07:32:17.581 - info: javascript.0 (12613) Stop script script.js.Alarmanlage.Alarmanlage_ausgelöst
            

            Das ist doch zum verzweifeln. Was mache ich nur falsch?

            Asgothian 1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Chrille1507 last edited by

              @Chrille1507

              • poste bitte mal das Skript wie es jetzt ist
              • hast du geschaut ob es Meldungen von dem zusätzlichen Trigger gibt ?

              A.

              C 1 Reply Last reply Reply Quote 0
              • C
                Chrille1507 @Asgothian last edited by Chrille1507

                @Asgothian
                Anbei das Skript:

                ///////////////////////////////////
                ///                             ///
                /// Auslösung der Alarmanlage   ///
                /// Stand: 02.11.2020           ///
                ///                             ///
                ///////////////////////////////////
                
                on({id: "0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy", change:"ne"}, function(obj) {
                    log('anwesend was changed to ' + obj.state.val + ' source = ' + obj.state.from);
                });
                
                on({id: "0_userdata.0.Türkontakte.alle_Türen_geschlossen", change:"ne"}, function(obj) {
                    log('geschlossen: ' + obj.state.val + ' Typ: ' + typeof obj.state.val);
                    let anw = getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val;
                    log('anwesend: ' + anw + ' Typ: ' + typeof anw);
                    if (obj.state.val==false && anw==false) 
                    {
                        setState("0_userdata.0.Alarmanlage.Alarmanlage_ausgelöst", true);
                        sendTo('telegram.0', {text: "Achtung die Alarmanlage hat ausgelöst"});
                    }  
                });
                
                

                Nein, von denen gibt es keine Meldungen. Also wir tatsächlich das Haus verlassen haben, ca. 07.35 Uhr hat der Rest (Licht aus, Steckdosen aus etc.), der sich auf den Datenpunkt "0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy" bezieht aber funktioniert.

                Kleiner Nachtrag, einen Log über den Datenpunkt "0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy" konnte er auch nicht erzeugen, weil ich Idiot ja das Skript beendet hatte, bevor ich gegangen bin. Bin ich blöd....

                Asgothian 1 Reply Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @Chrille1507 last edited by

                  @Chrille1507 Da ist was Faul. Der Datenpunkt hat sich geändert, dementsprechend muss es eigentlich auch eine Meldung für die Änderung geben.

                  2020-11-04 07:11:05.911 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: true Typ: boolean
                  2020-11-04 07:11:05.912 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: true Typ: boolean
                   
                  2020-11-04 07:30:21.443 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: false Typ: boolean
                  2020-11-04 07:30:21.467 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                  
                  

                  @Chrille1507 sagte in Skript reagiert plötzlich anders:

                  Kleiner Nachtrag, einen Log über den Datenpunkt "0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy" konnte er auch nicht erzeugen, weil ich Idiot ja das Skript beendet hatte, bevor ich gegangen bin. Bin ich blöd....

                  Zwischen den beiden oben angegebenen Zeilen muss sich der Datenpunkt geändert haben. Dementsprechend muss es auch einen Eintrag dazu im Log geben. Kannst du bitte mal auf der Log-Seite im Log schauen, nicht im am JS Editor angehängten Log ?

                  Zusätzlich hilft es wenn du auch vor dem SendTo einen log-Eintrag erzeugst, damit du rein im Log feststellen kannst das er da lang gegangen ist.

                  A.

                  C 1 Reply Last reply Reply Quote 0
                  • C
                    Chrille1507 @Asgothian last edited by Chrille1507

                    @Asgothian

                    Ich habe alle Daten aus dem Log und da hat gibt es keinen Eintrag. Ich bin wirklich jeden einzelnen Punkt (ich muss den Radar2-Adapter deaktivieren 🙄 ) durchgegangen.

                    Ich habe jetzt noch ein Log in meine Anwesenheitserfassung eingebaut. Das Skript sieht so aus

                    //Anwesenheit Peggy oder Christian
                    on({id: beideanwesenheit, change:"ne"}, function(obj) {
                        if (getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Peggy").val==true || getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian").val==true)
                        {
                            setState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy", true);
                            log('AnwesenheitBeide geändert auf ' + getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val);
                        } else {
                            setState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy", false);
                            log('AnwesenheitBeide geändert auf ' + getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val);
                            sendTo('telegram.0', {text: "Es ist niemand mehr zu Hause"});
                        };
                        log('AnwesenheitBeide geändert auf ' + getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val);
                    });
                    

                    Und jetzt auch mit den Anwesenheiten gespielt. Dazu gibt das Log folgendes aus:

                    
                    2020-11-04 09:10:10.556 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: false Typ: boolean
                    2020-11-04 09:10:10.558 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                    2020-11-04 09:10:10.558 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                    2020-11-04 09:10:12.559 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: true Typ: boolean
                    2020-11-04 09:10:12.559 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                    
                    2020-11-04 09:10:32.531 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf false
                    2020-11-04 09:10:32.532 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf false
                    2020-11-04 09:10:32.538 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend was changed to true source = system.adapter.javascript.0
                    
                    2020-11-04 09:10:49.046 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf true
                    2020-11-04 09:10:49.047 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf true
                    2020-11-04 09:10:49.108 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend was changed to false source = system.adapter.javascript.0
                    
                    2020-11-04 09:11:03.046 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf false
                    2020-11-04 09:11:03.047 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf false
                    2020-11-04 09:11:03.098 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend was changed to true source = system.adapter.javascript.0
                    
                    2020-11-04 09:11:34.032 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf true
                    2020-11-04 09:11:34.034 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf true
                    2020-11-04 09:11:34.128 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend was changed to false source = system.adapter.javascript.0
                    
                    2020-11-04 09:11:57.086 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf false
                    2020-11-04 09:11:57.086 - info: javascript.0 (12613) script.js.Alarmanlage.An-_und_Abwesenheit.Anwesenheiten: AnwesenheitBeide geändert auf false
                    2020-11-04 09:11:57.138 - info: javascript.0 (12613) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend was changed to true source = system.adapter.javascript.0
                    
                    

                    Hier muss der Fehler stecken, ich konnte ihn aber bisher nicht finden.

                    1 Reply Last reply Reply Quote 0
                    • C
                      Chrille1507 last edited by

                      Ich habe nochmal am Skript für die Anwesenheit gearbeitet und werde jetzt erstmal folgende Einstellung testen:

                      //Anwesenheit Peggy oder Christian
                      on({id: beideanwesenheit, change:"ne"}, function(obj) {
                          let anwP = getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Peggy").val;
                          let anwC = getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian").val;
                          if (anwP==true || anwC==true)
                          {
                              setState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy", true);
                              log('AnwesenheitBeide geändert auf ' + '"' + getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val + '"');
                          } else {
                              setState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy", false);
                              log('AnwesenheitBeide geändert auf ' + '"' + getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val + '"');
                              sendTo('telegram.0', {text: "Es ist niemand mehr zu Hause"});
                          };
                          log('AnwesenheitBeide geändert auf ' + '"' + getState("0_userdata.0.Alarmanlage.Anwesenheit_Übersicht.Anwesenheit_Christian_und_Peggy").val + '"');
                      });
                      
                      1 Reply Last reply Reply Quote 0
                      • C
                        Chrille1507 last edited by

                        Kleines Update. Das Problem besteht weiterhin.

                        javascript.0	2020-11-04 11:36:33.932	info	(28278) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                        javascript.0	2020-11-04 11:36:33.931	info	(28278) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: true Typ: boolean
                        javascript.0	2020-11-04 11:36:30.324	info	(28278) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                        javascript.0	2020-11-04 11:36:30.324	info	(28278) script.js.Alarmanlage.Alarmanlage_ausgelöst: anwesend: false Typ: boolean
                        javascript.0	2020-11-04 11:36:30.319	info	(28278) script.js.Alarmanlage.Alarmanlage_ausgelöst: geschlossen: false Typ: boolean
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        895
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        5
                        21
                        754
                        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