Kyocera FS-1350DN printer

This is work in progress (read: neither complete nor perfect), but it works and I wanted to share it with you.

It’s valid for System Firmware 2H4_3000.006.003 / Engine Firmware 2H4_1000.005.001 (seems to be from 2006) but might also fit for other versions and other models.

If page http://<ipaddress>/start/start.htm exists and starts with a comment like this:

<!-- Kyocera Command Center                                              -->
<!-- for Project code 2GR                                                -->
<!--                                                                     -->
<!-- Copyright (C) 2006 KYOCERA MITA Corporation                         -->

your printer most probably will be compatible.

services/http.cfg

KyoceraFS1350DN.url=http://<ipaddress>/start/start.htm
KyoceraFS1350DN.updateInterval=1000

items/KyoceraFS1350DN.items

Number:Dimensionless FS1350DN_Toner_Percent "FS-1350DN Toner [%.0f %%]" {http="<[KyoceraFS1350DN:60000:REGEX(.*[^/]+TLevel\\[0\\]\\s*=\\s*(\\d+);.*)]"}
String FS1350DN_Display_Line1   "FS-1350DN Display [%s]"          {http="<[KyoceraFS1350DN:1000:REGEX(.*[^/]LCD\\[0\\]\\s*=\\s*\"([^\"]+)\";.*)]"}
String FS1350DN_Tray0_Papersize "FS-1350DN Tray 0 Papersize [%s]" {http="<[KyoceraFS1350DN:60000:REGEX(.*[^/]sCol2\\[0\\]\\s*=\\s*papersize_([^;]+?);.*)]"}
Number FS1350DN_Tray0_Capacity  "FS-1350DN Tray 0 Capacity [%s]"  {http="<[KyoceraFS1350DN:60000:REGEX(.*[^/]sCol4\\[0\\]\\s*=\\s*\"([^\"]+)\";.*)]"}
String FS1350DN_Tray0_Level     "FS-1350DN Tray 0 Level [%s]"     {http="<[KyoceraFS1350DN:1000:REGEX(.*[^/]sCol5\\[0\\]\\s*=\\s*\"level_([^\"]+)\";.*)]"}
String FS1350DN_Tray1_Papersize "FS-1350DN Tray 1 Papersize [%s]" {http="<[KyoceraFS1350DN:60000:REGEX(.*[^/]sCol2\\[1\\]\\s*=\\s*papersize_([^;]+?);.*)]"}
String FS1350DN_Tray1_Level     "FS-1350DN Tray 1 Level [%s]"     {http="<[KyoceraFS1350DN:1000:REGEX(.*[^/]sCol5\\[1\\]\\s*=\\s*\"level_([^\"]+)\";.*)]"}
Number FS1350DN_Tray1_Capacity  "FS-1350DN Tray 1 Capacity [%s]"  {http="<[KyoceraFS1350DN:60000:REGEX(.*[^/]sCol4\\[1\\]\\s*=\\s*\"([^\"]+)\";.*)]"}

Tray 0 = MP Tray
Tray 1 = Cassette 1

ToDo:

  • read printer status from PtrVal[1]
  • put everything to a rule to not update the values when printer is offline
1 Like

Pretty cool, i didn’t know that my Printer can show this, altough it has snmp enabled anyway.

J4I:

MODELL: FS-1135MFP

VERSION: 2MJ_2F00.005.005

Oh I didn’t know about SNMP, tell me more! Does that have the same/more values (and quite immediate update intervals)?

To be honest i didn’t start yet with investigating time in the snmp implementation of kyocera.
I jsut saw that my printer has a configuration page for this in the web interface.

I have found these 2 sites so far:

http://www.oidview.com/mibs/1347/md-1347-1.html

and

http://www.mibdepot.com/cgi-bin/vendor_index.cgi?r=kyocera

Maybe this can already help you. :slight_smile:

I didn’t yet manage to have enough time to try out SNMP (yes there’s an OpenHAB 2 binding for it) but as I changed the toner drum, I wanted to start to also keep track of the pages printed - so there’s some more code:

services/http.cfg

KyoceraFS1350DNCounters.url=http://<ipaddress>/start/StatCntFunc.htm
KyoceraFS1350DNCounters.updateInterval=1000

items/KyoceraFS1350DN.items

Number FS1350DN_Counter_Total  "FS-1350DN Counter Total [%s]"         {http="<[KyoceraFS1350DNCounters:60000:REGEX(.*Usage\\[0\\]\\+\":\";\\s*sName\\[0\\]\\s*=\\s*\"([^\"]+)\";.*)]"}
Number FS1350DN_Counter_A4     "FS-1350DN Counter A4 [%s]"            {http="<[KyoceraFS1350DNCounters:60000:REGEX(.*PaperSize\\[4\\]\\+\":\";\\s*sName\\[0\\]\\s*=\\s*\"([^\"]+)\";.*)]"}
Number FS1350DN_Counter_OtherD "FS-1350DN Counter Other(Double) [%s]" {http="<[KyoceraFS1350DNCounters:60000:REGEX(.*PaperSize\\[44\\]\\+\":\";\\s*sName\\[7\\]\\s*=\\s*\"([^\"]+)\";.*)]"}
Number FS1350DN_Counter_OtherS "FS-1350DN Counter Other(Single) [%s]" {http="<[KyoceraFS1350DNCounters:60000:REGEX(.*PaperSize\\[45\\]\\+\":\";\\s*sName\\[8\\]\\s*=\\s*\"([^\"]+)\";.*)]"}

(I left out some other page sizes, but I guess you will get how it works)

Persist it and visualize it with Grafana:
Pages print

I only persited once a minute (enough resoution for me) that’s why you see such steps during the job.
Large print job was a job of 64 doublesided pages (each side counts as one page).

1 Like

Still not on SNMP… but now on the recent version of the HTTP binding:

things/printers.things

Thing http:url:Kyocera-FS-1350DN "Kyocera-FS-1350DN"
[
    baseURL="http://<ipaddress>/start", //TODO: Use hostname
    refresh=120,
    timeout=600000
]
{
    Channels:
        Type string : Toner_Percent [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]+TLevel\\[0\\]\\s*=\\s*(\\d+);.*"
        ]
        Type string : Display_Line1 [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*LCD\\[0\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]
        Type string : Tray0_Papersize [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]sCol2\\[0\\]\\s*=\\s*papersize_([^;]+?);.*"
        ]
        Type string : Tray0_Capacity [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]sCol4\\[0\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]
        Type string : Tray0_Level [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]sCol5\\[0\\]\\s*=\\s*\"level_([^\"]+)\";.*"
        ]
        Type string : Tray1_Papersize [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]sCol2\\[1\\]\\s*=\\s*papersize_([^;]+?);.*"
        ]
        Type string : Tray1_Capacity [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]sCol5\\[1\\]\\s*=\\s*\"level_([^\"]+)\";.*"
        ]
        Type string : Tray1_Level [
            stateExtension="/start.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*[^/]sCol4\\[1\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]

        Type string : Counter_Total [
            stateExtension="/StatCntFunc.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*Usage\\[0\\]\\+\":\";\\s*sName\\[0\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]
        Type string : Counter_A4 [
            stateExtension="/StatCntFunc.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*PaperSize\\[4\\]\\+\":\";\\s*sName\\[0\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]
        Type string : Counter_OtherD [
            stateExtension="/StatCntFunc.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*PaperSize\\[44\\]\\+\":\";\\s*sName\\[7\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]
        Type string : Counter_OtherS [
            stateExtension="/StatCntFunc.htm",
            mode="READONLY",
            stateTransformation="REGEX:.*PaperSize\\[45\\]\\+\":\";\\s*sName\\[8\\]\\s*=\\s*\"([^\"]+)\";.*"
        ]
}

items/KyoceraFS1350DN.items

Number:Dimensionless FS1350DN_Toner_Percent   "FS-1350DN Toner [%.0f %%]"            (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Toner_Percent" }
String               FS1350DN_Display_Line1   "FS-1350DN Display [%s]"               (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Display_Line1" }
String               FS1350DN_Tray0_Papersize "FS-1350DN Tray 0 Papersize [%s]"      (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Tray0_Papersize" }
Number:Dimensionless FS1350DN_Tray0_Capacity  "FS-1350DN Tray 0 Capacity [%s]"       (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Tray0_Capacity" }
String               FS1350DN_Tray0_Level     "FS-1350DN Tray 0 Level [%s]"          (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Tray0_Level" }
String               FS1350DN_Tray1_Papersize "FS-1350DN Tray 1 Papersize [%s]"      (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Tray1_Papersize" }
String               FS1350DN_Tray1_Level     "FS-1350DN Tray 1 Level [%s]"          (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Tray1_Capacity" }
Number:Dimensionless FS1350DN_Tray1_Capacity  "FS-1350DN Tray 1 Capacity [%s]"       (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Tray1_Level" }
Number:Dimensionless FS1350DN_Counter_Total   "FS-1350DN Counter Total [%s]"         (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Counter_Total" }
Number:Dimensionless FS1350DN_Counter_A4      "FS-1350DN Counter A4 [%s]"            (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Counter_A4" }
Number:Dimensionless FS1350DN_Counter_OtherD  "FS-1350DN Counter Other(Double) [%s]" (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Counter_OtherD" }
Number:Dimensionless FS1350DN_Counter_OtherS  "FS-1350DN Counter Other(Single) [%s]" (GP_Persist_Change) { channel="http:url:Kyocera-FS-1350DN:Counter_OtherS" }

Sadly it outputs two error messages in log every refresh seconds if the printer isn’t online - but that’s way less then with the old http binding.