I recently inherited a single line LED sign made by SuperViewVision, Model Number SVV-ML-80X7-RG, and my first thought was “Great! I can stream cool stuff to the sign like tweets”. To my dismay the sign came with windows only software and little documentation. On top of that there was no easy method to programmaticly update the display. Each change to the message had to be done manually. I search for several days looking for protocol documentation. In the product description there is a blurb about protocol documentation available upon request. So, I attempted to communicate with the vendor asking for documentation. The vendor’s response was less than helpful. Evidently they sell the sign but allow resellers to re-flash the sign with their own protocols so they wanted to know the date I bought the sign and who I bought it from. This was information I wasn’t privy to due to my method of acquiring the sign. After searching I started to get the feeling the sign was really old or its simply not used as often as other signs using some of the more main stream LED sign protocols because I couldn’t find anything!
The stage was set, the challenge clear. I was going to map out the protocol for the sign and use a perl script to communicate with it.
To understand how the sign communicated I used a windows serial port sniffer and started logging commands sent to the sign. As it turns out the protocol is a two (or more) step process. A wakeup signal followed by the command(s). Something like this:
PORT_WRITE -> ~128~ PORT_WRITE -> f01A\Y1\Z4\a\sHello World\r\r\r
To help you out, I’ve built a small perl script to help. Click here to download the perl script. I suggest renaming it from
.pl If your running on a linux machine (like me) you will have to make the script executable before trying to run it.
Here is the usage syntax.
usage: perl post_to_sign.pl --port=/dev/ttyS0 --signid='~128~' --info 'info message' --alert 'alert message' --update 'update message' --setDTM --port '/dev/ttyS0' Define the port the sign is connected to. Defaults to /dev/ttyS0 --signid '~128~' Define the sign ID. Defaults to ~128~ --info 'info message' Post the string using the default format (bright green default size) --alert 'alert message' Post the string using the alert format (flashing ALERT and scrolling in bright red) --update 'update message' Post string using the update format (flashing UPDATE and scrolling in bright yellow) --showDTM Will add the current date time to the message displayed --setDTM Updates the sign with the current date and time
--update are all pre configured displays but you can pass any kind of slash command to send any combination of cool things. Here is an example of passing both an
--info with some embedded embellishments.
perl post_to_sign.pl --port=/dev/ttyS0 --signid='~128~' --info 'Conns db1:\c12\h db2:\c12\h \rC\Y1\h\sServers:\c48\h Up:\c39\h Down:\b2\h \rC\Y1\h\scan you can a can as canners can a can' --alert '\djavtableau\b is NOT responding to ping!'
Now that I had a simple command line interface I built a script (not documented here) to pull my environment health and statistics every few minutes and update the sign.
Something else about the script, I havn’t tested it on a windows machine but I bet if you update the USE statement to point to the Win32::SerialPort module it should work.
That’s about it… each of the modes and other effects are further documented inside the perl file.