🖶 Drucker-Füllstand abfragen, EPSON Workforce

Begonnen von Torxgewinde, 16 Januar 2026, 23:15:20

Vorheriges Thema - Nächstes Thema

Torxgewinde

Hallo,
Bei einem Drucker (Epson Workforce) kann man den Tintenfüllstand einfach per HTTPS abfragen. Die Werte wollte ich in FHEM haben. Dazu ist ein Device enstanden, dass die Füllwerte für CMYK darstellt und die Werte mittels HTTPMOD pollt:

defmod EpsonDrucker HTTPMOD https://192.168.123.123/PRESENTATION/ADVANCED/INFO_PRTINFO/TOP 300
attr EpsonDrucker alias Epson Drucker
attr EpsonDrucker devStateIcon {\
  my $k = ReadingsNum($name,"black",0);;\
  my $c = ReadingsNum($name,"cyan",0);;\
  my $m = ReadingsNum($name,"magenta",0);;\
  my $y = ReadingsNum($name,"yellow",0);;\
  my $t = ReadingsNum($name,"wastebox",0);;\
  \
  return qq[<svg width="90" height="32" viewBox="0 0 90 32" xmlns="http://www.w3.org/2000/svg" style="--c:$c;;--m:$m;;--y:$y;;--k:$k;;--t:$t;; width:90px;; height:32px">\
  <style>\
    rect {\
      height: 100%;;\
      y: 0;;\
      transform-origin: bottom;;\
      transform-box: fill-box;;\
    }\
  </style>\
  \
  <rect x="0"  width="12" height="100%" fill="#aaa" />\
  <rect x="18" width="12" height="100%" fill="#aaa" />\
  <rect x="36" width="12" height="100%" fill="#aaa" />\
  <rect x="54" width="12" height="100%" fill="#aaa" />\
  <rect x="72" width="12" height="100%" fill="#aaa" />\
  \
  <rect class="c" x="0"  width="12" fill="#00AEEF" style="transform: scaleY(calc(var(--c)/100))"/>\
  <rect class="m" x="18" width="12" fill="#ED008C" style="transform: scaleY(calc(var(--m)/100))"/>\
  <rect class="y" x="36" width="12" fill="#FFF200" style="transform: scaleY(calc(var(--y)/100))"/>\
  <rect class="k" x="54" width="12" fill="#000000" style="transform: scaleY(calc(var(--k)/100))"/>\
  <rect class="t" x="72" width="12" fill="#666666" style="transform: scaleY(calc(var(--t)/100))"/>\
</svg>];;\
}\

attr EpsonDrucker reading01Name black
attr EpsonDrucker reading01RegOpt gs
attr EpsonDrucker reading01Regex class='tank' style='.*to top,.*#FFFFFF ([^,]*)%,.*\);;'><\/div>\s*<div class='clrname'>BK
attr EpsonDrucker reading02Name yellow
attr EpsonDrucker reading02RegOpt gs
attr EpsonDrucker reading02Regex class='tank' style='.*to top,.*#FFFFFF ([^,]*)%,.*\);;'><\/div>\s*<div class='clrname'>Y
attr EpsonDrucker reading03Name magenta
attr EpsonDrucker reading03RegOpt gs
attr EpsonDrucker reading03Regex class='tank' style='.*to top,.*#FFFFFF ([^,]*)%,.*\);;'><\/div>\s*<div class='clrname'>M
attr EpsonDrucker reading04Name cyan
attr EpsonDrucker reading04RegOpt gs
attr EpsonDrucker reading04Regex class='tank' style='.*to top,.*#FFFFFF ([^,]*)%,.*\);;'><\/div>\s*<div class='clrname'>C
attr EpsonDrucker reading05Name wastebox
attr EpsonDrucker reading05RegOpt gs
attr EpsonDrucker reading05Regex class='tank' style='.*to top,.*#FFFFFF ([^,]*)%,.*\);;'><\/div>\s*<div class='mbicn'>
attr EpsonDrucker userReadings state:(cyan|magenta|yellow|black|wastebox):.* {\
    my $k = ReadingsNum($name,"black",0);;\
    my $c = ReadingsNum($name,"cyan",0);;\
    my $m = ReadingsNum($name,"magenta",0);;\
    my $y = ReadingsNum($name,"yellow",0);;\
    my $t = ReadingsNum($name,"wastebox",0);;\
    \
    return "CMYK: $c% $m% $y% $k, bin: $t%";;\
}

So sieht es dann aus:
Du darfst diesen Dateianhang nicht ansehen.