NEWS

[Vorlage] Script und VIS: Druckerpatronen Zustand


  • Hätte eine HP Evny Photo mit einer schwarzen/ einer Farbpatrone, unter Ereignisse sehe ich folgenden Zustand:
    df848e23-5376-4406-b89c-5b5b57236864-grafik.png

    Was müsste hier angepasst werden?
    und wie komme ich dann zu einer entsprechenden Visualisierung? DANKE

  • Global Moderator

    @nukia sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    Hätte eine HP Evny Photo

    hab den gleichen

    So schaut bei mir das Script aus

    /* bringt den Druckertintenstand von WEB enabled HP Tintenstrahler in ioBroker
       Drucker HP Tintenstand für iobroker ermitteln
      Basierend auf CCU2 Script fuer HP Drucker http://homematic-forum.de/forum/viewtopic.php?f=31&t=25140
      und dem angepassten Script von PiX aus iobroker  http://forum.iobroker.de/viewtopic.php?f=21&t=910&p=6931&hilit=drucker&sid=6780c0b33361e199846dcb584c8dc289&sid=6780c0b33361e199846dcb584c8dc289#p6931
      Author : looxer01 - 03.02.2016
      Version 0.1  03.02.2016        
    */
    
    // hier Drucker parameter einstellen - vor dem ersten Speichern des Scripts
    
    var druckerIP       = '10.0.1.15';           // Drucker IP
    var druckermod      = "HP Envy Photo 7830";                  // Drucker Modell - Strukturelement in den Variablen
    var TinteID         = "303XL";                  // Tinte - Tintenbezeichnung
    var TinteCMYBez     = "T6N03AE";                // Bezeichnung fuer Magenta, Yellow, Cyan
    var TinteKBez       = "T6N04AE";                // Bezeichnung fuer Black
    
    // ende Einstellungen
    
    
    var druckerURL      =  "http://" + druckerIP + "/DevMgmt/ConsumableConfigDyn.xml";          // URL nicht ändern
    var DruckerName     = "Drucker.HP." + druckermod + ".Name";                                 // Variable für create states=
    var request         =  require('request');                                                   // Enabling for URL Request
    var cut1            = "dd:ConsumableLabelCode";                                             // Marker für color
    var cut2            = "dd:ConsumablePercentageLevelRemaining";                              // Marker für Level
    
    var    level_K      = 0;
    var    level_CMY    = 0;
    
    // Tintenlevel
    
    var DruckIP     = "Drucker.HP." + druckermod + ".IP";                                       // Variable für create states
    var Modell      = "Drucker.HP." + druckermod + ".Modell";                                   // Variable für create states
    var Tinte       = "Drucker.HP." + druckermod + ".Tinte";                                    // Variable für create states
    var CMYInk      = "Drucker.HP." + druckermod + ".CMY.Ink";                                  // Variable für create states
    var CMYLevel    = "Drucker.HP." + druckermod + ".CMY.Level";                                // Variable für create states
    var BlackInk      = "Drucker.HP." + druckermod + ".Black.Ink";                                  // Variable für create states
    var BlackLevel    = "Drucker.HP." + druckermod + ".Black.Level";                                // Variable für create states
    
    // Anlegen der Variablen
    createState(DruckIP,druckerIP);
    createState(DruckerName,druckermod);
    createState(Tinte,TinteID);
    
    createState(CMYInk,TinteCMYBez);
    createState(CMYLevel,0);
    
    createState(BlackInk,TinteKBez);
    createState(BlackLevel,0);
    
    var eins_position = 0;
    var zwei_position = 0;
    var level_string = " ";
    var eins_lastpos = 0;
    var zwei_lastpos = 0;
    
    // Schedule für die Updates
    schedule("*/1 * * * *",  function () { // alle 20 Minuten
    log('schedule gestartet' ,"info");
       
        request(druckerURL, function (error, response, body)
        {                              // Einlesen der XML Information
           if (!error && response.statusCode == 200) {                                      // error check
          // Farbe nummer 1   
          
                var eins_position = body.indexOf(cut1) + cut1.length  + 1;              // erste Position finden
                var color =   body.substring(eins_position, eins_position+1) ;          // erste Position ist die Farbe
                var zwei_position = body.indexOf(cut2)+ cut2.length  + 1;               // zweite Position finden
                var level_string = body.substring(zwei_position, body.indexOf('</', zwei_position));     // zweite Position ist der level
                var eins_lastpos = eins_position +10;                                   // merken position eins
                var zwei_lastpos = zwei_position + 10;                                  // merken position zwei
       
                if("K" == color) {
                    level_K = level_string;
                    log('1Level K gefunden Level ist ' + level_K ,"info");
                 }
                if("C" == color) {
                      level_CMY = level_string;
                      log('1Level CMY gefunden Level ist ' + level_CMY ,"info");
                 }
                    
    
         // Farbe nummer 2   
                eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
                 color =   body.substring(eins_position, eins_position+1) ;
                 zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
                 level_string = body.substring(zwei_position, body.indexOf('</', zwei_position));
                 log('farbe2   ' +  body.substring(eins_position, eins_position+1),"info");            
                       if("K" == color)     {
                         level_K = level_string;
                        log('2Level K gefunden Level ist ' + level_K ,"info");
                      }
                      if("C" == color)   {
                          level_CMY = level_string;
                          log('2Level CMY gefunden Level ist ' + level_CMY ,"info");
                      }
                     
    
        // Speichern der Werte
             setState(BlackLevel, level_K);
             setState(CMYLevel, level_CMY);
             setState(DruckIP, druckerIP);
       
             
           } else  {  //   if (!error && response.statusCode == 200) {
              log(error);
              log('Kein Drucker gefunden');
             
           }  // endif error
       
        }); // end of request
    
    }); // end of schedule
    
    
    
    
    
  • Global Moderator

    @nukia sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    und wie komme ich dann zu einer entsprechenden Visualisierung?

    Widget

    [{"tpl":"tplJustgageJustGage","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"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","is_tdp":false,"factor":"1","balance1":"50","balance2":"50","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":"javascript.0.Drucker.HP.HP Envy Photo 7830.CMY.Level","min_oid":"0","max_oid":"100","mid_oid":"50","hideValue":false,"digits":"0","unit":"%","valueFontColor":"white","valueFontFamily":"RobotoCondensed-Light","title":"","titleFontColor":"white","valueOffsetY":"-1","titleFontFamily":"RobotoCondensed-Light","titleBelow":true,"hideMinMax":true,"g_pointer":false,"g_shadow":false,"donut":false,"fullBri":true,"color1":"#ff1414","color2":"#ff871f","color3":"#2dff14","noGradient":false,"gaugeWidthScale":"83","sector1":"","sector2":"","label_oid":"Farbe","labelFontColor":"#ffffff","labelFontFamily":"RobotoCondensed-Light"},"style":{"left":"853px","top":"96px","width":"164px","height":"82px","z-index":"55","font-family":"RobotoCondensed-Light","color":"#ffffff","text-shadow":"rgba(0, 0, 0, 0.9) 3px 3px 4px"},"widgetSet":"justgage"}]
    

  • @Negalein Danke, aber via Widget Importieren sehe ich hier nichts?


  • @Negalein aja, ich nutze HP Instant Ink, ist das ein Problem?

  • Global Moderator

    @nukia sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    Danke, aber via Widget Importieren sehe ich hier nichts?

    du siehst nach dem Import kein Widget?

    Widget als Adapter installiert?

    Screenshot_2020-11-20 Edit vis.png Screenshot_2020-11-20 Edit vis(1).png Screenshot_2020-11-20 instances - ioBroker.png

  • Global Moderator

    @nukia sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    ich nutze HP Instant Ink, ist das ein Problem?

    nein, verwende ich auch


  • @Negalein ja hab die jstGage als Adapter installiert
    88af729c-a5e5-4340-96a2-50409c593d24-grafik.png
    nur wie sieht man die im Editor nicht?
    779f0131-52e4-4daf-a6a2-ce6221d82a1b-grafik.png
    in der Vis dann schon?
    70814b15-2848-4f63-9893-677c10d9496b-grafik.png

  • Global Moderator

    @nukia sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    nur wie sieht man die im Editor nicht?

    Kann ich dir jetzt nicht sagen. Eventuell hast du den Z-Index auf -1?

    Ich seh es auch im Editor

  • Global Moderator

    @nukia sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    ja hab die jstGage als Adapter installiert

    schick mir mal einen Export der Seite wo du das Widget eingefügt hast.


  • Hi,

    ich versuche schon seit Tagen meine HP Officejet in ioBroker zu integrieren ...

    Bisher nur mit mäßigem Erfolg 😞

    Mit Script ist es schonmal gelungen den Füllstatus zu erhalten. Aber im ersten Wert, wird nicht der Füllstamnd sondern die gesamte XML angezeigt.

    Hatte gelesen, das einige das Problem hatten, nur leider nicht wie es gelöst wurde ?!?

    Des Weiteren habe ich jetzt viel über SNMP und Parser hier gelesen.

    Das scheint ja grundsätzlich die einfachere, bzw. bessere Variante zu sein.

    Nur wie komme ich an die richtigen SNMP OIDs und wie setzte ich die Regex richtig ?

    Ich hoffe ihr könnt mir da etwas auf die Sprünge helfen ?

    Grüße & Danke
    Totti

    P.S.: in FHEM habe ich folgenden XPathStrict:
    reading01XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumablePercentageLevelRemaining/text()

    Wie sollte das als Regex aussehen ?

  • Forum Testing Most Active

    @tottitoad sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:

    Mit Script ist es schonmal gelungen den Füllstatus zu erhalten.

    Warum nimmst du nicht das Script. Wurde doch hier schon so oft eingestellt.
    dies funktioniert doch einwandfrei.


  • @bahnuhr

    Habe das Script ja im Einsatz, aber ...

    • Beim ersten Wert (Cyan) wird mir keine Wert sondern die gesamte XML Seite angezeigt
      Bei den anderen Farben klappt es

    • Und ich möchte mir noch mehr anzeigen lassen (z.B. Seriennummer, Verbleibende Seite für jede Patrone, etc.)
      Versuchs gerade mit ins Script aufzunehmen, aber naja

    erstmal müsste ich den Fehler beseitigen das auch bei Cyan der Füllstand angezeigt wird.

    Grüße & Danke
    Totti

  • Forum Testing Most Active

    @tottitoad

    Und warum stellst du dein Script nicht hier ein ?


  • @bahnuhr

    🤦‍♂️ ja das macht sinn 😉

    Hier das Script welches ich verwende:

    
    /* bringt den Druckertintenstand von WEB enabled HP Tintenstrahler in ioBroker
        Drucker HP Tintenstand für iobroker ermitteln
       Basierend auf CCU2 Script fuer HP Drucker http://homematic-forum.de/forum/viewtopic.php?f=31&t=25140
       und dem angepassten Script von PiX aus iobroker  http://forum.iobroker.de/viewtopic.php?f=21&t=910&p=6931&hilit=drucker&sid=6780c0b33361e199846dcb584c8dc289&sid=6780c0b33361e199846dcb584c8dc289#p6931
       Author : looxer01 - 22.12.2015
       Version 0.2 29.01.2015        Druckerparameter jetzt einstellbar im Bereich der Einstellungen
       kosmetik ykuendig
     */
     
    // hier Drucker parameter einstellen - vor dem ersten Speichern des Scripts
      
     var druckerIP       = '192.168.178.127';            // Drucker IP 
     var druckermod      = "officejet";                   // Drucker Modell - Strukturelement in den Variablen
     var TinteID         = "953XL";                  // Tinte - Tintenbezeichnung
     var TinteCyanBez    = "F6U16A";                // Bezeichnung fuer Cyan
     var TinteMagentaBez = "F6U17A";                // Bezeichnung fuer Magenta
     var TinteYellowBez  = "F6U18A";                // Bezeichnung fuer Yellow
     var TinteBlackBez   = "L0R40A";                // Bezeichnung fuer Black
      
     // ENDE der Einstellungen
      
     var druckerURL      = "http://" + druckerIP + "/DevMgmt/ConsumableConfigDyn.xml";          // URL nicht ändern
     var request         = require('request');                                                   // Enabling for URL Request
     var cut0            = "dd:Capacity";                                                        // Marker für capacity
     var cut1            = "dd:ConsumableLabelCode";                                             // Marker für color
     var cut2            = "dd:ConsumablePercentageLevelRemaining";                              // Marker für Level
      
     var level_C  = 0;                                                                           // Tintenlevel
     var level_M  = 0;                                                                           // Tintenlevel
     var level_Y  = 0;                                                                           // Tintenlevel
     var level_K  = 0;                                                                           // Tintenlevel
      
     var DruckIP         = "Drucker.HP." + druckermod + ".IP";                                   // Variable für create states
     var DruckerName     = "Drucker.HP." + druckermod + ".Name";                                 // Variable für create states
     var Modell          = "Drucker.HP." + druckermod + ".Modell";                               // Variable für create states
     var Tinte           = "Drucker.HP." + druckermod + ".Tinte";                                // Variable für create states
      
     var CyanInk         = "Drucker.HP." + druckermod + ".Color1Cyan.Ink";                       // Variable für create states
     var MagentaInk      = "Drucker.HP." + druckermod + ".Color2Magenta.Ink";                    // Variable für create states
     var YellowInk       = "Drucker.HP." + druckermod + ".Color3Yellow.Ink";                     // Variable für create states
     var BlackInk        = "Drucker.HP." + druckermod + ".Color4Black.Ink";                      // Variable für create states
      
     var CyanLevel       = "Drucker.HP." + druckermod + ".Color1Cyan.Level";                     // Variable für create states
     var MagentaLevel    = "Drucker.HP." + druckermod + ".Color2Magenta.Level";                  // Variable für create states
     var YellowLevel     = "Drucker.HP." + druckermod + ".Color3Yellow.Level";                   // Variable für create states
     var BlackLevel      = "Drucker.HP." + druckermod + ".Color4Black.Level";                    // Variable für create states
      
     // Anlegen der Variablen
     createState(DruckIP,druckerIP);
     createState(DruckerName,druckermod);
     createState(Tinte,TinteID);
      
     createState(CyanInk,TinteCyanBez);
     createState(MagentaInk,TinteMagentaBez);
     createState(YellowInk,TinteYellowBez);
     createState(BlackInk,TinteBlackBez);
      
     createState(CyanLevel,0);
     createState(MagentaLevel,0);
     createState(YellowLevel,0);
     createState(BlackLevel),0;
      
     // Schedule für die Updates
     schedule("0 */6 * * *",  Drucker);      // Schedule alle 6 Stunden
     Drucker();                              // Sofort beim Scriptstart einmal laufen lassen
      
     function Drucker () {
      
         request(druckerURL, function (error, response, body) {                              // Einlesen der XML Information
         if (!error && response.statusCode == 200) {                                         // error check
      
             // Farbe nummer 1   
             var null_position = body.indexOf(cut0) + cut0.length + 1 ;
             var eins_position = body.indexOf(cut1, null_position) + cut1.length  + 1;       // erste Position finden
             var color =   body.substring(eins_position, eins_position+1) ;                  // erste Position ist die Farbe
             var zwei_position = body.indexOf(cut2)+ cut2.length  + 1;                       // zweite Position finden
             var level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
             var eins_lastpos = eins_position;                                               // merken position eins
             var zwei_lastpos = zwei_position;                                               // merken position zwei
             var TagEndMarker = '<';
      
             if("C" == color){ level_C  = level_string; }
             if("M" == color){ level_M  = level_string; }
             if("Y" == color){ level_Y  = level_string; }
             if("K" == color){ level_K  = level_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;               
      
             // Farbe nummer 2   
             eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
             color =   body.substring(eins_position, eins_position+1) ;
             zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
             level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
      
             if("C" == color){ level_C  = level_string; }
             if("M" == color){ level_M  = level_string; }
             if("Y" == color){ level_Y  = level_string; }
             if("K" == color){ level_K  = level_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;               
      
             // Farbe nummer 3   
             eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length  + 1;
             color =   body.substring(eins_position, eins_position+1) ;
             zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
             level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
      
             if("C" == color){ level_C  = level_string; }
             if("M" == color){ level_M  = level_string; }
             if("Y" == color){ level_Y  = level_string; }
             if("K" == color){ level_K  = level_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;               
      
             // Farbe nummer 4 
             eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length  + 1;
             color =   body.substring(eins_position, eins_position+1) ;
             zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
             level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
      
             if("C" == color){ level_C  = level_string; }
             if("M" == color){ level_M  = level_string; }
             if("Y" == color){ level_Y  = level_string; }
             if("p" == color){ level_pK = level_string; }
             if("K" == color){ level_K  = level_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;               
      
             log('Drucker Level  C ' + level_C  , "info");
             log('Drucker Level  M ' + level_M  , "info");
             log('Drucker Level  Y ' + level_Y  , "info");
             log('Drucker Level  K ' + level_K  , "info");
      
             // der folgende Bereich muss für ggf abweichenden Druckertyp angepasst werden
             setState(CyanLevel, level_C);
             setState(MagentaLevel, level_M);
             setState(YellowLevel, level_Y);
             setState(BlackLevel, level_K);
             setState(DruckIP, druckerIP);
      
         } else  {  //   if (!error && response.statusCode == 200) {
             log(error);
             log('Kein Drucker gefunden');
         }
      
         }); // end of request
      
     } // end of function
    
    

    Bin gespannt ob ihr den Fehler direkt findet

    Grüße & Danke
    Totti

  • Forum Testing Most Active

    @tottitoad
    Ist mir zu aufwendig, dies zu vergleichen.

    Anbei mal meines, das läuft einwandfrei.

    // bringt den <span class="posthilit">Druckertintenstand</span> von WEB enabled HP Tintenstrahler in ioBroker
    // Basierend auf CCU2 Script fuer HP Drucker http://homematic-forum.de/forum/viewtop ... 31&amp;t=25140
    // und dem angepassten Script von PiX aus iobroker http://forum.iobroker.de/viewtopic.php? ... c289#p6931
    // Author : looxer01 - 22.12.2015
    // 2016-06-18, jtraxler: Angepasst an HP8620
    // 2016-11-01, jtraxler: Bugfix 100% Level
    
    // hier Drucker parameter einstellen - vor dem ersten Speichern des Scripts
    var druckerIP = "192.168.012.345";
    var druckerURL =  "http://" + druckerIP + "/DevMgmt/ConsumableConfigDyn.xml";
    var druckermod = "8600";
    var TinteID = "950XL und 951XL";
    var request = require('request');
    var cut1 = "dd:ConsumableLabelCode";
    var cut2 = "dd:ConsumablePercentageLevelRemaining";
    var TagEndMarker = '</';
    var level_M = 0;
    var level_C = 0;
    var level_Y = 0;
    var level_K = 0;
    
    
    // angepasst an HP 8600 - hier bitte entsprechend anpassen auf den jeweiligen Typ
    createState('javascript.0.System.Drucker.HP.8600.IP',druckerIP);
    createState('javascript.0.System.Drucker.HP.8600.Modell',druckermod);
    createState('javascript.0.System.Drucker.HP.8600.Tinte',TinteID);
    createState('javascript.0.System.Drucker.HP.8600.Cyan.Level');
    createState('javascript.0.System.Drucker.HP.8600.Cyan.Ink','951XL');
    createState('javascript.0.System.Drucker.HP.8600.Yellow.Level');
    createState('javascript.0.System.Drucker.HP.8600.Yellow.Ink','951XL');
    createState('javascript.0.System.Drucker.HP.8600.Black.Level');
    createState('javascript.0.System.Drucker.HP.8600.Black.Ink','950XL');
    createState('javascript.0.System.Drucker.HP.8600.Magenta.Level');
    createState('javascript.0.System.Drucker.HP.8600.Magenta.Ink','951XL');
    
    
    // alle 2 Stunden
    schedule ("*/120 * * * *", function () {
    
        request (druckerURL, function (error, response, body) {
            if (!error && response.statusCode == 200) {
    
                // Farbe nummer 1
                var eins_position = body.indexOf(cut1) + cut1.length + 1;
                var color = body.substring(eins_position, eins_position + 1) ;
                var zwei_position = body.indexOf(cut2) + cut2.length + 1;
                var level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
                var eins_lastpos = eins_position + 10;
                var zwei_lastpos = zwei_position + 10;
    
                if ("M" == color) level_M = level_string;
                if ("C" == color) level_C = level_string;
                if ("Y" == color) level_Y = level_string;
                if ("K" == color) level_K = level_string;
    
                // Farbe nummer 2
                eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
                color = body.substring(eins_position, eins_position + 1) ;
                zwei_position = body.indexOf(cut2,zwei_lastpos) + cut2.length + 1;
                level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
    
                if ("M" == color) level_M = level_string;
                if ("C" == color) level_C = level_string;
                if ("Y" == color) level_Y = level_string;
                if ("K" == color) level_K = level_string;
    
                eins_lastpos = eins_position + 10;
                zwei_lastpos = zwei_position + 10;
    
                // Farbe nummer 3
                eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1;
                color = body.substring(eins_position, eins_position + 1) ;
                zwei_position = body.indexOf(cut2,zwei_lastpos) + cut2.length + 1;
                level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
    
                if ("M" == color) level_M = level_string;
                if ("C" == color) level_C = level_string;
                if ("Y" == color) level_Y = level_string;
                if ("K" == color) level_K = level_string;
    
                eins_lastpos = eins_position + 10;
                zwei_lastpos = zwei_position + 10;
    
                // Farbe nummer 4
                eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1;
                color = body.substring(eins_position, eins_position+1) ;
                zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length + 1;
                level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
    
                if ("M" == color) level_M = level_string;
                if ("C" == color) level_C = level_string;
                if ("Y" == color) level_Y = level_string;
                if ("K" == color) level_K = level_string;
    
                eins_lastpos = eins_position + 10;
                zwei_lastpos = zwei_position + 10;
    
                log('Drucker Level M ' + level_M , "info");
                log('Drucker Level C ' + level_C , "info");
                log('Drucker Level Y ' + level_Y , "info");
                log('Drucker Level K ' + level_K , "info");
                
                // der folgende Bereich muss für ggf abweichenden Druckertyp angepasst werden
                setState('javascript.0.System.Drucker.HP.8600.Cyan.Level', level_C);
                setState('javascript.0.System.Drucker.HP.8600.Yellow.Level', level_Y);
                setState('javascript.0.System.Drucker.HP.8600.Black.Level', level_K);
                setState('javascript.0.System.Drucker.HP.8600.Magenta.Level', level_M);
                setState('javascript.0.System.Drucker.HP.8600.IP', druckerIP);
            } 
            else // if (!error &amp;&amp; response.statusCode == 200) {
            {
                log(error);
                log('Kein Drucker gefunden');
            }
        }); // end of request
    }); // end of schedule
    
    

  • @bahnuhr

    Danke ... hatte jetzt keine wirklichen Fehler gefunden, aber einfach nochmal von vorne begonnen und jetzt läuft alles so woe es soll.

    Meistens haben die HP Drucker (aber auch andere) mehrere XML Seiten. Ich nutze eine andere als in den Scripten hier angegeben, da darin mehr Informationen sind und die Füllstandsanzeige genauer zu sein scheint.

    Hab bei mir noch die Abfrage der verbleibenden Seiten pro Druckerpatrone mit eingefügt.

    Vielleicht kann ja einer gebrauchen, füge mal das Script hier ein (Es kann bestimmt kürzer und besser programmiert werden, aber es läuft und ich habe Null Ahnung vom programmieren) :

    
    /* bringt den Druckertintenstand von WEB enabled HP Tintenstrahler in ioBroker
        Drucker HP Tintenstand für iobroker ermitteln
       Basierend auf CCU2 Script fuer HP Drucker http://homematic-forum.de/forum/viewtopic.php?f=31&t=25140
       und dem angepassten Script von PiX aus iobroker  http://forum.iobroker.de/viewtopic.php?f=21&t=910&p=6931&hilit=drucker&sid=6780c0b33361e199846dcb584c8dc289&sid=6780c0b33361e199846dcb584c8dc289#p6931
       Author : looxer01 - 22.12.2015
       Version 0.2 29.01.2015        Druckerparameter jetzt einstellbar im Bereich der Einstellungen
       kosmetik ykuendig
     */
     
    // hier Drucker parameter einstellen - vor dem ersten Speichern des Scripts
      
     var druckerIP       = '192.168.178.127';       // Drucker IP 
     var druckermod      = "Officejet_Pro_8740";    // Drucker Modell - Strukturelement in den Variablen
     var TinteID         = "953XL und 957 XL";      // Tinte - Tintenbezeichnung
     var TinteCyanBez    = "F6U16A";                // Bezeichnung fuer Cyan
     var TinteMagentaBez = "F6U17A";                // Bezeichnung fuer Magenta
     var TinteYellowBez  = "F6U18A";                // Bezeichnung fuer Yellow
     var TinteBlackBez   = "L0R40A";                // Bezeichnung fuer Black
      
     // ENDE der Einstellungen
      
     var druckerURL      = "http://" + druckerIP + "/DevMgmt/ProductUsageDyn.xml";          // URL nicht ändern
     var request         = require('request');                                              // Enabling for URL Request
     var cut0            = "pudyn:Consumable";                                              // Marker für capacity
     var cut1            = "dd:ConsumableStation";                                          // Marker für color
     var cut2            = "dd:ConsumableRawPercentageLevelRemaining";                      // Marker für Level
     var cut3            = "dd:EstimatedPagesRemaining";                                    // Marker für Pages
      
     var level_C  = 0;                                                                           // Tintenlevel
     var level_M  = 0;                                                                           // Tintenlevel
     var level_Y  = 0;                                                                           // Tintenlevel
     var level_K  = 0;                                                                           // Tintenlevel
     var pages_C  = 0;                                                                           // Pageslevel
     var pages_M  = 0;                                                                           // Pageslevel
     var pages_Y  = 0;                                                                           // Pageslevel
     var pages_K  = 0;                                                                           // Pageslevel
    
     var DruckIP         = "Drucker.HP." + druckermod + ".IP";                                   // Variable für create states
     var DruckerName     = "Drucker.HP." + druckermod + ".Name";                                 // Variable für create states
     var Modell          = "Drucker.HP." + druckermod + ".Modell";                               // Variable für create states
     var Tinte           = "Drucker.HP." + druckermod + ".Tinte";                                // Variable für create states
      
     var CyanInk         = "Drucker.HP." + druckermod + ".Cyan.Ink";                       // Variable für create states
     var MagentaInk      = "Drucker.HP." + druckermod + ".Magenta.Ink";                    // Variable für create states
     var YellowInk       = "Drucker.HP." + druckermod + ".Yellow.Ink";                     // Variable für create states
     var BlackInk        = "Drucker.HP." + druckermod + ".Black.Ink";                      // Variable für create states
      
     var CyanLevel       = "Drucker.HP." + druckermod + ".Cyan.Level";                     // Variable für create states
     var MagentaLevel    = "Drucker.HP." + druckermod + ".Magenta.Level";                  // Variable für create states
     var YellowLevel     = "Drucker.HP." + druckermod + ".Yellow.Level";                   // Variable für create states
     var BlackLevel      = "Drucker.HP." + druckermod + ".Black.Level";                    // Variable für create states
    
     var CyanPages       = "Drucker.HP." + druckermod + ".Cyan.Pages";                     // Variable für create states
     var MagentaPages    = "Drucker.HP." + druckermod + ".Magenta.Pages";                  // Variable für create states
     var YellowPages     = "Drucker.HP." + druckermod + ".Yellow.Pages";                   // Variable für create states
     var BlackPages      = "Drucker.HP." + druckermod + ".Black.Pages";                    // Variable für create states
    
     // Anlegen der Variablen
     createState(DruckIP,druckerIP);
     createState(DruckerName,druckermod);
     createState(Tinte,TinteID);
      
     createState(CyanInk,TinteCyanBez);
     createState(MagentaInk,TinteMagentaBez);
     createState(YellowInk,TinteYellowBez);
     createState(BlackInk,TinteBlackBez);
      
     createState(CyanLevel,0);
     createState(MagentaLevel,0);
     createState(YellowLevel,0);
     createState(BlackLevel),0;
    
     createState(CyanPages,0);
     createState(MagentaPages,0);
     createState(YellowPages,0);
     createState(BlackPages),0;
      
     // Schedule für die Updates
     schedule("0 */6 * * *",  Drucker);      // Schedule alle 6 Stunden
     Drucker();                              // Sofort beim Scriptstart einmal laufen lassen
      
     function Drucker () {
      
         request(druckerURL, function (error, response, body) {                              // Einlesen der XML Information
         if (!error && response.statusCode == 200) {                                         // error check
      
             // Farbe nummer 1   
             var null_position = body.indexOf(cut0) + cut0.length + 1 ;
             var eins_position = body.indexOf(cut1, null_position) + cut1.length  + 1;               // erste Position finden
             var color =   body.substring(eins_position, eins_position+1) ;                          // erste Position ist die Farbe
             var zwei_position = body.indexOf(cut2)+ cut2.length  + 1;                               // zweite Position finden
             var level_string = body.substring(zwei_position, body.indexOf('</', zwei_position));   // zweite Position ist Level String
             var drei_position = body.indexOf(cut3)+ cut3.length +1;                                 // dritte Position finden
             var pages_string = body.substring(drei_position, body.indexOf('</', drei_position)); //dritte Position ist Pages String
             var eins_lastpos = eins_position;                                               // merken position eins
             var zwei_lastpos = zwei_position;                                              // merken position zwei
             var drei_lastpos = drei_position;                                         // merken position drei
    
             if("1" == color){ level_C  = level_string; pages_C = pages_string; }
             if("2" == color){ level_M  = level_string; pages_M = pages_string; }
             if("3" == color){ level_Y  = level_string; pages_Y = pages_string; }
             if("4" == color){ level_K  = level_string; pages_K = pages_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;     
             drei_lastpos = drei_position + 10;
      
             // Farbe nummer 2   
             eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
             color =   body.substring(eins_position, eins_position+1) ;
             zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
             level_string = body.substring(zwei_position, body.indexOf('</', zwei_position));
             drei_position = body.indexOf(cut3,drei_lastpos)+ cut3.length + 1;
             pages_string = body.substring(drei_position, body.indexOf('</', drei_position));
    
    
             if("1" == color){ level_C  = level_string, pages_C = pages_string; }
             if("2" == color){ level_M  = level_string, pages_M = pages_string; }
             if("3" == color){ level_Y  = level_string, pages_Y = pages_string; }
             if("4" == color){ level_K  = level_string, pages_K = pages_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;               
             drei_lastpos = drei_position + 10;
    
             // Farbe nummer 3   
             eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
             color =   body.substring(eins_position, eins_position+1) ;
             zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
             level_string = body.substring(zwei_position, body.indexOf('</', zwei_position));
             drei_position = body.indexOf(cut3,drei_lastpos)+ cut3.length + 1;
             pages_string = body.substring(drei_position, body.indexOf('</', drei_position));
    
             if("1" == color){ level_C  = level_string, pages_C = pages_string; }
             if("2" == color){ level_M  = level_string, pages_M = pages_string; }
             if("3" == color){ level_Y  = level_string, pages_Y = pages_string; }
             if("4" == color){ level_K  = level_string, pages_K = pages_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;               
             drei_lastpos = drei_position + 10;
    
             // Farbe nummer 4 
             eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
             color =   body.substring(eins_position, eins_position+1) ;
             zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
             level_string = body.substring(zwei_position, body.indexOf('</', zwei_position));
             drei_position = body.indexOf(cut3,drei_lastpos)+ cut3.length + 1;
             pages_string = body.substring(drei_position, body.indexOf('</', drei_position));
    
             if("1" == color){ level_C  = level_string; pages_C = pages_string; }
             if("2" == color){ level_M  = level_string; pages_M = pages_string; }
             if("3" == color){ level_Y  = level_string; pages_Y = pages_string; }
             if("4" == color){ level_K  = level_string; pages_K = pages_string; }
      
             eins_lastpos = eins_position + 10;
             zwei_lastpos = zwei_position + 10;  
             drei_lastpos = drei_position + 10;
             
             log('Drucker Level  C ' + level_C  , "info");
             log('Drucker Level  M ' + level_M  , "info");
             log('Drucker Level  Y ' + level_Y  , "info");
             log('Drucker Level  K ' + level_K  , "info");
             log('Drucker Pages  C ' + pages_C  , "info");
             log('Drucker Pages  M ' + pages_M  , "info");
             log('Drucker Pages  Y ' + pages_Y  , "info");
             log('Drucker Pages  K ' + pages_K  , "info");
    
             // der folgende Bereich muss für ggf abweichenden Druckertyp angepasst werden
             setState(CyanLevel, level_C);
             setState(MagentaLevel, level_M);
             setState(YellowLevel, level_Y);
             setState(BlackLevel, level_K);
             setState(DruckIP, druckerIP);
             setState(CyanPages, pages_C);
             setState(MagentaPages, pages_M);
             setState(YellowPages, pages_Y);
             setState(BlackPages, pages_K);
      
         } else  {  //   if (!error && response.statusCode == 200) {
             log(error);
             log('Kein Drucker gefunden');
         }
      
         }); // end of request
      
     } // end of function
    
    

    Grüße & Danke
    Totti


  • @tottitoad Ich habe den Fehler gefunden, die Variable "TagEndMarker" wird bei der ersten Farbe in Zeile 78 verwendet, aber erst in Zeile 81 deklariert. Habe noch eine nicht genutzte Zeile rausgeworfen, so läuft es jetzt bei mir für HP OfficeJet 8600 Pro:

    /* bringt den Druckertintenstand von WEB enabled HP Tintenstrahler in ioBroker
       Drucker HP Tintenstand für iobroker ermitteln
      Basierend auf CCU2 Script fuer HP Drucker http://homematic-forum.de/forum/viewtopic.php?f=31&t=25140
      und dem angepassten Script von PiX aus iobroker  http://forum.iobroker.de/viewtopic.php?f=21&t=910&p=6931&hilit=drucker&sid=6780c0b33361e199846dcb584c8dc289&sid=6780c0b33361e199846dcb584c8dc289#p6931
      Author : looxer01 - 22.12.2015
      Version 0.2 29.01.2015        Druckerparameter jetzt einstellbar im Bereich der Einstellungen
      kosmetik ykuendig
    */
     
    // hier Drucker parameter einstellen - vor dem ersten Speichern des Scripts
     
    var druckerIP       = '192.168.178.33';            // Drucker IP 
    var druckermod      = "HPOJ8600";                   // Drucker Modell - Strukturelement in den Variablen
    var TinteID         = "950XL";                  // Tinte - Tintenbezeichnung
    var TinteCyanBez    = "CN046A";                // Bezeichnung fuer Cyan
    var TinteMagentaBez = "CN047A";                // Bezeichnung fuer Magenta
    var TinteYellowBez  = "CN048A";                // Bezeichnung fuer Yellow
    var TinteBlackBez   = "CN045A";                // Bezeichnung fuer Black
     
    // ENDE der Einstellungen
     
    var druckerURL      = "http://" + druckerIP + "/DevMgmt/ConsumableConfigDyn.xml";          // URL nicht ändern
    var request         = require('request');                                                   // Enabling for URL Request
    var cut0            = "dd:Capacity";                                                        // Marker für capacity
    var cut1            = "dd:ConsumableLabelCode";                                             // Marker für color
    var cut2            = "dd:ConsumablePercentageLevelRemaining";                              // Marker für Level
     
    var level_C  = 0;                                                                           // Tintenlevel
    var level_M  = 0;                                                                           // Tintenlevel
    var level_Y  = 0;                                                                           // Tintenlevel
    var level_K  = 0;                                                                           // Tintenlevel
     
    var DruckIP         = "Drucker.HP." + druckermod + ".IP";                                   // Variable für create states
    var DruckerName     = "Drucker.HP." + druckermod + ".Name";                                 // Variable für create states
    var Modell          = "Drucker.HP." + druckermod + ".Modell";                               // Variable für create states
    var Tinte           = "Drucker.HP." + druckermod + ".Tinte";                                // Variable für create states
     
    var CyanInk         = "Drucker.HP." + druckermod + ".Color1Cyan.Ink";                       // Variable für create states
    var MagentaInk      = "Drucker.HP." + druckermod + ".Color2Magenta.Ink";                    // Variable für create states
    var YellowInk       = "Drucker.HP." + druckermod + ".Color3Yellow.Ink";                     // Variable für create states
    var BlackInk        = "Drucker.HP." + druckermod + ".Color4Black.Ink";                      // Variable für create states
     
    var CyanLevel       = "Drucker.HP." + druckermod + ".Color1Cyan.Level";                     // Variable für create states
    var MagentaLevel    = "Drucker.HP." + druckermod + ".Color2Magenta.Level";                  // Variable für create states
    var YellowLevel     = "Drucker.HP." + druckermod + ".Color3Yellow.Level";                   // Variable für create states
    var BlackLevel      = "Drucker.HP." + druckermod + ".Color4Black.Level";                    // Variable für create states
     
    // Anlegen der Variablen
    createState(DruckIP,druckerIP);
    createState(DruckerName,druckermod);
    createState(Tinte,TinteID);
     
    createState(CyanInk,TinteCyanBez);
    createState(MagentaInk,TinteMagentaBez);
    createState(YellowInk,TinteYellowBez);
    createState(BlackInk,TinteBlackBez);
     
    createState(CyanLevel,0);
    createState(MagentaLevel,0);
    createState(YellowLevel,0);
    createState(BlackLevel),0;
     
    // Schedule für die Updates
    schedule("0 */6 * * *",  Drucker);      // Schedule alle 6 Stunden
    Drucker();                              // Sofort beim Scriptstart einmal laufen lassen
     
    function Drucker () {
     
        request(druckerURL, function (error, response, body) {                              // Einlesen der XML Information
        if (!error && response.statusCode == 200) {                                         // error check
     
            // Farbe nummer 1  
            var TagEndMarker = '<'; 
            var null_position = body.indexOf(cut0) + cut0.length + 1 ;
            var eins_position = body.indexOf(cut1, null_position) + cut1.length  + 1;       // erste Position finden
            var color =   body.substring(eins_position, eins_position+1) ;                  // erste Position ist die Farbe
            var zwei_position = body.indexOf(cut2)+ cut2.length  + 1;                       // zweite Position finden
            var level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
            var eins_lastpos = eins_position;                                               // merken position eins
            var zwei_lastpos = zwei_position;                                               // merken position zwei
            
     
            if("C" == color){ level_C  = level_string; }
            if("M" == color){ level_M  = level_string; }
            if("Y" == color){ level_Y  = level_string; }
            if("K" == color){ level_K  = level_string; }
     
            eins_lastpos = eins_position + 10;
            zwei_lastpos = zwei_position + 10;               
     
            // Farbe nummer 2   
            eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length + 1 ;
            color =   body.substring(eins_position, eins_position+1) ;
            zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
            level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
     
            if("C" == color){ level_C  = level_string; }
            if("M" == color){ level_M  = level_string; }
            if("Y" == color){ level_Y  = level_string; }
            if("K" == color){ level_K  = level_string; }
     
            eins_lastpos = eins_position + 10;
            zwei_lastpos = zwei_position + 10;               
     
            // Farbe nummer 3   
            eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length  + 1;
            color =   body.substring(eins_position, eins_position+1) ;
            zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
            level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
     
            if("C" == color){ level_C  = level_string; }
            if("M" == color){ level_M  = level_string; }
            if("Y" == color){ level_Y  = level_string; }
            if("K" == color){ level_K  = level_string; }
     
            eins_lastpos = eins_position + 10;
            zwei_lastpos = zwei_position + 10;               
     
            // Farbe nummer 4 
            eins_position = body.indexOf(cut1, eins_lastpos) + cut1.length  + 1;
            color =   body.substring(eins_position, eins_position+1) ;
            zwei_position = body.indexOf(cut2,zwei_lastpos)+ cut2.length  + 1;
            level_string = body.substring(zwei_position, body.indexOf(TagEndMarker, zwei_position));
     
            if("C" == color){ level_C  = level_string; }
            if("M" == color){ level_M  = level_string; }
            if("Y" == color){ level_Y  = level_string; }
            if("K" == color){ level_K  = level_string; }
     
            eins_lastpos = eins_position + 10;
            zwei_lastpos = zwei_position + 10;               
     
            log('Drucker Level  C ' + level_C  , "info");
            log('Drucker Level  M ' + level_M  , "info");
            log('Drucker Level  Y ' + level_Y  , "info");
            log('Drucker Level  K ' + level_K  , "info");
     
            // der folgende Bereich muss für ggf abweichenden Druckertyp angepasst werden
            setState(CyanLevel, level_C);
            setState(MagentaLevel, level_M);
            setState(YellowLevel, level_Y);
            setState(BlackLevel, level_K);
            setState(DruckIP, druckerIP);
     
        } else  {  //   if (!error && response.statusCode == 200) {
            log(error);
            log('Kein Drucker gefunden');
        }
     
        }); // end of request
     
    } // end of function
    
    

  • gibts sowas auch für Canon Drucker?


  • @homecineplexx
    das würde ich auch gerne haben
    ich habe ein TS6050 und könnte mich zum Testen bereiterklären

Suggested Topics

838
Online

38.4k
Users

43.9k
Topics

613.2k
Posts