Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. bazidibavaria

    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

    • Profile
    • Following 0
    • Followers 4
    • Topics 5
    • Posts 8
    • Best 1
    • Groups 2

    bazidibavaria

    @bazidibavaria

    Developer

    1
    Reputation
    208
    Profile views
    8
    Posts
    4
    Followers
    0
    Following
    Joined Last Online

    bazidibavaria Follow
    Developer Starter

    Best posts made by bazidibavaria

    • Tintenstand für Canon TR8550 (als Netzwerkdrucker)

      Hallo,

      hier mein Script zum auswerten des Tintenstands bei einen Canon TR8550 der über LAN angeschlossen ist.
      Vielleicht ist es ja für den ein oder anderen nützlich.

      Als Vorlage diente https://www.iobroker.net/docu/index-317.htm?page_id=3668&lang=de

      LG bazidibavaria

      PS: Es ist mein erstes Skript für ioBroker, wenn ihr Verbesserungsvorschläge habt, immer her damit 😃
      EDIT: role hinzugefügt
      EDIT: Leider ist die Code-Darstellung fehlerhaft, doppelte backslashed werden durch einfache ersetzt.
      => Zeile 80 - inktank [HIER DOPPELTE] levelpos [HIER DOPPELTE]

      /*
        Beschreibung: Canon Drucker Tintenstand für iobroker ermitteln
        Vorlage: https://www.iobroker.net/docu/index-317.htm?page_id=3668&lang=de
        Author: bazidibavaria - 2020-03-18
        Version: 0.1
      */
      
      var druckerIP         = "192.168.178.20";
      var druckerHersteller = "Canon";
      var druckerMod        = "TR8550";
       
      var druckerDataJS     = "http://" + druckerIP + "/JS_MDL/model.js";
       
      var level_C           = 0;
      var level_M           = 0;
      var level_Y           = 0;
      var level_BK          = 0;
      var level_PGBK        = 0;
       
      var DruckIP           = "Drucker." + druckerHersteller + "." + druckerMod + ".IP";
      var DruckerName       = "Drucker." + druckerHersteller + "." + druckerMod + ".Name";
      var DruckerHersteller = "Drucker." + druckerHersteller + "." + druckerMod + ".Hersteller";
      var DruckerModell     = "Drucker." + druckerHersteller + "." + druckerMod + ".Modell";
       
      var CLevel            = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.C.Level";
      var CWarning          = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.C.Warning";
      
      var MLevel            = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.M.Level";
      var MWarning          = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.M.Warning";
      
      var YLevel            = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.Y.Level";
      var YWarning          = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.Y.Warning";
      
      var BKLevel           = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.BK.Level";
      var BKWarning         = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.BK.Warning";
      
      var PGBKLevel         = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.PGBK.Level";
      var PGBKWarning       = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.PGBK.Warning";
      
       
      // Anlegen der Variablen
      createState(DruckIP,druckerIP,{name:'Drucker IP',type:"string",role:"text"});
      createState(DruckerName,druckerHersteller + " " + druckerMod,{name:'Drucker Name',type:"string",role:"text"});
      createState(DruckerHersteller,druckerHersteller,{name:'Drucker Hersteller',type:"string",role:"text"});
      createState(DruckerModell,druckerMod,{name:'Drucker Modell',type:"string",role:"text"});
       
      createState(CLevel,0,{name:'Tintenstand Cyan',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(MLevel,0,{name:'Tintenstand Magenta',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(YLevel,0,{name:'Tintenstand Yellow',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(BKLevel,0,{name:'Tintenstand Black',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(PGBKLevel,0,{name:'Tintenstand Page Black',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
       
      createState(CWarning,false,{name:'Tintenstand Warnung Cyan',def:false,type:"boolean",write:false,role:"indicator"});
      createState(MWarning,false,{name:'Tintenstand Warnung Magenta',def:false,type:"boolean",write:false,role:"indicator"});
      createState(YWarning,false,{name:'Tintenstand Warnung Yellow',def:false,type:"boolean",write:false,role:"indicator"});
      createState(BKWarning,false,{name:'Tintenstand Warnung Black',def:false,type:"boolean",write:false,role:"indicator"});
      createState(PGBKWarning,false,{name:'Tintenstand Warnung Page Black',def:false,type:"boolean",write:false,role:"indicator"});
       
      // Schedule für die Updates
      schedule("0 */1 * * *",  Drucker);
      
      // Skript ausführen
      Drucker();
       
      function Drucker () {
          request(druckerDataJS, function (error, response, body) {
      	    if (!error && response.statusCode == 200) {
                  //get colors
                  var inkColNames = [];
                  var findInkCol = /inkCOL\s?=\s?([^;]+);/i;
                  var matchInkCol = findInkCol.exec(body);
                  // log(matchInkCol);
                  if(matchInkCol != null && matchInkCol.length == 2){
                      inkColNames = eval(matchInkCol[1]);
                  }
      
                  //get ink fill state
                  inkColNames.forEach(ink => {
                      var levelPos = inkColNames.indexOf(ink);
                      var findInkStatus = new RegExp('inktank\[' + levelPos + '\]\s?=\s?([^;]+)',"i");
                      var matchInkStatus = body.match(findInkStatus);
                      if(matchInkStatus != null && matchInkStatus.length == 2){
                          var inkColState = eval(matchInkStatus[1]);
                              
                          if(inkColState.length == 3){
                              var inkColLevel = 0;
                              if(inkColState[1] != 10){
                                  var inkColLevel = 100 - (inkColState[1]*10);
                              } else {
                                  var inkColLevel = 100;
                              }
      
                              switch(ink) {
                                  case 'InkMaz':
                                      setState(MLevel,inkColLevel);
                                      setState(MWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkBlk':
                                      setState(BKLevel,inkColLevel);
                                      setState(BKWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkYel':
                                      setState(YLevel,inkColLevel);
                                      setState(YWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkPbk':
                                      setState(PGBKLevel,inkColLevel);
                                      setState(PGBKWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkCia':
                                      setState(CLevel,inkColLevel);
                                      setState(CWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  default:
                                      // do nothing
                              }
                          }                   
                      }
                  });	 
      	    } else  {
      	        log(error);
      	        log('Kein Drucker gefunden');
      	    }
          });
      }
      
      
      posted in JavaScript
      bazidibavaria
      bazidibavaria

    Latest posts made by bazidibavaria

    • PP42WS Gehäuse - PCB Vorlage

      Hallo,

      ich weiß nicht ob das hier das richtige Forum dafür ist, sollte es unpassend sein einfach löschen.

      In KiCad habe ich eine Vorlage für das Supertronic PP42WS erstellt.
      Vielleicht kann es der ein oder andere ja gebrauchen =).

      https://github.com/bazidibavaria/PP42WS-KiCad-Template

      LG bazi

      posted in Hardware
      bazidibavaria
      bazidibavaria
    • RE: Test Adapter powerfox v0.0.2-x

      Hallo,

      @FabianHM Ich habe mir deinen Beitrag durchgelesen und verstehe deine Anmerkungen, habe mir hierfür auch Notizen gemacht.
      Der umbau auf ein Daemon werde ich entsprechend nachholen, damit Werte auch im 2-3 Sekunden-Takt abgeholt werden können.
      Ich denke, das man später die Schedule-Zeit im Adapter (Geräteübersicht) festlegen kann.
      Leider ist es im Vorfeld nicht möglich zu bestimmen um welchen Gerätetyp es sich handelt.
      Das wäre ggfl. ein Thema für @p42mb um das mit der IT zu besprechen um im (api/2.0/my/all/devices) das mit auszugeben.
      EDIT: Außer es erschließt sich immer über den Gerätenamen? So wie bei der Demo?

      @p42mb leider kommt man bei uns nicht so einfach an die Stromzähler, ansonsten hätte ich mir bereits einfach einen bestellt. Ein "Laborgerät" für die Steckdose wäre hierfür auf alle fälle interessant, dies ist aber erst nötig wenn der Adapter entsprechend umgebaut wurde.

      Vielen Dank euch beiden.

      LG bazi

      posted in Tester
      bazidibavaria
      bazidibavaria
    • RE: [GELÖST] Adapter für powerfox/poweropti Kunden-API

      Hi @FabianHM,

      das können nur Forum Admins / Moderatoren.

      LG

      posted in Entwicklung
      bazidibavaria
      bazidibavaria
    • RE: [GELÖST] Adapter für powerfox/poweropti Kunden-API

      Hallo @FabianHM,

      es gäbe hierzu bereits einen Thread (https://forum.iobroker.net/topic/36284/test-adapter-powerfox-v0-0-2-x)

      Es gibt keinen Adapter Status, weil es direkt via Api abgeholt wird.
      Ja, der Adapter Startet, holt die Daten und beendet sich selbst (wie z. B. auch beim DWD-Adapter).

      Hier ist aktuell die Herstellerseite verlinkt, eigentlich sollte hier das Backend-Panel verlinkt werden.
      Da ich aber hierzu keine Infos habe, macht das aktuell glaub ich keinen Sinn (http://backend.powerfox.energy/).

      Infos hierzu, was bei dir Ausgegeben wird etc, wäre Klasse.

      Die Geräteliste dient dazu eine Übersicht zu erhalten, des Weiteren kann hier ausgewählt werden welche Werte von den Geräten abgeholt werden sollen.
      Das bedeutet, es werden nur Geräte abgeholt, die auch den Haken aktiv haben.

      Der Intervall kann direkt über den Scheduler eingestellt werden und ist auch so beabsichtigt.
      Lt. Hersteller ist maximal eine minütliche Abfrage pro Gerät gewünscht, deshalb werden keine kürzeren Abstände angeboten.

      Die States wurden bereits korrigiert und erweitert, hierzu ein Screenshot aus dem Demo-Acc.
      powerfox_objects.png

      LG bazidibavaria

      posted in Entwicklung
      bazidibavaria
      bazidibavaria
    • Test Adapter powerfox v0.0.2-x

      Hallo,

      ich habe einen Adapter erstellt um die powerfox-Api zu verarbeiten.
      Zurzeit werden nur die aktuellen Daten minütlich abgeholt (kann aber über den schedule-tab in der Instanz geändert werden).

      Hier der Link zum Github-Projekt:
      https://github.com/bazidibavaria/ioBroker.powerfox.git

      ioBroker.powerfox

      Changelog

      0.0.2-4 (2020-09-07)
      (bazidibavaria) split current power into power consumption and feed in

      0.0.2-3 (2020-09-07)
      (bazidibavaria) added support for HEAT/WATER Devices
      (bazidibavaria) update npm packages

      0.0.2-2 (2020-08-27)
      (bazidibavaria) changed log from error to info

      0.0.2-1 (2020-08-27)
      (bazidibavaria) added travis-ci

      0.0.2-0 (2020-08-27)
      (bazidibavaria) prerelease

      0.0.1 (2020-08-25)
      (bazidibavaria) initial commit

      Ich freue mich auf euer Feedback.

      LG bazidibavaria

      posted in Tester
      bazidibavaria
      bazidibavaria
    • Test Adapter pegelalarm v0.0.1-x

      Hallo,

      ich habe einen Adapter erstellt um die Pegelalarm-Api zu verarbeiten.
      https://github.com/SOBOS-GmbH/pegelalarm_public_pas_doc/wiki/Download-current-water-data
      Da die Api 1.1 einen Login erfordert, greife ich auf die 1.0 (die auch öffentlich von der Webseite verwendet wird) zurück um die Daten abgreifen zu können.

      Bitte beachten, im Admin-Panel wird die API für die Autovervollständigung angesprochen, deshalb immer warten bis das Laden abgeschlossen ist.

      Hier der Link zum Github-Projekt:
      https://github.com/bazidibavaria/ioBroker.pegelalarm.git

      Pegelalarm
      ioBroker.pegelalarm

      Changelog

      0.0.1-1 (2020-08-10)

      • (bazidibavaria) added travis support
      • (bazidibavaria) add images to readme

      0.0.1-0 (2020-08-10)

      • (bazidibavaria) prerelease

      Ich freue mich auf euer Feedback.

      LG bazidibavaria

      posted in Tester
      bazidibavaria
      bazidibavaria
    • Automatische Abholung der Müllabholtermine von awg.de

      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"),"");
              });
          }
      }
      
      posted in JavaScript
      bazidibavaria
      bazidibavaria
    • Tintenstand für Canon TR8550 (als Netzwerkdrucker)

      Hallo,

      hier mein Script zum auswerten des Tintenstands bei einen Canon TR8550 der über LAN angeschlossen ist.
      Vielleicht ist es ja für den ein oder anderen nützlich.

      Als Vorlage diente https://www.iobroker.net/docu/index-317.htm?page_id=3668&lang=de

      LG bazidibavaria

      PS: Es ist mein erstes Skript für ioBroker, wenn ihr Verbesserungsvorschläge habt, immer her damit 😃
      EDIT: role hinzugefügt
      EDIT: Leider ist die Code-Darstellung fehlerhaft, doppelte backslashed werden durch einfache ersetzt.
      => Zeile 80 - inktank [HIER DOPPELTE] levelpos [HIER DOPPELTE]

      /*
        Beschreibung: Canon Drucker Tintenstand für iobroker ermitteln
        Vorlage: https://www.iobroker.net/docu/index-317.htm?page_id=3668&lang=de
        Author: bazidibavaria - 2020-03-18
        Version: 0.1
      */
      
      var druckerIP         = "192.168.178.20";
      var druckerHersteller = "Canon";
      var druckerMod        = "TR8550";
       
      var druckerDataJS     = "http://" + druckerIP + "/JS_MDL/model.js";
       
      var level_C           = 0;
      var level_M           = 0;
      var level_Y           = 0;
      var level_BK          = 0;
      var level_PGBK        = 0;
       
      var DruckIP           = "Drucker." + druckerHersteller + "." + druckerMod + ".IP";
      var DruckerName       = "Drucker." + druckerHersteller + "." + druckerMod + ".Name";
      var DruckerHersteller = "Drucker." + druckerHersteller + "." + druckerMod + ".Hersteller";
      var DruckerModell     = "Drucker." + druckerHersteller + "." + druckerMod + ".Modell";
       
      var CLevel            = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.C.Level";
      var CWarning          = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.C.Warning";
      
      var MLevel            = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.M.Level";
      var MWarning          = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.M.Warning";
      
      var YLevel            = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.Y.Level";
      var YWarning          = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.Y.Warning";
      
      var BKLevel           = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.BK.Level";
      var BKWarning         = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.BK.Warning";
      
      var PGBKLevel         = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.PGBK.Level";
      var PGBKWarning       = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.PGBK.Warning";
      
       
      // Anlegen der Variablen
      createState(DruckIP,druckerIP,{name:'Drucker IP',type:"string",role:"text"});
      createState(DruckerName,druckerHersteller + " " + druckerMod,{name:'Drucker Name',type:"string",role:"text"});
      createState(DruckerHersteller,druckerHersteller,{name:'Drucker Hersteller',type:"string",role:"text"});
      createState(DruckerModell,druckerMod,{name:'Drucker Modell',type:"string",role:"text"});
       
      createState(CLevel,0,{name:'Tintenstand Cyan',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(MLevel,0,{name:'Tintenstand Magenta',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(YLevel,0,{name:'Tintenstand Yellow',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(BKLevel,0,{name:'Tintenstand Black',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
      createState(PGBKLevel,0,{name:'Tintenstand Page Black',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"});
       
      createState(CWarning,false,{name:'Tintenstand Warnung Cyan',def:false,type:"boolean",write:false,role:"indicator"});
      createState(MWarning,false,{name:'Tintenstand Warnung Magenta',def:false,type:"boolean",write:false,role:"indicator"});
      createState(YWarning,false,{name:'Tintenstand Warnung Yellow',def:false,type:"boolean",write:false,role:"indicator"});
      createState(BKWarning,false,{name:'Tintenstand Warnung Black',def:false,type:"boolean",write:false,role:"indicator"});
      createState(PGBKWarning,false,{name:'Tintenstand Warnung Page Black',def:false,type:"boolean",write:false,role:"indicator"});
       
      // Schedule für die Updates
      schedule("0 */1 * * *",  Drucker);
      
      // Skript ausführen
      Drucker();
       
      function Drucker () {
          request(druckerDataJS, function (error, response, body) {
      	    if (!error && response.statusCode == 200) {
                  //get colors
                  var inkColNames = [];
                  var findInkCol = /inkCOL\s?=\s?([^;]+);/i;
                  var matchInkCol = findInkCol.exec(body);
                  // log(matchInkCol);
                  if(matchInkCol != null && matchInkCol.length == 2){
                      inkColNames = eval(matchInkCol[1]);
                  }
      
                  //get ink fill state
                  inkColNames.forEach(ink => {
                      var levelPos = inkColNames.indexOf(ink);
                      var findInkStatus = new RegExp('inktank\[' + levelPos + '\]\s?=\s?([^;]+)',"i");
                      var matchInkStatus = body.match(findInkStatus);
                      if(matchInkStatus != null && matchInkStatus.length == 2){
                          var inkColState = eval(matchInkStatus[1]);
                              
                          if(inkColState.length == 3){
                              var inkColLevel = 0;
                              if(inkColState[1] != 10){
                                  var inkColLevel = 100 - (inkColState[1]*10);
                              } else {
                                  var inkColLevel = 100;
                              }
      
                              switch(ink) {
                                  case 'InkMaz':
                                      setState(MLevel,inkColLevel);
                                      setState(MWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkBlk':
                                      setState(BKLevel,inkColLevel);
                                      setState(BKWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkYel':
                                      setState(YLevel,inkColLevel);
                                      setState(YWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkPbk':
                                      setState(PGBKLevel,inkColLevel);
                                      setState(PGBKWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  case 'InkCia':
                                      setState(CLevel,inkColLevel);
                                      setState(CWarning,(inkColState[2]==1)?true:false);
                                      break;
                                  default:
                                      // do nothing
                              }
                          }                   
                      }
                  });	 
      	    } else  {
      	        log(error);
      	        log('Kein Drucker gefunden');
      	    }
          });
      }
      
      
      posted in JavaScript
      bazidibavaria
      bazidibavaria
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo