I hooked up an old analog camera I had laying around (one of the 15!) to an Axis 2400+ video server I bought off of ebay for $40. A little script that runs every minute and copies a picture from zoneminder to my webhost account. I added the picture as a widget to this website in the sidebar under the weather station doohickey. Once I verify the picture quality in the daylight, I’ll add it the weather cams at wunderground.com.
In a more-complicated-than-need-be step to canceling our satellite TV service, I installed MythTV backend and Plex server on an old computer that was sitting around. I started by installing mythbuntu because I’m already comfortable with using Ubuntu. MythTV uses the inexpensive HDHomeRun tuner as a source for local TV channels from the antenna, and it also has all kinds of capabilities to get content and information from the Internet and your local video libraries. Plex is service that not only finds and matches cover art and artist information to your existing content, but it has the magical ability to transcode your content on the fly when the client needs a different format.
The piece of this project that really made the biggest difference was that Kodi, which can be a front end for MythTV (and much more) can be installed on an Amazon Fire Stick.
I created a new website GalliStead.com where I’ll make all future posts about gardening, permaculture, and aquaponics related projects and updates at our house. I hope to get fencing put in and have a few sheep or goats too. So subscribe to updates on that site if you want to see what’s going on with my gardening efforts.
Here is another fun project I just finished up. My client wanted to be able to know if a vehicle (a train actually) is coming from a mile away. We used a Banner radar sensor in retroreflective mode, a Banner DMX100 controller/radio, and a DX80 multihop radio. The system can be expanded with additional repeaters if more range is needed. I used power tool batteries because they are easy to replace, relatively inexpensive, and high quality. Here is a short video showing a test I did in my neighborhood of the setup (without proper mounting hardware)
Here is a fun project I did for a client that needed a way to safely crash a boat for a test. I used an inexpensive model RC transmitter and receiver, two robotics motor controllers, a linear actuator, a DC gear motor, distance sensor, sprockets and chain, and come custom brackets to make a 23 foot fishing boat remote controlled! Since the boat was going to be crashed, I didn’t spend too much effort making things super nice, but it all worked well enough for their test. Here is a quick video of the components and how they work:
Here is how I set up a dummy (virtual) network interface on my linux (Mint/Ubuntu) host computer to create a local network that guest VMs in both VMWare and VirtualBox could access. This network allows resources sharing among multiple guest VMs, no matter which platform they are running under, and the host computer.
$ sudo modprobe dummy
$ sudo ip link set name eth99 dev dummy0
$ sudo ip link set eth99 up
$ sudo ip link set eth99 arp on
$ sudo ip addr add 192.168.5.1/24 dev eth99
Now I have a new network interface that is up all the time, regardless if I have working wifi or a cable plugged in to my host computer.
Setting up the VirtualBox guest was easy:
– select ‘bridged’ and choose the name of the adapter (eth99)
My favorite time format for time stamping events is to use Unix Time. The AB Logix 5000 controllers offer time in a format that is similar, but requires some conversion. Here is code for a RedLion device that does that conversion.
I’m working with a RedLion device that treats integers as signed, and they don’t provide the function needed to convert an unsigned integer into a floating point. Here is some code that will treat the 32 bit register as an unsigned integer and convert it to a double precision float.
//convert 32 bit unsigned integer to a float (returned as a string)
// Sparky Geek, LLC July 2016
// in signed integers, negative numbers are represented by the two's complement of the absolute value
// the task for this program is to undo this situation (just ignore the two's complement format)
// check to see of the MSB (AKA 'sign bit') is set
// --- if it is, mask the MSB, read as a signed number, then add 2^31
int mask = 2147483647; //2^31-1, or 1 zero followed by 31 ones
if (uint_in < 0 ) // check to see if MSB is set
working = uint_in & mask; //bitwise AND to only pay attention to the least significant 31 bits, filter out MSB
IntToR64(tmp.TagA,working); //have to use tag, since we can't create a local array, convert to double precision float
TextToR64("2147483648",tmp.TagB); //convert 2^31 to double precision float
AddR64(tmp.TagC,tmp.TagB,tmp.TagA); //add the value 2^31 back in, since this is what we masked out earlier, store as a double precision float
IntToR64(tmp.TagC,uint_in); // if the MSB was zero, the function will work as it
result = AsTextR64(tmp.TagC); //convert to string to pass back from program