Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Script] Einkaufsliste –> Telegram

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[Script] Einkaufsliste –> Telegram

Scheduled Pinned Locked Moved Skripten / Logik
50 Posts 14 Posters 13.5k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    dna909
    wrote on last edited by
    #1

    Moin ioBroker-Gemeinde,

    angeregt durch ein Thread hier im Forum, habe ich mir ein kleines Script zurechtgeschustert, mit dem ich mir (und auch meiner Frau :-)) eine Einkaufsliste

    per Telegram zuschicken lassen kann.

    In Vis habe ich mir dazu eine View gebaut (sieht ein wenig aus wie an einer Supermarktwaage), in der ich alles was ich brauche (oder verbrauche) über

    Buttons anwählen kann. Wenn ich dann den Sende-Button drücke wird mir die generierte Einkausliste zugeschickt.

    Hier mal das Script:

    <size size="150">Version vom 02.11.2017</size>

    ! ````
    // Einkaufsliste
    //
    // v0.0 Erstellung
    // v0.1 sendTo Telegram
    // v0.2 Split in 2 Kategorien (Lebensmittel + Drogerieartikel)
    // v0.3 Liste für Drogerieartikel kann separat erzeugt werden
    // v0.5 Optimierung
    // v0.6 Defaultmengen implementiert + Mengen werden nach Telegram gesendet
    // v0.7 Formatierung Telegram-Nachricht angepasst
    //
    // Datenpunkte:
    // ---------------------------------------------
    // FoodCatFood Kategorie für Umschaltung in der Visualisierung (Lebensmittel)
    // FoodCatVeg Kategorie für Umschaltung in der Visualisierung (Obst/Gemüse)
    // FoodCatDrink Kategorie für Umschaltung in der Visualisierung (Getränke)
    // DrugCat Kategorie für Umschaltung in der Visualisierung (Drogerieartikel)
    // Visibility Sichtbarkeit (Wertebereich 0-3)
    // FoodListGenerate Wert auf true setzen um Gesamteinkaufsliste zu generieren
    // DrugListGenerate Wert auf true setzen um Drogerieartikeleinkaufsliste zu generieren
    // Delete Wert auf true setzen um gesamte Liste zu löschen
    //
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ! var FoodList=new Array("Eier",6,"Mischbrot",1,"Toastbrot",1,"Butter",250,"Honig",1,"Konfitüre",1,"Wurst",1,"Käse",1,"Öl",1,
    "Zucker",1,"Mehl",1,"Milch",1,"Salz",500,"Senf",1,"Ketchup",1,"Apfel",1,"Birne",1,"Kiwi",1,"Banane",1,
    "Trauben",500,"Nektarine",1,"Wasser",1,"Apfelsaft",1,"Orangensaft",1,"Zwiebeln",500,"Knoblauch",1,
    "Lauchzwiebeln",1,"Brokkoli",1,"Blumenkohl",1,"Paprika",1,"Kartoffeln",1,"Möhren",1,"Pilze",1,
    "Zucchini",1,"Gurke",1,"Joghurt",1,"Süssigkeiten",1,"Lea-Wasser",1,"Tomaten",1,"Gewürzgurken",1,
    "Fisch",1,"Fleisch",1,"Hackfleisch",500,"Hähnchenfleisch",500,"Kräuter",1,"Spinat",1,"TK-Gemüse",1,
    "Ananas",1,"Clementinen",1,"Melone",1,"Mango",1,"Pflaumen",1,"Avocado",1,"Süßkartoffel",1,"Kräuterquark",1,
    "Quark",1,"Cola",1,"Fanta",1,"Sprite",1,"Bier",6,"Dosentomaten",1,"Tee",1,"Sossenbinder-hell",1,"Sossenbinder-dunkel",1,
    "Hefe",2,"Backpulver",1,"Vanillezucker",1,"Pizza",2,"Nudeln",1,"Schlagsahne",1,"Eisbergsalat",1,"Suppengrün",1,
    "Mandeln",2,"Rotwein",1,"Chinagemüse",1,"Dosenmais",1,"Essig",1,"Frosta-Gericht",1,"Reis",1,"Sojasoße",1,
    "Tomatenmark",1,"Fischstäbchen",1);

    var DrugList=new Array("Badreiniger",1,"Waschmittel",1,"Taschentücher",1,"Tampons",1,
    "Wattestäbchen",1,"Wattepads",1,"Blauspüler",1,"Deo",1,"Zahnpasta",1,"Küchenpapier",1,"Mülltüten",1,
    "Toilettenpapier",1,"Abschminktücher",2,"Duschbad",2,"Geschirrspültabs",1,"Geschirrspülersalz",1,
    "Lea-Brei",4,"Flaschenbürste",1,"Quetschies",2,"Lea-Zwieback",1,"Spülung",1,"Shampoo",1,
    "Spüllappen",1,"Toilettenpapier-feucht",1,"Topfschwämme",1,"Lea-Reiswaffeln",1,"Backpapier",1,
    "Gefrierbeutel",1,"Klarspüler",1);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    var LengthListFood=(FoodList.length)-1;
    var LengthListDrug=(DrugList.length)-1;
    var Path="javascript.0.Einkaufsliste."; //Pfad Datenpunkte
    var Food=Path+"FoodCatFood";
    var Veg =Path+"FoodCatVeg";
    var Drink=Path+"FoodCatDrink";
    var Drug=Path+"DrugCat";
    var Visibility=Path+"Visibility";
    var FoodListGenerate=Path+"FoodListGenerate";
    var DrugListGenerate=Path+"DrugListGenerate";
    var ListType=Path+"ListType";
    var Delete=Path+"Delete";
    var FoodListJSON=Path+"FoodListJSON";
    var Telegram=Path+"Telegram";

    ! ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ! createAllStates();
    ! //***************************************************************************************************************************
    ! on({id: (Food) , change: "ne"}, function (obj) {
    ! if (getState(Food).val === true){
    setState(Food,false);
    setState(Veg,false);
    setState(Drink,false);
    setState(Drug,false);
    setState(Visibility,0);
    }
    });

    on({id: (Veg) , change: "ne"}, function (obj) {
    if (getState(Veg).val === true){
    setState(Veg,false);
    setState(Food,false);
    setState(Drink,false);
    setState(Drug,false);
    setState(Visibility,1);
    }
    });

    on({id: (Drink) , change: "ne"}, function (obj) {
    if (getState(Drink).val === true){
    setState(Drink,false);
    setState(Food,false);
    setState(Veg,false);
    setState(Drug,false);
    setState(Visibility,2);
    }
    });

    ! on({id: (Drug) , change: "ne"}, function (obj) {
    if (getState(Drug).val === true){
    setState(Drink,false);
    setState(Food,false);
    setState(Veg,false);
    setState(Drug,false);
    setState(Visibility,3);
    }
    });

    on({id: (FoodListGenerate), change: "ne"}, function (obj) {
    var CounterPositionFood=0;

    if (getState(FoodListGenerate).val === true) {
    setState(ListType, 1);
    CreateShoppingList();    
    setState(FoodListGenerate, false);
    }
    

    });

    ! on({id: (DrugListGenerate), change: "ne"}, function (obj) {
    var CounterPositionDrug=0;

    if (getState(DrugListGenerate).val === true) {
    setState(ListType, 2);
    CreateShoppingListDrug();    
    setState(DrugListGenerate, false);
    }
    

    });

    ! on({id: (Delete), change: "ne"}, function (obj) {

    if (getState(Delete).val === true) {
    CounterDeleteStates_();
    DeleteFoodStates(); 
    CounterDeleteStates_();
    DeleteDrugStates();
    setState(Delete, false);
    }
    

    });

    ! ///// Einkaufsliste erzeugen //////////////////////////////////////////////////////////////////
    ! function CreateShoppingList(){

    var CounterPositionFood=0;
    var CounterFoodStates=0;
    var CounterDrugStates=0;
    var ShoppingList=["{"];
    
    CreateShoppingListLoopAll();
    
    function CreateShoppingListLoopAll(){
    
    	CreateShoppingListLoopFood();
    	CreateShoppingListLoopDrug();
    
    function CreateShoppingListLoopFood(){
    if (CounterFoodStates <= LengthListFood ) {
    

    ! if (getState(Path+FoodList[CounterFoodStates]).val === true){
    ShoppingList=ShoppingList+ '"' + "Artikel" + String.fromCharCode(97+CounterPositionFood) + '":"' + FoodList[CounterFoodStates]+'",';
    var FoodAmount=getState(Path+FoodList[CounterFoodStates]+".Menge").val
    ShoppingList=ShoppingList+ '"' + "Menge" + String.fromCharCode(97+CounterPositionFood) + '":"' + FoodAmount +'",';
    CounterPositionFood++;
    }
    CounterFoodStates++;
    CounterFoodStates++;
    CreateShoppingListLoopFood();
    }
    }
    ! function CreateShoppingListLoopDrug(){
    if (CounterDrugStates <= LengthListDrug ) {
    if (getState(Path+DrugList[CounterDrugStates]).val === true){
    ShoppingList=ShoppingList+ '"' + "Artikel" + String.fromCharCode(97+CounterPositionFood) + '":"' + DrugList[CounterDrugStates]+'",';
    var DrugAmount=getState(Path+DrugList[CounterDrugStates]+".Menge").val
    ShoppingList=ShoppingList+ '"' + "Menge" + String.fromCharCode(97+CounterPositionFood) + '":"' + DrugAmount +'",';
    ! CounterPositionFood++;
    }
    CounterDrugStates++;
    CounterDrugStates++;
    CreateShoppingListLoopDrug();
    }
    }
    ! if (CounterPositionFood === 0){
    console.log("NIX EINZUKAUFEN!!!");
    return;
    }
    }
    ! var ShoppingListTemp = (ShoppingList.substr(0, ShoppingList.length-1)+"}");
    ShoppingList=ShoppingListTemp;
    setState(FoodListJSON , ""+ ShoppingList + "");
    setTimeout(SendToTelegram,4000);
    }
    ! /////nur Drogerieartikel//////////////////////////////////////////////////////////////
    ! function CreateShoppingListDrug(){

    var CounterPositionFood=0;
    var CounterDrugStates=0;
    var ShoppingList=["{"];
    
    CreateShoppingListLoopDrugOnly();
    
    function CreateShoppingListLoopDrugOnly(){
    

    ! if (CounterDrugStates <= LengthListDrug ) {
    if (getState(Path+DrugList[CounterDrugStates]).val === true){
    ShoppingList=ShoppingList+ '"' + "Artikel" + String.fromCharCode(97+CounterPositionFood) + '":"' + DrugList[CounterDrugStates]+'",';
    var DrugAmount=getState(Path+DrugList[CounterDrugStates]+".Menge").val
    ShoppingList=ShoppingList+ '"' + "Menge" + String.fromCharCode(97+CounterPositionFood) + '":"' + DrugAmount +'",';
    CounterPositionFood++;
    }
    CounterDrugStates++;
    CounterDrugStates++;
    CreateShoppingListLoopDrugOnly();
    }
    }
    ! if (CounterPositionFood === 0){
    console.log("NIX EINZUKAUFEN!!!");
    return;
    }
    ! var ShoppingListTemp = (ShoppingList.substr(0, ShoppingList.length-1)+"}");
    ShoppingList=ShoppingListTemp;
    setState(FoodListJSON, ""+ ShoppingList + "");
    setTimeout(SendToTelegram,4000);
    }
    ! /////////////////////////////////////////////////////////////////////////////////////////////////////
    ! function SendToTelegram(){
    ! var List=getState(FoodListJSON).val;
    var parseJSON = JSON.parse(List);
    var TelegramCounter=0;
    var TelegramT="";
    ! GenerateTelegram();
    ! function GenerateTelegram(){

        if (TelegramCounter < LengthListFood ){
            var CounterChar="Artikel" + String.fromCharCode(97+TelegramCounter);
            var CounterCharAmount="Menge" + String.fromCharCode(97+TelegramCounter);
            item=parseJSON[CounterChar];
            var amount=parseJSON[CounterCharAmount];
    
            if (typeof item==="undefined"){
                return;
            }
            NumberOfSpaces=25 - (item.length);
            SpacesTemp="____________________________";
            Spaces=SpacesTemp.substr(1,NumberOfSpaces);
    
            TelegramT=TelegramT + "`" + item  + Spaces + "`" + "*" + amount + "*" + "\n";
            TelegramCounter++;
            GenerateTelegram();
        }
    

    }
    setState(Telegram ,TelegramT);

    ! setTimeout(Send,2000);

    function Send(){

    if (getState(ListType).val === 1) {
    ListTypeText="Die Einkaufsliste für heute:\n\n\n";
    }else{
    if (getState(ListType).val === 2) {
    ListTypeText="Die Drogerieartikel-Einkaufsliste für heute:\n\n\n";
    }
    }
    //******* 1. Telegram-Instanz *************************************************
    sendTo("telegram.0", "send", {
    text: ListTypeText + (getState(Path+"Telegram").val),
    parse_mode: 'Markdown'
    });

    ! //******* 2. Telegram-Instanz *************************************************

    sendTo("telegram.1", "send", {
          text: ListTypeText + (getState(Path+"Telegram").val),
          parse_mode: 'Markdown'
    });
    

    //****************************************************************************************

    TelegramT="";
    setState(Telegram ,"");
    }
    }

    ! /////////////////////////////////////////////////////////////////////////////////////////////////////
    ! function DeleteFoodStates(){
    ! if (CounterDeleteStates <= LengthListFood ) {
    ! setState(Path + FoodList[CounterDeleteStates], false);
    CounterDeleteStates++;
    CounterDeleteStates++
    DeleteFoodStates();
    }
    }
    ! function DeleteDrugStates(){
    ! if (CounterDeleteStates <= LengthListDrug ) {
    ! setState(Path + DrugList[CounterDeleteStates], false);
    CounterDeleteStates++;
    CounterDeleteStates++
    DeleteDrugStates();
    }
    }
    ! function CounterDeleteStates_(){
    CounterDeleteStates=0;
    }
    ! function createAllStates(){
    ! createState(FoodListJSON, "", {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste JSON',
    type: 'string',
    read: 'true',
    write: 'true'
    });
    ! createState(Telegram, "", {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'string',
    read: 'true',
    write: 'true'
    });

    createState(ListType, 0, {
    name: 'Einkaufsliste',
    desc: 'Einkaufsliste',
    type: 'number',
    role: 'state',

    });       	
    

    createState(FoodListGenerate, false, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });  
    

    ! createState(DrugListGenerate, false, {
    name: 'Drogerie',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });  
    

    ! createState(Drink, false, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });       
    

    ! createState(Veg, false, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });       
    

    ! createState(Food, false, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });       
    

    createState(Drug, false, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });           
    

    ! createState(Visibility, 0, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'number',
    role: 'state',

    });       
    

    ! createState(Delete, false, {
    name: 'Lebensmittel',
    desc: 'Einkaufsliste',
    type: 'boolean',
    role: 'state',

    });           
    

    ! var CounterCreateStatesFood=0;
    var CounterCreateStatesDrug=0;
    createAllStatesLoop();
    ! function createAllStatesLoop(){

    createAllStatesLoopFood();
    
    CreateAllStatesLoopDrug();
    

    ! function createAllStatesLoopFood(){
    ! if (CounterCreateStatesFood <= LengthListFood ) {
    ! createState(Path + FoodList[CounterCreateStatesFood], false, {
    name: 'Lebensmittel',
    desc: FoodList[CounterCreateStatesFood],
    type: 'boolean',
    role: 'state',
    unit: ''
    });

    createState(Path + (FoodList[CounterCreateStatesFood]) + ".Menge", (FoodList[CounterCreateStatesFood+1]), {
    name: 'Lebensmittel',
    desc: FoodList[CounterCreateStatesFood],
    type: 'number',
    role: 'state',
    unit: ''
    });

    ! CounterCreateStatesFood++;
    CounterCreateStatesFood++;
    createAllStatesLoopFood();
    }
    }
    ! function CreateAllStatesLoopDrug(){
    ! if (CounterCreateStatesDrug <= LengthListDrug ) {
    ! createState(Path + DrugList[CounterCreateStatesDrug], false, {
    name: 'Drogerie',
    desc: DrugList[CounterCreateStatesDrug],
    type: 'boolean',
    role: 'state',
    unit: ''
    });

    createState(Path + (DrugList[CounterCreateStatesDrug]) + ".Menge", (DrugList[CounterCreateStatesDrug+1]), {
    name: 'Drogerie',
    desc: DrugList[CounterCreateStatesDrug],
    type: 'number',
    role: 'state',
    unit: ''
    });

    CounterCreateStatesDrug++;
    CounterCreateStatesDrug++;
    CreateAllStatesLoopDrug();
    

    }
    }
    }
    }

    
    Für jeden Artikel wird ein Datenpunkt erzeugt. Wähle ich in der Visualisierung einen Artikel aus, wird der entsprechende Datenpunkt auf true gesetzt.
    
    Die Artikel sind zur Zeit in 2 Kategorien unterteilt. Lebensmittel und Drogerieartikel.
    
    Das Script erzeugt entweder eine Gesamtliste, oder nur eine Liste mit den Drogerieartikeln.
    
    Falls Interesse bestehen sollte, könnte ich die View bestimmt auch noch bereitstellen.
    
    Hier noch ein paar Bilder:
    
    >!  ![2269_1.png](/assets/uploads/files/2269_1.png)  ![2269_2.png](/assets/uploads/files/2269_2.png)  ![2269_3.png](/assets/uploads/files/2269_3.png)  ![2269_4.png](/assets/uploads/files/2269_4.png)  ![2269_screenshot_20171030-111008.png](/assets/uploads/files/2269_screenshot_20171030-111008.png) 
    
    mfg
    
    dna909

    Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

    1 Reply Last reply
    0
    • D Offline
      D Offline
      dwm
      wrote on last edited by
      #2

      Coole Idee … Danke!

      1 Reply Last reply
      0
      • P Offline
        P Offline
        pix
        wrote on last edited by
        #3

        Hi,

        sehr cool ungesetzt. Du kannst nun noch eine mobile View basteln, die du beim Einkaufen per VPN, cloud.pro oder Proxy aufrufst und dort die gekauften Dinge wieder abwählst.

        Dann hast du ziemlich genau die Funktion von Bring!

        Gruß

        Pix

        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

        1 Reply Last reply
        0
        • D Offline
          D Offline
          dna909
          wrote on last edited by
          #4

          @pix:

          Hi,

          sehr cool ungesetzt. Du kannst nun noch eine mobile View basteln, die du beim Einkaufen per VPN, cloud.pro oder Proxy aufrufst und dort die gekauften Dinge wieder abwählst.

          Dann hast du ziemlich genau die Funktion von Bring!

          Gruß

          Pix `

          Kann mir im Moment nur die Einkaufsliste per Handy anfordern. Editieren überleg ich noch. Mal schaun ob ich da was vernünftiges gebastelt kriege.

          ! 2269_screenshot_20171030-121710.png

          Gruß

          dna909

          Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

          1 Reply Last reply
          0
          • T Offline
            T Offline
            tempestas
            wrote on last edited by
            #5

            Super Sache, hätte ich selbst nie umsetzen können. Aber mit deiner Vorarbeit schaue ich mal, was ich hinbekomme. Vielen Dank

            <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

            1 Reply Last reply
            0
            • lobomauL Offline
              lobomauL Offline
              lobomau
              wrote on last edited by
              #6

              Cool wäre noch die Preise vom Rewe, Aldi und Lidl um die Ecke zu vergleichen, damit ich weiß wo ich was kaufen sollte ;) :ugeek:

              Host: NUC8i3 mit Proxmox:

              • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
              • Slave: Pi4
              1 Reply Last reply
              0
              • D Offline
                D Offline
                dna909
                wrote on last edited by
                #7

                Die Idee ist garnicht mal so verkehrt. Aber ich glaube da fehlt mir dann doch einfach die Zeit für. Falls es sonst noch Ideen gibt, immer her damit [emoji16]

                Gruß

                dna909

                Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

                1 Reply Last reply
                0
                • Jey CeeJ Online
                  Jey CeeJ Online
                  Jey Cee
                  Developer
                  wrote on last edited by
                  #8

                  Ich hätte da eine. Du könntest noch Mengen Angaben hinzufügen.

                  Konkret stelle ich mir vor das ein popup aufgeht in dem man die Menge eingeben kann.

                  Gesendet von Unterwegs

                  Persönlicher Support
                  Spenden -> paypal.me/J3YC33

                  1 Reply Last reply
                  0
                  • D Offline
                    D Offline
                    dna909
                    wrote on last edited by
                    #9

                    Das hatte ich auch geplant. Die Datenpunkte dafür, werden vom Script ja schpn erzeugt. Muss mal schaun, wie ich das am Besten mache….

                    Gruß

                    dna909

                    Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      pix
                      wrote on last edited by
                      #10

                      Hallo,

                      aus meiner Erfahrung sollte die Mengenangabe (eben auch wie bei Bring!) als String gespeichert werden. Dann ist sie mehr eine Gedächtnisstütze, so wie die ganze Liste.

                      Die Akzeptanz für die Software schwindet, wenn man zu viele Eingaben machen muss. Wenn du also die Mengen als Zahl speicherst und auch noch eine Einheit (zB aus dropdown-Liste) forderst, wird das schnell unkomfortabel.

                      Da würde ich lieber ein Zusatzfeld für eben Zusatzinfos in Textform ermöglichen ("1kg-Paket, wenn Angebot, dann Tabs" oder "mindestens 2x" sind doch typische Anweisungen, wenn man zum Einkaufen geschickt wird 8-) )

                      Und wenn es tatsächlich jemand hinbekommt, die Preise von Discountern einzulesen, wird er es mühelos schaffen, aus den Textfeldern die Mengen rauszuparsen :lol:

                      Gruß

                      Pix

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Reply Last reply
                      0
                      • DutchmanD Offline
                        DutchmanD Offline
                        Dutchman
                        Developer Most Active Administrators
                        wrote on last edited by
                        #11

                        @pix:

                        Hallo,

                        aus meiner Erfahrung sollte die Mengenangabe (eben auch wie bei Bring!) als String gespeichert werden. Dann ist sie mehr eine Gedächtnisstütze, so wie die ganze Liste.

                        Die Akzeptanz für die Software schwindet, wenn man zu viele Eingaben machen muss. Wenn du also die Mengen als Zahl speicherst und auch noch eine Einheit (zB aus dropdown-Liste) forderst, wird das schnell unkomfortabel.

                        Da würde ich lieber ein Zusatzfeld für eben Zusatzinfos in Textform ermöglichen ("1kg-Paket, wenn Angebot, dann Tabs" oder "mindestens 2x" sind doch typische Anweisungen, wenn man zum Einkaufen geschickt wird 8-) )

                        Und wenn es tatsächlich jemand hinbekommt, die Preise von Discountern einzulesen, wird er es mühelos schaffen, aus den Textfeldern die Mengen rauszuparsen :lol:

                        Gruß

                        Pix `

                        Man könnte einfach eine + Button machen für die Anzahl (optional)

                        Ich habe gesucht aber keine api für Preise gefunden :/

                        –-----------------------

                        Send from mobile device

                        1 Reply Last reply
                        0
                        • fischi87F Online
                          fischi87F Online
                          fischi87
                          wrote on last edited by
                          #12

                          Mega Arbeit, sehr cool und definitiv erweiterbar. Klasse Sache!!!!!! werde es weiterverfolgen.

                          1 Reply Last reply
                          0
                          • T Offline
                            T Offline
                            tempestas
                            wrote on last edited by
                            #13

                            Hi dna909,

                            angeregt von deinem Skript bin ich ebenfalls mal beigegangen. Meins ist (teilweise) anders aufgebaut, funktioniert soweit auch.

                            Da ich gerne lerne und begreife wäre ich dir dankbar, wenn du mir diesen Teil erklären könntest. Was tut das string.fromCharCode da?

                                    if (getState(Path+FoodList[CounterFoodStates]).val === true){
                                        ShoppingList=ShoppingList+ '"' + String.fromCharCode(97+CounterPositionFood) + '":"' + FoodList[CounterFoodStates]+'",';
                                        CounterPositionFood++;
                                    }
                            

                            Danke!

                            <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                            1 Reply Last reply
                            0
                            • D Offline
                              D Offline
                              dna909
                              wrote on last edited by
                              #14

                              @tempestas:

                              Hi dna909,

                              angeregt von deinem Skript bin ich ebenfalls mal beigegangen. Meins ist (teilweise) anders aufgebaut, funktioniert soweit auch.

                              Da ich gerne lerne und begreife wäre ich dir dankbar, wenn du mir diesen Teil erklären könntest. Was tut das string.fromCharCode da?

                                      if (getState(Path+FoodList[CounterFoodStates]).val === true){
                                          ShoppingList=ShoppingList+ '"' + String.fromCharCode(97+CounterPositionFood) + '":"' + FoodList[CounterFoodStates]+'",';
                                          CounterPositionFood++;
                                      }
                              

                              Danke! `

                              Hi tempestas,

                              da ich die ganze Einkaufsliste auch als JSON zusammenbaue und in einem JSON der Schlüssel nicht aus einer Zahl bestehen darf, habe ich es so gelöst:

                              Ich nehme den Zähler und addiere den Wert 97 dazu, daraus erzeuge ich dann ein ASCII-Zeichen, mit String.fromCharCode.

                              Somit ist der Schlüssel im JSON ein "a".

                              Das JSON sieht dann z.B. so aus:

                              {"a":"Mischbrot","b":"Toastbrot","c":"Wurst","d":"Pilze","e":"Hackfleisch","f":"Kräuterquark","g":"Suppengrün"}

                              Er zählt dann halt das Alphabet durch. Habe aber noch nicht getestet, was passiert, wenn er die 26 Buchstaben durch hat.

                              Ich hoffe die Erklärung war soweit verständlich :-)

                              Gruß

                              dna909

                              Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

                              1 Reply Last reply
                              0
                              • fischi87F Online
                                fischi87F Online
                                fischi87
                                wrote on last edited by
                                #15

                                Servus, hab mir das Skript jetzt mal gezogen und dich bitte mal zu erläutern wie du das in die view eingesetzt hast, vielleicht ein per Beispiele dazu.

                                danke dir echt super Arbeit.

                                1 Reply Last reply
                                0
                                • D Offline
                                  D Offline
                                  dna909
                                  wrote on last edited by
                                  #16

                                  @fischi87:

                                  Servus, hab mir das Skript jetzt mal gezogen und dich bitte mal zu erläutern wie du das in die view eingesetzt hast, vielleicht ein per Beispiele dazu.

                                  danke dir echt super Arbeit. `

                                  Hallo fischi,

                                  ich stelle einfach mal die relevanten Views als Export bereit. Vielleicht erklärt sich das Meiste dadurch schon. Ansonsten bin ich gern bereit, das Ganze auch noch ausführlicher zu machen. In den Views sind jetzt auch schon die Mengen eingebaut. Sobald ein Artikel angewählt wird, wird die Mengenauswahl dazu eingeblendet.

                                  ! 2269_beispiel.png

                                  Muß jetzt nur noch das Script anpassen :-)

                                  Hier die Views:

                                  ! 2269_einkaufsliste.txt filename="Obst_Gemüse.txt" index="0">~~ 2269_lebensmittel.txt filename="Getränke.txt" index="2">~~ 2269_drogerie.txt

                                  Gruß

                                  dna909

                                  Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

                                  1 Reply Last reply
                                  0
                                  • T Offline
                                    T Offline
                                    tempestas
                                    wrote on last edited by
                                    #17

                                    @dna909:

                                    @tempestas:

                                    Hi dna909,

                                    angeregt von deinem Skript bin ich ebenfalls mal beigegangen. Meins ist (teilweise) anders aufgebaut, funktioniert soweit auch.

                                    Da ich gerne lerne und begreife wäre ich dir dankbar, wenn du mir diesen Teil erklären könntest. Was tut das string.fromCharCode da?

                                            if (getState(Path+FoodList[CounterFoodStates]).val === true){
                                                ShoppingList=ShoppingList+ '"' + String.fromCharCode(97+CounterPositionFood) + '":"' + FoodList[CounterFoodStates]+'",';
                                                CounterPositionFood++;
                                            }
                                    

                                    Danke! `

                                    Hi tempestas,

                                    da ich die ganze Einkaufsliste auch als JSON zusammenbaue und in einem JSON der Schlüssel nicht aus einer Zahl bestehen darf, habe ich es so gelöst:

                                    Ich nehme den Zähler und addiere den Wert 97 dazu, daraus erzeuge ich dann ein ASCII-Zeichen, mit String.fromCharCode.

                                    Somit ist der Schlüssel im JSON ein "a".

                                    Das JSON sieht dann z.B. so aus:

                                    {"a":"Mischbrot","b":"Toastbrot","c":"Wurst","d":"Pilze","e":"Hackfleisch","f":"Kräuterquark","g":"Suppengrün"}

                                    Er zählt dann halt das Alphabet durch. Habe aber noch nicht getestet, was passiert, wenn er die 26 Buchstaben durch hat.

                                    Ich hoffe die Erklärung war soweit verständlich :-)

                                    Gruß

                                    dna909 `

                                    Vielen Dank, hat mir geholfen.

                                    Da ich (per Stand jetzt) keine Mengeneingaben mit einbaue, reicht mir eine einfache String Variable, in die ich alles reinschreibe.

                                    Oder übersehe ich einen Grund, warum du explizit ein JSON nimmst? (eins der vielen Themen, bei denen ich mich nicht auskenne)

                                    <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                    1 Reply Last reply
                                    0
                                    • fischi87F Online
                                      fischi87F Online
                                      fischi87
                                      wrote on last edited by
                                      #18

                                      @dna909:

                                      @fischi87:

                                      Servus, hab mir das Skript jetzt mal gezogen und dich bitte mal zu erläutern wie du das in die view eingesetzt hast, vielleicht ein per Beispiele dazu.

                                      danke dir echt super Arbeit. `

                                      Hallo fischi,

                                      ich stelle einfach mal die relevanten Views als Export bereit. Vielleicht erklärt sich das Meiste dadurch schon. Ansonsten bin ich gern bereit, das Ganze auch noch ausführlicher zu machen. In den Views sind jetzt auch schon die Mengen eingebaut. Sobald ein Artikel angewählt wird, wird die Mengenauswahl dazu eingeblendet.

                                      ! Beispiel.PNG

                                      Muß jetzt nur noch das Script anpassen :-)

                                      Hier die Views:

                                      ! Einkaufsliste.txtObst_Gemüse.txtLebensmittel.txtGetränke.txtDrogerie.txt

                                      Gruß

                                      dna909 `

                                      ich danke dir sehr für deine schnelle Antwort.

                                      lass es mich bzw uns wissen wenn das script angepasst ist ;)

                                      1 Reply Last reply
                                      0
                                      • D Offline
                                        D Offline
                                        dna909
                                        wrote on last edited by
                                        #19

                                        Aktuelle Version ist immer im 1.Beitrag.

                                        dna909

                                        Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

                                        1 Reply Last reply
                                        0
                                        • D Offline
                                          D Offline
                                          dna909
                                          wrote on last edited by
                                          #20

                                          So, das Script habe ich angepasst.

                                          Darf dann getestet werden :-)

                                          dna909

                                          Intel NUC7PJYH mit Proxmox, Odroid U2, CCU2, Philips Hue, ESP8266, Xiaomi Robot, Google Chromecast Audio, Instar 6012HD, Bosch HNG6764S6

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          434

                                          Online

                                          32.7k

                                          Users

                                          82.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe