NEWS
[Vorlage] Script und VIS: Druckerpatronen Zustand
-
HI,
hab das Skript eingefügt und entsprechend die IP angepasst.
Beim starten erscheint folgende Meldung in Rot:
00:15:57.655 [error] javascript.0 script.js.IT.Tinte compile failed: SyntaxError: Unexpected number
Außer der IP und dem Tintenbezeichnung hab ich in dem Skript nichts weiter geändert.
Nach was muss ich suchen im Skript?
Danke
-
Hier…
! ````
var druckerIP = "192.168.178.31";
var druckerURL = "http://" 192.168.178.31 "/DevMgmt/ConsumableConfigDyn.xml";
! var druckermod = "8500";
var TinteID = "920XL";
! var request = require('request');
var cut1 = "dd:ConsumableLabelCode";
var cut2 = "dd:ConsumablePercentageLevelRemaining";
! var level_M = 0;
var level_C = 0;
var level_Y = 0;
var level_K = 0;
! // angepasst an HP 8900 - hier bitte entsprechend anpassen auf den jeweiligen Typ
createState('Drucker.HP.8500.IP',druckerIP);
createState('Drucker.HP.8500.Modell',druckermod);
createState('Drucker.HP.8500.Tinte',TinteID);
createState('Drucker.HP.8500.Cyan.Level');
createState('Drucker.HP.8500.Cyan.Ink','C4907A');
createState('Drucker.HP.8500.Yellow.Level');
createState('Drucker.HP.8500.Yellow.Ink','C4909A');
createState('Drucker.HP.8500.Black.Level');
createState('Drucker.HP.8500.Black.Ink','C4906A');
createState('Drucker.HP.8500.Magenta.Level');
createState('Drucker.HP.8500.Magenta.Ink','C4908A');
! schedule("*/20 * * * *", function () { // alle 20 Minuten
! 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, zwei_position+2) ;
var eins_lastpos = eins_position +10;
var zwei_lastpos = zwei_position + 10;
! if("M" == color){
level_M = level_string;
}
if("X" == 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, zwei_position+2) ;
! 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, zwei_position+2) ;
! 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, zwei_position+2) ;
! 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.Drucker.HP.8500.Cyan.Level', level_C);
setState('javascript.0.Drucker.HP.8500.Yellow.Level', level_Y);
setState('javascript.0.Drucker.HP.8500.Black.Level', level_K);
setState('javascript.0.Drucker.HP.8500.Magenta.Level', level_M);
setState('javascript.0.Drucker.HP.8500.IP', druckerIP);
! } else { // if (!error && response.statusCode == 200) {
log(error);
log('Kein Drucker gefunden');
! }
! }); // end of request
! }); // end of schedulegeändert: Code in Code-Tags und Spoiler gesetzt; ****Homoran (Mod)**** -
Das war schon verpfuscht. Habe nun eine neuere Version des Druckerscripts für Dich angepasst.
Bitte bei den Objekten, alle bereits erstellten -javascript.0.Drucker.HP.8500- Einträge löschen (falls vorhanden).
Das Script macht die dann neu.
Einstellungen sollten ca. passen - So wie es ist, läufts alle 6 Stunden. Das könnte bei Zeile 69 sonst angepasst werden.
/* 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.31'; // Drucker IP var druckermod = "8500"; // Drucker Modell - Strukturelement in den Variablen var TinteID = "920XL"; // Tinte - Tintenbezeichnung var TinteCyanBez = "1234567"; // Bezeichnung fuer Cyan var TinteMagentaBez = "1234567"; // Bezeichnung fuer Magenta var TinteYellowBez = "1234567"; // Bezeichnung fuer Yellow var TinteBlackBez = "1234567"; // 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 functionDann mal los.
-
Die IP vom Drucker muss stimmen: 192.168.178.31
Der Drucker muss das Vorhaben untersützen. Sprich, er muss auf Eingabe des Links im Browser ein XML zurückschicken:
http://192.168.178.31/DevMgmt/ConsumableConfigDyn.xmlIm Zweifelsfalle das Resultat-XML hier posten. (( CODE-Tags nicht vergessen))
-
Probier mal:
http://192.168.178.31/DevMgmt/ProductConfigDyn.xml ````oder:http://192.168.178.31/DevMgmt/MediaHandlingDyn.xml
http://192.168.178.31/DevMgmt/ProductStatusDyn.xml
-
Nicht wundern hab den Drucker nun übers LAN angeschlossen und dadurch die andere Ip.
! http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
! http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
! <title><br/><br /> <br/><br /><br/><br /><br/><br /> HP Officejet 6500 E709n<br/><br /><br/><br /> 192.168.178.47<br/><br /><br/><br /><br/><br /><br/><br /><br/><br /></title>
!
! |
http://www.hp.com';" /> |
! # HP Officejet 6500 E709n
! |
|
! |
! HPD0B01A
! 192.168.178.47 |
! Status:
!
! Bereit
!
!
! |
! |
! Informationen
! Einstellungen
! Netzwerk! ! Übersicht
! Geräteinformationen
! Netzwerkinformationen
! Status
! Nutzungsbericht
! Protokoll
! Anwendungen
! Webscan
! EWS-Einstellungen
! Sprache
! Aktualisierungsrate
! |
! |
! #
! Geräteinformationen
! |
! |
! ###
! Status
! |
! #####
! Gerät:
! |
!
! HP Officejet 6500 E709n ! Status:
!
! Bereit
! |
! |
! #####
! Geschätzte Tintenfüllstände:*! ! ! ! ! ! ! ! ! |
!

! | |
!
! | |
!
! | |
!
! |
! *Nur ungefähre Werte. Die tatsächlichen Tintenstände können abweichen.
! |
! #####
! Optionen, die einen Benutzereingriff erfordern:
! |
! ###
! Angaben
! |
! #####
! Gerät:
! |
! Produktname
! |
! HP Officejet 6500 E709n! ! Produktmodellnummer
! |
! CB057A! ! Produktseriennummer
! |
! TH094321X205G2! ! Dienst-ID
! |
! 21075! ! Drucker-ID
! |
! 0! ! Firmwareversion
! |
! RBP1FN0907AR! ! Automatischer Duplexer
! |
! Installiert! ! Administrator-Passwort
! |
! Nicht festgelegt! ! Seitenanzahl gesamt
! |
! 6583! ! Land/Region
! |
! Deutschland! ! PCL-Set Standard-Symbole
! |
! 341
! |
! |
! #####
! Tintenpatrone:
! |
! Farbe
! |
! Patronenbereich (PX)
! |
! Datum der Erstinstallation (J-M-T)
! |
! Datum Garantieablauf (J-M-T)
! |
! Teilenummer! |
!

! Schwarz! 1 2016-11-18 2017-03-26 !

! Gelb! 1 2016-12-16 2018-11-12 !

! Zyan! 1 2016-12-16 2018-11-12 !

! Magenta
! | 1 | 2017-02-26 | 2018-11-12 | |
! |
! | -
Das ginge mit dem parser Adapter, wenn Du möchtest.
sieht dann so aus: 
Regexzeilen zum kopieren:````
cyanink=([+-]?\d+)
magentaink=([+-]?\d+)
yellowink=([+-]?\d+)
blackink=([+-]?\d+)Objektnamen nach eigenem Gutdünken anpassen und Polling Intervall in ms einstellen… :idea: -
Bei mir sieht es unter objekte ebenso aus, nur das er mir in grüner oder orangener Schrift bei allen vieren 0% anzeigt
:(
Das ginge mit dem parser Adapter, wenn Du möchtest.
parser01.png sieht dann so aus: parser02.png
Regexzeilen zum kopieren:````
cyanink=([+-]?\d+)
magentaink=([+-]?\d+)
yellowink=([+-]?\d+)
blackink=([+-]?\d+)Objektnamen nach eigenem Gutdünken anpassen und Polling Intervall in ms einstellen… :idea: ` -
Danke für den Tip, hab die komplette Url rein kopiert
http://192.168.178.47/index.htm?cat=inf … rinterInfo
Nun liesst er es aus...
Mit einem Basic String kann ich mir ja die % anzeigen lassen, was könnte für einen Balken nehmen?
Danke Dir!
Tobias