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. JavaScript
  5. Array wert entfernen welcher nicht vorkommt

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Array wert entfernen welcher nicht vorkommt

Geplant Angeheftet Gesperrt Verschoben JavaScript
29 Beiträge 8 Kommentatoren 1.8k Aufrufe 4 Watching
  • Ä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.
  • D drapo

    @geschild das e ist ja im array enthalten. da ich aber nicht mehr das e abfrage weiss ich nicht wie ich das entfernen soll.

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #7

    @drapo sagte in Array wert entfernen welcher nicht vorkommt:

    @geschild das e ist ja im array enthalten. da ich aber nicht mehr das e abfrage weiss ich nicht wie ich das entfernen soll.

    dann such nach e und nimm es raus

    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    D 1 Antwort Letzte Antwort
    0
    • HomoranH Homoran

      @drapo sagte in Array wert entfernen welcher nicht vorkommt:

      @geschild das e ist ja im array enthalten. da ich aber nicht mehr das e abfrage weiss ich nicht wie ich das entfernen soll.

      dann such nach e und nimm es raus

      D Offline
      D Offline
      drapo
      schrieb am zuletzt editiert von
      #8

      @homoran wenn ich wüsste dass ich nach e suche wäre es einfach. das ist ja die herausforderung.

      mickymM 1 Antwort Letzte Antwort
      0
      • D drapo

        @codierknecht eben nicht. Ich kenn die einträge also mittels indexof aller noch vorhandenen Buchstaben. Aber genau mein Buchstabe e wird ja nicht mehr verglichen da er gar nicht mehr aufgerufen wird. wie kenn ich denn nun genau den eintrag von dem der nicht aufgerufen wird?
        Irgendwie fehlt mir hier die logik wie ich das angehen soll. weisst du wie ich es meine?

        vielleicht nochmals erläutert

        im array prüfe ich ist a vorhanden ok ist da weiter
        b vorhanden ok ist da weiter
        c vorhanden ok ist da weiter
        d vorhanden ok ist da weiter
        e wird nicht geprüft da es entfernt werden soll. wie krieg ich nun genau diesen eintrag raus?
        f vorhanden ok ist da weiter
        g vorhanden ok ist da weiter und Ende.

        CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von
        #9

        @drapo
        Ich kann Dir nicht mehr folgen.
        Vielleicht würde der reale Anwendungsfall eher weiterhelfen als ein abstraktes Beispiel.

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        HomoranH 1 Antwort Letzte Antwort
        1
        • D drapo

          @homoran wenn ich wüsste dass ich nach e suche wäre es einfach. das ist ja die herausforderung.

          mickymM Online
          mickymM Online
          mickym
          Most Active
          schrieb am zuletzt editiert von mickym
          #10

          @drapo

          @drapo sagte in Array wert entfernen welcher nicht vorkommt:

          @homoran wenn ich wüsste dass ich nach e suche wäre es einfach. das ist ja die herausforderung.

          Na du iterierst einfach über das Array wenn Du kein JSONATA verwenden willst. Das geht auch mit der filter Funktion.

          Schau Dir das mal an:
          https://www.w3schools.com/js/js_array_iteration.asp#mark_filter

          Wenn ein Wert undefined oder nach deinen Kriterien false ist, wird dieser herausgefiltert.

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          1 Antwort Letzte Antwort
          1
          • CodierknechtC Codierknecht

            @drapo
            Ich kann Dir nicht mehr folgen.
            Vielleicht würde der reale Anwendungsfall eher weiterhelfen als ein abstraktes Beispiel.

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von Homoran
            #11

            @codierknecht sagte in Array wert entfernen welcher nicht vorkommt:

            @drapo
            Ich kann Dir nicht mehr folgen.
            Vielleicht würde der reale Anwendungsfall eher weiterhelfen als ein abstraktes Beispiel.

            ich hab ja keine Ahnung von das Janze.
            schlimmstenfalls das Array in ein Hilfsarray kopieren, da alles rausnehmen was noch im Array sein darf.
            Dann bleibt ein Element übrig, das dann aus dem Original Array rausgenommen wird.

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • D drapo

              @geschild das e ist ja im array enthalten. da ich aber nicht mehr das e abfrage weiss ich nicht wie ich das entfernen soll.

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #12

              @drapo sagte: da ich aber nicht mehr das e abfrage

              Wie stellst du das fest?

              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
              • D drapo

                Hallo zusammen

                Ich hab nun das halbe Wochenende an einer Lösung gesucht und ich kriegs nicht hin. Wäre um Eure Unterstützung sehr dankbar.
                Ich habe folgenden Anwendungsfall. Ich habe ein Array welches mit Werten gefüllt ist also z.B.:

                const Array = [a, b, c, d, e, f, g]

                danach vergleiche ich mit einer Variable die Inhalte dieses Array (const Vergleich = ...) Die Variable wird immer neu beschrieben. Sobald ein Eintrag nicht mehr vorhanden ist, soll dieser aus dem array entfernt werden. wie kann ich das umsetzen. Also z.B. ich schaue ob a vorhanden ob b vorhanden usw. aber e wird z.b. nicht mehr abgefragt. wie nehme ich dann genau diesen aus dem array heraus welcher nicht abgefragt wurde?

                Ich hoffe ich hab mich einigermassen verständlich ausgedrückt

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #13

                @paul53

                das muss sich hier drin verstecken

                @drapo sagte in Array wert entfernen welcher nicht vorkommt:

                danach vergleiche ich mit einer Variable die Inhalte dieses Array (const Vergleich = ...) Die Variable wird immer neu beschrieben. Sobald ein Eintrag nicht mehr vorhanden ist,

                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                1 Antwort Letzte Antwort
                0
                • mickymM Online
                  mickymM Online
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von mickym
                  #14

                  Hier mal ein Code:

                  var a=1,b=3,d=3,c=4;
                  
                  var array = [a,b,c,d];
                  console.log(array);
                  
                  c=undefined;
                  array = [a,b,c,d];
                  
                  array=array.filter((val) => val !=null);
                  console.log(array);
                  

                  1f15f4e6-4390-4d7f-baae-02bfc3f7fd8d-image.png

                  Ausgabe vorher - Ausgabe gefiltert

                  Wie du rausfiltest kannst ja dann in der Funktion selbst reinschreiben.

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  1 Antwort Letzte Antwort
                  0
                  • mickymM Online
                    mickymM Online
                    mickym
                    Most Active
                    schrieb am zuletzt editiert von mickym
                    #15

                    Und am Einfachsten ist JSONATA. Code folgt gleich.

                    var a=1,b=3,d=3,c=4;
                    
                    var origArr = [a,b,c,d];
                    console.log(origArr);
                    
                    c=undefined;
                    var newArr = [a,b,c,d];
                    
                    console.log(newArr.filter((val) => val !=null));
                    console.log( await jsonataExpression(newArr,"$[$ != null]"));
                    

                    Okay in diesem Fall ist die Codeeinsparung minimal.

                    statt

                    newArr.filter((val) => val !=null)
                    
                    $[$ != null]
                    

                    b3ab211c-cee2-41c7-97d2-84c05b7f2355-image.png

                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                    D 1 Antwort Letzte Antwort
                    0
                    • mickymM mickym

                      Und am Einfachsten ist JSONATA. Code folgt gleich.

                      var a=1,b=3,d=3,c=4;
                      
                      var origArr = [a,b,c,d];
                      console.log(origArr);
                      
                      c=undefined;
                      var newArr = [a,b,c,d];
                      
                      console.log(newArr.filter((val) => val !=null));
                      console.log( await jsonataExpression(newArr,"$[$ != null]"));
                      

                      Okay in diesem Fall ist die Codeeinsparung minimal.

                      statt

                      newArr.filter((val) => val !=null)
                      
                      $[$ != null]
                      

                      b3ab211c-cee2-41c7-97d2-84c05b7f2355-image.png

                      D Offline
                      D Offline
                      drapo
                      schrieb am zuletzt editiert von
                      #16

                      @mickym hm muss ich mal testen ob das so funktioniert. Du hast ja c=undefined gesetzt.
                      in meinem beispiel wäre ja c immer noch mit dem wert 4 gefüllt. es wird einfach nicht mehr abgefragt.

                      das heisst in deinem fall:

                      a = 1 ist im array vorhanden weiter
                      b = 3 ist im array vorhanden weiter
                      c = 4 wird nicht mehr abgefragt und soll deshalb entfernt werden
                      d = 3 ist im array vorhanden weiter oder in diesem fall fertig

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • D drapo

                        @mickym hm muss ich mal testen ob das so funktioniert. Du hast ja c=undefined gesetzt.
                        in meinem beispiel wäre ja c immer noch mit dem wert 4 gefüllt. es wird einfach nicht mehr abgefragt.

                        das heisst in deinem fall:

                        a = 1 ist im array vorhanden weiter
                        b = 3 ist im array vorhanden weiter
                        c = 4 wird nicht mehr abgefragt und soll deshalb entfernt werden
                        d = 3 ist im array vorhanden weiter oder in diesem fall fertig

                        mickymM Online
                        mickymM Online
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #17

                        @drapo na dann musst du halt über einen Timer setzen, dass c undefined ist, outdated oder was weiß ich ist.

                        Das ist halt Aufwand- auch wenn es niemand hören will,aber mit NodeRed und einer trigger Node funktioniert das out of the box. So musst du das halt selbst programmieren.

                        Du musst halt bei deiner timeout function Tabellen führen, damit du dem jeweiligen Arrayelement ein topic oder eine Quelle zuweist, so dass du in deiner time-out function das richtige Element auf undefined setzt.
                        Gefüttert wird diese Funktion von einem subscription trigger, der halt alle Quellen abfragt.
                        Das macht die trigger Node halt automatisch.

                        Aber da stehen dir hier ja viele JS Codierer bei. Mir ist das im Moment Zuviel Codeschreiberei. Statt Tabellen, könntest auch ein Array mit Objekten erstellen- dann würde sich JSONATA lohnen und viel codeschreiberei ersparen und du müsstest keine Tabellen führen

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        D 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          @drapo na dann musst du halt über einen Timer setzen, dass c undefined ist, outdated oder was weiß ich ist.

                          Das ist halt Aufwand- auch wenn es niemand hören will,aber mit NodeRed und einer trigger Node funktioniert das out of the box. So musst du das halt selbst programmieren.

                          Du musst halt bei deiner timeout function Tabellen führen, damit du dem jeweiligen Arrayelement ein topic oder eine Quelle zuweist, so dass du in deiner time-out function das richtige Element auf undefined setzt.
                          Gefüttert wird diese Funktion von einem subscription trigger, der halt alle Quellen abfragt.
                          Das macht die trigger Node halt automatisch.

                          Aber da stehen dir hier ja viele JS Codierer bei. Mir ist das im Moment Zuviel Codeschreiberei. Statt Tabellen, könntest auch ein Array mit Objekten erstellen- dann würde sich JSONATA lohnen und viel codeschreiberei ersparen und du müsstest keine Tabellen führen

                          D Offline
                          D Offline
                          drapo
                          schrieb am zuletzt editiert von
                          #18

                          @mickym ich hab mir nochmals gedanken gemacht. könnte das ein ansatz sein?

                          let Arraylength.length;
                          const newArray = [];
                          
                          for (let i=0; i<=Arraylength; i++) {
                          
                          	if (Array.includes(Vergleich)) {
                           		newArray.push(Vergleich);
                          	}
                          }
                          
                          Array.splice(0, Array.length);
                          
                          for (let t=0; t<=(Arraylength-1); t++) {
                          
                          	Array.push(newArray[t]);
                          	}
                          
                          
                          

                          Somit schreibe ich die Werte die ich in meinem Array finde in ein neues Array. Durch die Abfrage mit includes sollten nur noch die Werte im newArray sein welche auch abgefragt wurden.

                          Danach setze ich das alte Array zurück und befülle es mit den neuen Werten.

                          Hab ich einen Denkfehler oder würde das so gehen?

                          mickymM CodierknechtC 2 Antworten Letzte Antwort
                          0
                          • D drapo

                            @mickym ich hab mir nochmals gedanken gemacht. könnte das ein ansatz sein?

                            let Arraylength.length;
                            const newArray = [];
                            
                            for (let i=0; i<=Arraylength; i++) {
                            
                            	if (Array.includes(Vergleich)) {
                             		newArray.push(Vergleich);
                            	}
                            }
                            
                            Array.splice(0, Array.length);
                            
                            for (let t=0; t<=(Arraylength-1); t++) {
                            
                            	Array.push(newArray[t]);
                            	}
                            
                            
                            

                            Somit schreibe ich die Werte die ich in meinem Array finde in ein neues Array. Durch die Abfrage mit includes sollten nur noch die Werte im newArray sein welche auch abgefragt wurden.

                            Danach setze ich das alte Array zurück und befülle es mit den neuen Werten.

                            Hab ich einen Denkfehler oder würde das so gehen?

                            mickymM Online
                            mickymM Online
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von mickym
                            #19

                            @drapo Das Problem ist doch in meinen Augen nicht das Array - sondern dass Du doch nicht weißt welches Element veraltet oder nicht mehr abgefragt wurde. Mit Deiner Schleife verkürzt Du doch Dein Array nur um das letzte Element.

                            Das geht auch mit der pop Methode - da brauchst keine Schleife für: https://www.w3schools.com/js/js_array_methods.asp

                            Wie gesagt das Problem ist, wie findest Du raus, welches Element veraltet ist - Die Array Behandlung ist eine andere Sache.

                            Du könntest höchstens meinen ursprünglichen Code nehmen und in der validierungsfunktion den Zeitstempel der letzten Aktualisierung nehmen und diesen mit der aktuellen Zeit verleichen.

                            a,b,c,d sind dann Objekte (states mit dem Zeitstempel)

                            //var a=1,b=3,d=3,c=4;
                            
                             
                            //var array = [a,b,c,d];
                            
                            // Erstelle ein Array mit den Objekten und Werten, der auszuwertenden States.
                            console.log(array);
                             
                            // c=undefined;
                            // array = [a,b,c,d];
                             
                            array=array.filter((val) => {
                            //Vergleich aktuelle Zeit mit Zeitstempel des Objektes, wenn Differenz größer als dann 
                            // return false
                            // sonst return true
                            });
                            console.log(array);
                            
                            

                            Das vergleichen der Zeitstempel mit dem aktuellen Zeitpunkt überlasse ich aber hier gerne @paul53 oder @Codierknecht

                            Wenn dann die veralteten Objekte ausgefiltert sind - empfehle ich entweder die map Funktion
                            https://www.w3schools.com/js/js_array_iteration.asp#mark_map,
                            die erstellt Dir auch ein neues Array mit nur den Werten oder Du nutzt wieder das geniale JSONATA. Muss leider weg - schau später oder von unterwegs nur rein, aber ohne Code. ;)

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            D 1 Antwort Letzte Antwort
                            1
                            • D drapo

                              @mickym ich hab mir nochmals gedanken gemacht. könnte das ein ansatz sein?

                              let Arraylength.length;
                              const newArray = [];
                              
                              for (let i=0; i<=Arraylength; i++) {
                              
                              	if (Array.includes(Vergleich)) {
                               		newArray.push(Vergleich);
                              	}
                              }
                              
                              Array.splice(0, Array.length);
                              
                              for (let t=0; t<=(Arraylength-1); t++) {
                              
                              	Array.push(newArray[t]);
                              	}
                              
                              
                              

                              Somit schreibe ich die Werte die ich in meinem Array finde in ein neues Array. Durch die Abfrage mit includes sollten nur noch die Werte im newArray sein welche auch abgefragt wurden.

                              Danach setze ich das alte Array zurück und befülle es mit den neuen Werten.

                              Hab ich einen Denkfehler oder würde das so gehen?

                              CodierknechtC Online
                              CodierknechtC Online
                              Codierknecht
                              Developer Most Active
                              schrieb am zuletzt editiert von
                              #20

                              @drapo
                              Klingt alles immer noch ein bisschen nach "von hinten durch die Brust ins Auge".

                              Wie gesagt: Wenn Du mal zeigen würdest, was da der tatsächliche Anwendungsfall ist, wäre Hilfe sicher zielführender.

                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                              HmIP|ZigBee|Tasmota|Unifi
                              Zabbix Certified Specialist
                              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                              D 2 Antworten Letzte Antwort
                              0
                              • mickymM mickym

                                @drapo Das Problem ist doch in meinen Augen nicht das Array - sondern dass Du doch nicht weißt welches Element veraltet oder nicht mehr abgefragt wurde. Mit Deiner Schleife verkürzt Du doch Dein Array nur um das letzte Element.

                                Das geht auch mit der pop Methode - da brauchst keine Schleife für: https://www.w3schools.com/js/js_array_methods.asp

                                Wie gesagt das Problem ist, wie findest Du raus, welches Element veraltet ist - Die Array Behandlung ist eine andere Sache.

                                Du könntest höchstens meinen ursprünglichen Code nehmen und in der validierungsfunktion den Zeitstempel der letzten Aktualisierung nehmen und diesen mit der aktuellen Zeit verleichen.

                                a,b,c,d sind dann Objekte (states mit dem Zeitstempel)

                                //var a=1,b=3,d=3,c=4;
                                
                                 
                                //var array = [a,b,c,d];
                                
                                // Erstelle ein Array mit den Objekten und Werten, der auszuwertenden States.
                                console.log(array);
                                 
                                // c=undefined;
                                // array = [a,b,c,d];
                                 
                                array=array.filter((val) => {
                                //Vergleich aktuelle Zeit mit Zeitstempel des Objektes, wenn Differenz größer als dann 
                                // return false
                                // sonst return true
                                });
                                console.log(array);
                                
                                

                                Das vergleichen der Zeitstempel mit dem aktuellen Zeitpunkt überlasse ich aber hier gerne @paul53 oder @Codierknecht

                                Wenn dann die veralteten Objekte ausgefiltert sind - empfehle ich entweder die map Funktion
                                https://www.w3schools.com/js/js_array_iteration.asp#mark_map,
                                die erstellt Dir auch ein neues Array mit nur den Werten oder Du nutzt wieder das geniale JSONATA. Muss leider weg - schau später oder von unterwegs nur rein, aber ohne Code. ;)

                                D Offline
                                D Offline
                                drapo
                                schrieb am zuletzt editiert von
                                #21

                                @mickym ich dachte mit dieser if abfrage befülle ich doch nur werte wenn diese auch abgefragt werden:

                                if (Array.includes(Vergleich)) {
                                

                                Somit ist das Array doch nur noch mit den Werten befüllt die es gibt.

                                falls ich mich irre gerne melden. aber ich versuch das mal sobald ich wieder zu hause bin.

                                1 Antwort Letzte Antwort
                                0
                                • CodierknechtC Codierknecht

                                  @drapo
                                  Klingt alles immer noch ein bisschen nach "von hinten durch die Brust ins Auge".

                                  Wie gesagt: Wenn Du mal zeigen würdest, was da der tatsächliche Anwendungsfall ist, wäre Hilfe sicher zielführender.

                                  D Offline
                                  D Offline
                                  drapo
                                  schrieb am zuletzt editiert von
                                  #22

                                  @codierknecht ja kann ich machen. aber auch erst wenn ich wieder zu Hause bin.

                                  Bin mir sicher dass es einfacher geht. Aber da sieht man halt auch schnell dass das nicht mein daily business ist und mich gerade etwas abmühe :-)

                                  Bin Euch dadurch auch extrem dankbar für die Unterstützung

                                  1 Antwort Letzte Antwort
                                  0
                                  • CodierknechtC Codierknecht

                                    @drapo
                                    Klingt alles immer noch ein bisschen nach "von hinten durch die Brust ins Auge".

                                    Wie gesagt: Wenn Du mal zeigen würdest, was da der tatsächliche Anwendungsfall ist, wäre Hilfe sicher zielführender.

                                    D Offline
                                    D Offline
                                    drapo
                                    schrieb am zuletzt editiert von drapo
                                    #23

                                    @codierknecht @mickym das ist der original Anwendungsfall

                                    const knownSpeedTraps = [];
                                    
                                    async function sendImage() {
                                    
                                        const speedTraps = getState('radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTraps').val;
                                      
                                        
                                        for (const speedTrap of speedTraps) {
                                    
                                            const street = speedTrap.properties.street;
                                            
                                            const city = speedTrap.properties.city;
                                    
                                            const country = speedTrap.properties.country; 
                                    
                                            const cacheKey = `${street}-${city}-${country}`;
                                        
                                            const coordinates = speedTrap.geometry.coordinates;
                                    
                                            if (!knownSpeedTraps.includes(cacheKey)) {
                                    
                                                knownSpeedTraps.push(cacheKey);
                                    
                                                await sendToAsync('telegram.0', { text: 'Achtung neuer Radar in Deiner Region! 🚨' });
                                    
                                                await sendToAsync('telegram.0', {
                                    
                                                    latitude: parseFloat(coordinates[1]),
                                    
                                                    longitude: parseFloat(coordinates[0]),
                                                    
                                    
                                    
                                        
                                                });
                                     
                                    
                                                await wait(1000);
                                    
                                     
                                                
                                    
                                            
                                    
                                                console.log(cacheKey);
                                                console.log(knownSpeedTraps);
                                    
                                                await sendToAsync('telegram.0', {
                                    
                                                     text: `Strasse: ${street}\nOrt: ${city}\nLand: ${country}`,
                                                
                                    
                                                
                                    
                                                });
                                    
                                            } else {
                                                    //hier wird der Eintrag entfernt welcher nicht mehr da ist
                                    
                                                    var indexSpeedtraptoremove = knownSpeedTraps.indexOf(cacheKey);
                                                    if (indexSpeedtraptoremove !== -1) {
                                                    knownSpeedTraps.splice(indexSpeedtraptoremove, 1);
                                                    } 
                                    
                                            await sendToAsync('telegram.0', { text: 'Achtung neuer Radar in Deiner Region! 🚨'});
                                    
                                                await sendToAsync('telegram.0', {
                                    
                                                    latitude: parseFloat(coordinates[1]),
                                    
                                                    longitude: parseFloat(coordinates[0]),
                                                    
                                    
                                    
                                        
                                                });
                                     
                                                    
                                    
                                                await wait(1000);
                                    
                                     
                                                
                                    
                                            
                                    
                                                console.log(cacheKey);
                                                console.log(knownSpeedTraps);
                                    
                                                await sendToAsync('telegram.0', {
                                    
                                                     text: `Strasse: ${street}\nOrt: ${city}\nLand: ${country}`,
                                    
                                                
                                    
                                                });
                                    
                                            }
                                    
                                        }
                                    
                                    }
                                    
                                     
                                    
                                    on({ id: [].concat(['radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTrapsCount']), change: 'any' }, async (obj) => {
                                    let value = obj.state.val;
                                      let oldValue = obj.oldState.val;
                                      if ((obj.state ? obj.state.val : "") == 0 && (obj.oldState ? obj.oldState.val : "") > 0) {
                                        sendTo("telegram", "send", {
                                            text: 'Kein Autobahn Radar mehr in Deiner Region. Du hast sichere Fahrt!',
                                        });
                                    
                                        knownSpeedTraps.splice(0, knownSpeedTraps.length)
                                    
                                      } else {
                                     
                                        setTimeout(sendImage, 2000);
                                    
                                      }
                                    });
                                    
                                    

                                    Der Radar Trap Adapter wird genutzt um neue Radars per Telegram zu versenden. Ich möchte aber nur Nachrichten erhalten wenn entweder ein neuer Blitzer auftaucht oder ein bestehender Blitzer entfernt wurde. Der radar Trap Adapter aktualisiert sich jede Stunde immer um XX:10 Uhr.
                                    Das hinzufügen der Blitzer in den cache funktioniert. das kam ursprünglich von matthias kleine. was nun noch nicht geht ist das entfernen der blitzer wenn diese nicht mehr da sind. das jetzige beispiel dass ich gebaut habe funktioniert leider nicht.

                                    Wie würdet Ihr das lösen, dass der Blitzer der nicht mehr da ist aus dem Array knownSpeedTraps genommen wird?

                                    HomoranH OliverIOO CodierknechtC 3 Antworten Letzte Antwort
                                    0
                                    • D drapo

                                      @codierknecht @mickym das ist der original Anwendungsfall

                                      const knownSpeedTraps = [];
                                      
                                      async function sendImage() {
                                      
                                          const speedTraps = getState('radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTraps').val;
                                        
                                          
                                          for (const speedTrap of speedTraps) {
                                      
                                              const street = speedTrap.properties.street;
                                              
                                              const city = speedTrap.properties.city;
                                      
                                              const country = speedTrap.properties.country; 
                                      
                                              const cacheKey = `${street}-${city}-${country}`;
                                          
                                              const coordinates = speedTrap.geometry.coordinates;
                                      
                                              if (!knownSpeedTraps.includes(cacheKey)) {
                                      
                                                  knownSpeedTraps.push(cacheKey);
                                      
                                                  await sendToAsync('telegram.0', { text: 'Achtung neuer Radar in Deiner Region! 🚨' });
                                      
                                                  await sendToAsync('telegram.0', {
                                      
                                                      latitude: parseFloat(coordinates[1]),
                                      
                                                      longitude: parseFloat(coordinates[0]),
                                                      
                                      
                                      
                                          
                                                  });
                                       
                                      
                                                  await wait(1000);
                                      
                                       
                                                  
                                      
                                              
                                      
                                                  console.log(cacheKey);
                                                  console.log(knownSpeedTraps);
                                      
                                                  await sendToAsync('telegram.0', {
                                      
                                                       text: `Strasse: ${street}\nOrt: ${city}\nLand: ${country}`,
                                                  
                                      
                                                  
                                      
                                                  });
                                      
                                              } else {
                                                      //hier wird der Eintrag entfernt welcher nicht mehr da ist
                                      
                                                      var indexSpeedtraptoremove = knownSpeedTraps.indexOf(cacheKey);
                                                      if (indexSpeedtraptoremove !== -1) {
                                                      knownSpeedTraps.splice(indexSpeedtraptoremove, 1);
                                                      } 
                                      
                                              await sendToAsync('telegram.0', { text: 'Achtung neuer Radar in Deiner Region! 🚨'});
                                      
                                                  await sendToAsync('telegram.0', {
                                      
                                                      latitude: parseFloat(coordinates[1]),
                                      
                                                      longitude: parseFloat(coordinates[0]),
                                                      
                                      
                                      
                                          
                                                  });
                                       
                                                      
                                      
                                                  await wait(1000);
                                      
                                       
                                                  
                                      
                                              
                                      
                                                  console.log(cacheKey);
                                                  console.log(knownSpeedTraps);
                                      
                                                  await sendToAsync('telegram.0', {
                                      
                                                       text: `Strasse: ${street}\nOrt: ${city}\nLand: ${country}`,
                                      
                                                  
                                      
                                                  });
                                      
                                              }
                                      
                                          }
                                      
                                      }
                                      
                                       
                                      
                                      on({ id: [].concat(['radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTrapsCount']), change: 'any' }, async (obj) => {
                                      let value = obj.state.val;
                                        let oldValue = obj.oldState.val;
                                        if ((obj.state ? obj.state.val : "") == 0 && (obj.oldState ? obj.oldState.val : "") > 0) {
                                          sendTo("telegram", "send", {
                                              text: 'Kein Autobahn Radar mehr in Deiner Region. Du hast sichere Fahrt!',
                                          });
                                      
                                          knownSpeedTraps.splice(0, knownSpeedTraps.length)
                                      
                                        } else {
                                       
                                          setTimeout(sendImage, 2000);
                                      
                                        }
                                      });
                                      
                                      

                                      Der Radar Trap Adapter wird genutzt um neue Radars per Telegram zu versenden. Ich möchte aber nur Nachrichten erhalten wenn entweder ein neuer Blitzer auftaucht oder ein bestehender Blitzer entfernt wurde. Der radar Trap Adapter aktualisiert sich jede Stunde immer um XX:10 Uhr.
                                      Das hinzufügen der Blitzer in den cache funktioniert. das kam ursprünglich von matthias kleine. was nun noch nicht geht ist das entfernen der blitzer wenn diese nicht mehr da sind. das jetzige beispiel dass ich gebaut habe funktioniert leider nicht.

                                      Wie würdet Ihr das lösen, dass der Blitzer der nicht mehr da ist aus dem Array knownSpeedTraps genommen wird?

                                      HomoranH Nicht stören
                                      HomoranH Nicht stören
                                      Homoran
                                      Global Moderator Administrators
                                      schrieb am zuletzt editiert von
                                      #24

                                      @drapo sagte in Array wert entfernen welcher nicht vorkommt:

                                      Wie würdet Ihr das lösen, dass der Blitzer der nicht mehr da ist aus dem Array knownSpeedTraps genommen wird?

                                      ...und du darüber such noch eine Nachricht via telegram bekommst?

                                      also nicht nur entfernen sondern auch noch eine zusätzliche Aktion?
                                      Davon war bisher keine Rede.
                                      Dazu brauchst du ja die zu entfernenden Daten noch.

                                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                      D 1 Antwort Letzte Antwort
                                      0
                                      • HomoranH Homoran

                                        @drapo sagte in Array wert entfernen welcher nicht vorkommt:

                                        Wie würdet Ihr das lösen, dass der Blitzer der nicht mehr da ist aus dem Array knownSpeedTraps genommen wird?

                                        ...und du darüber such noch eine Nachricht via telegram bekommst?

                                        also nicht nur entfernen sondern auch noch eine zusätzliche Aktion?
                                        Davon war bisher keine Rede.
                                        Dazu brauchst du ja die zu entfernenden Daten noch.

                                        D Offline
                                        D Offline
                                        drapo
                                        schrieb am zuletzt editiert von drapo
                                        #25

                                        @homoran das senden mittels telegram funktioniert. das ist bereits im obigen code implementiert. es geht um das entfernen von blitzern aus dem array knownSpeedTraps. Das war die ursprüngliche Anfrage dieses Post. Ihr wolltet ja die ausführliche Variante haben :-)

                                        HomoranH 1 Antwort Letzte Antwort
                                        0
                                        • D drapo

                                          @codierknecht @mickym das ist der original Anwendungsfall

                                          const knownSpeedTraps = [];
                                          
                                          async function sendImage() {
                                          
                                              const speedTraps = getState('radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTraps').val;
                                            
                                              
                                              for (const speedTrap of speedTraps) {
                                          
                                                  const street = speedTrap.properties.street;
                                                  
                                                  const city = speedTrap.properties.city;
                                          
                                                  const country = speedTrap.properties.country; 
                                          
                                                  const cacheKey = `${street}-${city}-${country}`;
                                              
                                                  const coordinates = speedTrap.geometry.coordinates;
                                          
                                                  if (!knownSpeedTraps.includes(cacheKey)) {
                                          
                                                      knownSpeedTraps.push(cacheKey);
                                          
                                                      await sendToAsync('telegram.0', { text: 'Achtung neuer Radar in Deiner Region! 🚨' });
                                          
                                                      await sendToAsync('telegram.0', {
                                          
                                                          latitude: parseFloat(coordinates[1]),
                                          
                                                          longitude: parseFloat(coordinates[0]),
                                                          
                                          
                                          
                                              
                                                      });
                                           
                                          
                                                      await wait(1000);
                                          
                                           
                                                      
                                          
                                                  
                                          
                                                      console.log(cacheKey);
                                                      console.log(knownSpeedTraps);
                                          
                                                      await sendToAsync('telegram.0', {
                                          
                                                           text: `Strasse: ${street}\nOrt: ${city}\nLand: ${country}`,
                                                      
                                          
                                                      
                                          
                                                      });
                                          
                                                  } else {
                                                          //hier wird der Eintrag entfernt welcher nicht mehr da ist
                                          
                                                          var indexSpeedtraptoremove = knownSpeedTraps.indexOf(cacheKey);
                                                          if (indexSpeedtraptoremove !== -1) {
                                                          knownSpeedTraps.splice(indexSpeedtraptoremove, 1);
                                                          } 
                                          
                                                  await sendToAsync('telegram.0', { text: 'Achtung neuer Radar in Deiner Region! 🚨'});
                                          
                                                      await sendToAsync('telegram.0', {
                                          
                                                          latitude: parseFloat(coordinates[1]),
                                          
                                                          longitude: parseFloat(coordinates[0]),
                                                          
                                          
                                          
                                              
                                                      });
                                           
                                                          
                                          
                                                      await wait(1000);
                                          
                                           
                                                      
                                          
                                                  
                                          
                                                      console.log(cacheKey);
                                                      console.log(knownSpeedTraps);
                                          
                                                      await sendToAsync('telegram.0', {
                                          
                                                           text: `Strasse: ${street}\nOrt: ${city}\nLand: ${country}`,
                                          
                                                      
                                          
                                                      });
                                          
                                                  }
                                          
                                              }
                                          
                                          }
                                          
                                           
                                          
                                          on({ id: [].concat(['radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTrapsCount']), change: 'any' }, async (obj) => {
                                          let value = obj.state.val;
                                            let oldValue = obj.oldState.val;
                                            if ((obj.state ? obj.state.val : "") == 0 && (obj.oldState ? obj.oldState.val : "") > 0) {
                                              sendTo("telegram", "send", {
                                                  text: 'Kein Autobahn Radar mehr in Deiner Region. Du hast sichere Fahrt!',
                                              });
                                          
                                              knownSpeedTraps.splice(0, knownSpeedTraps.length)
                                          
                                            } else {
                                           
                                              setTimeout(sendImage, 2000);
                                          
                                            }
                                          });
                                          
                                          

                                          Der Radar Trap Adapter wird genutzt um neue Radars per Telegram zu versenden. Ich möchte aber nur Nachrichten erhalten wenn entweder ein neuer Blitzer auftaucht oder ein bestehender Blitzer entfernt wurde. Der radar Trap Adapter aktualisiert sich jede Stunde immer um XX:10 Uhr.
                                          Das hinzufügen der Blitzer in den cache funktioniert. das kam ursprünglich von matthias kleine. was nun noch nicht geht ist das entfernen der blitzer wenn diese nicht mehr da sind. das jetzige beispiel dass ich gebaut habe funktioniert leider nicht.

                                          Wie würdet Ihr das lösen, dass der Blitzer der nicht mehr da ist aus dem Array knownSpeedTraps genommen wird?

                                          OliverIOO Offline
                                          OliverIOO Offline
                                          OliverIO
                                          schrieb am zuletzt editiert von
                                          #26

                                          @drapo

                                          also du hast einmal ein array wo du alle gerade noch aktuellen radarfallen auflistest.
                                          ich gehe davon aus, du rufst regelmäßig einen dienst ab, der dir ein ergebnis liefert.
                                          warum nimmst du dieses ergebnis nicht direkt als deinen arbeitsstand? das ist doch der aktuelle stand?

                                          falls nicht, würde ich mir ein array of objects aufbauen, also nicht nur ein einfaches array.
                                          jedes dieser objekte in diesem array enthält zum einen den wert, zum anderen einen zeitstempel der letzten aktualisierung.

                                          wenn nun die aktuellen daten kommen, dann suchst du jedes element aus deinen ergebnissen im array. aktualisierst den zeitstempel auf Jetzt. wenn du alle abgearbeitest hast, dann löscht du aus deinem array alle elemente, bei dem der zeitstempel älter wie x minuten,stunden,etc ist.

                                          Meine Adapter und Widgets
                                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                          Links im Profil

                                          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

                                          805

                                          Online

                                          32.6k

                                          Benutzer

                                          82.1k

                                          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