Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Automatische Abholung der Müllabholtermine von awg.de

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Automatische Abholung der Müllabholtermine von awg.de

    This topic has been deleted. Only users with topic management privileges can see it.
    • bazidibavaria
      bazidibavaria Developer last edited by bazidibavaria

      Hallo,

      hier mein Script zum automatischen abholen der Mülltermine der AWG
      Vielleicht kann es ja jemand gebrauchen.

      LG bazidibavaria

      /*
        AWG Mülltonnen Termine
        Author: bazidibavaria - 2020-03-18
        Version 0.1
      */
      
      // Ort, Straße bitte wie auf der Webseite hinterlegen
      // --CONFIG------------------------------
      var city = "";
      var street = "";
      var housenumber = "";
      // ------------------------------CONFIG--
      
      var DataUrl = "https://wastemanagement.awg.de/WasteManagementDonauwald/WasteManagementServlet";
      
      var WasteDisposalUrl = "wasteDisposal.url";
      var WasteDisposalLastRun = "wasteDisposal.lastRun";
      var WasteDisposalError = "wasteDisposal.error";
      
      var WasteNextDate = "wasteDisposal.next.date";
      var WasteNextDateFormat = "wasteDisposal.next.dateformat";
      var WasteNextDaysLeft = "wasteDisposal.next.daysleft";
      var WasteNextTypes = "wasteDisposal.next.types";
      var WasteNextTypesText = "wasteDisposal.next.typestext";
      var WasteNextWeekday = "wasteDisposal.next.weekday";
      var WasteNextWeekdayText = "wasteDisposal.next.weekdaytext";
      
      var WasteTypeRestmuellDaysLeft = "wasteDisposal.type.Restmuell.daysleft";
      var WasteTypeRestmuellNextDate = "wasteDisposal.type.Restmuell.nextdate";
      var WasteTypeRestmuellNextDateFormat = "wasteDisposal.type.Restmuell.nextdateformat";
      var WasteTypeRestmuellNextWeekday = "wasteDisposal.type.Restmuell.nextweekday";
      var WasteTypeRestmuellNextWeekdayText = "wasteDisposal.type.Restmuell.nextweekdaytext";
      var WasteTypeRestmuellImage = "wasteDisposal.type.Restmuell.image";
      
      var WasteTypeRestmuellContainerDaysLeft = "wasteDisposal.type.RestmuellContainer.daysleft";
      var WasteTypeRestmuellContainerNextDate = "wasteDisposal.type.RestmuellContainer.nextdate";
      var WasteTypeRestmuellContainerNextDateFormat = "wasteDisposal.type.RestmuellContainer.nextdateformat";
      var WasteTypeRestmuellContainerNextWeekday = "wasteDisposal.type.RestmuellContainer.nextweekday";
      var WasteTypeRestmuellContainerNextWeekdayText = "wasteDisposal.type.RestmuellContainer.nextweekdaytext";
      var WasteTypeRestmuellContainerImage = "wasteDisposal.type.RestmuellContainer.image";
      
      var WasteTypePapierDaysLeft = "wasteDisposal.type.Papier.daysleft";
      var WasteTypePapierNextDate = "wasteDisposal.type.Papier.nextdate";
      var WasteTypePapierNextDateFormat = "wasteDisposal.type.Papier.nextdateformat";
      var WasteTypePapierNextWeekday = "wasteDisposal.type.Papier.nextweekday";
      var WasteTypePapierNextWeekdayText = "wasteDisposal.type.Papier.nextweekdaytext";
      var WasteTypePapierImage = "wasteDisposal.type.Papier.image";
      
      var WasteTypePapierContainerDaysLeft = "wasteDisposal.type.PapierContainer.daysleft";
      var WasteTypePapierContainerNextDate = "wasteDisposal.type.PapierContainer.nextdate";
      var WasteTypePapierContainerNextDateFormat = "wasteDisposal.type.PapierContainer.nextdateformat";
      var WasteTypePapierContainerNextWeekday = "wasteDisposal.type.PapierContainer.nextweekday";
      var WasteTypePapierContainerNextWeekdayText = "wasteDisposal.type.PapierContainer.nextweekdaytext";
      var WasteTypePapierContainerImage = "wasteDisposal.type.PapierContainer.image";
      
      var WasteTypeBioDaysLeft = "wasteDisposal.type.Bio.daysleft";
      var WasteTypeBioNextDate = "wasteDisposal.type.Bio.nextdate";
      var WasteTypeBioNextDateFormat = "wasteDisposal.type.Bio.nextdateformat";
      var WasteTypeBioNextWeekday = "wasteDisposal.type.Bio.nextweekday";
      var WasteTypeBioNextWeekdayText = "wasteDisposal.type.Bio.nextweekdaytext";
      var WasteTypeBioImage = "wasteDisposal.type.Bio.image";
      
      var validTypes = ["Restmuell", "RestmuellContainer", "Papier", "PapierContainer", "Bio"];
      
      createState(WasteDisposalUrl, DataUrl, {name:'data url',type:"string",write:false,role:"text.url"});
      createState(WasteDisposalLastRun, {name:'last run',type:"string",write:false,role:"date.start"});
      createState(WasteDisposalError,false,{name:'error',def:false,type:"boolean",write:false,role:"indicator"});
      
      createState(WasteNextDate, {name:'next day',type:"string",write:false,role:"date.start"});
      createState(WasteNextDateFormat, "01.01.1970", {name:'next day formated',type:"string",write:false,role:"text"});
      createState(WasteNextDaysLeft, 0, {name:'days left',def:0,type:"number",min:0,max:365,unit:"days",write:false,role:"value"});
      createState(WasteNextTypes, [], {name:'next types',type:"array",write:false,role:"list"});
      createState(WasteNextTypesText, "", {name:'next types as text',type:"string",write:false,role:"text"});
      createState(WasteNextWeekday, -1 , {name:'next weekday',def:-1,type:"number",min:-1,max:6,write:false,role:"value"});
      createState(WasteNextWeekdayText, "", {name:'next weekday as text',type:"string",write:false,role:"text"});
      
      createState(WasteTypeRestmuellDaysLeft, 0, {name:'days left',def:0,type:"number",min:0,max:365,unit:"days",write:false,role:"value"});
      createState(WasteTypeRestmuellNextDate, {name:'date',type:"string",write:false,role:"date.start"});
      createState(WasteTypeRestmuellNextDateFormat, "01.01.1970", {name:'day formated',type:"string",write:false,role:"text"});
      createState(WasteTypeRestmuellNextWeekday, -1, {name:'weekday',def:-1,type:"number",min:-1,max:6,write:false,role:"value"});
      createState(WasteTypeRestmuellNextWeekdayText, "", {name:'weekday as text',type:"string",write:false,role:"text"});
      createState(WasteTypeRestmuellImage, "https://wastemanagement.awg.de/WasteManagementDonauwald/content/Restmuelltonnefreigestellt.gif", {name:'type image',type:"string",write:false,role:"text.url"});
      
      createState(WasteTypeRestmuellContainerDaysLeft, 0, {name:'days left',def:0,type:"number",min:0,max:365,unit:"days",write:false,role:"value"});
      createState(WasteTypeRestmuellContainerNextDate, {name:'date',type:"string",write:false,role:"date.start"});
      createState(WasteTypeRestmuellContainerNextDateFormat, "01.01.1970", {name:'day formated',type:"string",write:false,role:"text"});
      createState(WasteTypeRestmuellContainerNextWeekday, -1, {name:'weekday',def:-1,type:"number",min:-1,max:6,write:false,role:"value"});
      createState(WasteTypeRestmuellContainerNextWeekdayText, "", {name:'weekday as text',type:"string",write:false,role:"text"});
      createState(WasteTypeRestmuellContainerImage, "https://wastemanagement.awg.de/WasteManagementDonauwald/content/1100-Restfreigestellt.gif", {name:'type image',type:"string",write:false,role:"text.url"});
      
      createState(WasteTypePapierDaysLeft, 0, {name:'days left',def:0,type:"number",min:0,max:365,unit:"days",write:false,role:"value"});
      createState(WasteTypePapierNextDate, {name:'date',type:"string",write:false,role:"date.start"});
      createState(WasteTypePapierNextDateFormat, "01.01.1970", {name:'day formated',type:"string",write:false,role:"text"});
      createState(WasteTypePapierNextWeekday, -1, {name:'weekday',def:-1,type:"number",min:-1,max:6,write:false,role:"value"});
      createState(WasteTypePapierNextWeekdayText, "", {name:'weekday as text',type:"string",write:false,role:"text"});
      createState(WasteTypePapierImage, "https://wastemanagement.awg.de/WasteManagementDonauwald/content/papiertonnefreigestellt.gif", {name:'type image',type:"string",write:false,role:"text.url"});
      
      createState(WasteTypePapierContainerDaysLeft, 0, {name:'days left',def:0,type:"number",min:0,max:365,unit:"days",write:false,role:"value"});
      createState(WasteTypePapierContainerNextDate, {name:'date',type:"string",write:false,role:"date.start"});
      createState(WasteTypePapierContainerNextDateFormat, "01.01.1970", {name:'day formated',type:"string",write:false,role:"text"});
      createState(WasteTypePapierContainerNextWeekday, -1, {name:'weekday',def:-1,type:"number",min:-1,max:6,write:false,role:"value"});
      createState(WasteTypePapierContainerNextWeekdayText, "", {name:'weekday as text',type:"string",write:false,role:"text"});
      createState(WasteTypePapierContainerImage, "https://wastemanagement.awg.de/WasteManagementDonauwald/content/1001-Papierfreigestellt.gif", {name:'type image',type:"string",write:false,role:"text.url"});
      
      createState(WasteTypeBioDaysLeft, 0, {name:'days left',def:0,type:"number",min:0,max:365,unit:"days",write:false,role:"value"});
      createState(WasteTypeBioNextDate, {name:'date',type:"string",write:false,role:"date.start"});
      createState(WasteTypeBioNextDateFormat, "01.01.1970", {name:'day formated',type:"string",write:false,role:"text"});
      createState(WasteTypeBioNextWeekday, -1, {name:'weekday',def:-1,type:"number",min:-1,max:6,write:false,role:"value"});
      createState(WasteTypeBioNextWeekdayText, "", {name:'weekday as text',type:"string",write:false,role:"text"});
      createState(WasteTypeBioImage, "https://wastemanagement.awg.de/WasteManagementDonauwald/content/biotonnefreigestellt.gif", {name:'type image',type:"string",write:false,role:"text.url"});
      
      // Schedule für die Updates
      schedule("0 16 * * *",  Muellabfuhr);
      
      // Skript ausführen
      Muellabfuhr();
      
      function Muellabfuhr() {
          setState(WasteDisposalUrl, DataUrl);
          
          request(DataUrl, function (error, response, body) {
              if (!error && response.statusCode == 200) {
                  var ApplicationName = "";
                  var findApplicationName = /ID="ApplicationName" VALUE="([^"]+)"/i;
                  var matchApplicationName = findApplicationName.exec(body);
                  if(matchApplicationName != null && matchApplicationName.length == 2){
                      ApplicationName = matchApplicationName[1];
                  }
      
                  var SessionId = "";
                  var findSessionId = /ID="SessionId" VALUE="([^"]+)"/i;
                  var matchSessionId = findSessionId.exec(body);
                  if(matchSessionId != null && matchSessionId.length == 2){
                      SessionId = matchSessionId[1];
                  }
                  
                  var Build = "";
                  var findBuild = /ID="Build" VALUE="([^"]+)"/i;
                  var matchBuild = findBuild.exec(body);
                  if(matchBuild != null && matchBuild.length == 2){
                      Build = matchBuild[1];
                  }
                  
                  var PageXMLVers = "";
                  var findPageXMLVers = /ID="PageXMLVers" VALUE="([^"]+)"/i;
                  var matchPageXMLVers = findPageXMLVers.exec(body);
                  if(matchPageXMLVers != null && matchPageXMLVers.length == 2){
                      PageXMLVers = matchBuild[1];
                  }
                  
                  var PageName = "";
                  var findPageName = /ID="PageName" VALUE="([^"]+)"/i;
                  var matchPageName = findPageName.exec(body);
                  if(matchPageName != null && matchPageName.length == 2){
                      PageName = matchBuild[1];
                  }
      
                  if(ApplicationName.length > 0 && SessionId.length > 0 && Build.length > 0 && PageXMLVers.length > 0 && PageName.length > 0){
                      var formData = {
                          SubmitAction: "changedEvent"
                          , ApplicationName: ApplicationName
                          , SessionId: SessionId
                          , Method: "GET"
                          , VerticalOffset: "0"
                          , Build: Build
                          , PageXMLVers: PageXMLVers
                          , InFrameMode: "FALSE"
                          , ID: ""
                          , Focus: "Ort"
                          , ModulName: ""
                          , PageName: PageName
                          , NextPageName: ""
                          , NewTab: "default"
                          , IsLastPage: "false"
                          , IsSubmitPage: "false"
                          , Ajax: "FALSE"
                          , ShowMenue: "false"
                          , Ort: city
                          , Strasse: street
                          , Hausnummer: ""
                          , Hausnummerzusatz: ""
                      }
      
                      request.post({
                          url:DataUrl
                          ,form:formData
                      }, function(error, response, body) {
                          if (!error && response.statusCode == 200) {
                              var formData = {
                                  SubmitAction: "forward"
                                  , ApplicationName: ApplicationName
                                  , SessionId: SessionId
                                  , Method: "POST"
                                  , VerticalOffset: "0"
                                  , Build: Build
                                  , PageXMLVers: PageXMLVers
                                  , InFrameMode: "FALSE"
                                  , ID: ""
                                  , Focus: "Hausnummer"
                                  , ModulName: ""
                                  , PageName: PageName
                                  , NextPageName: ""
                                  , NewTab: "default"
                                  , IsLastPage: "false"
                                  , IsSubmitPage: "false"
                                  , Ajax: "FALSE"
                                  , ShowMenue: "false"
                                  , Ort: city
                                  , Strasse: street
                                  , Hausnummer: housenumber
                                  , Hausnummerzusatz: ""
                              };
                              request.post({
                                  url:DataUrl
                                  ,form:formData
                              }, function(error, response, body) {
                                  if (!error && response.statusCode == 200) {
                                      var terminTables = [];
                                      var terminDates = [];
                                      var terminTypes = [];
                                      var dateNow = new Date();
                                      dateNow.setHours(0,0,0,0);
                                      //dateNow.setDate(dateNow.getDate() + 2);
                                      var dayNames = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'];
      
                                      var findTables = /<table[^>]+>/ig;
                                      var matchTables = body.match(findTables);
      
                                      matchTables.forEach(table => {
                                          var findTerminTable = /<table NAME="[A-Za-z]+TermineLIST"[^>]+>/ig;
                                          var matchTerminTable = table.match(findTerminTable);
                                          if(matchTerminTable != null && matchTerminTable.length>0){
                                              var startTableStart = body.indexOf(table);
                                              var startTableEnd = startTableStart + table.length;
                                              
                                              var endNode = "</TABLE>";
                                              var endTableStart = body.indexOf(endNode,startTableStart);
                                              var endTableEnd = endTableStart + endNode.length;
      
                                              var compTable = body.substring(startTableStart,endTableEnd);
                                              if(!terminTables.includes(compTable)){
                                                  terminTables.push(compTable);
                                              }
                                          }
                                      });
      
                                      terminTables.forEach(table => {
                                          var findName = /<table name="([A-Za-z]+)TermineLIST"/ig;
                                          var matchName = findName.exec(table);
                                          var name = "";
                                          if(matchName.length == 2){
                                              name = matchName[1];
      
                                              var findEmptyTable = /<table NAME="[A-Za-z]+TermineLIST"[^>]+>[^/]\/table>/ig;
                                              var matchEmptyTable = findEmptyTable.exec(table);    
                                              if(matchEmptyTable != null){
                                                  setState(eval("WasteType" + name + "DaysLeft"),0);
                                                  setState(eval("WasteType" + name + "NextDate"),"");
                                                  setState(eval("WasteType" + name + "NextDateFormat"),"");
                                                  setState(eval("WasteType" + name + "NextWeekday"),0);
                                                  setState(eval("WasteType" + name + "NextWeekdayText"),"");
                                              } else {
                                                  var findTermine = /"dia_c_abfuhrdatum[^>]+>([0-9]{2}\.[0-9]{2}\.[0-9]{4})/ig;
                                                  var matchTermine = findTermine.exec(table);
                                                  //var matchTermine = table.match(findTermine);
                                                  //if(matchTermine.length > 0){
                                                  if(matchTermine.length == 2){
                                                      var termin = matchTermine[1];
                                                      var dateParts = termin.split('.');
                                                      var date = new Date(dateParts[2], dateParts[1]-1, dateParts[0]); 
                                                      date.setHours(0,0,0,0);
                                                      var dayText = "";
      
                                                      if(date.getTime() == dateNow.getTime()){
                                                          table = table.replace(matchTermine[0], "");
                                                          findTermine = /"dia_c_abfuhrdatum[^>]+>([0-9]{2}\.[0-9]{2}\.[0-9]{4})/ig;
                                                          matchTermine = findTermine.exec(table);
                                                          //var matchTermine = table.match(findTermine);
                                                          //if(matchTermine.length > 0){
                                                          if(matchTermine.length == 2){
                                                              termin = matchTermine[1];
                                                              dateParts = termin.split('.');
                                                              date = new Date(dateParts[2], dateParts[1]-1, dateParts[0]); 
                                                          } else {
                                                              setState(eval("WasteType" + name + "DaysLeft"),0);
                                                              setState(eval("WasteType" + name + "NextDate"),"");
                                                              setState(eval("WasteType" + name + "NextDateFormat"),"");
                                                              setState(eval("WasteType" + name + "NextWeekday"),0);
                                                              setState(eval("WasteType" + name + "NextWeekdayText"),"");
                                                          }
                                                      }
      
                                                      if(terminDates.indexOf(date)<0){
                                                          terminDates.push(date);
                                                          terminTypes.push(name);
                                                      }
                                                      setState(eval("WasteType" + name + "DaysLeft"),Math.round((date-dateNow)/(1000*60*60*24)));
                                                      setState(eval("WasteType" + name + "NextDate"),date.toUTCString());
                                                      setState(eval("WasteType" + name + "NextDateFormat"),termin);
                                                      setState(eval("WasteType" + name + "NextWeekday"),date.getDay());
                                                      setState(eval("WasteType" + name + "NextWeekdayText"),dayNames[date.getDay()]);
                                                  } else {
                                                      setState(eval("WasteType" + name + "DaysLeft"),0);
                                                      setState(eval("WasteType" + name + "NextDate"),"");
                                                      setState(eval("WasteType" + name + "NextDateFormat"),"");
                                                      setState(eval("WasteType" + name + "NextWeekday"),0);
                                                      setState(eval("WasteType" + name + "NextWeekdayText"),"");
                                                  }
                                              }
                                          }
                                      });
      
                                      var nextDate = new Date(Math.min.apply(null,terminDates));
      
                                      var nextDateDay=nextDate.getDate();
                                      var nextDateMonth=nextDate.getMonth();
                                      var nextDateMonth=nextDateMonth+1;
                                      if((String(nextDateDay)).length==1) nextDateDay='0'+nextDateDay;
                                      if((String(nextDateMonth)).length==1) nextDateMonth='0'+nextDateMonth;
                                      var nextDateFormat=nextDateDay + '.' + nextDateMonth + '.' + nextDate.getFullYear();
      
                                      var nextTypes = [];
                                      var nextTypesText = "";
      
                                      terminTypes.forEach(type => {
                                          var dateVal = getState(eval("WasteType" + type + "NextDate")).val;
                                          var checkDate = new Date(dateVal);
                                          var addType = (checkDate.getTime() == nextDate.getTime());
                                          if(addType){
                                              nextTypes.push(type)
                                          }
                                      });
      
                                      nextTypes.forEach(nextType => {
                                          nextTypesText += (nextTypesText.length>0)?" und ":"";
                                          nextTypesText += nextType;
                                      });
      
                                      setState(WasteNextDate, nextDate.toUTCString());
                                      setState(WasteNextDateFormat, nextDateFormat);
                                      setState(WasteNextDaysLeft, Math.round((nextDate-dateNow)/(1000*60*60*24)));
                                      setState(WasteNextTypes, nextTypes);
                                      setState(WasteNextTypesText, nextTypesText);
                                      setState(WasteNextWeekday, nextDate.getDay());
                                      setState(WasteNextWeekdayText, dayNames[nextDate.getDay()]);
      
                                      setState(WasteDisposalLastRun, new Date().toUTCString());
                                      setState(WasteDisposalError,false);
      
                                  } else {  
                                      log(error);
                                      doError();
                                  }
                              });
                          } else {  
                              log(error);
                              doError();
                          }
                      });
                  }
              } else {
                  log(error);
                  doError();
              }
          });
      
          function doError(){
              log('Mülltermine können nicht abgeholt werden!');
              
              setState(WasteDisposalError,true);
      
              setState(WasteNextDate, "");
              setState(WasteNextDateFormat, "");
              setState(WasteNextDaysLeft, 0);
              setState(WasteNextTypes, [])
              setState(WasteNextTypesText, "")
              setState(WasteNextWeekday, -1);
              setState(WasteNextWeekdayText, "");
      
              validTypes.forEach(name => {
                  setState(eval("WasteType" + name + "DaysLeft"),0);
                  setState(eval("WasteType" + name + "NextDate"),"");
                  setState(eval("WasteType" + name + "NextDateFormat"),"");
                  setState(eval("WasteType" + name + "NextWeekday"),-1);
                  setState(eval("WasteType" + name + "NextWeekdayText"),"");
              });
          }
      }
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      933
      Online

      31.9k
      Users

      80.2k
      Topics

      1.3m
      Posts

      javascript monitoring
      1
      1
      274
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo