Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder

NEWS

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

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

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

[Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder

Geplant Angeheftet Gesperrt Verschoben JavaScript
31 Beiträge 7 Kommentatoren 2.9k Aufrufe 9 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.
  • F Offline
    F Offline
    fastfoot
    schrieb am zuletzt editiert von fastfoot
    #1

    Hallo,
    seit ein paar Tagen ist das RKI-Impfquotenmonitoring online, leider gibt es die Daten nur als Exceldatei. Das vorliegende Skript liest diese Daten und stellt eine JSON-Tabelle zur Verfügung, welche man in der VIS verwenden kann. Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen, weshalb ich auf die Erstellung einzelner Datenpunkte für die Bundesländer verzichtet habe. Die Daten werden nur einmal am Tag vom RKI aktualisiert, dementsprechend ist ein einmaliges schedule() um ca. 13-14Uhr völlig ausreichend!

    Voraussetzung zur Nutzung des Skripts:

    • Die NPM-Module axios, cheerio und xlsx müssen in der Javascript Instanz 0 eingetragen werden

    Features:

    • Die tgl. heruntergeladenen Exceldateien werden nicht gelöscht(kann man auch negativ sehen, jedoch plane ich noch eine grafische Ansicht des Verlaufs)
    • Datenpunkte für Refresh und die JSON Tabelle werden automatisch angelegt
    • JSON Tabellenwidget auf Basis des inventwo Widget Adapters

    Hier die Ausgabe
    Impfungen1.PNG

    /**
     * Zweck:           RKI Impfquotenmonitoring Deutschland incl. Bundesländer
     * Datum:           04.01.2021
     * Author:          @fastfoot
     * Forum:           https://forum.iobroker.net/topic/40394/skript-rki-impfquotenmonitoring-deutschland-incl-b-l%C3%A4nder
     * 
     * Voraussetzung:   Die npm-Module axios, cheerio und xlsx müssen in der JS-Instanz eingetragen werden
     * 
     */
    const axios = require('axios').default;
    const cheerio = require('cheerio');
    const Excel = require('xlsx'); 
    const fs = require('fs');
    const Path = require('path');
    const dbg = !true;
    const idBase = '0_userdata.0.Corona.Impfungen';
    const idRefresh = `${idBase}.Refresh`;
    const idJson = `${idBase}.json`;
    const idAdapter = `${idBase}.Adapter`;
    const mySchedule = '30 14 * * *';
    const filePath = '/opt/iobroker';
    let fileName = 'Impfquotenmonitoring_xxx.xlsx';
    
    async function main(refresh = false) {
        let firstRun = true, dataAdapter = {};
        
        firstRun = await createDatapoints();
    
        const Infos = await getInfos();
        if(refresh || firstRun) await getExcelFile(Infos.urlExcel, Infos.Version);
        const path = Path.resolve(filePath, '', fileName.replace('xxx',Infos.Version))
        const WorkBook = Excel.readFile(path, {sheetStubs: true});
        const WorkSheet = WorkBook.Sheets[WorkBook.SheetNames[1]];
        let now = formatDate(new Date(),'hh:mm')
        let data = Excel.utils.sheet_to_json(WorkSheet, {/*raw: true,dateNF: "DD-MMM-YYYY",header:0,*/defval: 0})
        data = data.slice(0,17)
        for(let record of data){
            if('__EMPTY' in record) delete record['__EMPTY'];
            if('__EMPTY_1' in record) delete record['__EMPTY_1'];
            record.Datum = Infos.datumSheet;
            record.Stand = Infos.Stand;
            record.Upd = now;
            dataAdapter[(record.Bundesland).replace(/\*/g,'')] = record["Impfungen kumulativ"];
        }
        setState(idJson, JSON.stringify(data));
        setState(idAdapter, JSON.stringify(dataAdapter));
    }
    
    // download and save excel file
    async function getExcelFile (url, Version) {  
        const path = Path.resolve(filePath, '', fileName.replace('xxx',Version))
        const writer = fs.createWriteStream(path)
    
        const response = await axios({
            url: url,
            method: 'GET',
            responseType: 'stream'
        })
        response.data.pipe(writer)
    
        return new Promise((resolve, reject) => {
            writer.on('finish', resolve)
            writer.on('error', reject)
        })
    }
    
    // get download link and vaccination date, prepare version number
    async function getInfos() {
        let Infos = {};
        const urlImpf = 'https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquoten-Tab.html'
        let html = cheerio.load((await axios.get(urlImpf)).data);
        let urlExcel = 'https://www.rki.de' + html('a.downloadlink').attr('href');
        let dat = /Stand:\s(\d+).(\d+).(\d+)/.exec(html('div.dateOfIssue').text());
        let zeit = '00:00';
        let Stand = getDateObject(dat[3] + '-' + ('0'+dat[2]).slice(-2) + '-' + ('0'+dat[1]).slice(-2) + 'T' + zeit);
        let tmpDat = getDateObject(dat[3] + '-' + ('0'+dat[2]).slice(-2) + '-' + ('0'+dat[1]).slice(-2) + 'T' + zeit);
        let Version = formatDate(Stand,'YYYY-MM-DD').replace(/-/g,'');
        let datumSheet = formatDate(tmpDat.setDate(Stand.getDate()-1),'DD.MM.YY');
        Infos = {
            urlExcel,
            datumSheet,
            Stand,
            Version
        }
        if(dbg) log(JSON.stringify(Infos,null,4));
        return Infos;
    
    }
    
    // create data points if not existing
    async function createDatapoints() {
        let dp,
            idKey,
            firstRun = false;
        
        const stateAttributes = {
            "json":{"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""},
            "Refresh":{"name":"Refresh","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
            "Adapter":{"name":"Daten für Covid-19 Adapter","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def": ""},
        }
    
        for(let key in stateAttributes) {
    
            idKey = idBase + '.' + key;
    
            if (!(await existsStateAsync(idKey))) {
                dp = stateAttributes[key];
                firstRun = true;
                await createStateAsync(idKey, dp);
            }
        }
    
        return firstRun;
    
    }
    
    schedule(mySchedule, () => {main(true)});
    
    on({id: idRefresh, change: 'any'},() => {main(true)})
    
    main(!true);
    

    [{"tpl":"i-vis-jsontable","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","iTblRowLimit":"17","iTableRefreshRate":"0","iColCount":"10","iColShow1":"true","iTblCellFormat1":"normal","iTblCellImageSize1":"200","iTblTextAlign1":"left","iOpacityAll":"1","iTblRowEvenColor":"#333333","iTblRowUnevenColor":"#455618","iTblHeaderColor":"#333333","iRowSpacing":"10","iTblRowEvenTextColor":"#ffffff","iTblRowUnevenTextColor":"#ffffff","iTblHeaderTextColor":"#ffffff","iBorderSize":"1","iBorderStyleLeft":"solid","iBorderStyleRight":"solid","iBorderStyleUp":"none","iBorderStyleDown":"none","iBorderColor":"#ffffff","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"oid":"0_userdata.0.Corona.Impfungen.json","iTblShowHead":true,"iColShow2":"true","iTblCellFormat2":"normal","iTblCellImageSize2":"200","iTblTextAlign2":"right","iColShow3":"true","iTblCellFormat3":"normal","iTblCellImageSize3":"200","iTblTextAlign3":"right","iColShow4":"true","iTblCellFormat4":"normal","iTblCellImageSize4":"200","iTblTextAlign4":"right","iColShow5":"true","iTblCellFormat5":"normal","iTblCellImageSize5":"200","iTblTextAlign5":"right","iColShow6":"true","iTblCellFormat6":"normal","iTblCellImageSize6":"200","iTblTextAlign6":"right","iColShow7":"true","iTblCellFormat7":"normal","iTblCellImageSize7":"200","iTblTextAlign7":"right","iColShow8":"true","iTblCellFormat8":"normal","iTblCellImageSize8":"200","iTblTextAlign8":"center","iColShow9":"true","iTblCellFormat9":"datetime","iTblCellImageSize9":"200","iTblTextAlign9":"center","iColShow10":"true","iTblCellFormat10":"normal","iTblCellImageSize10":"200","iTblTextAlign10":"center","iColShow11":"true","iTblCellFormat11":"normal","iTblCellImageSize11":"200","iTblTextAlign11":"left","iVertScroll":true,"iColShow12":"true","iTblCellFormat12":"normal","iTblCellImageSize12":"200","iTblTextAlign12":"left","iColShow13":"true","iTblCellFormat13":"normal","iTblCellImageSize13":"200","iTblTextAlign13":"left","iColShow14":"true","iTblCellFormat14":"normal","iTblCellImageSize14":"200","iTblTextAlign14":"left","iColShow15":"true","iTblCellFormat15":"normal","iTblCellImageSize15":"200","iTblTextAlign15":"left","iColWidth1":"200px","iTblCellDatetimeFormat8":"d.m. H:i","iTblCellDatetimeFormat9":"d.m. H:i","iTblCellPlaceholder1":"","iTblCellPlaceholder2":"","iTblCellPlaceholder3":"","iTblCellPlaceholder4":"","iTblCellPlaceholder5":"","iTblCellPlaceholder6":"","iTblCellPlaceholder7":"","iTblCellPlaceholder8":"","iTblCellPlaceholder9":"","iColAttr1":"Bundesland","iColAttr2":"Impfungen kumulativ","iColWidth2":"90px","iColWidth3":"90px","iColWidth4":"90px","iColWidth5":"90px","iColWidth6":"90px","iColWidth7":"90px","iColWidth8":"90px","iColWidth9":"100px","iColWidth10":"50px","iColName8":"Impfdatum"},"style":{"left":"10px","top":"60px","height":"612px","width":"1135px"},"widgetSet":"vis-inventwo"},{"tpl":"tplVis-materialdesign-Button-State","data":{"oid":"0_userdata.0.Corona.Impfungen.Refresh","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttonStyle":"unelevated","vibrateOnMobilDevices":"50","iconPosition":"left","autoLockAfter":"10","lockFilterGrayscale":"30","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"buttontext":"Refresh","colorPress":"#ff0000","labelWidth":"0","exportData":"true","value":"true","textFontFamily":"{vis-materialdesign.0.fonts.button.text}","textFontSize":"{vis-materialdesign.0.fontSizes.button.text}","lockIconColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.lock_icon;dark:vis-materialdesign.0.colors.dark.button.lock_icon; mode === \"true\" ? dark : light}","mdwButtonPrimaryColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.default.primary;dark:vis-materialdesign.0.colors.dark.button.default.primary; mode === \"true\" ? dark : light}","mdwButtonSecondaryColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.default.secondary;dark:vis-materialdesign.0.colors.dark.button.default.secondary; mode === \"true\" ? dark : light}"},"style":{"left":"10px","top":"10px","width":"71px","height":"29px","color":"#FF0000","background-color":"#000000"},"widgetSet":"materialdesign"}]
    

    frohes Monitoring

    iobroker läuft unter Docker auf QNAP TS-451+
    SkriptRecovery: https://forum.iobroker.net/post/930558

    sissiwupS F M 3 Antworten Letzte Antwort
    1
    • F fastfoot

      Hallo,
      seit ein paar Tagen ist das RKI-Impfquotenmonitoring online, leider gibt es die Daten nur als Exceldatei. Das vorliegende Skript liest diese Daten und stellt eine JSON-Tabelle zur Verfügung, welche man in der VIS verwenden kann. Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen, weshalb ich auf die Erstellung einzelner Datenpunkte für die Bundesländer verzichtet habe. Die Daten werden nur einmal am Tag vom RKI aktualisiert, dementsprechend ist ein einmaliges schedule() um ca. 13-14Uhr völlig ausreichend!

      Voraussetzung zur Nutzung des Skripts:

      • Die NPM-Module axios, cheerio und xlsx müssen in der Javascript Instanz 0 eingetragen werden

      Features:

      • Die tgl. heruntergeladenen Exceldateien werden nicht gelöscht(kann man auch negativ sehen, jedoch plane ich noch eine grafische Ansicht des Verlaufs)
      • Datenpunkte für Refresh und die JSON Tabelle werden automatisch angelegt
      • JSON Tabellenwidget auf Basis des inventwo Widget Adapters

      Hier die Ausgabe
      Impfungen1.PNG

      /**
       * Zweck:           RKI Impfquotenmonitoring Deutschland incl. Bundesländer
       * Datum:           04.01.2021
       * Author:          @fastfoot
       * Forum:           https://forum.iobroker.net/topic/40394/skript-rki-impfquotenmonitoring-deutschland-incl-b-l%C3%A4nder
       * 
       * Voraussetzung:   Die npm-Module axios, cheerio und xlsx müssen in der JS-Instanz eingetragen werden
       * 
       */
      const axios = require('axios').default;
      const cheerio = require('cheerio');
      const Excel = require('xlsx'); 
      const fs = require('fs');
      const Path = require('path');
      const dbg = !true;
      const idBase = '0_userdata.0.Corona.Impfungen';
      const idRefresh = `${idBase}.Refresh`;
      const idJson = `${idBase}.json`;
      const idAdapter = `${idBase}.Adapter`;
      const mySchedule = '30 14 * * *';
      const filePath = '/opt/iobroker';
      let fileName = 'Impfquotenmonitoring_xxx.xlsx';
      
      async function main(refresh = false) {
          let firstRun = true, dataAdapter = {};
          
          firstRun = await createDatapoints();
      
          const Infos = await getInfos();
          if(refresh || firstRun) await getExcelFile(Infos.urlExcel, Infos.Version);
          const path = Path.resolve(filePath, '', fileName.replace('xxx',Infos.Version))
          const WorkBook = Excel.readFile(path, {sheetStubs: true});
          const WorkSheet = WorkBook.Sheets[WorkBook.SheetNames[1]];
          let now = formatDate(new Date(),'hh:mm')
          let data = Excel.utils.sheet_to_json(WorkSheet, {/*raw: true,dateNF: "DD-MMM-YYYY",header:0,*/defval: 0})
          data = data.slice(0,17)
          for(let record of data){
              if('__EMPTY' in record) delete record['__EMPTY'];
              if('__EMPTY_1' in record) delete record['__EMPTY_1'];
              record.Datum = Infos.datumSheet;
              record.Stand = Infos.Stand;
              record.Upd = now;
              dataAdapter[(record.Bundesland).replace(/\*/g,'')] = record["Impfungen kumulativ"];
          }
          setState(idJson, JSON.stringify(data));
          setState(idAdapter, JSON.stringify(dataAdapter));
      }
      
      // download and save excel file
      async function getExcelFile (url, Version) {  
          const path = Path.resolve(filePath, '', fileName.replace('xxx',Version))
          const writer = fs.createWriteStream(path)
      
          const response = await axios({
              url: url,
              method: 'GET',
              responseType: 'stream'
          })
          response.data.pipe(writer)
      
          return new Promise((resolve, reject) => {
              writer.on('finish', resolve)
              writer.on('error', reject)
          })
      }
      
      // get download link and vaccination date, prepare version number
      async function getInfos() {
          let Infos = {};
          const urlImpf = 'https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquoten-Tab.html'
          let html = cheerio.load((await axios.get(urlImpf)).data);
          let urlExcel = 'https://www.rki.de' + html('a.downloadlink').attr('href');
          let dat = /Stand:\s(\d+).(\d+).(\d+)/.exec(html('div.dateOfIssue').text());
          let zeit = '00:00';
          let Stand = getDateObject(dat[3] + '-' + ('0'+dat[2]).slice(-2) + '-' + ('0'+dat[1]).slice(-2) + 'T' + zeit);
          let tmpDat = getDateObject(dat[3] + '-' + ('0'+dat[2]).slice(-2) + '-' + ('0'+dat[1]).slice(-2) + 'T' + zeit);
          let Version = formatDate(Stand,'YYYY-MM-DD').replace(/-/g,'');
          let datumSheet = formatDate(tmpDat.setDate(Stand.getDate()-1),'DD.MM.YY');
          Infos = {
              urlExcel,
              datumSheet,
              Stand,
              Version
          }
          if(dbg) log(JSON.stringify(Infos,null,4));
          return Infos;
      
      }
      
      // create data points if not existing
      async function createDatapoints() {
          let dp,
              idKey,
              firstRun = false;
          
          const stateAttributes = {
              "json":{"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""},
              "Refresh":{"name":"Refresh","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
              "Adapter":{"name":"Daten für Covid-19 Adapter","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def": ""},
          }
      
          for(let key in stateAttributes) {
      
              idKey = idBase + '.' + key;
      
              if (!(await existsStateAsync(idKey))) {
                  dp = stateAttributes[key];
                  firstRun = true;
                  await createStateAsync(idKey, dp);
              }
          }
      
          return firstRun;
      
      }
      
      schedule(mySchedule, () => {main(true)});
      
      on({id: idRefresh, change: 'any'},() => {main(true)})
      
      main(!true);
      

      [{"tpl":"i-vis-jsontable","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","iTblRowLimit":"17","iTableRefreshRate":"0","iColCount":"10","iColShow1":"true","iTblCellFormat1":"normal","iTblCellImageSize1":"200","iTblTextAlign1":"left","iOpacityAll":"1","iTblRowEvenColor":"#333333","iTblRowUnevenColor":"#455618","iTblHeaderColor":"#333333","iRowSpacing":"10","iTblRowEvenTextColor":"#ffffff","iTblRowUnevenTextColor":"#ffffff","iTblHeaderTextColor":"#ffffff","iBorderSize":"1","iBorderStyleLeft":"solid","iBorderStyleRight":"solid","iBorderStyleUp":"none","iBorderStyleDown":"none","iBorderColor":"#ffffff","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"oid":"0_userdata.0.Corona.Impfungen.json","iTblShowHead":true,"iColShow2":"true","iTblCellFormat2":"normal","iTblCellImageSize2":"200","iTblTextAlign2":"right","iColShow3":"true","iTblCellFormat3":"normal","iTblCellImageSize3":"200","iTblTextAlign3":"right","iColShow4":"true","iTblCellFormat4":"normal","iTblCellImageSize4":"200","iTblTextAlign4":"right","iColShow5":"true","iTblCellFormat5":"normal","iTblCellImageSize5":"200","iTblTextAlign5":"right","iColShow6":"true","iTblCellFormat6":"normal","iTblCellImageSize6":"200","iTblTextAlign6":"right","iColShow7":"true","iTblCellFormat7":"normal","iTblCellImageSize7":"200","iTblTextAlign7":"right","iColShow8":"true","iTblCellFormat8":"normal","iTblCellImageSize8":"200","iTblTextAlign8":"center","iColShow9":"true","iTblCellFormat9":"datetime","iTblCellImageSize9":"200","iTblTextAlign9":"center","iColShow10":"true","iTblCellFormat10":"normal","iTblCellImageSize10":"200","iTblTextAlign10":"center","iColShow11":"true","iTblCellFormat11":"normal","iTblCellImageSize11":"200","iTblTextAlign11":"left","iVertScroll":true,"iColShow12":"true","iTblCellFormat12":"normal","iTblCellImageSize12":"200","iTblTextAlign12":"left","iColShow13":"true","iTblCellFormat13":"normal","iTblCellImageSize13":"200","iTblTextAlign13":"left","iColShow14":"true","iTblCellFormat14":"normal","iTblCellImageSize14":"200","iTblTextAlign14":"left","iColShow15":"true","iTblCellFormat15":"normal","iTblCellImageSize15":"200","iTblTextAlign15":"left","iColWidth1":"200px","iTblCellDatetimeFormat8":"d.m. H:i","iTblCellDatetimeFormat9":"d.m. H:i","iTblCellPlaceholder1":"","iTblCellPlaceholder2":"","iTblCellPlaceholder3":"","iTblCellPlaceholder4":"","iTblCellPlaceholder5":"","iTblCellPlaceholder6":"","iTblCellPlaceholder7":"","iTblCellPlaceholder8":"","iTblCellPlaceholder9":"","iColAttr1":"Bundesland","iColAttr2":"Impfungen kumulativ","iColWidth2":"90px","iColWidth3":"90px","iColWidth4":"90px","iColWidth5":"90px","iColWidth6":"90px","iColWidth7":"90px","iColWidth8":"90px","iColWidth9":"100px","iColWidth10":"50px","iColName8":"Impfdatum"},"style":{"left":"10px","top":"60px","height":"612px","width":"1135px"},"widgetSet":"vis-inventwo"},{"tpl":"tplVis-materialdesign-Button-State","data":{"oid":"0_userdata.0.Corona.Impfungen.Refresh","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttonStyle":"unelevated","vibrateOnMobilDevices":"50","iconPosition":"left","autoLockAfter":"10","lockFilterGrayscale":"30","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"buttontext":"Refresh","colorPress":"#ff0000","labelWidth":"0","exportData":"true","value":"true","textFontFamily":"{vis-materialdesign.0.fonts.button.text}","textFontSize":"{vis-materialdesign.0.fontSizes.button.text}","lockIconColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.lock_icon;dark:vis-materialdesign.0.colors.dark.button.lock_icon; mode === \"true\" ? dark : light}","mdwButtonPrimaryColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.default.primary;dark:vis-materialdesign.0.colors.dark.button.default.primary; mode === \"true\" ? dark : light}","mdwButtonSecondaryColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.default.secondary;dark:vis-materialdesign.0.colors.dark.button.default.secondary; mode === \"true\" ? dark : light}"},"style":{"left":"10px","top":"10px","width":"71px","height":"29px","color":"#FF0000","background-color":"#000000"},"widgetSet":"materialdesign"}]
      

      frohes Monitoring

      sissiwupS Offline
      sissiwupS Offline
      sissiwup
      schrieb am zuletzt editiert von
      #2

      @fastfoot
      Danke für deine Mühe,
      aber dass das als Excel bereit gestellt wird ist eine Frechheit. Als wenn das Impfen so plötzlich kommt.
      Hier fehlen z.B. wieviele haben die zweite Impfung bekommen, oder brauchen auch ggf. keine zweite Impfung (falls es einen Impftoff gibt, der einmal nur genommen werden muss).

      Ich habe versucht die Excel-Datei per curl oder wget zu laden, da kommt aber immer nur die komplette Seite.

      MfG

      Sissi

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

      1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


      HomoranH F 2 Antworten Letzte Antwort
      0
      • sissiwupS sissiwup

        @fastfoot
        Danke für deine Mühe,
        aber dass das als Excel bereit gestellt wird ist eine Frechheit. Als wenn das Impfen so plötzlich kommt.
        Hier fehlen z.B. wieviele haben die zweite Impfung bekommen, oder brauchen auch ggf. keine zweite Impfung (falls es einen Impftoff gibt, der einmal nur genommen werden muss).

        Ich habe versucht die Excel-Datei per curl oder wget zu laden, da kommt aber immer nur die komplette Seite.

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

        @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

        Als wenn das Impfen so plötzlich kommt.

        Da ist noch einiges andere eine Frechheit!
        Erst hieß es, dass die zu Impfenden angeschrieben würden, jetzt muss sich jeder >80jährige selber in der Warteschleife der Gesundheitsämter zu Tode wählen, oder ein 100jaähriger mit nicht vorhandenen Smartphones, QR-Codes, emails und sonstnochwas eigenständig um einen Termin bemühen

        Schon bei der Übermittlung der Infizierten im Frühjahr 2020 hatte man das steinzeitliche Vorgehen ohne vernünftige elektronische Unterstützung gesehen. Dieser Mangel ist nach Monaten immer noch nicht behoben und die Daten werden immer noch lokal in Excel sheets gesammelt

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

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

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

        1 Antwort Letzte Antwort
        0
        • sissiwupS sissiwup

          @fastfoot
          Danke für deine Mühe,
          aber dass das als Excel bereit gestellt wird ist eine Frechheit. Als wenn das Impfen so plötzlich kommt.
          Hier fehlen z.B. wieviele haben die zweite Impfung bekommen, oder brauchen auch ggf. keine zweite Impfung (falls es einen Impftoff gibt, der einmal nur genommen werden muss).

          Ich habe versucht die Excel-Datei per curl oder wget zu laden, da kommt aber immer nur die komplette Seite.

          F Offline
          F Offline
          fastfoot
          schrieb am zuletzt editiert von
          #4

          @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

          @fastfoot
          Danke für deine Mühe,
          aber dass das als Excel bereit gestellt wird ist eine Frechheit. Als wenn das Impfen so plötzlich kommt.
          Hier fehlen z.B. wieviele haben die zweite Impfung bekommen, oder brauchen auch ggf. keine zweite Impfung (falls es einen Impftoff gibt, der einmal nur genommen werden muss).

          Ich habe versucht die Excel-Datei per curl oder wget zu laden, da kommt aber immer nur die komplette Seite.

          Nun, deine 'Beschwerden' müsstest du an das RKI richten :-) Da aber die Impfungen erst begonnen haben, kann es noch keine Daten über eine 2te Impfung geben.

          Als Tip für den Download per wget etc.: Die url endet nicht mit xlsx. Mit dem Skript hast du ja jetzt ein Tool, um das zu tun

          iobroker läuft unter Docker auf QNAP TS-451+
          SkriptRecovery: https://forum.iobroker.net/post/930558

          HomoranH 1 Antwort Letzte Antwort
          0
          • F fastfoot

            @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

            @fastfoot
            Danke für deine Mühe,
            aber dass das als Excel bereit gestellt wird ist eine Frechheit. Als wenn das Impfen so plötzlich kommt.
            Hier fehlen z.B. wieviele haben die zweite Impfung bekommen, oder brauchen auch ggf. keine zweite Impfung (falls es einen Impftoff gibt, der einmal nur genommen werden muss).

            Ich habe versucht die Excel-Datei per curl oder wget zu laden, da kommt aber immer nur die komplette Seite.

            Nun, deine 'Beschwerden' müsstest du an das RKI richten :-) Da aber die Impfungen erst begonnen haben, kann es noch keine Daten über eine 2te Impfung geben.

            Als Tip für den Download per wget etc.: Die url endet nicht mit xlsx. Mit dem Skript hast du ja jetzt ein Tool, um das zu tun

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

            @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

            deine 'Beschwerden' müsstest du an das RKI richten

            Bezog sich ja auch nicht auf dich!

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

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

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

            F 1 Antwort Letzte Antwort
            0
            • HomoranH Homoran

              @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

              deine 'Beschwerden' müsstest du an das RKI richten

              Bezog sich ja auch nicht auf dich!

              F Offline
              F Offline
              fastfoot
              schrieb am zuletzt editiert von
              #6

              @Homoran sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

              Bezog sich ja auch nicht auf dich!

              Das war schon klar! Aber Jammern nützt da ja auch nichts, diese Daten werden nunmal nicht zur elektronischen Weiterverarbeitung veröffentlicht, sondern ... ähem... keine Ahnung... einmal hiess das Sheet mit den Daten auch Presse. In den paar Tagen seit Veröffentlichung der Daten hat sich der Aufbau des Excel auch schon mehrfach geändert und wird dies bestimmt noch öfter tun. Seitdem Merkel die Feststellung über das 'Neuland' gemacht hat habe ich den Verdacht, dass das gar keine Feststellung, sondern eine Aufforderung war:cold_sweat: Jedenfalls hat sich nicht viel geändert seitdem

              iobroker läuft unter Docker auf QNAP TS-451+
              SkriptRecovery: https://forum.iobroker.net/post/930558

              1 Antwort Letzte Antwort
              1
              • F fastfoot

                Hallo,
                seit ein paar Tagen ist das RKI-Impfquotenmonitoring online, leider gibt es die Daten nur als Exceldatei. Das vorliegende Skript liest diese Daten und stellt eine JSON-Tabelle zur Verfügung, welche man in der VIS verwenden kann. Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen, weshalb ich auf die Erstellung einzelner Datenpunkte für die Bundesländer verzichtet habe. Die Daten werden nur einmal am Tag vom RKI aktualisiert, dementsprechend ist ein einmaliges schedule() um ca. 13-14Uhr völlig ausreichend!

                Voraussetzung zur Nutzung des Skripts:

                • Die NPM-Module axios, cheerio und xlsx müssen in der Javascript Instanz 0 eingetragen werden

                Features:

                • Die tgl. heruntergeladenen Exceldateien werden nicht gelöscht(kann man auch negativ sehen, jedoch plane ich noch eine grafische Ansicht des Verlaufs)
                • Datenpunkte für Refresh und die JSON Tabelle werden automatisch angelegt
                • JSON Tabellenwidget auf Basis des inventwo Widget Adapters

                Hier die Ausgabe
                Impfungen1.PNG

                /**
                 * Zweck:           RKI Impfquotenmonitoring Deutschland incl. Bundesländer
                 * Datum:           04.01.2021
                 * Author:          @fastfoot
                 * Forum:           https://forum.iobroker.net/topic/40394/skript-rki-impfquotenmonitoring-deutschland-incl-b-l%C3%A4nder
                 * 
                 * Voraussetzung:   Die npm-Module axios, cheerio und xlsx müssen in der JS-Instanz eingetragen werden
                 * 
                 */
                const axios = require('axios').default;
                const cheerio = require('cheerio');
                const Excel = require('xlsx'); 
                const fs = require('fs');
                const Path = require('path');
                const dbg = !true;
                const idBase = '0_userdata.0.Corona.Impfungen';
                const idRefresh = `${idBase}.Refresh`;
                const idJson = `${idBase}.json`;
                const idAdapter = `${idBase}.Adapter`;
                const mySchedule = '30 14 * * *';
                const filePath = '/opt/iobroker';
                let fileName = 'Impfquotenmonitoring_xxx.xlsx';
                
                async function main(refresh = false) {
                    let firstRun = true, dataAdapter = {};
                    
                    firstRun = await createDatapoints();
                
                    const Infos = await getInfos();
                    if(refresh || firstRun) await getExcelFile(Infos.urlExcel, Infos.Version);
                    const path = Path.resolve(filePath, '', fileName.replace('xxx',Infos.Version))
                    const WorkBook = Excel.readFile(path, {sheetStubs: true});
                    const WorkSheet = WorkBook.Sheets[WorkBook.SheetNames[1]];
                    let now = formatDate(new Date(),'hh:mm')
                    let data = Excel.utils.sheet_to_json(WorkSheet, {/*raw: true,dateNF: "DD-MMM-YYYY",header:0,*/defval: 0})
                    data = data.slice(0,17)
                    for(let record of data){
                        if('__EMPTY' in record) delete record['__EMPTY'];
                        if('__EMPTY_1' in record) delete record['__EMPTY_1'];
                        record.Datum = Infos.datumSheet;
                        record.Stand = Infos.Stand;
                        record.Upd = now;
                        dataAdapter[(record.Bundesland).replace(/\*/g,'')] = record["Impfungen kumulativ"];
                    }
                    setState(idJson, JSON.stringify(data));
                    setState(idAdapter, JSON.stringify(dataAdapter));
                }
                
                // download and save excel file
                async function getExcelFile (url, Version) {  
                    const path = Path.resolve(filePath, '', fileName.replace('xxx',Version))
                    const writer = fs.createWriteStream(path)
                
                    const response = await axios({
                        url: url,
                        method: 'GET',
                        responseType: 'stream'
                    })
                    response.data.pipe(writer)
                
                    return new Promise((resolve, reject) => {
                        writer.on('finish', resolve)
                        writer.on('error', reject)
                    })
                }
                
                // get download link and vaccination date, prepare version number
                async function getInfos() {
                    let Infos = {};
                    const urlImpf = 'https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquoten-Tab.html'
                    let html = cheerio.load((await axios.get(urlImpf)).data);
                    let urlExcel = 'https://www.rki.de' + html('a.downloadlink').attr('href');
                    let dat = /Stand:\s(\d+).(\d+).(\d+)/.exec(html('div.dateOfIssue').text());
                    let zeit = '00:00';
                    let Stand = getDateObject(dat[3] + '-' + ('0'+dat[2]).slice(-2) + '-' + ('0'+dat[1]).slice(-2) + 'T' + zeit);
                    let tmpDat = getDateObject(dat[3] + '-' + ('0'+dat[2]).slice(-2) + '-' + ('0'+dat[1]).slice(-2) + 'T' + zeit);
                    let Version = formatDate(Stand,'YYYY-MM-DD').replace(/-/g,'');
                    let datumSheet = formatDate(tmpDat.setDate(Stand.getDate()-1),'DD.MM.YY');
                    Infos = {
                        urlExcel,
                        datumSheet,
                        Stand,
                        Version
                    }
                    if(dbg) log(JSON.stringify(Infos,null,4));
                    return Infos;
                
                }
                
                // create data points if not existing
                async function createDatapoints() {
                    let dp,
                        idKey,
                        firstRun = false;
                    
                    const stateAttributes = {
                        "json":{"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""},
                        "Refresh":{"name":"Refresh","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
                        "Adapter":{"name":"Daten für Covid-19 Adapter","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def": ""},
                    }
                
                    for(let key in stateAttributes) {
                
                        idKey = idBase + '.' + key;
                
                        if (!(await existsStateAsync(idKey))) {
                            dp = stateAttributes[key];
                            firstRun = true;
                            await createStateAsync(idKey, dp);
                        }
                    }
                
                    return firstRun;
                
                }
                
                schedule(mySchedule, () => {main(true)});
                
                on({id: idRefresh, change: 'any'},() => {main(true)})
                
                main(!true);
                

                [{"tpl":"i-vis-jsontable","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","iTblRowLimit":"17","iTableRefreshRate":"0","iColCount":"10","iColShow1":"true","iTblCellFormat1":"normal","iTblCellImageSize1":"200","iTblTextAlign1":"left","iOpacityAll":"1","iTblRowEvenColor":"#333333","iTblRowUnevenColor":"#455618","iTblHeaderColor":"#333333","iRowSpacing":"10","iTblRowEvenTextColor":"#ffffff","iTblRowUnevenTextColor":"#ffffff","iTblHeaderTextColor":"#ffffff","iBorderSize":"1","iBorderStyleLeft":"solid","iBorderStyleRight":"solid","iBorderStyleUp":"none","iBorderStyleDown":"none","iBorderColor":"#ffffff","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"oid":"0_userdata.0.Corona.Impfungen.json","iTblShowHead":true,"iColShow2":"true","iTblCellFormat2":"normal","iTblCellImageSize2":"200","iTblTextAlign2":"right","iColShow3":"true","iTblCellFormat3":"normal","iTblCellImageSize3":"200","iTblTextAlign3":"right","iColShow4":"true","iTblCellFormat4":"normal","iTblCellImageSize4":"200","iTblTextAlign4":"right","iColShow5":"true","iTblCellFormat5":"normal","iTblCellImageSize5":"200","iTblTextAlign5":"right","iColShow6":"true","iTblCellFormat6":"normal","iTblCellImageSize6":"200","iTblTextAlign6":"right","iColShow7":"true","iTblCellFormat7":"normal","iTblCellImageSize7":"200","iTblTextAlign7":"right","iColShow8":"true","iTblCellFormat8":"normal","iTblCellImageSize8":"200","iTblTextAlign8":"center","iColShow9":"true","iTblCellFormat9":"datetime","iTblCellImageSize9":"200","iTblTextAlign9":"center","iColShow10":"true","iTblCellFormat10":"normal","iTblCellImageSize10":"200","iTblTextAlign10":"center","iColShow11":"true","iTblCellFormat11":"normal","iTblCellImageSize11":"200","iTblTextAlign11":"left","iVertScroll":true,"iColShow12":"true","iTblCellFormat12":"normal","iTblCellImageSize12":"200","iTblTextAlign12":"left","iColShow13":"true","iTblCellFormat13":"normal","iTblCellImageSize13":"200","iTblTextAlign13":"left","iColShow14":"true","iTblCellFormat14":"normal","iTblCellImageSize14":"200","iTblTextAlign14":"left","iColShow15":"true","iTblCellFormat15":"normal","iTblCellImageSize15":"200","iTblTextAlign15":"left","iColWidth1":"200px","iTblCellDatetimeFormat8":"d.m. H:i","iTblCellDatetimeFormat9":"d.m. H:i","iTblCellPlaceholder1":"","iTblCellPlaceholder2":"","iTblCellPlaceholder3":"","iTblCellPlaceholder4":"","iTblCellPlaceholder5":"","iTblCellPlaceholder6":"","iTblCellPlaceholder7":"","iTblCellPlaceholder8":"","iTblCellPlaceholder9":"","iColAttr1":"Bundesland","iColAttr2":"Impfungen kumulativ","iColWidth2":"90px","iColWidth3":"90px","iColWidth4":"90px","iColWidth5":"90px","iColWidth6":"90px","iColWidth7":"90px","iColWidth8":"90px","iColWidth9":"100px","iColWidth10":"50px","iColName8":"Impfdatum"},"style":{"left":"10px","top":"60px","height":"612px","width":"1135px"},"widgetSet":"vis-inventwo"},{"tpl":"tplVis-materialdesign-Button-State","data":{"oid":"0_userdata.0.Corona.Impfungen.Refresh","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttonStyle":"unelevated","vibrateOnMobilDevices":"50","iconPosition":"left","autoLockAfter":"10","lockFilterGrayscale":"30","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"buttontext":"Refresh","colorPress":"#ff0000","labelWidth":"0","exportData":"true","value":"true","textFontFamily":"{vis-materialdesign.0.fonts.button.text}","textFontSize":"{vis-materialdesign.0.fontSizes.button.text}","lockIconColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.lock_icon;dark:vis-materialdesign.0.colors.dark.button.lock_icon; mode === \"true\" ? dark : light}","mdwButtonPrimaryColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.default.primary;dark:vis-materialdesign.0.colors.dark.button.default.primary; mode === \"true\" ? dark : light}","mdwButtonSecondaryColor":"{mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.button.default.secondary;dark:vis-materialdesign.0.colors.dark.button.default.secondary; mode === \"true\" ? dark : light}"},"style":{"left":"10px","top":"10px","width":"71px","height":"29px","color":"#FF0000","background-color":"#000000"},"widgetSet":"materialdesign"}]
                

                frohes Monitoring

                F Offline
                F Offline
                fastfoot
                schrieb am zuletzt editiert von
                #7

                @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen

                kaum gepostet, ist das Skript dank @Dutchman schon im Adapter integriert. Wer die Tabelle also nicht benötigt ist mit der neuesten Version des Covid-19 Adapters(v0.6.5) besser bedient

                iobroker läuft unter Docker auf QNAP TS-451+
                SkriptRecovery: https://forum.iobroker.net/post/930558

                DutchmanD 1 Antwort Letzte Antwort
                1
                • F fastfoot

                  @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                  Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen

                  kaum gepostet, ist das Skript dank @Dutchman schon im Adapter integriert. Wer die Tabelle also nicht benötigt ist mit der neuesten Version des Covid-19 Adapters(v0.6.5) besser bedient

                  DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  schrieb am zuletzt editiert von
                  #8

                  @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                  @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                  Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen

                  kaum gepostet, ist das Skript dank @Dutchman schon im Adapter integriert. Wer die Tabelle also nicht benötigt ist mit der neuesten Version des Covid-19 Adapters(v0.6.5) besser bedient

                  danke fuer deine ausgezeichnete vorgabe :)

                  sissiwupS 1 Antwort Letzte Antwort
                  0
                  • DutchmanD Dutchman

                    @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                    @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                    Evtl. werden die Daten auch bald im Covid-19 Adapter zur Verfügung stehen

                    kaum gepostet, ist das Skript dank @Dutchman schon im Adapter integriert. Wer die Tabelle also nicht benötigt ist mit der neuesten Version des Covid-19 Adapters(v0.6.5) besser bedient

                    danke fuer deine ausgezeichnete vorgabe :)

                    sissiwupS Offline
                    sissiwupS Offline
                    sissiwup
                    schrieb am zuletzt editiert von sissiwup
                    #9

                    Hallo,

                    da ich die Daten selber für mich immer gerne archiviere:

                    getImpfquoten.py:

                    import openpyxl
                    from pathlib import Path
                    import requests
                    import os,sys
                    import csv
                    from datetime import datetime
                    
                    url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx;jsessionid=159D4550C958EDFAA9A49921FA132A35.internet122?__blob=publicationFile"
                    # url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx"
                    r = requests.get(url, allow_redirects=True)
                    open(r'/var/skripte/data/Impfquotenmonitoring.xlsx', 'wb').write(r.content)
                    xlsx_file = Path(os.getcwd(), r'/var/skripte/data/Impfquotenmonitoring.xlsx')
                    wb_obj = openpyxl.load_workbook(xlsx_file,data_only=True)
                    
                    datakt=datetime.now()
                    dat="--"
                    sheet=wb_obj.active
                    for sht in wb_obj:
                        print(sht.title)
                        try:
                            dat = datetime.strptime(sht.title[-8:],'%d.%m.%y')
                            sheet=sht
                        except:
                            pass
                    print("Selected: "+sheet.title)
                    # print(dat)
                    
                    if dat=="--":
                        print("Datum nicht ermittelbar!")
                        sys.exit(99)
                    
                    #sheet = wb_obj.active
                    sum = 0
                    anzbl = 0
                    titel = 0
                    with open(r'/var/skripte/data/Impfquotenmonitoring.csv', 'w', newline="") as f:
                        c = csv.writer(f)
                        for row in sheet.iter_rows(min_row=1,max_col=9,max_row=19, values_only=True):
                            try:
                                print(row)
                                sum=sum+row[2]
                                nrow=[str(dat.date()),str(datakt),str(datetime.timestamp(dat))]
                                anzbl=anzbl+1
                                nrow.extend(list(row))
                                c.writerow(nrow)
                            except:
                                nrow=['Datenstand','Dat-Import', 'Datenstand-Unix']
                                if titel==0:
                                    titel=1
                                    nrow.extend(list(row))
                                    c.writerow(nrow)
                    if anzbl!=16:
                        print("Es sollten 16 Bundesländer sein:",anzbl)
                        sys.exit(99)
                    
                    print("Gesamtzahl der Impfungen in Deutschland: " + str(sum))
                    print("Datenstand: " + str(dat) + " Sheetname:" + str(sheet.title))
                    

                    -> da kommt ein csv raus. Pfad bitte bei Bedarf anpassen.

                    Dann Datenbank:

                    CREATE TABLE `cor_impfung` (
                      `datenstand` date NOT NULL DEFAULT current_timestamp(),
                      `import_datum` datetime NOT NULL DEFAULT current_timestamp(),
                      `datenstand_unix` bigint(20) NOT NULL DEFAULT 0,
                      `RS` int(11) NOT NULL DEFAULT -1,
                      `Bundesland` mediumtext COLLATE utf8_bin NOT NULL DEFAULT '\'"??"\'',
                      `Impfungen` int(11) DEFAULT 0,
                      `BioNTech` int(11) NOT NULL DEFAULT 0,
                      `Moderna` int(11) NOT NULL DEFAULT 0,
                      `Differenz_Vortag` int(11) DEFAULT 0,
                      `Impfquote` double NOT NULL DEFAULT 0,
                      `Zweitimpfung` int(11) NOT NULL DEFAULT 0,
                      `Zweit_Differenz_Vortag` int(11) NOT NULL DEFAULT 0
                    ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
                    

                    und Skript zum abholen:

                    #!/bin/bash
                    NOW=`date +"%d.%m.%g %H:%M.%S"`
                    NOWDAT=`date +"%u"`
                    USER=mysqluser
                    PASS=mysqlpassword
                    
                    echo "Starte Abgleich: $NOW"
                    
                    rm /var/skripte/data/Impfquotenmonitoring.csv
                    rm /var/skripte/data/Impfquotenmonitoring.xlsx
                    rm /var/skripte/data/cor_impfung.csv
                    python3.9 -u /var/skripte/getImpfquoten.py
                    if [ $? -eq 99 ]
                    then
                    	echo "Fehler bei Datenabholung"
                    	exit 99
                    fi
                    cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/Impfquotenmonitoring_$NOWDAT.csv.backup
                    cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/cor_impfung.csv
                    echo "Starte Import $NOW"
                    
                    mysqlimport --fields-terminated-by=, --ignore-lines=1 --verbose --ignore --local -u $USER -p$PASS iobroker /var/skripte/data/cor_impfung.csv
                    
                    mysql -u $USER -p$PASS iobroker -e "DELETE i1.* from cor_impfung i1 inner join cor_impfung i2 on (i1.datenstand=i2.datenstand and i1.bundesland=i2.bundesland and i1.import_datum<i
                    2.import_datum)"
                    

                    User und Passwort anspassen! (Das letzte Statement behält nur den letzten Import des Tages)

                    Sieht dann so aus:
                    Bildschirmfoto 2021-01-02 um 16.47.23.png

                    Anschließend kann man das dann in grafana wunderbar visualisieren (deshalb die Unix-Timestamps)

                    MfG

                    Sissi

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

                    1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                    DutchmanD F 3 Antworten Letzte Antwort
                    0
                    • sissiwupS sissiwup

                      Hallo,

                      da ich die Daten selber für mich immer gerne archiviere:

                      getImpfquoten.py:

                      import openpyxl
                      from pathlib import Path
                      import requests
                      import os,sys
                      import csv
                      from datetime import datetime
                      
                      url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx;jsessionid=159D4550C958EDFAA9A49921FA132A35.internet122?__blob=publicationFile"
                      # url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx"
                      r = requests.get(url, allow_redirects=True)
                      open(r'/var/skripte/data/Impfquotenmonitoring.xlsx', 'wb').write(r.content)
                      xlsx_file = Path(os.getcwd(), r'/var/skripte/data/Impfquotenmonitoring.xlsx')
                      wb_obj = openpyxl.load_workbook(xlsx_file,data_only=True)
                      
                      datakt=datetime.now()
                      dat="--"
                      sheet=wb_obj.active
                      for sht in wb_obj:
                          print(sht.title)
                          try:
                              dat = datetime.strptime(sht.title[-8:],'%d.%m.%y')
                              sheet=sht
                          except:
                              pass
                      print("Selected: "+sheet.title)
                      # print(dat)
                      
                      if dat=="--":
                          print("Datum nicht ermittelbar!")
                          sys.exit(99)
                      
                      #sheet = wb_obj.active
                      sum = 0
                      anzbl = 0
                      titel = 0
                      with open(r'/var/skripte/data/Impfquotenmonitoring.csv', 'w', newline="") as f:
                          c = csv.writer(f)
                          for row in sheet.iter_rows(min_row=1,max_col=9,max_row=19, values_only=True):
                              try:
                                  print(row)
                                  sum=sum+row[2]
                                  nrow=[str(dat.date()),str(datakt),str(datetime.timestamp(dat))]
                                  anzbl=anzbl+1
                                  nrow.extend(list(row))
                                  c.writerow(nrow)
                              except:
                                  nrow=['Datenstand','Dat-Import', 'Datenstand-Unix']
                                  if titel==0:
                                      titel=1
                                      nrow.extend(list(row))
                                      c.writerow(nrow)
                      if anzbl!=16:
                          print("Es sollten 16 Bundesländer sein:",anzbl)
                          sys.exit(99)
                      
                      print("Gesamtzahl der Impfungen in Deutschland: " + str(sum))
                      print("Datenstand: " + str(dat) + " Sheetname:" + str(sheet.title))
                      

                      -> da kommt ein csv raus. Pfad bitte bei Bedarf anpassen.

                      Dann Datenbank:

                      CREATE TABLE `cor_impfung` (
                        `datenstand` date NOT NULL DEFAULT current_timestamp(),
                        `import_datum` datetime NOT NULL DEFAULT current_timestamp(),
                        `datenstand_unix` bigint(20) NOT NULL DEFAULT 0,
                        `RS` int(11) NOT NULL DEFAULT -1,
                        `Bundesland` mediumtext COLLATE utf8_bin NOT NULL DEFAULT '\'"??"\'',
                        `Impfungen` int(11) DEFAULT 0,
                        `BioNTech` int(11) NOT NULL DEFAULT 0,
                        `Moderna` int(11) NOT NULL DEFAULT 0,
                        `Differenz_Vortag` int(11) DEFAULT 0,
                        `Impfquote` double NOT NULL DEFAULT 0,
                        `Zweitimpfung` int(11) NOT NULL DEFAULT 0,
                        `Zweit_Differenz_Vortag` int(11) NOT NULL DEFAULT 0
                      ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
                      

                      und Skript zum abholen:

                      #!/bin/bash
                      NOW=`date +"%d.%m.%g %H:%M.%S"`
                      NOWDAT=`date +"%u"`
                      USER=mysqluser
                      PASS=mysqlpassword
                      
                      echo "Starte Abgleich: $NOW"
                      
                      rm /var/skripte/data/Impfquotenmonitoring.csv
                      rm /var/skripte/data/Impfquotenmonitoring.xlsx
                      rm /var/skripte/data/cor_impfung.csv
                      python3.9 -u /var/skripte/getImpfquoten.py
                      if [ $? -eq 99 ]
                      then
                      	echo "Fehler bei Datenabholung"
                      	exit 99
                      fi
                      cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/Impfquotenmonitoring_$NOWDAT.csv.backup
                      cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/cor_impfung.csv
                      echo "Starte Import $NOW"
                      
                      mysqlimport --fields-terminated-by=, --ignore-lines=1 --verbose --ignore --local -u $USER -p$PASS iobroker /var/skripte/data/cor_impfung.csv
                      
                      mysql -u $USER -p$PASS iobroker -e "DELETE i1.* from cor_impfung i1 inner join cor_impfung i2 on (i1.datenstand=i2.datenstand and i1.bundesland=i2.bundesland and i1.import_datum<i
                      2.import_datum)"
                      

                      User und Passwort anspassen! (Das letzte Statement behält nur den letzten Import des Tages)

                      Sieht dann so aus:
                      Bildschirmfoto 2021-01-02 um 16.47.23.png

                      Anschließend kann man das dann in grafana wunderbar visualisieren (deshalb die Unix-Timestamps)

                      DutchmanD Offline
                      DutchmanD Offline
                      Dutchman
                      Developer Most Active Administrators
                      schrieb am zuletzt editiert von
                      #10

                      @sissiwup
                      thanks, mit dem adapter version 0.6.5 kam man dies jetzt. auch per sql oder influxdb adapter machen

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • DutchmanD Dutchman

                        @sissiwup
                        thanks, mit dem adapter version 0.6.5 kam man dies jetzt. auch per sql oder influxdb adapter machen

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

                        @Dutchman sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                        mit dem adapter version 0.6.5 kam man dies jetzt.

                        Danke - habe ich gerade installiert!
                        Aber die Aufteilung nach Bundesland ist dort noch nicht implementiert?

                        Impfstatus.png

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

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

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

                        DutchmanD 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @Dutchman sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                          mit dem adapter version 0.6.5 kam man dies jetzt.

                          Danke - habe ich gerade installiert!
                          Aber die Aufteilung nach Bundesland ist dort noch nicht implementiert?

                          Impfstatus.png

                          DutchmanD Offline
                          DutchmanD Offline
                          Dutchman
                          Developer Most Active Administrators
                          schrieb am zuletzt editiert von Dutchman
                          #12

                          @Homoran sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                          Aber die Aufteilung nach Bundesland ist dort noch nicht implementiert?

                          doch aber nur wen du Bundesländer in der adapter config ausgewählt hast :) und unter dem. jeweiligen Bundesland im Ordner Bundesland

                          1 Antwort Letzte Antwort
                          0
                          • sissiwupS sissiwup

                            Hallo,

                            da ich die Daten selber für mich immer gerne archiviere:

                            getImpfquoten.py:

                            import openpyxl
                            from pathlib import Path
                            import requests
                            import os,sys
                            import csv
                            from datetime import datetime
                            
                            url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx;jsessionid=159D4550C958EDFAA9A49921FA132A35.internet122?__blob=publicationFile"
                            # url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx"
                            r = requests.get(url, allow_redirects=True)
                            open(r'/var/skripte/data/Impfquotenmonitoring.xlsx', 'wb').write(r.content)
                            xlsx_file = Path(os.getcwd(), r'/var/skripte/data/Impfquotenmonitoring.xlsx')
                            wb_obj = openpyxl.load_workbook(xlsx_file,data_only=True)
                            
                            datakt=datetime.now()
                            dat="--"
                            sheet=wb_obj.active
                            for sht in wb_obj:
                                print(sht.title)
                                try:
                                    dat = datetime.strptime(sht.title[-8:],'%d.%m.%y')
                                    sheet=sht
                                except:
                                    pass
                            print("Selected: "+sheet.title)
                            # print(dat)
                            
                            if dat=="--":
                                print("Datum nicht ermittelbar!")
                                sys.exit(99)
                            
                            #sheet = wb_obj.active
                            sum = 0
                            anzbl = 0
                            titel = 0
                            with open(r'/var/skripte/data/Impfquotenmonitoring.csv', 'w', newline="") as f:
                                c = csv.writer(f)
                                for row in sheet.iter_rows(min_row=1,max_col=9,max_row=19, values_only=True):
                                    try:
                                        print(row)
                                        sum=sum+row[2]
                                        nrow=[str(dat.date()),str(datakt),str(datetime.timestamp(dat))]
                                        anzbl=anzbl+1
                                        nrow.extend(list(row))
                                        c.writerow(nrow)
                                    except:
                                        nrow=['Datenstand','Dat-Import', 'Datenstand-Unix']
                                        if titel==0:
                                            titel=1
                                            nrow.extend(list(row))
                                            c.writerow(nrow)
                            if anzbl!=16:
                                print("Es sollten 16 Bundesländer sein:",anzbl)
                                sys.exit(99)
                            
                            print("Gesamtzahl der Impfungen in Deutschland: " + str(sum))
                            print("Datenstand: " + str(dat) + " Sheetname:" + str(sheet.title))
                            

                            -> da kommt ein csv raus. Pfad bitte bei Bedarf anpassen.

                            Dann Datenbank:

                            CREATE TABLE `cor_impfung` (
                              `datenstand` date NOT NULL DEFAULT current_timestamp(),
                              `import_datum` datetime NOT NULL DEFAULT current_timestamp(),
                              `datenstand_unix` bigint(20) NOT NULL DEFAULT 0,
                              `RS` int(11) NOT NULL DEFAULT -1,
                              `Bundesland` mediumtext COLLATE utf8_bin NOT NULL DEFAULT '\'"??"\'',
                              `Impfungen` int(11) DEFAULT 0,
                              `BioNTech` int(11) NOT NULL DEFAULT 0,
                              `Moderna` int(11) NOT NULL DEFAULT 0,
                              `Differenz_Vortag` int(11) DEFAULT 0,
                              `Impfquote` double NOT NULL DEFAULT 0,
                              `Zweitimpfung` int(11) NOT NULL DEFAULT 0,
                              `Zweit_Differenz_Vortag` int(11) NOT NULL DEFAULT 0
                            ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
                            

                            und Skript zum abholen:

                            #!/bin/bash
                            NOW=`date +"%d.%m.%g %H:%M.%S"`
                            NOWDAT=`date +"%u"`
                            USER=mysqluser
                            PASS=mysqlpassword
                            
                            echo "Starte Abgleich: $NOW"
                            
                            rm /var/skripte/data/Impfquotenmonitoring.csv
                            rm /var/skripte/data/Impfquotenmonitoring.xlsx
                            rm /var/skripte/data/cor_impfung.csv
                            python3.9 -u /var/skripte/getImpfquoten.py
                            if [ $? -eq 99 ]
                            then
                            	echo "Fehler bei Datenabholung"
                            	exit 99
                            fi
                            cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/Impfquotenmonitoring_$NOWDAT.csv.backup
                            cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/cor_impfung.csv
                            echo "Starte Import $NOW"
                            
                            mysqlimport --fields-terminated-by=, --ignore-lines=1 --verbose --ignore --local -u $USER -p$PASS iobroker /var/skripte/data/cor_impfung.csv
                            
                            mysql -u $USER -p$PASS iobroker -e "DELETE i1.* from cor_impfung i1 inner join cor_impfung i2 on (i1.datenstand=i2.datenstand and i1.bundesland=i2.bundesland and i1.import_datum<i
                            2.import_datum)"
                            

                            User und Passwort anspassen! (Das letzte Statement behält nur den letzten Import des Tages)

                            Sieht dann so aus:
                            Bildschirmfoto 2021-01-02 um 16.47.23.png

                            Anschließend kann man das dann in grafana wunderbar visualisieren (deshalb die Unix-Timestamps)

                            F Offline
                            F Offline
                            fastfoot
                            schrieb am zuletzt editiert von
                            #13

                            @sissiwup immer gut zu sehen, wie es auch in anderen Sprachen gehen kann. Einen Import in eine DB hatte ich mir auch überlegt, aber mit der Integration in den Adapter ist das jetzt nicht mehr notwendig. Trotzdem verstehe ich dich gut, mit einem eigenen Skript hat man die volle Kontrolle darüber, was genau passiert :-)

                            iobroker läuft unter Docker auf QNAP TS-451+
                            SkriptRecovery: https://forum.iobroker.net/post/930558

                            1 Antwort Letzte Antwort
                            1
                            • sissiwupS sissiwup

                              Hallo,

                              da ich die Daten selber für mich immer gerne archiviere:

                              getImpfquoten.py:

                              import openpyxl
                              from pathlib import Path
                              import requests
                              import os,sys
                              import csv
                              from datetime import datetime
                              
                              url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx;jsessionid=159D4550C958EDFAA9A49921FA132A35.internet122?__blob=publicationFile"
                              # url = "https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx"
                              r = requests.get(url, allow_redirects=True)
                              open(r'/var/skripte/data/Impfquotenmonitoring.xlsx', 'wb').write(r.content)
                              xlsx_file = Path(os.getcwd(), r'/var/skripte/data/Impfquotenmonitoring.xlsx')
                              wb_obj = openpyxl.load_workbook(xlsx_file,data_only=True)
                              
                              datakt=datetime.now()
                              dat="--"
                              sheet=wb_obj.active
                              for sht in wb_obj:
                                  print(sht.title)
                                  try:
                                      dat = datetime.strptime(sht.title[-8:],'%d.%m.%y')
                                      sheet=sht
                                  except:
                                      pass
                              print("Selected: "+sheet.title)
                              # print(dat)
                              
                              if dat=="--":
                                  print("Datum nicht ermittelbar!")
                                  sys.exit(99)
                              
                              #sheet = wb_obj.active
                              sum = 0
                              anzbl = 0
                              titel = 0
                              with open(r'/var/skripte/data/Impfquotenmonitoring.csv', 'w', newline="") as f:
                                  c = csv.writer(f)
                                  for row in sheet.iter_rows(min_row=1,max_col=9,max_row=19, values_only=True):
                                      try:
                                          print(row)
                                          sum=sum+row[2]
                                          nrow=[str(dat.date()),str(datakt),str(datetime.timestamp(dat))]
                                          anzbl=anzbl+1
                                          nrow.extend(list(row))
                                          c.writerow(nrow)
                                      except:
                                          nrow=['Datenstand','Dat-Import', 'Datenstand-Unix']
                                          if titel==0:
                                              titel=1
                                              nrow.extend(list(row))
                                              c.writerow(nrow)
                              if anzbl!=16:
                                  print("Es sollten 16 Bundesländer sein:",anzbl)
                                  sys.exit(99)
                              
                              print("Gesamtzahl der Impfungen in Deutschland: " + str(sum))
                              print("Datenstand: " + str(dat) + " Sheetname:" + str(sheet.title))
                              

                              -> da kommt ein csv raus. Pfad bitte bei Bedarf anpassen.

                              Dann Datenbank:

                              CREATE TABLE `cor_impfung` (
                                `datenstand` date NOT NULL DEFAULT current_timestamp(),
                                `import_datum` datetime NOT NULL DEFAULT current_timestamp(),
                                `datenstand_unix` bigint(20) NOT NULL DEFAULT 0,
                                `RS` int(11) NOT NULL DEFAULT -1,
                                `Bundesland` mediumtext COLLATE utf8_bin NOT NULL DEFAULT '\'"??"\'',
                                `Impfungen` int(11) DEFAULT 0,
                                `BioNTech` int(11) NOT NULL DEFAULT 0,
                                `Moderna` int(11) NOT NULL DEFAULT 0,
                                `Differenz_Vortag` int(11) DEFAULT 0,
                                `Impfquote` double NOT NULL DEFAULT 0,
                                `Zweitimpfung` int(11) NOT NULL DEFAULT 0,
                                `Zweit_Differenz_Vortag` int(11) NOT NULL DEFAULT 0
                              ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
                              

                              und Skript zum abholen:

                              #!/bin/bash
                              NOW=`date +"%d.%m.%g %H:%M.%S"`
                              NOWDAT=`date +"%u"`
                              USER=mysqluser
                              PASS=mysqlpassword
                              
                              echo "Starte Abgleich: $NOW"
                              
                              rm /var/skripte/data/Impfquotenmonitoring.csv
                              rm /var/skripte/data/Impfquotenmonitoring.xlsx
                              rm /var/skripte/data/cor_impfung.csv
                              python3.9 -u /var/skripte/getImpfquoten.py
                              if [ $? -eq 99 ]
                              then
                              	echo "Fehler bei Datenabholung"
                              	exit 99
                              fi
                              cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/Impfquotenmonitoring_$NOWDAT.csv.backup
                              cp /var/skripte/data/Impfquotenmonitoring.csv /var/skripte/data/cor_impfung.csv
                              echo "Starte Import $NOW"
                              
                              mysqlimport --fields-terminated-by=, --ignore-lines=1 --verbose --ignore --local -u $USER -p$PASS iobroker /var/skripte/data/cor_impfung.csv
                              
                              mysql -u $USER -p$PASS iobroker -e "DELETE i1.* from cor_impfung i1 inner join cor_impfung i2 on (i1.datenstand=i2.datenstand and i1.bundesland=i2.bundesland and i1.import_datum<i
                              2.import_datum)"
                              

                              User und Passwort anspassen! (Das letzte Statement behält nur den letzten Import des Tages)

                              Sieht dann so aus:
                              Bildschirmfoto 2021-01-02 um 16.47.23.png

                              Anschließend kann man das dann in grafana wunderbar visualisieren (deshalb die Unix-Timestamps)

                              F Offline
                              F Offline
                              fastfoot
                              schrieb am zuletzt editiert von
                              #14

                              @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                              da ich die Daten selber für mich immer gerne archiviere:

                              ich ermittle die url zum Exceldownload ja relativ aufwändig, Hintergrund ist die SessionID, welche sich ja immer ändert. Hier würde mich interessieren, ob du damit mit der Zeit Probleme beim Download bekommst, da du sie ja statisch eingetragen hast. Ich könnte mir vorstellen dass sie 'verfällt', bin mir da aber gar nicht sicher...

                              iobroker läuft unter Docker auf QNAP TS-451+
                              SkriptRecovery: https://forum.iobroker.net/post/930558

                              sissiwupS 1 Antwort Letzte Antwort
                              0
                              • F fastfoot

                                @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                                da ich die Daten selber für mich immer gerne archiviere:

                                ich ermittle die url zum Exceldownload ja relativ aufwändig, Hintergrund ist die SessionID, welche sich ja immer ändert. Hier würde mich interessieren, ob du damit mit der Zeit Probleme beim Download bekommst, da du sie ja statisch eingetragen hast. Ich könnte mir vorstellen dass sie 'verfällt', bin mir da aber gar nicht sicher...

                                sissiwupS Offline
                                sissiwupS Offline
                                sissiwup
                                schrieb am zuletzt editiert von
                                #15

                                @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                                @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                                da ich die Daten selber für mich immer gerne archiviere:

                                ich ermittle die url zum Exceldownload ja relativ aufwändig, Hintergrund ist die SessionID, welche sich ja immer ändert. Hier würde mich interessieren, ob du damit mit der Zeit Probleme beim Download bekommst, da du sie ja statisch eingetragen hast. Ich könnte mir vorstellen dass sie 'verfällt', bin mir da aber gar nicht sicher...

                                Hallo,

                                bisher habe ich keine Probleme mit der id. Läuft allerdings auch erst seit drei Tagen.

                                MfG

                                Sissi

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

                                1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                                F 1 Antwort Letzte Antwort
                                0
                                • sissiwupS sissiwup

                                  @fastfoot sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                                  @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                                  da ich die Daten selber für mich immer gerne archiviere:

                                  ich ermittle die url zum Exceldownload ja relativ aufwändig, Hintergrund ist die SessionID, welche sich ja immer ändert. Hier würde mich interessieren, ob du damit mit der Zeit Probleme beim Download bekommst, da du sie ja statisch eingetragen hast. Ich könnte mir vorstellen dass sie 'verfällt', bin mir da aber gar nicht sicher...

                                  Hallo,

                                  bisher habe ich keine Probleme mit der id. Läuft allerdings auch erst seit drei Tagen.

                                  F Offline
                                  F Offline
                                  fastfoot
                                  schrieb am zuletzt editiert von
                                  #16

                                  @sissiwup sagte in [Skript]RKI-Impfquotenmonitoring Deutschland incl. B-länder:

                                  Hallo,
                                  bisher habe ich keine Probleme mit der id. Läuft allerdings auch erst seit drei Tagen.

                                  Das ist gut, frage mich wozu diese id dann gut sein soll. Danke für das Feedback :+1:

                                  iobroker läuft unter Docker auf QNAP TS-451+
                                  SkriptRecovery: https://forum.iobroker.net/post/930558

                                  1 Antwort Letzte Antwort
                                  0
                                  • M Offline
                                    M Offline
                                    morpheus 0
                                    schrieb am zuletzt editiert von morpheus 0
                                    #17

                                    Ich bekomme nach Aktualisierung auf 0.6.6 leider folgende Fehlermeldung im Log:

                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error at Covid19.onReady (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:615:5)
                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error at germanyBundersland (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:312:37)
                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error at Covid19.getGermanyVaccinationData (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:796:27)
                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error at processTicksAndRejections (internal/process/task_queues.js:97:5)
                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error at runMicrotasks (<anonymous>)
                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error at getInfos (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:780:80)
                                    coronavirus-statistics.0 2021-01-04 14:36:18.333 error (2268) [germanyFederalStates] error: Cannot read property '2' of null, stack: TypeError: Cannot read property '2' of null

                                    F 1 Antwort Letzte Antwort
                                    0
                                    • M morpheus 0

                                      Ich bekomme nach Aktualisierung auf 0.6.6 leider folgende Fehlermeldung im Log:

                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error at Covid19.onReady (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:615:5)
                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error at germanyBundersland (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:312:37)
                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error at Covid19.getGermanyVaccinationData (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:796:27)
                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error at processTicksAndRejections (internal/process/task_queues.js:97:5)
                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error at runMicrotasks (<anonymous>)
                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error at getInfos (/opt/iobroker/node_modules/iobroker.coronavirus-statistics/main.js:780:80)
                                      coronavirus-statistics.0 2021-01-04 14:36:18.333 error (2268) [germanyFederalStates] error: Cannot read property '2' of null, stack: TypeError: Cannot read property '2' of null

                                      F Offline
                                      F Offline
                                      fastfoot
                                      schrieb am zuletzt editiert von
                                      #18

                                      @morpheus-0 Bitte LOG Ausgaben in Code Tags!

                                      Das Problem liegt wohl an der geänderten Website

                                      iobroker läuft unter Docker auf QNAP TS-451+
                                      SkriptRecovery: https://forum.iobroker.net/post/930558

                                      sissiwupS K DutchmanD 3 Antworten Letzte Antwort
                                      0
                                      • F fastfoot

                                        @morpheus-0 Bitte LOG Ausgaben in Code Tags!

                                        Das Problem liegt wohl an der geänderten Website

                                        sissiwupS Offline
                                        sissiwupS Offline
                                        sissiwup
                                        schrieb am zuletzt editiert von
                                        #19

                                        Heute hat sich das Format des Excel geändert.
                                        Mein Script oben habe ich angepaßt ...

                                        MfG

                                        Sissi

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

                                        1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                                        1 Antwort Letzte Antwort
                                        0
                                        • F fastfoot

                                          @morpheus-0 Bitte LOG Ausgaben in Code Tags!

                                          Das Problem liegt wohl an der geänderten Website

                                          K Offline
                                          K Offline
                                          klassisch
                                          Most Active
                                          schrieb am zuletzt editiert von
                                          #20

                                          @fastfoot bei mir das gleiche

                                          coronavirus-statistics.0	2021-01-04 18:39:46.138	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:46.138	warn	(15408) Object coronavirus-statistics.0.Germany.Stadt.Coburg.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixed, fi
                                          coronavirus-statistics.0	2021-01-04 18:39:46.106	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:46.106	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Bodenseekreis.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mi
                                          coronavirus-statistics.0	2021-01-04 18:39:46.082	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:46.082	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Ortenaukreis.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mix
                                          coronavirus-statistics.0	2021-01-04 18:39:46.059	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:46.059	warn	(15408) Object coronavirus-statistics.0.Germany.Stadt.Freiburg_im_Breisgau.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, obj
                                          coronavirus-statistics.0	2021-01-04 18:39:46.034	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:46.034	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Freudenstadt.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mix
                                          coronavirus-statistics.0	2021-01-04 18:39:46.014	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:46.014	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Calw.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixed, file
                                          coronavirus-statistics.0	2021-01-04 18:39:45.993	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.992	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Rastatt.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixed, f
                                          coronavirus-statistics.0	2021-01-04 18:39:45.972	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.971	warn	(15408) Object coronavirus-statistics.0.Germany.Stadt.Karlsruhe.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixed,
                                          coronavirus-statistics.0	2021-01-04 18:39:45.948	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.947	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Hohenlohekreis.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, m
                                          coronavirus-statistics.0	2021-01-04 18:39:45.923	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.923	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Esslingen.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixed,
                                          coronavirus-statistics.0	2021-01-04 18:39:45.884	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.884	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Böblingen.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixed,
                                          coronavirus-statistics.0	2021-01-04 18:39:45.859	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.859	warn	(15408) Object coronavirus-statistics.0.Germany.Kreis.Germersheim.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object, mixe
                                          coronavirus-statistics.0	2021-01-04 18:39:45.817	warn	(15408) This object will not be created in future versions. Please report this to the developer.
                                          coronavirus-statistics.0	2021-01-04 18:39:45.817	warn	(15408) Object coronavirus-statistics.0.Germany.Stadt.Frankfurt_am_Main.last_update is invalid: obj.common.type has an invalid value (date) but has to be one of number, string, boolean, array, object
                                          coronavirus-statistics.0	2021-01-04 18:39:45.658	error	at process._tickCallback (internal/process/next_tick.js:68:7)
                                          coronavirus-statistics.0	2021-01-04 18:39:45.658	error	at getInfos (C:\Program Files\iobroker\ioBrMain026\node_modules\iobroker.coronavirus-statistics\main.js:780:80)
                                          coronavirus-statistics.0	2021-01-04 18:39:45.658	error	(15408) [germanyFederalStates] error: Cannot read property '2' of null, stack: TypeError: Cannot read property '2' of null
                                          
                                          

                                          Danke @Dutchman für die Weiterentwicklung des Adapters.

                                          Abseits des Adapters teile ich den den Groll von @Homoran . Verstehe das alles nicht. Meine Meinung zu Beginn der Pandemie: Deutschland sollte 16 Mrd für Impfstoffentwicklung bereitstellen zu 4 Approaches @ je 4 Mrd. Einer der vier wird es schaffen und 4Mrd pro Approach wird wohl reichen (grob geschätzt).
                                          Und 16Mrd ist billig im Vergleich zu den erwartenden Corona-Lockdown-Schäden.
                                          Und Im Frühjahr, als die Gesundheitsämter noch nicht so viel zu tun hatten, gleich die Impflogistik planen und alles vorbereiten.
                                          Wird man ja sicher brauchen.
                                          Stattdessen habe ich den Eindruck, man habe sich sich auf die EU verlassen. Dort scheint man nicht nur Französisch zu sprechen, sondern auch so zu denken. "Sanofi wird uns retten, muß uns retten". Also die Rettungsdosis bei Sonfi bestellt und die Bestellungen bei Biontech/Pfizer hintan gestellt. Hat aber nicht funktioniert, Sanofi hat wohl gepatzt.
                                          Jetzt ist man verlassen und wir werden von anderen überholt, obwohl die Technologie hier entwickelt wurde. Unglaublich.
                                          Wer wissen will, wie es besser geht, schaut nach Israel.
                                          Jetzt erst aber mal "look at the figures".

                                          M 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          764

                                          Online

                                          32.4k

                                          Benutzer

                                          81.6k

                                          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