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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Alexa Shopping List mit Bring synchronisieren

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.4k

Alexa Shopping List mit Bring synchronisieren

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
164 Beiträge 27 Kommentatoren 33.4k Aufrufe 29 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.
  • DickenD Dicken

    @ro75 Ich glaub wir reden aneinander vorbei :D Todoist ist eine App.

    Ro75R Online
    Ro75R Online
    Ro75
    schrieb am zuletzt editiert von
    #17

    @dicken naja, so wie ich es verstanden habe, geht das nur mit so vielen Umwegen, dass es nicht wirklich Sinn macht. Was stört dich denn am direkten Weg? Oder was ist denn der Vorteil mit ToDoIst? Ich hatte für mich bei dem keinen Vorteil (als ich ToDoIst mal nutzte) gefunden.

    Ro75.

    SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

    DickenD 1 Antwort Letzte Antwort
    0
    • Ro75R Ro75

      @dicken naja, so wie ich es verstanden habe, geht das nur mit so vielen Umwegen, dass es nicht wirklich Sinn macht. Was stört dich denn am direkten Weg? Oder was ist denn der Vorteil mit ToDoIst? Ich hatte für mich bei dem keinen Vorteil (als ich ToDoIst mal nutzte) gefunden.

      Ro75.

      DickenD Offline
      DickenD Offline
      Dicken
      schrieb am zuletzt editiert von
      #18

      @ro75 @ro75 na das Widget in Seitenpanel auf dem Handy ist mein Vorteil den ich gerne nutzen möchte :)

      Ro75R 1 Antwort Letzte Antwort
      0
      • DickenD Dicken

        @ro75 @ro75 na das Widget in Seitenpanel auf dem Handy ist mein Vorteil den ich gerne nutzen möchte :)

        Ro75R Online
        Ro75R Online
        Ro75
        schrieb am zuletzt editiert von
        #19

        @dicken also so was z.B.

        05f79b79-eeff-4b49-b786-5a66c184a56f-image.png

        Ro75.

        SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

        DickenD 2 Antworten Letzte Antwort
        0
        • Ro75R Ro75

          @dicken also so was z.B.

          05f79b79-eeff-4b49-b786-5a66c184a56f-image.png

          Ro75.

          DickenD Offline
          DickenD Offline
          Dicken
          schrieb am zuletzt editiert von
          #20

          @ro75 Au man, da hätt ich ja auch mal selber drauf kommen können nachzusehen. Wusste nicht das Alexa mittlerweile auch Widgets anbietet 😅. Danke für die Info :)

          1 Antwort Letzte Antwort
          0
          • mcBirneM Offline
            mcBirneM Offline
            mcBirne
            schrieb am zuletzt editiert von
            #21

            Hallo zusammen,

            Hat schon jemand ein Skript zur Synchronisation der Alexa-Einkaufsliste und Bring geschrieben?

            I 1 Antwort Letzte Antwort
            1
            • Ro75R Ro75

              @dicken also so was z.B.

              05f79b79-eeff-4b49-b786-5a66c184a56f-image.png

              Ro75.

              DickenD Offline
              DickenD Offline
              Dicken
              schrieb am zuletzt editiert von
              #22

              @ro75 @ro75 Jetzt weiß ich auch wieder warum ich die Alexa App nicht verwendet hab.... Es gibt keine Möglichkeit die Liste von Hand zu sortieren. Das ist Extrem bescheiden.... Da wir vor dem Einkaufen es immer in die Reihenfolge geschoben haben, wie es auch im Laden zu finden ist.

              Ro75R 1 Antwort Letzte Antwort
              0
              • DickenD Dicken

                @ro75 @ro75 Jetzt weiß ich auch wieder warum ich die Alexa App nicht verwendet hab.... Es gibt keine Möglichkeit die Liste von Hand zu sortieren. Das ist Extrem bescheiden.... Da wir vor dem Einkaufen es immer in die Reihenfolge geschoben haben, wie es auch im Laden zu finden ist.

                Ro75R Online
                Ro75R Online
                Ro75
                schrieb am zuletzt editiert von
                #23

                @dicken das ist uns völlig egal. Vor der App da gabs nen Zettel und einen Stift. Und unser Laden räumt regelmäßig um. Für uns ist es wichtig nix zu vergessen - die Reihgenfolge ist reine Nebensache. Die Geschmäcker sind halt verschieden.

                Ro75.

                SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                DickenD 1 Antwort Letzte Antwort
                0
                • Ro75R Ro75

                  @dicken das ist uns völlig egal. Vor der App da gabs nen Zettel und einen Stift. Und unser Laden räumt regelmäßig um. Für uns ist es wichtig nix zu vergessen - die Reihgenfolge ist reine Nebensache. Die Geschmäcker sind halt verschieden.

                  Ro75.

                  DickenD Offline
                  DickenD Offline
                  Dicken
                  schrieb am zuletzt editiert von
                  #24

                  @ro75 sagte in Alexa Shopping List mit Bring synchronisieren:

                  Die Geschmäcker sind halt verschieden.

                  So ist es :D wir finden das halt praktisch. Naja werd die Tage mal schauen wie ich das jetzt regel

                  1 Antwort Letzte Antwort
                  0
                  • FuchsbauF Offline
                    FuchsbauF Offline
                    Fuchsbau
                    schrieb am zuletzt editiert von Fuchsbau
                    #25

                    @ro75
                    Hi ro75, ich hab mal deine Skript versucht, bekomme aber folgende Fehlermeldung.

                    javascript.0	06:41:56.497	error	script.js.Blockly.Alexa.Listen: ReferenceError: CreateDP is not defined
                    javascript.0	06:41:56.498	error	at script.js.Blockly.Alexa.Listen:5:1
                    javascript.0	06:41:56.498	error	at script.js.Blockly.Alexa.Listen:55:3
                    

                    Die Daten Punkte Einkaufsliste und ToDoListe habe ich manuell erstellt.
                    Hast du noch Irgendwas anderes vorab eingestellt / erstellt?

                    Ro75R 1 Antwort Letzte Antwort
                    0
                    • mcBirneM mcBirne

                      Hallo zusammen,

                      Hat schon jemand ein Skript zur Synchronisation der Alexa-Einkaufsliste und Bring geschrieben?

                      I Online
                      I Online
                      IOMax
                      schrieb am zuletzt editiert von
                      #26

                      @mcbirne said in Alexa Shopping List mit Bring synchronisieren:

                      Hallo zusammen,

                      Hat schon jemand ein Skript zur Synchronisation der Alexa-Einkaufsliste und Bring geschrieben?

                      Das würde mich auch interessieren. Am besten in beide Richtungen

                      icastillo15I 1 Antwort Letzte Antwort
                      0
                      • FuchsbauF Fuchsbau

                        @ro75
                        Hi ro75, ich hab mal deine Skript versucht, bekomme aber folgende Fehlermeldung.

                        javascript.0	06:41:56.497	error	script.js.Blockly.Alexa.Listen: ReferenceError: CreateDP is not defined
                        javascript.0	06:41:56.498	error	at script.js.Blockly.Alexa.Listen:5:1
                        javascript.0	06:41:56.498	error	at script.js.Blockly.Alexa.Listen:55:3
                        

                        Die Daten Punkte Einkaufsliste und ToDoListe habe ich manuell erstellt.
                        Hast du noch Irgendwas anderes vorab eingestellt / erstellt?

                        Ro75R Online
                        Ro75R Online
                        Ro75
                        schrieb am zuletzt editiert von
                        #27

                        @fuchsbau sagte in Alexa Shopping List mit Bring synchronisieren:

                        Die Daten Punkte Einkaufsliste und ToDoListe habe ich manuell erstellt.

                        nicht nötig. Die DP werden selbst erstellt. Zeige mal das Skript bitte.

                        Ro75.

                        SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                        1 Antwort Letzte Antwort
                        0
                        • Ro75R Online
                          Ro75R Online
                          Ro75
                          schrieb am zuletzt editiert von
                          #28

                          AH Moment, ich habe da eine selbst erstellte Funktion für die Erstellung der Datenpunkte drin. Ich ändere das mal.

                          Ro75.

                          SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                          1 Antwort Letzte Antwort
                          0
                          • Ro75R Online
                            Ro75R Online
                            Ro75
                            schrieb am zuletzt editiert von
                            #29

                            Habe das Skript oben korrigiert.

                            const JSONEinkaufsliste = '0_userdata.0.Alexa.Einkaufsliste';
                            const JSONEToDoListe    = '0_userdata.0.Alexa.ToDoListe';
                            
                            createState(JSONEinkaufsliste, '[]', {read: true, write: true, desc: 'JSON String for Widget', type: 'string', def: '[]'});
                            createState(JSONEToDoListe, '[]', {read: true, write: true, desc: 'JSON String for Widget', type: 'string', def: '[]'});
                            
                            function ListCleaner(Eintrag='') {
                                const arr = Eintrag.split(' ');
                                for (let i = 0; i < arr.length; i++) {
                                    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
                                }
                                return arr.join(' ');
                            }
                            
                            function ListenGenerator(sQuelle='', sDP=''){
                                var ListeLeer = 1;
                                let Liste = [];
                                $(sQuelle).each(function(id, i){
                                    if(getState(id.replace("value","completed")).val === false) {
                                        ListeLeer = 0; //dient einfach nur als merkmal, das die Liste nicht leer ist
                                        Liste.push({
                                            Eintrag: ListCleaner(getState(id).val)
                                        })
                                    }
                                });
                                if(ListeLeer == 1) {
                                    Liste.push({
                                        Eintrag: "kein Eintrag"
                                    })
                                }
                                setState(sDP, JSON.stringify(Liste), true);
                                Liste = [];
                            }
                            
                            function Einkaufsliste(){
                                setTimeout(function(){
                                    ListenGenerator('alexa2.0.Lists.SHOPPING_LIST.items.*.value',JSONEinkaufsliste)
                                },500);
                            }
                            
                            function TODO() {
                                setTimeout(function(){
                                    ListenGenerator('alexa2.0.Lists.TO_DO.items.*.value',JSONEToDoListe)
                                },500);
                            }
                            
                            on({id: 'alexa2.0.Lists.SHOPPING_LIST.json', change: 'any'}, Einkaufsliste);
                            on({id: 'alexa2.0.Lists.TO_DO.json', change: 'any'}, TODO);
                            
                            

                            Ro75.

                            SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                            FuchsbauF 1 Antwort Letzte Antwort
                            0
                            • Ro75R Ro75

                              Habe das Skript oben korrigiert.

                              const JSONEinkaufsliste = '0_userdata.0.Alexa.Einkaufsliste';
                              const JSONEToDoListe    = '0_userdata.0.Alexa.ToDoListe';
                              
                              createState(JSONEinkaufsliste, '[]', {read: true, write: true, desc: 'JSON String for Widget', type: 'string', def: '[]'});
                              createState(JSONEToDoListe, '[]', {read: true, write: true, desc: 'JSON String for Widget', type: 'string', def: '[]'});
                              
                              function ListCleaner(Eintrag='') {
                                  const arr = Eintrag.split(' ');
                                  for (let i = 0; i < arr.length; i++) {
                                      arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
                                  }
                                  return arr.join(' ');
                              }
                              
                              function ListenGenerator(sQuelle='', sDP=''){
                                  var ListeLeer = 1;
                                  let Liste = [];
                                  $(sQuelle).each(function(id, i){
                                      if(getState(id.replace("value","completed")).val === false) {
                                          ListeLeer = 0; //dient einfach nur als merkmal, das die Liste nicht leer ist
                                          Liste.push({
                                              Eintrag: ListCleaner(getState(id).val)
                                          })
                                      }
                                  });
                                  if(ListeLeer == 1) {
                                      Liste.push({
                                          Eintrag: "kein Eintrag"
                                      })
                                  }
                                  setState(sDP, JSON.stringify(Liste), true);
                                  Liste = [];
                              }
                              
                              function Einkaufsliste(){
                                  setTimeout(function(){
                                      ListenGenerator('alexa2.0.Lists.SHOPPING_LIST.items.*.value',JSONEinkaufsliste)
                                  },500);
                              }
                              
                              function TODO() {
                                  setTimeout(function(){
                                      ListenGenerator('alexa2.0.Lists.TO_DO.items.*.value',JSONEToDoListe)
                                  },500);
                              }
                              
                              on({id: 'alexa2.0.Lists.SHOPPING_LIST.json', change: 'any'}, Einkaufsliste);
                              on({id: 'alexa2.0.Lists.TO_DO.json', change: 'any'}, TODO);
                              
                              

                              Ro75.

                              FuchsbauF Offline
                              FuchsbauF Offline
                              Fuchsbau
                              schrieb am zuletzt editiert von
                              #30

                              @ro75 Super danke Ro75, Jetzt läuft es. Ist auf jeden fall schonmal ein Anfang um die Alexa Liste auszulesen.
                              Mal schauen was man so daraus machen kann.

                              Danke
                              Fuchsbau

                              Ro75R 1 Antwort Letzte Antwort
                              0
                              • FuchsbauF Fuchsbau

                                @ro75 Super danke Ro75, Jetzt läuft es. Ist auf jeden fall schonmal ein Anfang um die Alexa Liste auszulesen.
                                Mal schauen was man so daraus machen kann.

                                Danke
                                Fuchsbau

                                Ro75R Online
                                Ro75R Online
                                Ro75
                                schrieb am zuletzt editiert von
                                #31

                                @fuchsbau sowas

                                ebfc2bc4-d102-4658-9c63-27d29d9df132-image.png

                                Ro75.

                                SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                                FuchsbauF 1 Antwort Letzte Antwort
                                0
                                • Ro75R Ro75

                                  @fuchsbau sowas

                                  ebfc2bc4-d102-4658-9c63-27d29d9df132-image.png

                                  Ro75.

                                  FuchsbauF Offline
                                  FuchsbauF Offline
                                  Fuchsbau
                                  schrieb am zuletzt editiert von
                                  #32

                                  @ro75 Anzeige im VIS, das wäre kein Problem. Ich denke jeher daran mit BRING zu synchronisieren oder in die HA Liste oder TODOIST. Ich muss mal schauen was mir gefällt.

                                  1 Antwort Letzte Antwort
                                  0
                                  • DickenD Offline
                                    DickenD Offline
                                    Dicken
                                    schrieb am zuletzt editiert von
                                    #33

                                    @fuchsbau sagte in Alexa Shopping List mit Bring synchronisieren:

                                    @ro75 Anzeige im VIS, das wäre kein Problem. Ich denke jeher daran mit BRING zu synchronisieren oder in die HA Liste oder TODOIST. Ich muss mal schauen was mir gefällt.

                                    Jau da überlege ich nächste Woche auch mal wie man das regeln kann.

                                    Ro75R 1 Antwort Letzte Antwort
                                    0
                                    • DickenD Dicken

                                      @fuchsbau sagte in Alexa Shopping List mit Bring synchronisieren:

                                      @ro75 Anzeige im VIS, das wäre kein Problem. Ich denke jeher daran mit BRING zu synchronisieren oder in die HA Liste oder TODOIST. Ich muss mal schauen was mir gefällt.

                                      Jau da überlege ich nächste Woche auch mal wie man das regeln kann.

                                      Ro75R Online
                                      Ro75R Online
                                      Ro75
                                      schrieb am zuletzt editiert von
                                      #34

                                      @dicken ich habe das Problem noch nicht erkannt.? Für unterwegs nutze ich die Alexa-App. Warum sollte ich da was nach Bring oder ToDoIst transferieren?

                                      Ro75.

                                      SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                                      DickenD 1 Antwort Letzte Antwort
                                      0
                                      • Ro75R Ro75

                                        @dicken ich habe das Problem noch nicht erkannt.? Für unterwegs nutze ich die Alexa-App. Warum sollte ich da was nach Bring oder ToDoIst transferieren?

                                        Ro75.

                                        DickenD Offline
                                        DickenD Offline
                                        Dicken
                                        schrieb am zuletzt editiert von
                                        #35

                                        @ro75 Sortierung der Einträge im nachhinein, hatten wir doch oben schon ;) nur weil dir das egal ist wie die reihenfolge in der app ist, muss es ja nicht allen anderen auch egal sein :D

                                        1 Antwort Letzte Antwort
                                        0
                                        • I IOMax

                                          @mcbirne said in Alexa Shopping List mit Bring synchronisieren:

                                          Hallo zusammen,

                                          Hat schon jemand ein Skript zur Synchronisation der Alexa-Einkaufsliste und Bring geschrieben?

                                          Das würde mich auch interessieren. Am besten in beide Richtungen

                                          icastillo15I Offline
                                          icastillo15I Offline
                                          icastillo15
                                          schrieb am zuletzt editiert von
                                          #36

                                          @iomax @mcBirne

                                          Hallo zusammen,

                                          da mich das gleiche Problem betrifft, habe ich mich mal an einem Skript dafür versucht.
                                          Über den Alexa und Bring Adapter werden jeweils die Listen abgeglichen in beide Richtungen.
                                          Alles was jeweils in der anderen Liste hinzugefügt wird, wird gesynct. Wenn in der Bring App Dinge als erledigt markiert werden, dann lösche ich diese aus der Alexa Liste komplett raus. Wenn in Alexa Dinge als markiert gesetzt werden, dann wandern die Items in der Bring app unter "zuletetzt verwendet".

                                          Am wichtigsten war mir aber, dass ich wieder "Alexa füge Birnen auf die Einkaufsliste" sagen kann und die Sachen wieder bei Bring habe :D

                                          Im ersten Test lief das Skript bei mir ganz gut - gerne mal selbst testen.

                                          Einfach in Zeile 1 auf die passende bring Liste bei euch anpassen der rest kann so bleiben

                                          const bringBaseId = 'bring.0.0f0c420c-3298-4911-91f5-7ed0fbbfd36e';
                                          const alexa2BaseId = 'alexa2.0.Lists.SHOPPING_LIST';
                                          
                                          const bringListId = bringBaseId + '.content';
                                          const bringListCompletedId = bringBaseId + '.recentContent';
                                          const bringAddToList = bringBaseId + '.saveItem';
                                          const bringCompleteItem = bringBaseId + '.moveToRecentContent';
                                          const alexaAddToList = alexa2BaseId + '.#New';
                                          const alexaListId = alexa2BaseId + '.json';
                                          
                                          //switch off to silence:
                                          const printDebug = true;
                                          
                                          function debug(msg) {
                                              if (printDebug) {
                                                  log(msg)
                                              }
                                          }
                                          
                                          const TodoItemStatus = {
                                              NeedsAction: 'needs_action',
                                              Completed: 'completed',
                                          };
                                          
                                          /**
                                           * @typedef bringItem
                                           * @type {object}
                                           * @property {string} specification
                                           * @property {string} name
                                           * @property {string} status
                                           * @property {boolean} [found] - keep track if found or not.
                                           */
                                          
                                          /**
                                           * @typedef alexaItem
                                           * @type {object}
                                           * @property {string} value
                                           * @property {string} id
                                           * @property {boolean} completed
                                           * @property {number} updatedDateTime
                                           * @property {boolean} [found] - keep track if found or not.
                                           */
                                          
                                          /**
                                           * Compare alexaItem complete and bringItem status -> returns true if same status.
                                           * @param {Array<alexaItem>} alexaList
                                           * @param {Array<bringItem>} list
                                           * @returns {boolean} true if same status.
                                          */
                                          function compareCompleted(alexaItem, bringItem) {
                                              if (alexaItem.completed && bringItem.status !== TodoItemStatus.Completed) {
                                                  return false;
                                              }
                                              if (!alexaItem.completed && bringItem.status !== TodoItemStatus.NeedsAction) {
                                                  return false;
                                              }
                                              return true;
                                          }
                                          
                                          /**
                                           * sync lists
                                           * @param {Array<alexaItem>} alexaList
                                           * @param {Array<bringItem>} list
                                           * @param {number} timestampBring
                                           * @param {string} msource
                                           * @param {Array<bringItem>} recentList
                                           * @returns {Array<bringItem>} new bring List
                                           */
                                          function syncLists(alexaList, list, timestampBring, msource, recentList) {
                                              const newBringList = [];
                                              var empty = true;
                                              for (const alexaItem of alexaList) {
                                          
                                                  for (const bringItem of list) {
                                                      empty = false;
                                          
                                                      if (bringItem.name === alexaItem.value) {
                                                          alexaItem.found = true;
                                                          bringItem.found = true;
                                          
                                          
                                                          //found item. Update completed state from 'newer' list: 
                                                          bringItem.status = TodoItemStatus.NeedsAction;
                                                          if (alexaItem.updatedDateTime > timestampBring) {
                                                              if (alexaItem.value !== bringItem.name || !compareCompleted(alexaItem, bringItem)) {
                                          
                                                                  if (msource === 'Alexa') {
                                                                     debug('Updating Bring item: ' + bringItem.name + ' from Alexa');
                                                                     setState(bringCompleteItem, bringItem.name);
                                                                  }                   
                                                              }
                                                          
                                                          } else {
                                                              //keep bring:
                                          
                                                              //update alexa:
                                                              if (!compareCompleted(alexaItem, bringItem)) {
                                                                  if (msource === 'Bring') {
                                                                      bringItem.status = TodoItemStatus.Completed;
                                                                      debug('Update  Alexa item: ' + alexaItem.value + ' to ' + (bringItem.status === TodoItemStatus.Completed ? 'done' : 'undone') + ' from Bring.');
                                                                      setState(`${alexa2BaseId}.items.${alexaItem.id}.completed`, bringItem.status === TodoItemStatus.Completed);
                                                                  } 
                                                              }
                                                          }
                                                      }
                                                  }
                                          
                                                  for (const bringItemCompleted of recentList) {
                                                      if (bringItemCompleted.name === alexaItem.value) {
                                                          alexaItem.found = true;
                                                          bringItemCompleted.found = true;
                                          
                                                          //found item. Update completed state from 'newer' list: 
                                                          bringItemCompleted.status = TodoItemStatus.Completed;
                                                          if (alexaItem.updatedDateTime > timestampBring) {
                                                              if (alexaItem.value !== bringItemCompleted.name || !compareCompleted(alexaItem, bringItemCompleted)) {
                                          
                                                                  if (msource === 'Alexa') {
                                                                     debug('Adding Bring item: ' + bringItemCompleted.name + ' from Alexa');
                                                                     setState(bringAddToList, bringItemCompleted.name);
                                                                  }                   
                                                              }
                                                          
                                                          } else {
                                                              //keep bring:
                                          
                                                              //update alexa:
                                                              if (!compareCompleted(alexaItem, bringItemCompleted)) {
                                                                  bringItemCompleted.status = TodoItemStatus.Completed;
                                                                  if (msource === 'Bring') {
                                                                      debug('Delete  Alexa item: ' + alexaItem.value + ' from Bring.');
                                                                      //setState(`${alexa2BaseId}.items.${alexaItem.id}.completed`, bringItemCompleted.status === TodoItemStatus.Completed);
                                                                      setState(`${alexa2BaseId}.items.${alexaItem.id}.#delete`, true);
                                                                  } 
                                                              }
                                                          }
                                                      }
                                                  }
                                          
                                          
                                                  if (!alexaItem.found) {
                                                      //alexa item not found:
                                                      if (alexaItem.completed) {
                                                          debug('Delete ' + alexaItem.value + ' because done and not in Bring list.');
                                                          setState(`${alexa2BaseId}.items.${alexaItem.id}.#delete`, true);
                                                      } else {
                                                          if (msource === 'Alexa') {
                                                              debug('Adding ' + alexaItem.value + ' to Bring list');
                                                              setState(bringAddToList, alexaItem.value);
                                                          }
                                                      }
                                                  }
                                          
                                                  if (empty === true) {
                                                      if (alexaItem.updatedDateTime < timestampBring) {
                                                          debug('Delete ' + alexaItem.value + ' from Alexa list because Bring list is all done.');
                                                          setState(`${alexa2BaseId}.items.${alexaItem.id}.#delete`, true);
                                                      }
                                                  }
                                              
                                              }
                                          
                                              for (const bringItem of list) {
                                                  if (!bringItem.found) {
                                                      if (bringItem.status === TodoItemStatus.Completed) {
                                                          //debug('Remove from bring item:  ' + bringItem.name + ' because done and not on alexa list');
                                                          //Not executed since I want to keep the recent items inside bring app
                                                      } else {
                                                          if (msource === 'Bring') {
                                                              debug('Adding ' + bringItem.name + ' to Alexa list.');
                                                              setState(alexaAddToList, bringItem.name);
                                                          }
                                                      }
                                                  }
                                              }
                                          
                                              return newBringList;
                                          }
                                          
                                          
                                          function doSync(source) {
                                              const alexaList = JSON.parse(getState(alexaListId).val);
                                              const state = getState(bringListId);
                                              const bringList = JSON.parse(state.val);
                                              const state2 = getState(bringListCompletedId);
                                              const bringListCompleted = JSON.parse(state2.val);
                                          
                                              syncLists(alexaList, bringList, state.ts, source, bringListCompleted);
                                          }
                                          
                                          
                                          on({id: bringListId, change: 'any'}, e => {
                                              debug('Update triggered from Bring');
                                              doSync('Bring');
                                          });
                                          
                                          on({id: alexaListId, change: 'any'}, e => {
                                              debug('Update triggered from Alexa');
                                              doSync('Alexa');
                                          });
                                          
                                          doSync();
                                          
                                          
                                          mcBirneM OreiderO FuchsbauF I 4 Antworten Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          683

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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