Insteon‎ > ‎

Samsung CLP-610

I had a Samsung CLP-510 printer several years ago.  I didn't have the networked version, but I really liked the value.  It was a damn big printer, but printed in color laser, and had automatic duplexing.  So when my 510 ran out of toner, I upgraded to the 610 and got embedded networking!

I liked the printers so much that I wrote Samsung a nice letter telling them how much I liked their printers.  Samsung replied with a nice little thank-you, and I felt great to be working with such a great company.  But then a couple years passed, and it came time for me to either upgrade again, or to replace toner cartridges.  Not seeing significant new features, I opted to stick with my CLP-610N and get it some fancy new high-yield cartridges.

Life was good.  For a while.  But then the printer decided to repay all my love for it by throwing heat errors.  As I understand them, heat errors are a problem with the fuser.  For whatever reason, it can't maintain proper temperature.  So the printer gives up, spawns a heat error, and makes me walk across my office, toggle the power switch, then walk back to my desk and restart my print job(s) -- with my fingers crossed that it doesn't come straight up to another heat error.

-- you can't just log in to the printer's web interface, browse to machine settings -> printer, and click 'restart printer' because when the printer is in error, the web interface determines it is busy, and you cannot restart it; you must go to the printer and manually flip the switch.



When this trouble started, the printer was maybe just over two years old.  I looked online for a firmware update, but was disappointed to find that Samsung had not released any updates for this printer since they started selling it.  So I called samsung to see if they would stand behind their product in good faith.  I knew it was probably out of warranty, but I didn't think a fuser unit that has a duty life of 100,000 pages should act up after only 3,500 pages!



Sadly, Samsung has absolutely no compassion for my situation.  Their representative simply told me that my printer was out of warranty and that the error was known, and the only solution was to ship it in for service (at cost, of course!).  The problem here is that I will not support something I disagree with.  I therefore refuse to put any more money into this device.  And I have every intention never to buy a Samsung printer again.

But that doesn't solve my immediate need of what to do when I need to print in color, or auto-duplexed?

For that, I put two things together: insteon and SNMP.

Step 1) walk the printer.
> snmpwalk -cpublic -v2c CLP-610
Notice that CLP-610 above is a hostname, and can be replaced with an IP address.  What came back to me were a few interesting items, which I'll condense:
SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "Cyan Toner Cartridge : CLP-C660 S/N:CRUM-[removed]"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: "Magenta Toner Cartridge : CLP-M660 S/N:CRUM-[removed]"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.3 = STRING: "Yellow Toner Cartridge : CLP-Y660 S/N:CRUM-[removed]"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.4 = STRING: "Black Toner Cartridge : CLP-K660 S/N:CRUM-[removed]"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.5 = STRING: "Transfer Belt : CLP-T660"
SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: 93
SNMPv2-SMI::mib-2.43.11.1.1.9.1.2 = INTEGER: 94
SNMPv2-SMI::mib-2.43.11.1.1.9.1.3 = INTEGER: 92
SNMPv2-SMI::mib-2.43.11.1.1.9.1.4 = INTEGER: 90
SNMPv2-SMI::mib-2.43.11.1.1.9.1.5 = INTEGER: 93
SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 = STRING: "Open Heat Error "
SNMPv2-SMI::mib-2.43.16.5.1.2.1.2 = STRING: "  Cycle Power   "
SNMPv2-SMI::mib-2.43.18.1.1.8.1.1 = STRING: "The Fuser Unit cannot maintain a normal operating temperature. User intervention is required to Power Off/Power On the machine, replace the Fuser if problem persists. Printing has stopped, all other machine services are unaffected."

Another problem is:

SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 = STRING: "ADC Slope Error "
SNMPv2-SMI::mib-2.43.16.5.1.2.1.2 = STRING: "  Cycle Power   "


I noticed that I can easily see the life of my toners and transfer belt, and I can see the current status.

Step 2) write a script.  I haven't attached it here because it requires other components of my insteon package.  Hopefully the code below is enough to get you started!  And yes, it's written in ruby.  I've been a haphazard perl developer for a very long time.  I finally decided to learn a new language because I wanted to get back into object-oriented development.  I looked at PHP, but was wholly unsatisfied with reliability and CPU consumption of an algorithm I rewrote in PHP; I blamed it on the language because I don't have problems in either perl or ruby.  Anyhow, here's the script; I added some comments in lieu of the full package.
#!/usr/bin/ruby
#clp-610.rb
require "rubygems"
require "snmp"
#In fedora, the snmp gem did not install correctly for me.
#I ran the setup script manually to 'fix' it.
include SNMP
#$DEBUG = 1
#Uncomment the line above to enable debugging.

status = ""
cyan = ""; magenta = ""; yellow = ""; black = ""; belt = ""
#I'm not using anything except #{status} at the moment, but
#I included the toners and belt lives for reference.
Manager.open(:Host => 'CLP-610') do |manager|
  #Again: CLP-610 above is a hostname, but can be an IP.
  status   = manager.get_value("SNMPv2-SMI::mib-2.43.16.5.1.2.1.1")
 
  cyan    = manager.get_value("SNMPv2-SMI::mib-2.43.11.1.1.9.1.1")
  magenta = manager.get_value("SNMPv2-SMI::mib-2.43.11.1.1.9.1.2")
  yellow  = manager.get_value("SNMPv2-SMI::mib-2.43.11.1.1.9.1.3")
  black   = manager.get_value("SNMPv2-SMI::mib-2.43.11.1.1.9.1.4")
  belt    = manager.get_value("SNMPv2-SMI::mib-2.43.11.1.1.9.1.5")
end

if status =~ /heat/i
  require "insteon"
    #OK, here's where we start calling my object code.
    #I set this up as a light object because I've got my
    #printer wired up to an inline switch device, which
    #takes the same insteon commands as a light switch.
    #
    #Obviously I changed the device ID below (the 111111).
    #Setting the brightLevel to "00" sends an insteon command
    #to switch off the device, thus turning off the printer.
    #The setting the brightLevel to "FF" turns it back on!
  clp = InsteonLight.new("111111")
  clp.brightLevel = "00"
  sleep(10)
  clp.brightLevel = "FF"
  puts "I rebooted the printer because status is: #{status}" if $DEBUG
end
puts "I did nothing because status is: #{status}" if $DEBUG

And that's it!  I just call that script from my cron every 10 minutes, and it pretty much keeps my printer ready to print.  And in case you're wondering, yes I will be publishing my full insteon code package eventually.  Currently I'm working on abstracting everything such that it can easily be configured and manipulated so as to make the code useful in any environment.  It's a web-based front end that requires a PLM to interface with the insteon network.  So it requires a serial port to interface with the PLM.  A MySQL database sits between the web-GUI and the PLM interface; that's what makes the above so easy -- my object code just inserts commands to the queue table.  I think it's all rather snazzy and look forward to publishing it!
Comments