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
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)
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);
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);
Grüße,
ldittmar