NEWS
[Vorlage] Script und VIS: Druckerpatronen Zustand
-
@sigi234 genau so möchte ich das machen, aber ich weiss nicht, wie ich an den Füllstand komme, da ich in Regex nicht fit bin.
-
@Sascha-Löbbert sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:
@sigi234 genau so möchte ich das machen, aber ich weiss nicht, wie ich an den Füllstand komme, da ich in Regex nicht fit bin.
Deine IP anpassen und Adapter Parser:
Farbe_Drucker_BK http://192.168.178.52/general/information.html?kind=item \(BK\)\*\*<\/dt><dd>\(([0-9.]*)%\) Farbe_Drucker_C http://192.168.178.52/general/information.html?kind=item \(C\)\*\*<\/dt><dd>\(([0-9.]*)%\) Farbe_Drucker_M http://192.168.178.52/general/information.html?kind=item \(M\)\*\*<\/dt><dd>\(([0-9.]*)%\) Farbe_Drucker_Y http://192.168.178.52/general/information.html?kind=item \(Y\)\*\*<\/dt><dd>\(([0-9.]*)%\)
Adapter mehrmals neu starten bis DP befüllt werden.
-
Moin !
Auch wenn das obige Script von pix schon uralt ist. Ich hatte vor das ganze zu versuchen an einen XP 600 anzupassen. Hat bzw gibt es noch jemanden, der das Script von pix zufällig formatiert hat ? Also einfache Textform incl. Umbrüchen ....... Und nicht incl. View, so dass man nicht gezwungen ist (Sorry, bin Javascript Laie und manche Formatierungen usw. verrutschen mir komplett, so das ich es nicht hinbekomme) alle Varianten zu probieren.
Oder falls es mit dem Parser funktionieren sollte ? Im Original liefert die HTML Seite für die ersten 4 Tanks mit schwarz, cyan, gelb, magenta folgende Aussagen. Nur jeweils der Ink_*.PNG und der clrname entsprechend BK, C, Y, M ist anders.
<li class="tank"> <div class="tank"> <img class="color" src="../../IMAGE/Ink_K.PNG" height="50"> </div> <div class="clrname">BK</div> </li>
Bei Tank 5, dem Photoblack sieht es allerdings anders aus. Dort heisst es wieder Ink_K.PNG, aber mit dem anderen clrname PBK. Wie ginge das mit REgex aufzuschlüsseln ? Wenn denn überhaupt ?
<li class="tank"> <div class="tank"> <img class="color" src="../../IMAGE/Ink_K.PNG" height="30"> </div> <div class="clrname">PBK</div> </li>
Wobei das Problem bei diesem Drucker ist, das der Wert 'height' x 2 genommen werden müsste.
@ Sigi234 Wie wäre da der Eintrag in den Parser ? Wenn es überhaupt möglich ist, zwischen Black und Photoblack zu unterscheiden ? Eine wahrscheinlich sehr schwere Frage. Falls niemandem etwas einfällt müsste ich dann leider auf die Tintenstände verzichten. Per SNMP habe ich auch schon alles probiert, allerdings liefert der Drucker da nichts passendes zurück für alle ausprobierten Nummern für Tintenstände.
VG im voraus
-
@sigi234
Hi Sigi,
ich habe es auch über den Parser versucht:
regex101 zeigt mir auch das richtige Ergebnis (20% bzw. --):
(?s)Patrone Schwarz(.?)([0-9-])%
Bei der Übernahme in den Adapter bekomme ich allerdings "invalid group" gemeldet. Kannst du mir sagen was ich in meinem RegEx ändern muss?Habe mir jetzt das o.g. Script auf htps und HPLJ umgebaut und ein wenig Errorhandling ergänzt (z.B wen Ergebnis nur einstellig)
Aber es würde mich schon interessieren, was ich machen muss um im Parser das Ergebnis aus "Group" zu verwenden. -
@nhbischo sagte in [Vorlage] Script und VIS: Druckerpatronen Zustand:
Im Original liefert die HTML Seite
da sehe ich keine informationen, oder meinst du die jeweilige height?
Geht das nicht besser mit dem snmp Adapter?
-
Hätte eine HP Evny Photo mit einer schwarzen/ einer Farbpatrone, unter Ereignisse sehe ich folgenden Zustand:
Was müsste hier angepasst werden?
und wie komme ich dann zu einer entsprechenden Visualisierung? DANKE -
@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
-
@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?
-
@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?
-
@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
nur wie sieht man die im Editor nicht?
in der Vis dann schon?
-
@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
-
@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
TottiP.S.: in FHEM habe ich folgenden XPathStrict:
reading01XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumablePercentageLevelRemaining/text()Wie sollte das als Regex aussehen ?
-
@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. -
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 -
-
Und warum stellst du dein Script nicht hier ein ?
-
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