Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [erledigt] Drwopdown mit Änderung Datenpunkt?

    NEWS

    • Monatsrückblick – September 2025

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

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

    [erledigt] Drwopdown mit Änderung Datenpunkt?

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

      ich versuche vergeblich, ein Dropdown einzufügen, welches bei Auswahl im Datenpunkt der Auswahl das aktuelle Datum bzw Date.now() setzt

      also Dropdown öffnen, Gerät auswählen und dem Datenpunkt wird akt. Datum gesetzt

      Zweck: Batteriewechsel einfach registrieren und Laufzeit 'Nullen' (mit so einem Dropdown könnte man später noch viele andere Dinge vereinfachen)

      hat da jemand eine Lösung?

      das script im Spoiler erzeugt die Datenpunkte bzw. wertet sie aus, ist aus einem fremden script entstanden und wurde von mir stark abgewandelt, darin unsinniges darf auch gerne bemängelt werden 😄

      Nachtrag:

      oder behelfsweise würde es auch genügen, eine variable Liste zu haben (welche per script gefüllt wird) und die Einträge anklickbar, bei klick dann Datenpunkt ändern, evtl im script bereits eine Art link dafür zufügen oder ähnliches?

      (möglicherweise einfacher zu realisieren?)

      ! var sensoren=['channel[state.id=.LOWBAT_ALARM]','channel[state.id=.LOW_BAT]','channel[state.id=.batterylow]'];
      ! //
      ! function addDeviceCounter() {
      ! //Total amount of devices found by selector
      ! var state_total = 'deviceCounter.lowbat.total';
      ! createState(state_total, 0);
      ! //List of devices that match condition
      ! var state_list = 'deviceCounter.lowbat.list';
      ! createState(state_list, "");
      ! var state_list2 = 'deviceCounter.lowbat.list2';
      ! createState(state_list2, "");
      ! //Number of devices that match condition
      ! var state_counter = 'deviceCounter.lowbat.leer';
      ! createState(state_counter, 0);
      ! var d_count2 = 0;
      ! var d_list2 = [];
      ! var d_list3 = [];
      ! function countDevs2() {
      ! d_count2 = 0;
      ! d_list2 = [];
      ! d_list3 = [];
      ! for (i = 0; i < sensoren.length; i++) {
      ! var d2=ea(sensoren__);
      ! d_count2+=d2[0];
      ! d_list2=d_list2.concat(d2[1]);
      ! d_list3=d_list3.concat(d2[2]);
      ! }
      ! d_list3.sort();
      ! log("check lowbat (" + d_count2 + "): " + d_list2);
      ! setState(state_list, d_list2.join('
      '));
      ! var html="";
      ! html=html+"";
      ! for(var i=0;i <d_list3.length;i++){<br>var teile=d_list3__.split(",");
      ! var num=("0" + (i+1)).slice(-2)
      ! html=html+"</d_list3.length;i++){<br>";
      ! }
      ! html=html+"__
      ! | Name/Gerät | Batterie | Tage |
      | "+num+" "+teile[0]+" | "+teile[1]+" | "+teile[2]+" |
      ! __";
      ! //setState(state_list2, d_list3.join('
      '));
      ! setState(state_list2, html);
      ! setState(state_counter, d_list2.length);
      ! setState(state_total, d_count2);
      ! }
      ! function ea(sensor){
      ! var d_count = 0;
      ! var d_list = [];
      ! var d_list_b = [];
      ! $(sensor).each(function(id,i) {
      ! ++d_count;
      ! var parentChannelId = id.slice(id.lastIndexOf("."));
      ! var parentDevicelId = id.split(".").slice(0,-2).join(".");
      ! if (parentDevicelId==="fritzdect.0") {
      ! parentDevicelId = id.split(".").slice(0,-1).join(".");
      ! }
      ! //log("Setting Open: "+parentDevicelId);
      ! var deviceObject = getObject(parentDevicelId);
      ! var name=deviceObject.common.name.replace(/ /g, '_');
      ! if (!'deviceCounter.bat_wechsel.'+name) {
      ! createState('deviceCounter.bat_wechsel.'+name, Date.now());
      ! } else if (getState('deviceCounter.bat_wechsel.'+name).val==="") {
      ! setState('deviceCounter.bat_wechsel.'+name,Date.now());
      ! }
      ! var wechsel=getState('deviceCounter.bat_wechsel.'+name).val;
      ! var oneDay = 24
      60601000; // hoursminutesseconds*milliseconds
      ! var diffDays = Math.round (Math.abs(Date.now() - wechsel))/(oneDay);
      ! var zustand ="ok";
      ! if(id && getState(id).val && getState(id).val !=="0") {
      ! d_list.push(deviceObject.common.name);
      ! zustand ="leer";
      ! }
      ! d_list_b.push(deviceObject.common.name+", "+zustand+','+diffDays.toFixed(0));
      ! });
      ! return [d_count,d_list,d_list_b];
      ! }
      ! //Re-evaluate when a device status changes
      ! $('channel[state.id=*BAT]').on(function (obj) {
      ! countDevs2();
      ! });
      ! $('channel[state.id=*batterylow]').on(function (obj) {
      ! countDevs2();
      ! });
      ! //Re-evaluate each hour
      ! schedule("11 */6 * * *", countDevs2);
      ! //Evaluate for the first time
      ! countDevs2();
      ! }
      ! addDeviceCounter();____

      1 Reply Last reply Reply Quote 0
      • A
        alka last edited by

        habe nun das hier gefunden

        viewtopic.php?f=30&t=4483#p43640

        und angepastt umgesetzt

        dropdown lässt sich passen befüllen, Auswahl funktioniert und wird im anderen Feld angezeigt

        wie jedoch kann ich eine Aktion, das setzen eines Datenpunktes direkt oder per JS bewirken?

        den teil habe ich nicht verstanden - hoffe es findet sich noch jemand der helfen kann und mag

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

          Zeig mal wie dein code bisher aussieht oder ist das oben der aktuelle Stand?

          Noch ne kleine Anmerkung wenn du den code in die "Code-Tags" schreibst lässt sich das leichter lesen.

          1 Reply Last reply Reply Quote 0
          • A
            alka last edited by

            auch wenn es dafür unerheblich ist, code angehängt

            code für die Reaktion per vis existiert ja nicht - weil ich noch nichts an Datenpunkt oder js übergeben kann

            der code oben generiert mir nur die Listen, dropdown kann ich wahlweise mit allen oder leere Batterien befüllen

            habe es eben mal mit einem Input-Feld probiert, aber ich kann dieses zwar ebenso aus der Liste füllen aber dann nicht einen Datenpunkt setzen

            was mir fehlt ist eigentlich nur, nach Auswahl aus der Liste einen datenpunkt zu setzen (weil ich ja nicht Quelle UND Ziel einstellen kann)

            meine Vorstellung: nach Auswahl aus der Liste setze ich Datenpunkt xxx.xx.vis_auswahl

            diesen kann ich dann auf Änderung abfragen, code ausführen und leeren

            (aus dem gewählten Listeneintrag würde der Datenpunktname extrahiert werden, das ist alles kein Problem)

            es fehlt mir also einzig und allein, wenn ich in der dropdown etwas auswähle, diese Auswahl in einen Datenpunkt zu schreiben

            edit: Bild angehängt, evtl ist's dann deutlicher? die Auswahl möchte ich in einen Datenpunkt schreiben

            ![](</s><ATTACHMENT 8584_2018-09-09_114900.jpg )[attachment=0]~~2018-09-09_114900.jpg[/attachment]" />

            `[spoiler]
            var sensoren=['channel[state.id=*.LOWBAT_ALARM]','channel[state.id=*.LOW_BAT]','channel[state.id=*.batterylow]'];
            //
            function addDeviceCounter() {
                //Total amount of devices found by selector
                var state_total = 'deviceCounter.lowbat.total';
                createState(state_total, 0);
                var state_vlist = 'deviceCounter.lowbat.vis_list';
                createState(state_vlist);
                //List of devices that match condition
                var state_list = 'deviceCounter.lowbat.list';
                createState(state_list, "");
                var state_list2 = 'deviceCounter.lowbat.list2';
                createState(state_list2, "");
            
                //Number of devices that match condition
                var state_counter = 'deviceCounter.lowbat.leer';
                createState(state_counter, 0);
            
                var d_count2 = 0;
                var d_list2  = [];
                var d_list3  = [];
                var vis_list = "";
                function countDevs2() {
                    d_count2 = 0;
                    d_list2  = [];
                    d_list3  = [];
                    vis_list = "";
                    for (i = 0; i < sensoren.length; i++) {
                        var d2=ea(sensoren[i]);
                        d_count2+=d2[0];
                        d_list2=d_list2.concat(d2[1]);
                        d_list3=d_list3.concat(d2[2]);
                    }
                    d_list3.sort();
                    log("check lowbat (" + d_count2 + "): " + d_list2);
                    setState(state_list,     d_list2.join('
            '));
            
                    var html="";
                    //html=html+"Name/GerätBatterieTage";
            
                    for(var i=0;i<d_list3.length;i++){ var/teile="d_list3[i].split(&quot;,&quot;);" num="(&quot;0&quot;" +/(i+1)).slice(-2);/if/(teile[1].replace(/g,/'')/!="=" "ok")/{/vis_list+="num+&quot;" "+teile[0]+"/("+teile[2]+"/tage);";/}/html="html+&quot;<tr">"+num+" "+teile[0]+""+teile[1]+""+teile[2]+"";
                       html+=num+" "+teile[0]+" "+teile[1]+" ("+teile[2]+" Tage);";
                    }
                    //html=html+"";
                    //setState(state_list2,     d_list3.join('
            '));
                    setState(state_list2, html);
                    setState(state_counter,  d_list2.length);
                    setState(state_total,    d_count2); 
                    setState(state_vlist,    vis_list);
                }
            
                function ea(sensor){
                    var d_count = 0;
                    var d_list  = [];
                    var d_list_b  = [];
                    $(sensor).each(function(id,i) {
                        ++d_count;
                        var parentChannelId = id.slice(id.lastIndexOf("."));
                        var parentDevicelId = id.split(".").slice(0,-2).join(".");
                        if (parentDevicelId==="fritzdect.0") {
                           parentDevicelId = id.split(".").slice(0,-1).join("."); 
                        }
                        //log("Setting Open: "+parentDevicelId);
                        var deviceObject = getObject(parentDevicelId);
                        var name=deviceObject.common.name.replace(/ /g, '_');
            
                        if (!'deviceCounter.bat_wechsel.'+name) {
                            createState('deviceCounter.bat_wechsel.'+name, Date.now());
                        } else if (getState('deviceCounter.bat_wechsel.'+name).val==="") {
                            setState('deviceCounter.bat_wechsel.'+name,Date.now());
                        }
                        var wechsel=getState('deviceCounter.bat_wechsel.'+name).val;
                        var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
                        var diffDays = Math.round (Math.abs(Date.now() - wechsel))/(oneDay);
            
                        var zustand ="ok";
                        if(id && getState(id).val && getState(id).val !=="0") {
                            d_list.push(deviceObject.common.name);
                            zustand ="leer";
            
                        }
                        d_list_b.push(deviceObject.common.name+", "+zustand+','+diffDays.toFixed(0));
                    });
                    return [d_count,d_list,d_list_b];
                }
            
                //Re-evaluate when a device status changes
                $('channel[state.id=*BAT]').on(function (obj) {
                    countDevs2();
                });
                $('channel[state.id=*batterylow]').on(function (obj) {
                    countDevs2();
                });
                //Re-evaluate each hour
                schedule("11 */6 * * *", countDevs2);
            
                //Evaluate for the first time
                countDevs2();
            }
            
            addDeviceCounter();</d_list3.length;i++){>`[/i][/i][/spoiler]
            ```~~
            1 Reply Last reply Reply Quote 0
            • A
              alka last edited by

              nicht das ich es merkwürdig finde, wenn die gesamte Hilfe aus 'zeig mal deinen code' besteht

              einige Stunden try and error bringen auch Ergebnisse, sicher wollte man mir nur den Lerneffekt vertiefen 😄

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

                @alka:

                nicht das ich es merkwürdig finde, wenn die gesamte Hilfe aus 'zeig mal deinen code' besteht

                einige Stunden try and error bringen auch Ergebnisse, sicher wollte man mir nur den Lerneffekt vertiefen 😄 `

                Zum einen ist es für mich nicht merkwürdig wenn man in einem Forum erstmal zeigen soll was man selbst schon bewerkstelligt hat.

                Ich persönlich finde es auch nicht merkwürdig wenn man nicht sofort eine Antwort bekommt, da es ja Leute geben soll die sich nicht den ganzen Tag hier tummeln um auf Fragen/Probleme zu warten die man dann unentgeldlich versucht zu lösen/unterstützen.

                Aber da mögen die Meinungen auseinander gehen.

                1 Reply Last reply Reply Quote 0
                • A
                  alka last edited by

                  die Problembeschreibung und der (dazu nicht benötigte) Code stand im ersten Post vom 6.

                  und zum Problem hatte ich vorher exakt <u>nichts</u> 'schon gemacht', weil ich keinen Ansatz hatte

                  wenn die Anfrage bereits so weit nach hinten verschoben war wie sie war (hinter Antworten/Reaktionen - teils mit neuen Fragen), hat das mit 'grad niemand da' auch nichts zu tun, übrigens hat dieses Forum eine 'wer ist online'-Anzeige …

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

                    @alka:

                    die Problembeschreibung und der (dazu nicht benötigte) Code stand im ersten Post vom 6.

                    und zum Problem hatte ich vorher exakt <u>nichts</u> 'schon gemacht', weil ich keinen Ansatz hatte

                    wenn die Anfrage bereits so weit nach hinten verschoben war wie sie war (hinter Antworten/Reaktionen - teils mit neuen Fragen), hat das mit 'grad niemand da' auch nichts zu tun, übrigens hat dieses Forum eine 'wer ist online'-Anzeige … `

                    Um es auch dir verständlich zu erklären:

                    Ich lese wenn ich Zeit und LUST habe öfter ältere Sachen (auch älter als mehrere Tage) durch um evtl. helfen oder selbst etwas lernen zu können.

                    Deinen Post vom 6ten habe ich am 9ten gelesen und schrieb über mein Handy nach einem kurzen überfliegen "zeig mal deinen Code".

                    Als wir dann am Nachmittag wieder zu Hause waren (wo auch mein Pc steht) und ich mir das Ganze nochmals in Ruhe ansehen wollte um, sofern es mir mit meinem Wissen möglich ist zu Unterstützen hattest du es anscheinend schon gelöst was mich für dich freut!

                    Ich weiß sehr wohl dass man wenn ein Problem oder eine Frage auftaucht am liebsten sofort Unterstützung bzw. eine Lösung möchte doch das bekommt man leider in Foren nicht immer, wobei ich sagen würde hier noch öfter als in Anderen.

                    1 Reply Last reply Reply Quote 0
                    • A
                      alka last edited by

                      vorab: extra dankeschön für das Verständnis und den nicht angreifenden Text, ist nicht selbstverständlich (zumal ich ja mehr oder weniger deutlich am maulen war)

                      und es war nicht auf dich persönlich bezogen - sehr wahrscheinlich ist es auch hier wie anderswo, die Masse liest, lässt sich helfen und schweigt ansonsten (leider auch oft die welche genau zu einer ähnlichen Frage schon Hilfe bekamen)

                      und für den kleinen Teil wissender nehmen wir einfach an, für die wars grad auch ungünstig

                      werde in Zukunft deutlich mehr Geduld an den tag legen in der Hoffnung, das einer der wenigen sich meiner annimmt

                      ist halt ungeschickt, wenn man nichtmal weiß ob es denn überhaupt geht und ein Projekt auf Eis legen muss

                      achja, ich habe es gelöst indem ich einen Button dazu gestzt habe welcher mir einen dafür extra Datenpunkt mit dem Auswahlfeld füllt, darauf spricht ein script an

                      den Text zerlege ich, es bleibt der reine Name übrig mit welchem ich den betroffenen Datenpunkt anspreche und mit neuem Datum setze, dann lösche ich den Inhalt des extra Datenpunktes wieder

                      (also Auswahl füllt das obere Feld, daneben Button zum Datenpunkt setzen, script reagiert darauf)

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      616
                      Online

                      32.1k
                      Users

                      80.8k
                      Topics

                      1.3m
                      Posts

                      2
                      9
                      620
                      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