Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Array wert entfernen welcher nicht vorkommt

    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

    Array wert entfernen welcher nicht vorkommt

    This topic has been deleted. Only users with topic management privileges can see it.
    • Codierknecht
      Codierknecht Developer Most Active @drapo last edited by

      @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 2 Replies Last reply Reply Quote 0
      • D
        drapo @mickym last edited by

        @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 Reply Last reply Reply Quote 0
        • D
          drapo @Codierknecht last edited by

          @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 Reply Last reply Reply Quote 0
          • D
            drapo @Codierknecht last edited by 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?

            Homoran OliverIO Codierknecht 3 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @drapo last edited by

              @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 1 Reply Last reply Reply Quote 0
              • D
                drapo @Homoran last edited by drapo

                @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 🙂

                Homoran 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @drapo last edited by

                  @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.

                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @drapo last edited by

                    @drapo sagte in Array wert entfernen welcher nicht vorkommt:

                    es geht um das entfernen von blitzern aus dem array knownSpeedTraps.

                    das ist mir klar!

                    es geht hier drum:

                    @drapo sagte in Array wert entfernen welcher nicht vorkommt:

                    Ich möchte ... Nachrichten erhalten wenn ... ein bestehender Blitzer entfernt wurde.

                    1 Reply Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @drapo last edited by

                      @drapo
                      1.) Kannst Du da mal die ganzen Leerzeilen entfernen? Das kann man so kaum lesen.
                      2.) Du triggerst auf die Anzahl mit "any". Ich würde auf radar-trap.0.2gbKhj9cvNU0aX0iQ_Mbc.area.speedTraps triggern. Mit "ne".

                      Ich würde das ähnlich machen wie @OliverIO.
                      Beim Start des Script den aktuellen Stand aus dem DP als "Arbeitsstand" merken.
                      Ändert sich der DP, würde ich einmal durch das gemerkte Array rauschen und prüfen, ob alle dort enthaltenen Radarfallen auch im neuen Wert des DP enthalten sind. Was nicht mehr da ist, ist rausgeflogen. Kann man sich dann für die Meldung wegschreiben und dann entfernen.
                      Danach einmal durch das "neue" Array - also den aktuellen Wert des Adapters - rauschen und alle für die Meldung rauspicken, die nicht im "gemerkten" Array enthalten sind. Das sind die neuen.
                      Die werden dann an den gemerkten Zustand angefügt.
                      Oder man merkt sich am Ende einfach den aktuellen Inhalt aus dem DP.

                      Kleiner Seitenhieb bzgl. Deiner Meldung:
                      Für eine "sichere Fahrt" ist wohl kaum das Nicht-Vorhandensein von Radarfallen in Deiner Region ausschlaggebend.
                      Einfach an die Geschwindigkeitsbegrenzung halten - zack! - Problem gelöst.
                      Aber jeder wie er mag - müssen wir hier nicht ausdiskutieren.

                      T 1 Reply Last reply Reply Quote 0
                      • T
                        ticaki Developer @Codierknecht last edited by

                        @codierknecht sagte in Array wert entfernen welcher nicht vorkommt:

                        @drapo
                        Für eine "sichere Fahrt" ist wohl kaum das Nicht-Vorhandensein von Radarfallen in Deiner Region ausschlaggebend.

                        In der Regel schon - da Sicherheit recht wenig mit dem Geldbedürfnis einiger Gemeinden zu tun hat. Auch nicht mit dem wahllosen verteilen von Schildern.

                        Das muß man aber tatsächlich nicht ansprechen.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        983
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        8
                        29
                        822
                        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