@ahnungsbefreit da der iobroker jetzt meldet das die Funktion "request" deprecated wird, habe ich das ganze mit httpget umgebaut. Läuft bei mir mit einen HP9010 (OfficeJet 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.2.30'; // Drucker IP
var druckermod = "HP-Pro9010"; // 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 http = require('http'); // Using the http module directly
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() {
http.get(druckerURL, (response) => {
let body = '';
// A chunk of data has been received.
response.on('data', (chunk) => {
body += chunk;
});
// The whole response has been received.
response.on('end', () => {
if (response.statusCode === 200) { // Check if the response is OK
// XML parsing logic remains the same
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 {
log('Kein Drucker gefunden');
}
});
}).on('error', (error) => {
log(error);
log('Kein Drucker gefunden');
});
} // end of function