Druckerpatronenstand ermitteln

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Druckerpatronenstand ermitteln

Beitrag von ldittmar » 13.05.2015, 20:54

Hallo Leute,

mir war eben langweilig und ich dachte ich könnte mal was neues ausprobieren. Ich habe jetzt den Füllstand der Druckpatronen meines HP Officejet 6500 ins HM eingelesen. Naja... jetzt werde ich gewant, wenn meine Frau die ganze Tinte verbraucht hat, um Rezepte auszudrucken :P :D

Man kann natürlich auch andere daten bekommen, aber ich brauche z.Z. nur diese Daten. Eigentlich sollten auch andere HP Drucker mit einem Embedded Web Server damit funktionieren.

Um zu sehen ob es funktioniert, einfach diese Seite im Browser aufrufen: http://192.168.x.x/DevMgmt/ConsumableConfigDyn.xml wobei 192.168.x.x durch die IP des Druckers ersetzt werden muss.
  • Für alle die sich nicht mit CUxD auskennen,das hier durchlesen und auch so ein Gerät anlegen, der hier im Code eingegeben werden muss
  • Jetzt müssen einige Variablen angelegt werden. Entweder die gleiche Bezeichnung wie unten im Skript wählen (z.B. Drucker_Yellow) oder diese im Skript anpassen. Die Art der einzelnen Variablen stehen als Kommentar hinten dran und was die einzelnen bewirken, sollte aus dem Namen ersichtlich sein
  • Zum Schluss einfach ein Programm schreiben, der den Skript irgendwann ausführt (bei mir einmal am Tag, morgens um 4)
HP-Drucker

Gestestet mit:
  • HP Officejet 6500
  • HP 8600Pro - danke redmkiv

Code: Alles auswählen

!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD
!-----------------------------------------------------------------------------
string druckerIP = "192.168.0.31"; !IP des HP Druckers

var CUxD_Device = "CUxD.CUX2801001:10"; !CUxD Virtuelles Gerät

!Druckerpatronen Variablen-Namen
string yellow = "Drucker_Yellow"; !Zahl 0 - 100%
string magenta = "Drucker_Magenta"; !Zahl 0 - 100%
string cyan = "Drucker_Cyan"; !Zahl 0 - 100%
string black = "Drucker_Black"; !Zahl 0 - 100%

!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
    
string druckerUrl = "http://" + druckerIP + "/DevMgmt/ConsumableConfigDyn.xml";

var posStart;
var posEnd;

string cmd = "wget -q -O - " # druckerUrl;
    
dom.GetObject(CUxD_Device # ".CMD_SETS").State(cmd);
dom.GetObject(CUxD_Device # ".CMD_QUERY_RET").State(1);
string stdout = dom.GetObject(CUxD_Device # ".CMD_RETS").State();

string cut1 = "ConsumableAcceptibilitySubBrand";
string cut2;
stdout = stdout.Substr(stdout.Find(cut1), stdout.Length());

integer c;
integer m;
integer y;
integer k;
string farbe;
string value;

!-----------------------------------------------------------------------------
! Farbe Nr 1
!-----------------------------------------------------------------------------
cut1 = "dd:ConsumableLabelCode";
cut2 = "dd:ConsumablePercentageLevelRemaining";
farbe = stdout.Substr(stdout.Find(cut1) + cut1.Length() + 1, 1);
value = stdout.Substr(stdout.Find(cut2) + cut2.Length() + 1, 2);	
if("M" == farbe){
	m = value.ToInteger();
}
if("Y" == farbe){
	y = value.ToInteger();
}
if("C" == farbe){
	c = value.ToInteger();
}
if("K" == farbe){
	k = value.ToInteger();
}
cut1 = "ConsumableInfo";
stdout = stdout.Substr(stdout.Find(cut1) + cut1.Length() * 2, stdout.Length());

!-----------------------------------------------------------------------------
! Farbe Nr 2
!-----------------------------------------------------------------------------
cut1 = "dd:ConsumableLabelCode";
cut2 = "dd:ConsumablePercentageLevelRemaining";
farbe = stdout.Substr(stdout.Find(cut1) + cut1.Length() + 1, 1);
value = stdout.Substr(stdout.Find(cut2) + cut2.Length() + 1, 2);	
if("M" == farbe){
	m = value.ToInteger();
}
if("Y" == farbe){
	y = value.ToInteger();
}
if("C" == farbe){
	c = value.ToInteger();
}
if("K" == farbe){
	k = value.ToInteger();
}
cut1 = "ConsumableInfo";
stdout = stdout.Substr(stdout.Find(cut1) + cut1.Length() * 2, stdout.Length());

!-----------------------------------------------------------------------------
! Farbe Nr 3
!-----------------------------------------------------------------------------
cut1 = "dd:ConsumableLabelCode";
cut2 = "dd:ConsumablePercentageLevelRemaining";
farbe = stdout.Substr(stdout.Find(cut1) + cut1.Length() + 1, 1);
value = stdout.Substr(stdout.Find(cut2) + cut2.Length() + 1, 2);	
if("M" == farbe){
	m = value.ToInteger();
}
if("Y" == farbe){
	y = value.ToInteger();
}
if("C" == farbe){
	c = value.ToInteger();
}
if("K" == farbe){
	k = value.ToInteger();
}
cut1 = "ConsumableInfo";
stdout = stdout.Substr(stdout.Find(cut1) + cut1.Length() * 2, stdout.Length());

!-----------------------------------------------------------------------------
! Farbe Nr 4
!-----------------------------------------------------------------------------
cut1 = "dd:ConsumableLabelCode";
cut2 = "dd:ConsumablePercentageLevelRemaining";
farbe = stdout.Substr(stdout.Find(cut1) + cut1.Length() + 1, 1);
value = stdout.Substr(stdout.Find(cut2) + cut2.Length() + 1, 2);	
if("M" == farbe){
	m = value.ToInteger();
}
if("Y" == farbe){
	y = value.ToInteger();
}
if("C" == farbe){
	c = value.ToInteger();
}
if("K" == farbe){
	k = value.ToInteger();
}

dom.GetObject(yellow).State(y);
dom.GetObject(cyan).State(c);
dom.GetObject(magenta).State(m);
dom.GetObject(black).State(k);
Epson-Drucker

MistyReblaus hat sich die Mühe gemacht und den Skript für den Epson portiert. Danke :-)

Gestestet mit:
  • Workforce Epson 3520

Code: Alles auswählen

!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD
! Vorlage aus: http://homematic-forum.de/forum/viewtopic.php?f=31&t=25140
! Getestet an einem Epson WF-3520 Series
!-----------------------------------------------------------------------------
string druckerIP = "192.168.178.22"; !IP des HP Druckers
integer baseLevel = 50; !Um die prozentuale Füllung zu berechnen, angezeigt werden hier 50px als 100%

var CUxD_Device = "CUxD.CUX2801001:2"; !CUxD Virtuelles Gerät

!Druckerpatronen Variablen-Namen
string Drucker_Black_Level = "Drucker_Black_Level"; !Zahl 0 - 100%
string Drucker_Magenta_Level = "Drucker_Magenta_Level"; !Zahl 0 - 100%
string Drucker_Cyan_Level = "Drucker_Cyan_Level"; !Zahl 0 - 100%
string Drucker_Yellow_Level = "Drucker_Yellow_Level"; !Zahl 0 - 100%
string Drucker_Waste_Level = "Drucker_Waste_Level"; !Zahl 0 - 100%
string Drucker_Aktualisierungszeit = "Drucker_Aktualisierungszeit"; !Zeichenkette

!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
    
string druckerUrl = "http://" + druckerIP + "/PRESENTATION/HTML/TOP/PRTINFO.HTML";

string cmd = "wget -q -O - " # druckerUrl;

dom.GetObject(CUxD_Device # ".CMD_SETS").State(cmd);
dom.GetObject(CUxD_Device # ".CMD_QUERY_RET").State(1);
string stdout = dom.GetObject(CUxD_Device # ".CMD_RETS").State();

if(stdout.Length() == 0)
{
  WriteLine("No Printer found");
  return;
}

!-----------------------------------------------------------------------------
! Color Black
!-----------------------------------------------------------------------------
string Black_Cut = "img class='color' src='../../IMAGE/Ink_K.PNG' height='";
string Black_Level_String= stdout.Substr(Black_Cut.Length() + stdout.Find(Black_Cut),2);
integer Black_Level = (Black_Level_String.ToInteger() * 100) / baseLevel;

!-----------------------------------------------------------------------------
! Color Magenta
!-----------------------------------------------------------------------------
string Magenta_Cut = "img class='color' src='../../IMAGE/Ink_M.PNG' height='";
string Magenta_Level_String= stdout.Substr(Magenta_Cut.Length() + stdout.Find(Magenta_Cut),2);
integer Magenta_Level = (Magenta_Level_String.ToInteger() * 100) / baseLevel;

!-----------------------------------------------------------------------------
! Color Cyan
!-----------------------------------------------------------------------------
string Cyan_Cut = "img class='color' src='../../IMAGE/Ink_C.PNG' height='";
string Cyan_Level_String= stdout.Substr(Cyan_Cut.Length() + stdout.Find(Cyan_Cut),2);
integer Cyan_Level = (Cyan_Level_String.ToInteger() * 100) / baseLevel;

!-----------------------------------------------------------------------------
! Color Yellow
!-----------------------------------------------------------------------------
string Yellow_Cut = "img class='color' src='../../IMAGE/Ink_Y.PNG' height='";
string Yellow_Level_String = stdout.Substr(Yellow_Cut.Length() + stdout.Find(Yellow_Cut),2);
integer Yellow_Level = (Yellow_Level_String.ToInteger() * 100) / baseLevel;

!-----------------------------------------------------------------------------
! Waste
!-----------------------------------------------------------------------------
string Waste_Cut = "img class='color' src='../../IMAGE/Ink_Waste.PNG' height='";
string Waste_Level_String= stdout.Substr(Waste_Cut.Length() + stdout.Find(Waste_Cut),2);
integer Waste_Level = (Waste_Level_String.ToInteger() * 100) / baseLevel;

dom.GetObject(Drucker_Black_Level).State(Black_Level);
dom.GetObject(Drucker_Magenta_Level).State(Magenta_Level);
dom.GetObject(Drucker_Cyan_Level).State(Cyan_Level);
dom.GetObject(Drucker_Yellow_Level).State(Yellow_Level);
dom.GetObject(Drucker_Waste_Level).State(Waste_Level);

string Aktualisierungszeit = system.Date("%d.%m.%y %H:%M");
dom.GetObject(Drucker_Aktualisierungszeit).State(Aktualisierungszeit);
Bei Fragen einfach melden.

Grüße,
ldittmar
Zuletzt geändert von ldittmar am 22.06.2015, 09:58, insgesamt 6-mal geändert.
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

mike9677
Beiträge: 422
Registriert: 17.04.2011, 11:08

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von mike9677 » 11.06.2015, 11:44

Hi,

hast du ne Ahnung, ob das auch mit Epson Druckern geht ?

Gruß
mike

audioconcept
Beiträge: 139
Registriert: 25.12.2014, 21:43
System: CCU
Wohnort: Dortmund

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von audioconcept » 11.06.2015, 16:16

Hi,

kannst du mir noch kurz sagen, wie ich es anlege bzw. integriere?
Gruß aus Dortmund

Michael

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von nicolas-eric » 11.06.2015, 16:28

Coole Sache!
Ob das auch bei hp farblasern geht?
Bei meinem hp tintenpisser kann ich das leider nicht nutzen.
Bei nicht original Patronen zeigt der den Stand ja nicht an.

audioconcept
Beiträge: 139
Registriert: 25.12.2014, 21:43
System: CCU
Wohnort: Dortmund

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von audioconcept » 12.06.2015, 09:44

Hi

welches Virtuelle Gerät nimmst du denn in CUXD?
Gruß aus Dortmund

Michael

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von ldittmar » 12.06.2015, 13:11

mike9677 hat geschrieben:Hi,

hast du ne Ahnung, ob das auch mit Epson Druckern geht ?

Gruß
mike
Ich habe kein Epson, aber ich denke nicht, dass ein HP-Drucker die gleiche Web-Oberfläche wie ein Epson-Gerät anbietet.
audioconcept hat geschrieben:Hi,

kannst du mir noch kurz sagen, wie ich es anlege bzw. integriere?
Ich habe es im Hauptpost nochmal besser beschrieben. :wink:
nicolas-eric hat geschrieben:Coole Sache!
Ob das auch bei hp farblasern geht?
Bei meinem hp tintenpisser kann ich das leider nicht nutzen.
Bei nicht original Patronen zeigt der den Stand ja nicht an.
Ich habe leider kein Laser-Drucker. Ich denke dass es zu mindestens Ähnlich funktionieren würde. Beim Tintenstahler geht es aber, wie du schon gesagt hast, leider NUR mir original Patronen.
audioconcept hat geschrieben:Hi

welches Virtuelle Gerät nimmst du denn in CUXD?
Ich habe es im Hauptpost nochmal besser beschrieben. :wink:


Grüße,
ldittmar
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

audioconcept
Beiträge: 139
Registriert: 25.12.2014, 21:43
System: CCU
Wohnort: Dortmund

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von audioconcept » 12.06.2015, 14:00

Auf was lässt du es dir anzeigen? Dashui? oder per email?


Danke
Gruß aus Dortmund

Michael

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von ldittmar » 12.06.2015, 14:57

audioconcept hat geschrieben:Auf was lässt du es dir anzeigen? Dashui? oder per email?


Danke
Hi AudioConcept,

ich zeige es noch gar nicht an... bin noch ziemlich neu in der Automatisation-Szene :wink: Will es aber entweder mit ioBroker oder openHAB ausprobieren... Für Notifikationen nutze ich Pushover. E-Mails sind meiner Meinung nach nicht das ideale Medium um kurze Infos zu senden. Vielleicht für ein Monatsbericht oder so, aber nicht um zu sagen "Kauf jetzt neue Patronen!" :wink:

Grüße,
ldittmar
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

MistyReblaus
Beiträge: 180
Registriert: 15.09.2014, 22:25

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von MistyReblaus » 12.06.2015, 15:35

Mein Epson hat auch eine Weboverfläche über die man die Informationen anrufen kann, zwar kein natives XML, aber was ist denn schon an HTMl anders :-)

Die Adresse dafür ist: http://x.x.x.x/PRESENTATION/HTML/TOP/PRTINFO.HTML

Sieht dann so aus:

Code: Alles auswählen


<ul class="information-last clearfix">
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_K.PNG' height='45'>
</div>
<div class='clrname'>BK</div>
</li>
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_M.PNG' height='48'>
</div>
<div class='clrname'>M</div>
</li>
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_Y.PNG' height='48'>
</div>
<div class='clrname'>Y</div>
</li>
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_C.PNG' height='47'>
</div>
<div class='clrname'>C</div>
</li>
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_Waste.PNG' height='47'>
</div>
<div class='mbicn'><img src='../../IMAGE/Icn_Mb.PNG' height='18' width='18'></div>
</li>
Height geht von 0-50 und stellt den Füllstand dar. Dementsprechend kann man die Werte wie aus dem Skript oben rauskratzen. Werde mich heute mal drangeben und es dann hier posten.

Grüße, Jens

redmkiv
Beiträge: 44
Registriert: 08.10.2014, 20:52

Re: Druckerpatronenstand für HP Officejet 6500

Beitrag von redmkiv » 12.06.2015, 17:49

Danke fürs Script funktioniert mit HP 8600Pro hervorragend.
CCU2/Cubietruck mit CCU.IO,DASHUI,usw./CUL/Arduino Mega

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“