Anyone interested in writing an lcd plugin? I'm offering €100

Hi!
I have just bought a bunch of lcd displays for my printers. Foolishly I didn't look up if there was a lcdproc plugin for octoprint. So all I can get them to display is system stats. But I would really like them to display some printer info (like the stuff displayed on the printers lcd).
I will provide you with the same display as I use. Namely this one:

Yes it's a cheap 20x4 character display. But that's a good thing, if it's cheap more people will consider buying it. Which means more benefit for the community. And besides, lcdproc (the server software) supports a plethora of displays. So if someone doesn't have this particular display/resolution they can still have use of the plugin. I believe there's already a python library(?) that makes communication between python scripts and lcdproc easier. And hopefully that will make writing this plugin a breeze.

I know €100 isn't much. But I'm not a rich guy (I wish I was). Anyway, I hope this is the start of something cool. And I'm not looking for you to support the plugin in the future. Hopefully there will be enough interest in the plugin once it's available to keep it going for more releases in the future.
Any takers?

I don't know if it helps you but I'm pretty sure it shouldn't be too hard to modify this plugin to work with 2004 displays.
It's a python 2 script tho - but better than nothing :slight_smile:

2 Likes

Yes, there are a couple of different python modules available it seems that would make this fairly easy to accomplish.

I think the hard part here would be the actual layout and how to show the most info possible without being too cumbersome. That means lots of time and testing. I do like this idea though as a cheap alternative to a touch screen and octodash for example. Would probably want to incorporate the encoder and button too though I would think.

If I didn't already have so many ongoing projects I would consider making this one, because it does seems like it would be helpful.

2 Likes

Thanks for responding guys!
And I know, one always have too much to do. :smile:
A lot of time and testing, yes. And that's not for everyone. I do some java- and php scripting, and that takes time. I have tried out python, but the syntax didn't agree with me. For instance, I like my {} symbols.:smile:

Guys like you are the ones that makes the open source community so great. I was expecting a lot of answers like "why don't you just go check the lcd on your printer".

I think LCDproc have built in features that either clip the text if the lcd screen isn't big enough. Or make the text scrub back and forwards. The project has been active for over 16 years (at least that was when I first used the software). So I think you wouldn't have to think about that. Which is another reason to go with a server software. You wouldn't have to re-invent the wheel.
And you are right, the layout and such things would be hard. I was thinking of just making something really basic to begin with. And then (hopefully) the community would start to adapt and improve the code.
Which is what I think would be the greatest challenge. To write code that's easy to add to and adapt.

Edit: Sorry @PrintedWeezl , I feel that I was mostly responding to @jneilliii . I just wanted to say thanks for the suggestion. It will surely help. It's always easier to adapt code than to write everything from scratch. :slight_smile:

BTW, another reason to use LCDproc is that it has network capabilities. So you can monitor your printer even though you're not in the same room. Now how's that for a feature?

Yeah, it's definitely a neat approach. Having options for server address would definitely be something you would want to do to allow remote access, etc. If I didn't have touch screens and OctoDash (also can be remote) then I would jump on this project, but will definitely keep it on the list of possible future plugins if no-one else ends up jumping on it.

BTW... {} does exist in python, as dictionary declarations.

1 Like

Hmm... Stop teasing!
It's almost that I wish you got fired from work so you'd have more time on your hands! :wink:
Just let me know if you change your mind and the money and display is yours! :slight_smile:

Had anyone has success with any progress? I recently recomissioned my 14 years old SBC which has a PIN header for a HD44780 compatible LCD. I just finished an LCDd/lcdproc driver for it, and now looking for an LCDd/lcdproc compatible plugin for OctoPrint. If noone working on it, i can wrote it to myself. I have only a "little" problem, because i have only a 24x2 LCD.

Sorry for the thread necromancy!

1 Like

It was easy. Now, i have a minimalistic, but working version of the plugin, but there are lots of work left to make everything buttersmooth. In the near future, i will write some configuration interface (because currently it can only connect to 127.0.0.1:13666) and i need to revamp/implement some error handling.

Would anyone like to test it? Because the software update things are not working yet, i can share the link for it in privately.

In the first line, there are the current progress with a scrollable filename, and in the second line the printing ETA on the left and the estimated finish time on the right.

This screen is in the 'foreground' priority (ie: always visible) when the printer is printing, and goes back to "info" level, when the printing was ended (ie: LCDd will cycling it with all other pages) and after one hour, it will disappear.

1 Like

Wow! That's amazing!
I'd be more than happy to try it on my printers. But as a heads up I'm away on holiday for about a week more. So it might take some time before you get any feedback.
Thanks for making this happen!

Hi again!
I have now had the opportunity to install the plugin. But I have no information on my lcd screen. Do you have any idea on what could be wrong?

Here's my config for lcdproc:
[lcdproc]

address of the LCDd server to connect to

Server=localhost

Port of the server to connect to

Port=13666

set reporting level

ReportLevel=1

report to to syslog ?

ReportToSyslog=true

run in foreground [default: false; legal: true, false]

#Foreground=true

PidFile location when running as daemon [default: /var/run/lcdproc.pid]

#PidFile=/var/run/lcdproc.pid

slow down initial announcement of modes (in 1/100s)

#delay=2

display name for the main menu [default: LCDproc HOST]

#DisplayName=lcdproc

And I get this error message on the syslog:
Jul 18 12:14:18 octopi octoprint[1407]: 2022-07-18 12:14:18,729 - octoprint.plugins.lcdproc - INFO - Unable to establish the connection to the LCDd#033[0m

The LCDd are running? Other clients, like the bundled lcdproc can display anything?

Did you started a print? The screen is hidden by default, and depending on the "Hide screen when idle?" option, it will be hidden afterwards the print has ben finished/canceled/etc.

So, my main approach is to show only this screen when printing ("foreground" priority), keep the screen for rotating with other screens for idle time minutes and hide the screen depending on the option that i mentioned first.

When you have multiple printers, the LCDd will rotating all of the screens with the same priority (eg. all "foreground" screens will be rotated). So, when you enable the "title" screen and name the printer correctly, then it will display on the screen both of the printers status in rotation.

1 Like

Hi and thanks for helping out!
I have both LCDd and lcdproc running on startup. Currently all I get is the cpu info (which is what I configured in the config file). Even when I start a print nothing gets displayed on my lcd.
I'm not sure why the plugin doesn't connect to LCDd. Everything compiled alright, and since I get the error message in the syslog it looks like the plugin is running as it should.

Did u have SELinux enabled? Can you try 127.0.0.1 instead of localhost?

I tried setting the ip to 127.0.0.1 instead of localhost. But that didn't make any difference. SELinux is not enabled on my RPI.
I still only get the message:

octoprint.plugins.lcdproc - INFO - Unable to establish the connection to the LCDd#033[0m

Oh, and this is my LCDd.conf (if that helps):
[server]
DriverPath = /usr/lib/arm-linux-gnueabihf/lcdproc/
Driver=hd44780
Bind=127.0.0.1
Port=13666
User=nobody
Hello="System is starting"
WaitTime=5
ServerScreen=no
NextScreenKey = Right
PrevScreenKey = Left
ReportToSyslog = yes
ToggleRotateKey = Enter

LCDd and Octoprint is running on the same machine? Did you use any virtualization or containerization (maybe Docker)? Python version? Octoprint version? Linux distro?

Yes, LCDd and Octoprint is running on the same machine as Octopi.
These are my specs:
Python 3.7.3
LCDd 0.5.9
LCDProc 0.5.9
OctoPrint 1.8.1
Distribution: OctoPi 0.18.0/Debian buster/Raspbian
Kernel: 5.10.103-v7l+

I also made a dist-upgrade today to ensure all packages are the latest and greatest.

I don't run any virtualization, and haven't bothered trying out docker yet.
Sorry I can't be of more help!

Please reinstall the development version. I made the error message to little bit more detailed.

Thank you so much for sticking with me here!
This is the new debug output (it keeps repeating).

Jul 19 16:25:48 octopi octoprint[19724]: #033[31m2022-07-19 16:25:48,272 - octoprint.plugins.lcdproc - ERROR - Unable to establish the connection to the LCDd#033[0m
Jul 19 16:25:48 octopi octoprint[19724]: Traceback (most recent call last):
Jul 19 16:25:48 octopi octoprint[19724]: File "/home/pi/oprint/lib/python3.7/site-packages/octoprint_lcdproc/init.py", line 262, in initialize_lcd
Jul 19 16:25:48 octopi octoprint[19724]: self.lcd.start_session()
Jul 19 16:25:48 octopi octoprint[19724]: File "/home/pi/oprint/lib/python3.7/site-packages/octoprint_lcdproc/lcdproc/server.py", line 28, in start_session
Jul 19 16:25:48 octopi octoprint[19724]: self.tn = telnetlib.Telnet(self.hostname, self.port)
Jul 19 16:25:48 octopi octoprint[19724]: File "/home/pi/oprint/lib/python3.7/site-packages/octoprint_lcdproc/lcdproc/pytelnetlib/telnetlib.py", line 218, in init
Jul 19 16:25:48 octopi octoprint[19724]: self.open(host, port, timeout)
Jul 19 16:25:48 octopi octoprint[19724]: File "/home/pi/oprint/lib/python3.7/site-packages/octoprint_lcdproc/lcdproc/pytelnetlib/telnetlib.py", line 234, in open
Jul 19 16:25:48 octopi octoprint[19724]: sys.audit("telnetlib.Telnet.open", self, host, port)
Jul 19 16:25:48 octopi octoprint[19724]: AttributeError: module 'sys' has no attribute 'audit'

Can you check it again? (i mean, reinstalling the development version). I ve found some features only available from Python version 3.8 and up, so i made it optional.

1 Like


That did the trick!
Thank you so much for writing the plugin and most of all for all your help and support!
Which features does one miss when not using python 3.8?
And do you have anything else planned for the plugin?
(Sorry about the crappy image.)