Wednesday, December 26, 2018

Christmas Tree Timer and Switch

Didn't do the Christmas tree to music this year. I did however setup a simple timer and override switch so the tree would turn off and on automatically.

I setup a simple relay attached it to the Raspberry Pi and wrote the Python Script below. I wired up a light switch (hadn't done this before so that was fun) to the Pi with some wire nuts. The Light switch will override the timer. So if you want the tree to stay on longer just flip the switch to on.

Here are some pictures.

Look at the sweet duct tape job

The light switch was connected to GPIO pin 20 and ground. I had to use the internal pull_up_down resistor to make it work. Found a nice little function that takes in the current time, start time and end time. The function will determine if the current time is between the time range you set. Worked really well for this project.

Christmas tree would light up at 6:00AM and then turn off at 10:00AM. Then it would light up at 4:00PM and turn off at 10:00PM. It would check every 5 seconds to see if it needed to turn off or on. Then if you flip the switch it would not check for time of day and would just leave the relay in the on position.

Wednesday, October 3, 2018

Smart Garden v1.0 Raspberry Pi

Some fellas at the office had a crazy idea to try and grow a garden in their cube at work. After several people tried to talk them out of it, they plowed ahead and started one anyway. So why not hook up some sensors and a web cam and call it a Smart Garden?

Sensors and such

Kuman Moisture Sensor Kit 5Pc: From the reviews these have a tendency to not last very long. They are cheap and this experiment may not last long so I went for them. If they start blowing up we may invest in a nice Sensor.

DHT22: Yes I know people say these are not accurate. Calm down folks we are not reporting data for the NOAA, we are just checking the temperature and the humidity in the office. We can live with the inaccuracy.

Cheap Webcam: Whatever you have laying around. As you can see the one I found is cheap and potato quality.

Raspberry PI: if you have one laying around you are a nerd.

Readings and Data

We are taking moisture readings from two sensors, temperature and humidity readings, and a picture on the web camera every 5 minutes. I wrote two web services that are used to store the data. A python script was created to read the sensors and take a picture, the script will then call the web services to send the data over to a database, and a FTP script is called to copy the image to the web server.

I had to use FTP because I didn't take the time to figure out how to post the actual image to a web service. I may work on that eventually.

Web Site

After the data was collected a website was built to allow folks to keep tabs on stuff. I downloaded some TimeLapse software and threw together some time lapses which have turned out really cool given the cheapness of the web cam.

The Chart.js library was used to make some charts to display the recent readings. Bootstrap was used to make it mobile friendly. The Charts look squished on mobile so that may be on the do list for the future.

Wednesday, September 5, 2018

Raspberry PI Relay Control using Python and Flask

I wanted to create a party button accessible from a web site using Python and Flask. Buckle up folks.

So somehow I got flask up and running. There should be a ton of articles on how to install it. I seem to remember it being pretty easy. Just google it already.

I created a new directory called party. Inside this directly I created a static and a template directory. I then created a file called

Here is the script

You can park all your images and such in the static folder and reference them using flask templates. In the template folder I created the look and feel I wanted for the web pages served up by flask.

You can see I call the template in the with the return render_template command. So when you start a party you are quickly returned to the index.html page. Here is the index.html page

I wanted a cool DJ Air horn so I grabbed it and I am using VLC command line to run that. You will notice that the Flask is setup to run a couple other Python Scripts. This is my party start and party stop functions. These python scripts control the relay.

Pretty straight forward on the Relay control. You'll notice on the I wanted to call a little DJ airhorn to really kick the party off right. I am using the VLC command line interface to do that.

Here is what end result looks like

This can be expanded to do all sorts of fun stuff. Using this basic Flask/Python example you setup several different web based controls using Raspberry Pi.

Monday, July 30, 2018

ESP8266 Post to Web Service

Purchased a DHT22 recently for a Work Desk Temperature project. Wrote a web service and created some SQL stuff to capture the temperature and humidity at my desk. Here we go.

Web Service

Just a real simple web service to call the stored procedure I wrote:

See my other blog post for more details on creating a web service:

SQL stuff

Created a Table and a couple stored procedures to support this. Here is the table.
Here are the stored procs.

ESP8266 Post

From there I just needed to figure out the ESP8266 Post. I had to search around a bit but finally landed on the script below. The script will establish a WiFi connection. Then it will loop every one minute taking a temperature/humidity reading from the DHT22. Finally it will call the web service I built to store the data in SQL server.

You will need to grab the DHT and AdaFruit Libraries using your Arduino IDE. From there I created a web site using Chart.js and a couple other stored procedures I wrote to get MAX/MIN/AVG Temp and Humidity.

Thursday, July 5, 2018

Find Text String in Text Files Powershell

Quick script to search a set of text files for a specific text string.


Wednesday, June 6, 2018

Raspberry Pi Speed Camera Python

I setup a pedestrian speed camera in the office using a great project by pageauc on github: This thing was so dead simple to setup and run, and after some tweaks on the config I was clocking fast walkers in my office like a champion.

  1. I started with a fresh Raspberry Pi 3 Raspbian build
  2. Installed OpenCV3 using this link: This takes a while
  3. Download the speed camera project from github:
  4. Extract it and copy it over to your Raspberry Pi. I just parked it under /home/pi/speed-camera
  5. Crack open the config and start messing with stuff

I am using a web cam so I had to change this value in the config right away:

I had to tweak the capture area for my project and did so by playing around with these values

Turn on the gui window so you can see what you are doing

Here is a shot of me walking by the camera. The software will automatically save the image and add the speed calculated to the image which is gangsta.

My camera is pretty potato quality. Another setting I had to tweak often was the track_len_trig. This determines how many pixel changes are required to save an image. Since my target is down the hall I had to reduce this down to 5. If you are tracking a larger area you will want to play with this since the default is 60. I get some false readings but it captures what I need.

Here is a picture of the system in action on the Pi. 
If you have any troubles review the guide on github. It is pretty handy.

Monday, April 2, 2018

AnswerBot 3000 Version 2

Way back I made an AnswerBot using Teensy. I mean not a real one. Basically its a button that you push, it will pick a random saying and send the keystrokes using Teensy Keyboard library.

AnswerBot: keep it gucci fam

Always answerbot. Anyway, I wanted to make a better physical representation of AnswerBot so here is Version 2.0.

He of course has a short in one of the LEDs which is perfect. I need to work on my can cutting skills. Anywho AnswerBot is now online and adding fun quotes to my various instant message platforms.

AnswerBot: i failed you

No way AnswerBot you cool.

Sunday, February 25, 2018

Stream Google Play Music using Python and gmusicapi

Parking this example of how to stream a random song from Google Play music using the gmusicapi python library. You will have to find your device id to plug into the script which can be done using the gmusicapi like so.

Then plugin your Google username and password and you are all set. This code example has a zbar example because I was using  a webcam to scan an QR code. The QR code had an artist name like Drake or The Chainsmokers or something. It would then pass the name into the search call and would select the first song from the songs returned from the search.

You can remove the zbar stuff and take in an argument for a search like so.

Thursday, February 22, 2018

Microsoft Face API using Python

After finding the Google Vision API I stumbled on the Microsoft Face API. it is pretty slick and returns more data than the Google Vision API.

Stuff like Approximate age, hair color, gender, make up presence, etc. Interesting. If I can figure out the Quota limits on the API I may use it instead of Google.

Google Vision API using Python

Stumbled on this guy's cool project: and wanted to play around with that idea a bit. Using the Raspberry Pi and the gmusicapi module I was able to develop a proof of concept that would use the Web Cam to read a QR code and stream a song using google play.

Fast Forward a few hours after that proof of concept and an idea hit me. What if I could use a web cam to detect the emotion of someone and then stream a random song from Google Play Music. This post is about that specifically. Taking a picture with a web cam and bouncing it off the Google Vision API. I'd call this a part 1 of Part x for this project but not sure I'll remember to post the other parts..ha.

Setting up the API

This was not as easy as I'd hoped. You have to enable billing on your Google Cloud project. Don't fret though unless you plan to do more than 1000 look ups per month.

  • Open up the Google Cloud Console and turn on billing.
  • Then click on the API and Services option. 
  • Search for Vision API and enable it.
Create a new Service account or use an existing one. I created a Compute Engine Default Service account. Download the JSON file and save it in the folder that you will run your script from. 

You can then complete authentication by referencing the JSON file you created.

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'C:\\Python27\\Projects\\emotion\\cred.json'


Ok if you made it this far awesome. Sorry for the lame instructions above.
You will need some Python stuff to make this happen.

  • pip install pillow
  • pip install google-cloud
  • pip install google-cloud-vision
  • Install CV2 
  • Maybe some other stuff


So basically I just hijacked an example to get this to work quick and dirty. I open the camera up, capture a picture, then feed this picture into the defect_faces function. I added code to spit out the results on a web page, to mark up the image with a green box around the recognized face, and to print out the emotion analysis to the console. The script below will handle a lot of different requests, again I am just using the faces portion.

Call the script like so: python c:\Python27\Projects\emotion\ faces blah

Notice I didn't even take time to fix the arguments thing. So I just override blah in the sample above by hard coding a path...i know i know...lazy bum.


I found an example of how to use Microsoft Face API using Python. It is pretty straight forward so I pasted it here below. The MS Face API returns some extra data. I need to figure out the quotas on the API calls but it seems to be a cool substitute for the google API. It returns approximate age and some other cool details about the image.

You actually upload your file to the web service and then it spits out he results.

Wednesday, January 10, 2018

Party Button 2018 Edition - Python controlled Relay, Momentary Push Button with Key Lockout

Asked for a launch button for Christmas. Thought it would be a cool thing to add to some projects, a silly way to kick something off. The first project I went for was the Party Button 2018 Edition. I made one back in 2016 with an Amazon Dash Button hack: Party Button 2016. Man can't believe that has been almost 2 years.

Santa brought this launch button from Amazon: Launch Button. Taking it apart to review the wiring I quickly realized I had an issue. The green button has an LED in it, but also has a fuse. This light will not come on unless you provide 220V of power...uh...there is no way I am lighting this cheap chinese plastic box up with 220 volts of power to light up a silly LED.

So I stripped down the button and the guts, removing the fuse, feeding some wires through the switch and up to a cheap LED I had laying around. I wired this to the Raspberry Pi GPIO. Then I hooked up the key to another GPIO pin. So I read the pin on the key and if it has power than i turn on the LED.

I snagged a 3V relay for some other ESP8266 project I was working on and headed over to Home Depot to grab an outlet. I used some 3M tape to adhere the relay to an outlet box and juiced up both outlets to the relay. I'd like to control both outlets separately but I hosed up when I ordered the relay and only ordered a 1 Channel Relay.

With most of the hardware components wired up I started on the software side. After several rounds of testing I came up with the python script that would read to see if the Key was in the on position, if so then light up the LED. If you press the Green button it will then fire up the relay and then pick a random song from the folder. If the key is not in the on position then pushing the green button will do nothing and the LED will not light up.

Key and Green Button Code

So finally I needed a way to quickly kill all this. I decided the Red Mushroom button would be the party kill switch. I turn off the LED, turn off the relay and also kill the VLC and Launch Button python script. This will shut the party down hard. I made this a separate script that will listen on a 3rd GPIO port to see when I push the kill switch button.

Pretty happy with how it turned out. Took about 4 days of tinkering to get it right. Here is a Youtube Video of the button in action: