Hacking a Laser

The Synrad Firestar i401 is a 400 watt CO2 laser commonly used for marking, cutting, and engraving. It's a seriously powerful laser which can vaporize a chicken wing in a matter of seconds.

The laser is easily operated with a 0-10V DC control signal (corresponding to 0-100% laser power) through a 15-pin D-sub connector which provides a few other basic controls. There is also a static IP Ethernet interface, but unfortunately it is limited in its capabilities. The default IP address is 192.168.50.50 (which can be changed). By visiting http://192.168.50.50 and http://192.168.50.50/service.html an experienced operator can access status info, warning and error messages, and historical data in a web browser. Unfortunately, Synrad doesn't offer an easy way to pull data off of these pages and they just aren't useful for a typical user.

But the data is there, so there has to be a way to access it, right? Diving into the source code for the two status pages seemed like a dead end. These pages just set up the layout and define some <div> blocks; it felt like a cold case. But then I noticed the subtle and ambiguous javascript calls at the bottom of the two pages: /js/main_noimage.js and /js/service.js. After setting up a bunch of pointers to the established <div> tags, each script respectively calls /cmd/getalldata and /cmd/getservicedata which return comma-separated lists of data which are then parsed and used to update the web interface. Naively, I thought I'd just point my browser toward http:/192.168.50.50/cmd/getalldata, but that gave me a 404 error. I was again feeling stuck and out of ideas.

Playing around in LabVIEW (my target dev environment), I found that sending an HTTP Post request to http:/192.168.50.50/cmd/getalldata returned the string of comma-separated numbers in the body of the response! Eureka! The final step was to read through the javascript files line by line to extract the meaning of each value. Fortunately, Synrad's developers well documented their code making this task much easier. Now I can parse all of this laser status data myself, record it in my format as needed, and best of all display only relevant data to my users in a consistent UI.

For anyone else working with this laser, I've posted the list of variable descriptions on Github. It was a fun challenge to extract this data and it was a great learning experience!

Inspiration

From autonomous boats sailing the world, to arduinos playing chiptunes, to disappearing ink for reusable printer paper, to hackathons solving daily challenges for the disabled, to miniature cities made from masking tape, Bay Area Maker Faire 2016 was amazing. Adam Savage was back this year with an entertaining and inspirational talk. Kids, adults, startups, mature companies, hobbyists, tinkerers, and everyone in between came together this past weekend to share and admire each others' work.

Tapigami was the single creation I was most looking forward to seeing again, and the glowing display in the dark room was far and away the most visually stunning piece of the Faire. Tapigami is marvelous in its grandeur and simultaneously humbling in its medium. Check my Instagram for a photo of the Tapigami "MAKE" sign, and click on #tapigami to get a real feel for the art!

While I was more awe struck at my first ever Maker Faire last year, I was no less inspired this year. For me, this inspiration is key. Inspiration is why I started this blog, and inspiration is why I sat down to write tonight, despite already being 12 minutes into Thursday and smack in the middle of a very busy week. Inspiration is what is going to drive me to create an awesome and fun electric suit jacket to show off next year. Inspiration is what will keep me going when negativity tries to get in my way.

I can't stop myself from also talking about Sutro Baths and my 10 mile walk along Lands End near the Golden Gate Bridge. This is what kicked off my weekend, and I can safely say this journey was equally as inspiring as Maker Faire. With very little planning I set out in search of Sutro Baths, a site I had never seen but instead heard about from the wonderful podcast 99 Percent Invisible. Sutro Baths is a young ruin and former bathhouse from the late 1800's in the northwest corner of San Francisco. The baths themselves lived up to the hype I had built, and they were a real treat to explore. From there, I wandered. Ultimately I wanted to see the Sand Ladder of San Francisco, and that was where I finally called a cab, but that day the journey truly was the destination. Along my journey I happened upon a multitude of inviting little hideouts. All along the trail and waterfront I'd find little sections where one could be nearly isolated from everything; you could enter your own little world. A section of ruin, a cavern in the rocks, an alcove along the beach, a tiny break in the brush leading to a quiet trail, a makeshift child-like fort along a seldom traveled section of Mile Rock Beach. All of this living in the shadow of the Golden Gate Bridge, an icon of the west coast, of exploration, discovery, and the sheer will of man.

While walking along China Beach, I noticed a man run into the cold waters in just his swim trunks. Again, or maybe for the first time this trip, inspiration struck. I hadn't planned on going in the water and I assumed it was too cold after seeing a lone surfer in a full wetsuit. But on a stretch of beach with maybe 5 beach goers, seeing this one man running into the water and jumping around in the waves completely changed everything. I ran to the nearest cove I could find, got out the shorts I had packed, and took pause. Am I really doing this? Yup! I stripped naked, threw on my shorts, and confidently walked into the water. I jumped over my first wave and dove head first into the second. I explored the hideouts and places beyond the end of the beach, where waves crashed into rocks, and nothing stayed dry for very long. I swam a few feet, bobbed up and down in the waves, and laughed, and laughed. And laughed. The other man had unknowingly accomplished something great that day. I was inspired.