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. Praktische Anwendungen (Showcase)
  4. [Javascript] für Warnungen von Lebensmittelwarnung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    299

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

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

[Javascript] für Warnungen von Lebensmittelwarnung

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
javascriptlebensmittelwarnung
311 Posts 24 Posters 59.7k Views 31 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.
  • liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    wrote on last edited by
    #115

    @SBorg

    tolles script

    habe eine html tabelle für dieses script erzeugt - https://forum.iobroker.net/topic/35474/html-tabelle-lebensmittel-warnung

    smart48.gif

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    SBorgS 1 Reply Last reply
    0
    • liv-in-skyL liv-in-sky

      @SBorg

      tolles script

      habe eine html tabelle für dieses script erzeugt - https://forum.iobroker.net/topic/35474/html-tabelle-lebensmittel-warnung

      smart48.gif

      SBorgS Offline
      SBorgS Offline
      SBorg
      Forum Testing Most Active
      wrote on last edited by
      #116

      @liv-in-sky Auch nicht schlecht :)

      ...aber mal Teil-OT: ich bin ja echt schon erschrocken (überrascht war gestern...) was da so alles in den letzten Monaten seit ich es nutze auftaucht. Da war auch einiges von den Discountern dabei. Zwar nichts was ich gekauft hätte, aber bis auf ein- oder zweimal sah ich nie einen Hinweis auf einen Rückruf bei denen.
      "Was machen auch schon ein paar [mögliche] Plastikteilchen im Essen aus..."

      LG SBorg ( SBorg auf GitHub)
      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

      liv-in-skyL 2 Replies Last reply
      0
      • SBorgS SBorg

        @liv-in-sky Auch nicht schlecht :)

        ...aber mal Teil-OT: ich bin ja echt schon erschrocken (überrascht war gestern...) was da so alles in den letzten Monaten seit ich es nutze auftaucht. Da war auch einiges von den Discountern dabei. Zwar nichts was ich gekauft hätte, aber bis auf ein- oder zweimal sah ich nie einen Hinweis auf einen Rückruf bei denen.
        "Was machen auch schon ein paar [mögliche] Plastikteilchen im Essen aus..."

        liv-in-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        wrote on last edited by
        #117

        @SBorg hab dein script erst gestern entdeckt - bin auch mal gespannt, was da so alles kommen wird

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        1 Reply Last reply
        0
        • O Offline
          O Offline
          obakuhl
          Developer
          wrote on last edited by
          #118

          Das Skript funktioniert soweit super, vielen Dank für die Arbeit :grin:
          Ich habe nur den String für das Objekt "Titel" modifiziert. Hintergrund ist, das ich einen Gotify PushServer verwende und hier die Anführungszeichen ("), die in manchen Titelbeschreibungen vorhanden sind, den Syntax in dem exec Aufruf verändert haben, sodass nur ein Teil des Titels als Benachrichtigung ankam. Mit .replace() kann man dieses Zeichen entfernen. Ebenso entferne ich die Zeichen „ und “. Da es jetzt vorkommen kann, dass der String mit Leerzeichen beginnt bzw. endet entfernt man diese mit .trim().

          Ich habe im JavascriptCode folgendes ergänzt:

          //Anfuehrungszeichen ersetzen 
          entry.title = entry.title.replace(/["„“]/g, "");
          
          //Entferne Leerzeichen
          entry.title = entry.title.trim();
          

          Das ganze muss vor dem Setzen der Variable "entry.title" geschehen, d.h. vor dem Aufruf:

          setState(DP+'.Nummer_'+i+'.Titel', entry.title);
          

          Evtl. hat jemand dasselbe Problem, das wäre ein Lösungsvorschlag :nerd_face:

          1 Reply Last reply
          0
          • SBorgS SBorg

            @liv-in-sky Auch nicht schlecht :)

            ...aber mal Teil-OT: ich bin ja echt schon erschrocken (überrascht war gestern...) was da so alles in den letzten Monaten seit ich es nutze auftaucht. Da war auch einiges von den Discountern dabei. Zwar nichts was ich gekauft hätte, aber bis auf ein- oder zweimal sah ich nie einen Hinweis auf einen Rückruf bei denen.
            "Was machen auch schon ein paar [mögliche] Plastikteilchen im Essen aus..."

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            wrote on last edited by
            #119

            @SBorg hi

            habe seit update des neuen javascript adapters auf 4.10.8 einen fehler im script - hast du das auch schon beobachten können ?

            Image 2.png

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            SBorgS NegaleinN 2 Replies Last reply
            0
            • liv-in-skyL liv-in-sky

              @SBorg hi

              habe seit update des neuen javascript adapters auf 4.10.8 einen fehler im script - hast du das auch schon beobachten können ?

              Image 2.png

              SBorgS Offline
              SBorgS Offline
              SBorg
              Forum Testing Most Active
              wrote on last edited by
              #120

              @liv-in-sky Nein, noch nicht. Ich nutze die 4.10.8 seit erscheinen. Funktioniert soweit und Meldungen trudeln auch jede Menge ein :) ... oder besser :(
              Ev. hat es dir den RSS-Parser zerlegt?

              LG SBorg ( SBorg auf GitHub)
              Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

              liv-in-skyL 1 Reply Last reply
              0
              • SBorgS SBorg

                @liv-in-sky Nein, noch nicht. Ich nutze die 4.10.8 seit erscheinen. Funktioniert soweit und Meldungen trudeln auch jede Menge ein :) ... oder besser :(
                Ev. hat es dir den RSS-Parser zerlegt?

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                wrote on last edited by
                #121

                @SBorg hast du ne ahnung, wie ich den parser wieder hinbekomme

                habe aber gestern in einem anderen thread auch die constructer fehlermeldung gehabt - mit maillistener

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                SBorgS 1 Reply Last reply
                0
                • liv-in-skyL liv-in-sky

                  @SBorg hi

                  habe seit update des neuen javascript adapters auf 4.10.8 einen fehler im script - hast du das auch schon beobachten können ?

                  Image 2.png

                  NegaleinN Offline
                  NegaleinN Offline
                  Negalein
                  Global Moderator
                  wrote on last edited by
                  #122

                  @liv-in-sky sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                  javascript adapters auf 4.10.8

                  läuft bei mir auch einwandfrei weiter

                  ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                  ° Node.js Fixer ---> iob nodejs-update
                  ° Fixer ---> iob fix

                  1 Reply Last reply
                  0
                  • liv-in-skyL liv-in-sky

                    @SBorg hast du ne ahnung, wie ich den parser wieder hinbekomme

                    habe aber gestern in einem anderen thread auch die constructer fehlermeldung gehabt - mit maillistener

                    SBorgS Offline
                    SBorgS Offline
                    SBorg
                    Forum Testing Most Active
                    wrote on last edited by
                    #123

                    @liv-in-sky
                    ggf. Verzeichnis anpassen:

                    cd /opt/iobroker && npm install --save rss-parser
                    

                    LG SBorg ( SBorg auf GitHub)
                    Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                    1 Reply Last reply
                    0
                    • SBorgS Offline
                      SBorgS Offline
                      SBorg
                      Forum Testing Most Active
                      wrote on last edited by
                      #124

                      [Offtopic]
                      Kommt nach Hessen, hier könnt ihr euch einfach im nächsten Supermarkt eindecken... Kauft Hanföl... ;)


                      Grund der Warnung: Gesundheitsgefahr durch psychoaktiv wirkende Substanzen

                      ...endlich weiß ich auch warum hier dauernd rosa Elefanten rumlaufen... :upside_down_face:

                      LG SBorg ( SBorg auf GitHub)
                      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                      ? NegaleinN 2 Replies Last reply
                      0
                      • SBorgS SBorg

                        [Offtopic]
                        Kommt nach Hessen, hier könnt ihr euch einfach im nächsten Supermarkt eindecken... Kauft Hanföl... ;)


                        Grund der Warnung: Gesundheitsgefahr durch psychoaktiv wirkende Substanzen

                        ...endlich weiß ich auch warum hier dauernd rosa Elefanten rumlaufen... :upside_down_face:

                        ? Offline
                        ? Offline
                        A Former User
                        wrote on last edited by A Former User
                        #125

                        @sborg ich sehr gerade n rosa karierter Bär.. hmm bin auch in Hessen... Kommt das vom Wasser? 🤣🙈16126075414451583544811986622375.jpg

                        SBorgS 1 Reply Last reply
                        1
                        • ? A Former User

                          @sborg ich sehr gerade n rosa karierter Bär.. hmm bin auch in Hessen... Kommt das vom Wasser? 🤣🙈16126075414451583544811986622375.jpg

                          SBorgS Offline
                          SBorgS Offline
                          SBorg
                          Forum Testing Most Active
                          wrote on last edited by
                          #126

                          @ilovegym "Gesundheitsgefahr" wäre auch noch zu diskutieren :spock-hand:

                          LG SBorg ( SBorg auf GitHub)
                          Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                          1 Reply Last reply
                          0
                          • SBorgS SBorg

                            [Offtopic]
                            Kommt nach Hessen, hier könnt ihr euch einfach im nächsten Supermarkt eindecken... Kauft Hanföl... ;)


                            Grund der Warnung: Gesundheitsgefahr durch psychoaktiv wirkende Substanzen

                            ...endlich weiß ich auch warum hier dauernd rosa Elefanten rumlaufen... :upside_down_face:

                            NegaleinN Offline
                            NegaleinN Offline
                            Negalein
                            Global Moderator
                            wrote on last edited by
                            #127

                            @sborg sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                            Kauft Hanföl

                            schick mir eine Palette :joy: :joy: :joy:

                            ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                            ° Node.js Fixer ---> iob nodejs-update
                            ° Fixer ---> iob fix

                            1 Reply Last reply
                            0
                            • SBorgS SBorg

                              Das Ganze entstand aus diesem Thread
                              Dabei handelt es sich um ein Javascript (kein Adapter!), welches die Warnungen von Lebensmittelwarnung.de als Datenpunkte zur weiteren Verarbeitung (zB. VIS) in ioBroker bereitstellt.

                              Beispiel:
                              Bild 1.png

                              Aktuelle Version: V0.1.0 - 23.01.2022
                              auf GitHub unter https://github.com/SBorg2014/ioBroker-Addons/tree/master/Lebensmittelwarnung/
                              (und dies ist kein Adapter, also nix mit "Katze und beliebig..." )
                              Aktuellste Version zukünftig immer im GitHub-Projekt.
                              Danke an alle bisherigen Tester der Vorversionen und für das Feedback :)

                              ChaotC Offline
                              ChaotC Offline
                              Chaot
                              wrote on last edited by
                              #128

                              @sborg Danke das das Script jetzt schon so lange funktioniert.
                              Gestern habe ich meine VIS umgebaut und mir ist dabei etwas aufgefallen das ich nicht verstehe.
                              Ich versuche den Datenpunkt "neue_Warnung" zu nutzen. Allerdings wird der bei jedem Scriptlauf scheinbar wieder auf true gesetzt. Gibt es irgendwo einen Zeitpunkt ab wann eine Warnung kein "true" mehr auslöst?
                              Der Grund ist einfach das ich den Button zur Anzeige bei einer neuen Warnung blinken lassen möchte. Wenn die Warnung allerdings schon 2 Tage alt ist sollte das Blinken aufhören.

                              ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                              SBorgS 1 Reply Last reply
                              0
                              • ChaotC Chaot

                                @sborg Danke das das Script jetzt schon so lange funktioniert.
                                Gestern habe ich meine VIS umgebaut und mir ist dabei etwas aufgefallen das ich nicht verstehe.
                                Ich versuche den Datenpunkt "neue_Warnung" zu nutzen. Allerdings wird der bei jedem Scriptlauf scheinbar wieder auf true gesetzt. Gibt es irgendwo einen Zeitpunkt ab wann eine Warnung kein "true" mehr auslöst?
                                Der Grund ist einfach das ich den Button zur Anzeige bei einer neuen Warnung blinken lassen möchte. Wenn die Warnung allerdings schon 2 Tage alt ist sollte das Blinken aufhören.

                                SBorgS Offline
                                SBorgS Offline
                                SBorg
                                Forum Testing Most Active
                                wrote on last edited by
                                #129

                                @chaot :)
                                sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                                Gibt es irgendwo einen Zeitpunkt ab wann eine Warnung kein "true" mehr auslöst?

                                Nicht direkt. Aktuell ist es einfach so, neue Meldung = Datum/Uhrzeit der Meldung in Meldung "...Nummer_0.Datum" ändert sich --> DP "neue Meldung" wird auf true gesetzt und verbleibt so bis der Nutzer es selbst auf false setzt (passiert bei mir bspw. wenn ich die entsprechende View aufrufe)
                                Bei einem festen Reset-Intervall könnte man halt die ein oder andere Meldung verpassen, wäre aber programmiertechnisch umsetzbar. Könnte dann aber uU. zu Fehlmeldungen der "neue Meldung" führen, da dann beim Restart des ioBs/JS-Adapters ggf. initialisiert wird und sich dies mit einer Abfrage bzw. Meldung überschneiden könnte.
                                Würde ich dann aber sowieso konfigurierbar ausführen, dann kann jeder entscheiden ob er es so belassen will wie es aktuell ist, oder eben nach xxx Minuten automatisch resettet haben möchte ;)

                                LG SBorg ( SBorg auf GitHub)
                                Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                ChaotC 1 Reply Last reply
                                1
                                • SBorgS SBorg

                                  @chaot :)
                                  sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                                  Gibt es irgendwo einen Zeitpunkt ab wann eine Warnung kein "true" mehr auslöst?

                                  Nicht direkt. Aktuell ist es einfach so, neue Meldung = Datum/Uhrzeit der Meldung in Meldung "...Nummer_0.Datum" ändert sich --> DP "neue Meldung" wird auf true gesetzt und verbleibt so bis der Nutzer es selbst auf false setzt (passiert bei mir bspw. wenn ich die entsprechende View aufrufe)
                                  Bei einem festen Reset-Intervall könnte man halt die ein oder andere Meldung verpassen, wäre aber programmiertechnisch umsetzbar. Könnte dann aber uU. zu Fehlmeldungen der "neue Meldung" führen, da dann beim Restart des ioBs/JS-Adapters ggf. initialisiert wird und sich dies mit einer Abfrage bzw. Meldung überschneiden könnte.
                                  Würde ich dann aber sowieso konfigurierbar ausführen, dann kann jeder entscheiden ob er es so belassen will wie es aktuell ist, oder eben nach xxx Minuten automatisch resettet haben möchte ;)

                                  ChaotC Offline
                                  ChaotC Offline
                                  Chaot
                                  wrote on last edited by
                                  #130

                                  @sborg sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                                  ...(passiert bei mir bspw. wenn ich die entsprechende View aufrufe)
                                  ...

                                  Interessanter Ansatz. Wie machst du das? Würde mir auch reichen.

                                  ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                  SBorgS 1 Reply Last reply
                                  0
                                  • SBorgS Offline
                                    SBorgS Offline
                                    SBorg
                                    Forum Testing Most Active
                                    wrote on last edited by
                                    #131

                                    Neue Version V0.1.0 Online:

                                    • + automatischer Reset für "neue Meldung" hinzugefügt

                                    Projekt zu finden im GitHub

                                    Es kann nun per Parameter bestimmt werden ob der Datenpunkt "neue Meldung" auf true bei einer neuen Meldung verbleiben soll (let Reset_neueMeldung = 0;) oder nach xxxx Minuten automatisch wieder auf false gesetzt wird (zB. für 2 Tage: let Reset_neueMeldung = 2880;).

                                    LG SBorg ( SBorg auf GitHub)
                                    Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                    1 Reply Last reply
                                    0
                                    • ChaotC Chaot

                                      @sborg sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                                      ...(passiert bei mir bspw. wenn ich die entsprechende View aufrufe)
                                      ...

                                      Interessanter Ansatz. Wie machst du das? Würde mir auch reichen.

                                      SBorgS Offline
                                      SBorgS Offline
                                      SBorg
                                      Forum Testing Most Active
                                      wrote on last edited by
                                      #132

                                      @chaot sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                                      Interessanter Ansatz. Wie machst du das? Würde mir auch reichen.

                                      Bild 1.png

                                      Ich habe als Hinweis ein glühendes "!"
                                      Der Button ist dann ein Widget und enthält nur das aussehen.
                                      Darüber liegt dann ein weiteres, unsichtbares Widget welches die View dann öffnet.
                                      Die beiden sind dann gruppiert und über die Gruppenattribute wird dann der DP gesetzt:
                                      Bild 2.png

                                      LG SBorg ( SBorg auf GitHub)
                                      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                      ChaotC 1 Reply Last reply
                                      0
                                      • SBorgS SBorg

                                        @chaot sagte in [Javascript] für Warnungen von Lebensmittelwarnung:

                                        Interessanter Ansatz. Wie machst du das? Würde mir auch reichen.

                                        Bild 1.png

                                        Ich habe als Hinweis ein glühendes "!"
                                        Der Button ist dann ein Widget und enthält nur das aussehen.
                                        Darüber liegt dann ein weiteres, unsichtbares Widget welches die View dann öffnet.
                                        Die beiden sind dann gruppiert und über die Gruppenattribute wird dann der DP gesetzt:
                                        Bild 2.png

                                        ChaotC Offline
                                        ChaotC Offline
                                        Chaot
                                        wrote on last edited by
                                        #133

                                        @sborg Danke - für beides! Genial.

                                        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                        1 Reply Last reply
                                        0
                                        • DasIch83D Offline
                                          DasIch83D Offline
                                          DasIch83
                                          wrote on last edited by
                                          #134

                                          @sborg Danke für dein Script.
                                          Ich habe dein Script etwas umgeschrieben um #Grund der Warnung #Hersteller und#"betroffene Bundesländer als separate Datenpunkte zu erhalten.
                                          Falls das wer benötigt:

                                          //09.01.2023 by DasIch83
                                          //Grund der Warnung, Hersteller und betroffene Bundesländer als Datenpunkte hinzugefügt 
                                          //Anzahl auf 6 erhöht wegen eigener VIS
                                          
                                          /*
                                             (c)2019 by SBorg 
                                             V0.0.8 - 31.10.2019 + Meldungen für mehrere Bundesländer möglich
                                             V0.0.7 - 03.10.2019 ~ mehrere Filter möglich
                                             V0.0.6 - 02.09.2019 ~ Wochentage und Monate auf dt. Datumsformat gepatcht
                                                                 + Produktart als Datenpunkt
                                                                 ~ Datum neu formatiert (Sekunden entfernt und "Uhr" hinzugefügt)
                                             V0.0.5 - 31.08.2019 ~ Bilder als eigener Datenpunkt ausgelagert
                                             V0.0.4 - 29.08.2019 + Fehlermanagement Webserver
                                                                 + Datenpunkt für "neue Warnung" / true bei neuer Warnung
                                                                 + filtern eines Suchbegriffes (minimal)
                                             V0.0.3 - 28.08.2019 ~ Datum formatiert
                                                                 + betroffene Bundesländer anzeigen? 
                                                                 ~ Fehler beim ersten Start des Skripts behoben
                                             V0.0.2 - 27.08.2019 + Titel, Datum und Link  
                                             V0.0.1 - 26.08.2019   erste Alpha
                                          
                                             holt die Warnungen von Lebensmittelwarnung.de aus deren RSS-Feed
                                             benötigt 'rss-parser': cd /opt/iobroker && npm install --save rss-parser
                                          
                                                ToDo: - besseres Datenpunktmanagment
                                             
                                             known issues: keine
                                          
                                          */
                                          //START User-Einstellungen ***********************************************************************************************
                                          const debug    = false;                                  //debuggen [true/false]?
                                          const Anzahl   = 6;                                      //wie viele Warnungen sollen gelesen werden?
                                          const BuLand   = true;                                   //zeige Bundesländer an [true/false]?
                                          const DP       = '0_userdata.0.News.Lebensmittelwarnung'; //Datenpunkt
                                          var   FILTER   = ['false'];                              //ausfiltern bestimmter Suchbegriffe (auch RegEx) oder 'false' für keinen Filter
                                          var   LAENDER  = [10];                                    /*Warnung für welches Bundesland/-länder; kommasepariert
                                                                                                    1=Baden-Württemberg, 2=Bayern, 3=Berlin, 4=Brandenburg, 5=Bremen, 
                                                                                                    6=Hamburg, 7=Hessen, 8=Mecklenburg-Vorpommern, 9=Niedersachsen, 
                                                                                                    10=Nordrhein-Westfalen, 11=Rheinland-Pfalz, 12=Saarland, 13=Sachsen, 
                                                                                                    14=Sachsen-Anhalt, 15=Schleswig-Holstein, 16=Thüringen oder 0=alle */
                                          const Zeitplan = "3 */2 * * *";                          /* wann soll die Abfrage stattfinden (Minuten Stunde * * *)
                                             die Minuten sollten auf eine "krumme" Zeit gesetzt werden, damit nicht jeder zur selben Zeit eine Anfrage an den
                                             Webserver von Lebensmittelwarnung.de schickt und diesen ggf. überlastet... 
                                             Hier: alle 8 Stunden UND 3 Minuten = 8:03 Uhr, 16:03 Uhr und 0:03 Uhr
                                             siehe auch cron-Syntax z.B. unter https://de.wikipedia.org/wiki/Cron */
                                          //END User-Einstellungen *************************************************************************************************
                                          
                                          //ab hier gibt es nix mehr zu ändern :)
                                          //firstStart?
                                          if (!isState(DP, false)) { createDP(); }
                                          
                                          //globale Nicht-User-Variablen
                                          const URL      = 'https://www.lebensmittelwarnung.de/bvl-lmw-de/opensaga/feed/alle/alle_bundeslaender.rss'
                                          let Laender    = ['alle','Baden-Württemberg','Bayern','Berlin','Brandenburg','Bremen','Hamburg','Hessen','Mecklenburg-Vorpommern',
                                                            'Niedersachsen','Nordrhein-Westfalen','Rheinland-Pfalz','Saarland','Sachsen','Sachsen-Anhalt', 'Schleswig-Holstein','Thüringen'];
                                          
                                          //Daten beim Start des Scripts abrufen
                                          polldata();
                                          console.log('Hole Daten...');
                                          
                                          //neue Warnung?
                                          on({id: DP+".Nummer_0.Datum", change: "ne"}, function (obj) {
                                            console.log('Neue Warnmeldung vorhanden...');
                                            setTimeout(function() { setState(DP+".neue_Warnung", 'true'); }, 3000);
                                          });
                                          
                                          //scheduler
                                          schedule(Zeitplan, polldata);
                                          
                                          function polldata() {
                                           let Parser = require('rss-parser');
                                           let parser = new Parser({
                                              xml2js: { emptyTag: '--EMPTY--', },
                                              maxRedirects: 50,
                                              timeout: 60000,
                                              customFields: { item: [['description','description', {keepArray: true}],] }
                                           });
                                          
                                           (async () => {
                                           
                                            try {
                                                  let feed = await parser.parseURL(URL);
                                                  var i=0, Treffer, HitBuL, Beschreibung, Bild, Produktart, Grund, Hersteller, Bundeslaender;
                                                  if (debug === true) {console.log(feed.title);}
                                           
                                                  feed.items.forEach(function(entry) {
                                                      if (debug === true) {console.log(entry.title + ': ' + entry.link + ' ' + entry.description + ' ' + entry.pubDate);}
                                                      if (i<Anzahl) {
                                                          
                                                         //Filter Bundesländer
                                                         HitBuL=false;
                                                         for(let anzBuLand=0; anzBuLand<LAENDER.length; anzBuLand++) { 
                                                            if (entry.description[0].indexOf(Laender[LAENDER[anzBuLand]], entry.description[0].lastIndexOf('<b>Betroffene Länder:</b>')) != -1) { HitBuL=true; }
                                                         }
                                                         if (HitBuL === true || LAENDER[0] == 0) { 
                                                         
                                                          //Suchfilter auf Beschreibung anwenden
                                                          Treffer=0;
                                                          for(let anzFilter=0; anzFilter<FILTER.length; anzFilter++) { 
                                                              if (entry.description[0].search(FILTER[anzFilter]) == -1) { Treffer++; } 
                                                          }
                                                          if (Treffer==FILTER.length || FILTER[0] == "false") {
                                                              //Bundesländer anzeigen?
                                                              if (BuLand === true) { Beschreibung = entry.description[0] } else { Beschreibung = entry.description[0].substring(0, entry.description[0].lastIndexOf('<b>Betroffene Länder:</b>')); }
                                                              //prüfen ob Bild vorhanden ist und ggf. parsen
                                                              if (Beschreibung.search('<img src="http') != -1) {
                                                                  Bild = Beschreibung.substring(0, Beschreibung.indexOf('<br/>')+5);
                                                                  Beschreibung = Beschreibung.replace(Bild, ''); 
                                                                  Bild = Bild.substring(Bild.indexOf('"')+1, Bild.lastIndexOf('"'));
                                                                  Bild = Bild.substring(0, Bild.indexOf('"'));
                                                              } else {Bild = '';}
                                          
                                                              //Datum auf dt. Wochentage patchen
                                                              let WT = entry.pubDate.substring(0, 3);
                                                              switch (WT) {
                                                                  case "Mon":
                                                                      entry.pubDate = entry.pubDate.replace('Mon', 'Mo');
                                                                      break;
                                                                  case "Tue":
                                                                      entry.pubDate = entry.pubDate.replace('Tue', 'Di');
                                                                      break;    
                                                                  case "Wed":
                                                                      entry.pubDate = entry.pubDate.replace('Wed', 'Mi');
                                                                      break;
                                                                  case "Thu":
                                                                      entry.pubDate = entry.pubDate.replace('Thu', 'Do');
                                                                      break;
                                                                  case "Fri":
                                                                      entry.pubDate = entry.pubDate.replace('Fri', 'Fr');
                                                                      break;
                                                                  case "Sat":
                                                                      entry.pubDate = entry.pubDate.replace('Sat', 'Sa');
                                                                      break;
                                                                  case "Sun":
                                                                      entry.pubDate = entry.pubDate.replace('Sun', 'So');
                                                                      break;    
                                                                  default:
                                                                      console.log('Fehler beim Datum parsen...: '+WT);
                                                              }
                                          
                                                              //Monate auf dt. Format patchen
                                                              if (entry.pubDate.search('Mar')) {entry.pubDate = entry.pubDate.replace('Mar', 'März');}
                                                              if (entry.pubDate.search('May')) {entry.pubDate = entry.pubDate.replace('May', 'Mai');}
                                                              if (entry.pubDate.search('Oct')) {entry.pubDate = entry.pubDate.replace('Oct', 'Okt');}
                                                              if (entry.pubDate.search('Dec')) {entry.pubDate = entry.pubDate.replace('Dec', 'Dez');}
                                          
                                                              //Produktart filtern
                                                              Produktart = Beschreibung.substring(Beschreibung.indexOf('<b>Typ:</b>'));
                                                              Produktart = Produktart.substring(12, Produktart.indexOf('<br/>'));
                                          					
                                          					//Grund filtern
                                          					Grund = Beschreibung.substring(Beschreibung.indexOf('<b>Grund der Warnung:</b>'));
                                          					Grund = Grund.substring(25, Grund.indexOf('<br/>'));
                                          					
                                          					//Hersteller filtern
                                          					Hersteller = Beschreibung.substring(Beschreibung.indexOf('<b>Hersteller '));
                                          					Hersteller = Hersteller.substring(38, Hersteller.indexOf('<br/>'));
                                          					
                                          					//Bundesländer filtern
                                          					Bundeslaender = Beschreibung.substring(Beschreibung.indexOf('<b>Betroffene'));
                                          					Bundeslaender = Bundeslaender.substring(26, Bundeslaender.indexOf('<br/>'));
                                          
                                                              setState(DP+'.Nummer_'+i+'.Titel', entry.title);
                                                              setState(DP+'.Nummer_'+i+'.Link', entry.link);
                                                              setState(DP+'.Nummer_'+i+'.Datum', entry.pubDate.substring(0, entry.pubDate.lastIndexOf(':'))+' Uhr');
                                                              setState(DP+'.Nummer_'+i+'.Beschreibung', Beschreibung);
                                                              setState(DP+'.Nummer_'+i+'.Produktbild', Bild);
                                                              setState(DP+'.Nummer_'+i+'.Produktart', Produktart);
                                          					setState(DP+'.Nummer_'+i+'.Grund', Grund);
                                                              setState(DP+'.Nummer_'+i+'.Hersteller', Hersteller);
                                          					setState(DP+'.Nummer_'+i+'.Bundeslaender', Bundeslaender);
                                                              i++;
                                                          } // end Filter Produkte
                                                         } //end Filter Bundesländer
                                                      } // end Anzahl
                                                  })
                                                  console.log('Daten aktualisiert...');
                                              } catch (e) {
                                                  console.warn('Fehler beim Datenabruf...');
                                                  return;
                                                  }
                                          
                                              })(); //end async
                                          } //end func
                                          
                                          /*
                                            Checks if a a given state or part of state is existing.
                                            This is a workaround, as getObject() or getState() throw warnings in the log.
                                            Set strict to true if the state shall match exactly. If it is false, it will add a wildcard * to the end.
                                            See: https://forum.iobroker.net/topic/11354/
                                            @param {string}    strStatePath     Input string of state, like 'javas-cript.0.switches.Osram.Bedroom'
                                            @param {boolean}   [strict=false]   Optional: if true, it will work strict, if false, it will add a wildcard * to the end of the string
                                            @return {boolean}                   true if state exists, false if not
                                           */
                                          
                                          function isState(strStatePath, strict) {
                                          
                                              let mSelector;
                                              if (strict) {
                                                  mSelector = $('state[id=' + strStatePath + '$]');
                                              } else {
                                                  mSelector = $('state[id=' + strStatePath + ']');
                                              }
                                          
                                              if (mSelector.length > 0) {
                                                  return true;
                                              } else {
                                                  return false;
                                              }
                                          }
                                          
                                          // Pause einlegen
                                          function Sleep(milliseconds) {
                                           return new Promise(resolve => setTimeout(resolve, milliseconds));
                                          }
                                          
                                          //Datenpunkte anlegen
                                          async function createDP() {
                                              console.log(DP + ' existiert nicht... Lege Datenpunkte an...');
                                              createState(DP, '', { name: 'Warnungen von Lebensmittelwarnung.de' });
                                              createState(DP+'.neue_Warnung', '', { name: "neue Warnung vorhanden", type: "string", role: "state" });
                                              for(var i=0; i<Anzahl; i++) { 
                                                  createState(DP+'.Nummer_'+i, '', { name: 'Warnung Nummer #'+i }); 
                                                  createState(DP+'.Nummer_'+i+'.Beschreibung', '', { name: "HTML-Text der Warnung",
                                                                                                      type: "string",
                                                                                                      role: "state"
                                                                                                   }); 
                                                  createState(DP+'.Nummer_'+i+'.Titel', '', { name: "Titel der Warnung",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                                  createState(DP+'.Nummer_'+i+'.Link', '', { name: "Link zur Meldung",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                                  createState(DP+'.Nummer_'+i+'.Datum', '', { name: "Datum der Meldung",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                                  createState(DP+'.Nummer_'+i+'.Produktbild', '', { name: "Produktbild zur Warnung",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                                  createState(DP+'.Nummer_'+i+'.Produktart', '', { name: "Produktart zur Warnung",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                                  createState(DP+'.Nummer_'+i+'.Grund', '', { name: "Grund der Warnung",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                                  createState(DP+'.Nummer_'+i+'.Hersteller', '', { name: "Hersteller",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });
                                          		createState(DP+'.Nummer_'+i+'.Bundeslaender', '', { name: "Bundeslaender",
                                                                                              type: "string",
                                                                                              role: "state"
                                                                                           });										 
                                          
                                                  
                                              }
                                              await Sleep(5000);
                                          }
                                          
                                          NashraN 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

                                          574

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          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