Page 1
Standard

HowTo SiriControl with Raspberry Pi 3

We can use Siri for a lot of things on our Apple device, but you can also use Siri to control IoT things that dont have support for HomeKit! This can be done by using SiriControl! SiriControl is a Python script that runs on your Raspberry and polls your Gmail account for newly created notes.

Notes? How does it work?

You can use Siri to make notes for you, and we can also use Gmail to store the notes. Now we have Siri that can store commands on a Cloud Based system like Gmail. As Gmail is IMAP aware we can use a python script to read the notes. This is the basic of SiriControl.

How to…

Below the steps you need to take to setup SiriControl on your Raspberry and the requirements for you Gmail account.

Create a Gmail account

Lets start with creating a Gmail account. Due to security reasons I recommend to use a new Gmail account because you have to enter your e-mail address and password in a Phyton script (yes unencrypted 🙁 ).

After creating make sure you do the following:

  1. Enable Less Secure Apps for you newly created account
  2. Enable IMAP in your settings so your iOS device can push the Notes

Add Gmail to your iOS device

Now we have created a Gmail account, we have to make sure that if we tell Siri to make a note for our command it gets send to Gmail. So grab your iOS device and go to: Settings –> Notes –> Accounts –> Add Account and create a new Google account on your device. Make sure it only Syncs the Notes! After creating the account set this account as Default Notes account in your iOS device under Settings –> Notes.

Now the fun part begins!

Get your Raspberry Pi up and running!

Now we have to configure the Python script to run on the Raspberry Pi. Follow below steps.

  1. Make sure python is installed
  2. Copy the files from Github https://github.com/theraspberryguy/SiriControl-System to your Raspberry
    1. Don’t forget to also copy the modules folder and the included files!
  3. Modify siricontrol.py to include your Gmail account credentials
  4. Run the script!
    # python siricontrol.py

It will now run in your SSH session, you can run this also by Cronjob in the background for example on boot.

What did I do with SiriControl? (some ideas)

As I’m using Kodi (LibreElec) in my home for watching movies / photos / listening music from my NAS and Kodi on Raspberry i would like to update the library as needed and not auto every x hours because I might be watching a movie and slowing down the performance or whatever. Now Python as a library for XBMC, called xbmc-json.

Also I’m trying to figure out if I can connect Volumio some way. Because Volumio has an App for iOS it should be possible as the system is receiving commands through some interface. Just have to figure out how this works so I can build a module for this.

Kodi and python

First of all we need a library and then we can connecti with a remote kodi setup through json.

  1. Install xbmc-json (if you havent done yet)
    Run the following as root / or with sudo
    # pip install xbmc-json
  2. Create your own script for SiriControl and import the module with:
    from xbmcjson import XBMC
  3. Next make a connection to your Kodi system so you can start giving commands (change the IP to your Kodi systems IP)
    xbmc = XBMC(“http://192.168.1.11/jsonrpc”)
    If you are using authentication your can also pass it with http://<user>:<pass>@192.168.1.11/jsonrpc and if you are using a custom port like 8080 add :8080 to the end of the ip address.
  4. enter the commands, for example for scanning a VideoLibrary for new content
    xbmc.VideoLibrary.Scan()

Volumio and SiriControl

As volumio has a REST API you can call it by simple HTTP requests like play and stop. Also you can start a Playlist (you have to configure one before), but just calling this with the import subprocess and then subprocess.call wget <volumio.local/api/v1/?cmd=… you can start and control it by Siri!

https://volumio.github.io/docs/API/REST_API.html

Some usefull links:

https://www.cyberciti.biz/faq/python-execute-unix-linux-command-examples/

https://howchoo.com/g/zdi2zgq2mjb/how-to-use-siri-to-control-anything-from-iftt-to-custom-programs-and-devices

http://www.instructables.com/id/SiriControl-Add-Siri-Voice-Control-to-Any-Raspberr/

BOx Smart Bottle Opener
Standard

Unboxing Bottle Opener X (BOx)

As a fan of kickstarter projects and beers I came accross the BOx (Bottle Opener X). This is, as told by the developers, the world’s first smart bottle opener.

BOx Smart Bottle Opener

BOx – World’s First Smart Bottle Opener

As a tech guy this sounds interesting so I decided to back this project.

Finally!

15 november 2016, the day I received my BOx! The item was send in an enveloppe, when the mail man (or woman) dropped it off it was a little damaged during the travel from Swiss to The Netherlands. After opening i did receive a great looking box that included the opener. Some things i noticed directly:

  • Box with the opener looks really good
  • While opening I did hear some noise from the box, so i got a bit affraid, was it damaged already?! Nope it was not, it was the torque that comes with it to open the BOx itself so you can replace the AAA battery *pfew*
  • The bottle opener itself looks really good and seems like it is from good quality
  • The LED (red) light, what also is a button, feels a bit cheap so i’m wondering how many bottles i can open, but we will see (after 1 day i’m at 5 bottles)
  • Opening bottles is really easy with the opener! It works like a charm!

The Setup with the App on iOS

After unpacking you will have to setup the opener so it can send data to your mobile phone (Android and iOS). First download the app for you mobile phone. After that just follow the setup instructions provided by the app. In case of iOS, first connect your WiFi to the Box SSID and then start the App. There seems to be an issue that you can not go to the wifi settings from within the app. After connection you can open up your bottle!

Some things that need to be fixed

I noticed some issues with the app / openers connection, so these tips might come in handy!

  • The app doesnt refresh your amount of bottles very well, close the app completely and restart the app, it will now show the proper amount of bottles opened.
  • Don’t hold the small button for over 7 – 8 seconds, while i was talking with some friends and trying to open a bottle it didn’t get counted. This was because i did hold the opener and button down for over 7 or 8 seconds. This puts the Opener in Discover mode and you can reconnect with wifi to the SSID of the opener itself.
    If this happens the led will turn red for 7 minutes! So wait while opening a new bottle or take the battery out and put it back, your wifi settings will be saved

Now lets wait for the first major update of the app and the new firmware to fix both things above. At least i was told by BOx both issues will be fixed in the new upcoming release.

Standard

IFTTT vs Stringify

As i have equipped my home with some Hue lights, a NetAtmo and a few Raspberry Pi’s I came accross IFTTT like a year ago. This made it really easy to connect stuff and do things based on some IF statement. Like IF it starts to rain change my Hue light bulb to blue.

With this Recipe above i immediatly outline a huge issue that is missing from IFTTT, I’m still not able to choose multiple lights and as I have a lamp with 3 Spot Hue lights in it, it would be cool to update all 3 the lights and not just 1 or with multiple Recipes for all lights. Also you can only have 1 IF statement and not IF i’m at home and IF the time is like 12.00pm then do this. I’m missing these things as this would make my house really smarter, and in the end this is all we want!

Here it is, the solution… Stringify!
Well as Stringify is more flexibel with IF statements this is a great improvement! I now can have a Recipe or Flow as it is called in Stringify, that checks for multiple triggers. For example: IF my NetAtmo Noise is below 40 and it is like 23:45PM then turn off my living room lights (as i’m prob at sleep and missed the light button). With IFTTT we could only check for Time OR NetAtmo, resulting in lights turning off while there were some friends over for a beer. As it then is noisy (TV / talking / other sounds) i just put the trigger 4db above the measurement of my NetAtmo in the night for the last week so i’m sure the lights go off when no one is in the living room and the sound of my dishwasher in the kitchen is not that loud so the lights will keep on.

With this said, you can combine a lot of triggers, also it is possible to trigger an action for all the lights. Like if the CO2 level in my living room gets above 2250ppm turn all the living room lights RED instead of just 1 light.

Stringify or IFTTT
Both Stringify and IFTTT could work, but i think IFTTT is more adopted then Stringify. More services and smart devices work with IFTTT at this moment. Some things i found out:

  • IFTTT has more support from devices / services etc.
  • IFTTT has more recipes already “pre-cooked”
  • Stringify can do a lot more with the triggers, you can make more complex Flows (or recipes if we are talking IFTTT language)
  • Stringify has better HUE support (havent tested other devices just yet
  • Stringify has a nice way of creating flows, drag / drop and select triggers
  • Stringify is at this moment only working on iOS devices (app is not yet ready for Android at this moment)

It really depends on what you want to create, in my case I was able to addopt all my IFTTT Recipes to Stringify Flows and even could do more with Stringify because it can handle more triggers. But the support for other devices on Stringify is limited, I think this will come soon.

Standard

HowTo Homebridge on Raspberry Pi 3 for iOS and Smart Devices

In the Easter weekend I suffered some eye injury on both my left and right eye. My sight went fro 100% back to 5% on the left and right eye. From that day i knew it was going to be a long recovery with several surgery’s. As a tech guy i already have some Smart Devices and wanted to use them with my Apple Devices. Considering the HomeKit does not support mutch I did some research and found HomeBridge. My devices currently connected to my home network are:

  • Philips Hue lights
  • Kodi MediaCenter
  • NetAtmo Weather Station
  • IFTTT
  • Temp Sensors connected to my Pi

Let’s use Siri to talk with those devices and get information out of them! Too bad Apple does only support Hue, this is where HomeBridge comes in Handy. HomeBridge serves as an extra layer to control devices through plugins with Siri from your iOS device like iPad / iPhone.

I’m running a Raspberry Pi 3 already as a private DNS (to manage my devices by DNS instead of IP address (Kodi, Printer, Switches, Server(s), and so on..), this device can do a lot more.

Installing HomeBridge (Raspberry Pi 3)

First of all update your Raspbian installation

sudo apt-get update

sudo apt-get upgrade

This can take a while…

Next we start installing NodeJS and a prereq for HomeBridge

wget https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz

tar -xzf node-v4.0.0-linux-armv7l.tar.gz

cd node-v4.0.0-linux-armv7l

Now we have downloaded NodeJS and extracted it. Next step is to copy all the files to /usrlocal Use the following command:

sudo cp -R * /usr/local/

The -R stands for Recursive so we will copy all files in all directorys. After we have copied them we have nodejs installed. You can check your version with

node -v

Let’s continue with the installation of the PreReqs.

sudo apt-get install libavahi-compat-libdnssd-dev

Now we have the PreReq qe can install Homebridge

As we already installed NodeJS, we now have some new commands available. With these commands we can install the Homebridge server.

sudo npm install -g homebridge

This can take some time, on my RPi 3 it took about 5 to 10 minutes. When the installation is done we can start Homebridge by entering the following command:

homebridge

When you run this command it will try to start Homebridge, this will fail because we have no plugins installed and a valid config.json file with the homebridge configuration. You will see a similar error “No plugins found. See the README for information on installing plugins.”

Homebridge Config.json

Now we have installed Homebridge we need a configuration for Homebridge. Also if we install any plugin we have to add it in the config file.

cd /home/pi/.homebridge
nano config.json

Paste the following code


{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},

“description”: “This is my Homebridge Config file”,

“accessories”: [

],

“platforms”: [

]
}

Now we have the default config ready, but we still need a plugin to make it work properly. I did setup my NetAtmo weather station, you can use the following commands to setup your NetAtmo plugin, or download any other NPM plugin and follow the this guide as a how to. Make sure to download the right config example from the NPM website and replace the NetAtmo config with your plugin config file. This config is provided on the NPM Plugin website.

Configure Netatmo

Search for the Homebridge-netatmo NPM website and you will get information on how to install the plugin. This is also outlined below. First we have to install the plugin, and next we have to modify the config file. Let’s start by installing the plugin.

sudo npm install -g homebridge-netatmo

This will take a few seconds to install, after this is done we only have to configure this. On the website you will see an example config. You can use this one and modify it for you NetAtmo setup. Enter your Username and Password, and create an Application through the NetAtmo dev website so you can allow homebridge to connect to the NetAtmo API.

The config will look like the config below:

{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},

“description”: “This is my Homebridge Config file”,

“accessories”: [

],

“platforms”: [
{
“platform”: “netatmo”,
“name”: “netatmo weather”,
“ttl”: 5,
“auth”: {
“client_id”: “CREATE ID AT https://dev.netatmo.com/”,
“client_secret”: “CREATE SECRET AT https://dev.netatmo.com/”,
“username”: “your netatmo username”,
“password”: “your netatmo password”
}
}

]
}

If we now start Homebridge we will see there is a NetAtmo Weather Station plugin loaded. Now you can start your Apple iOS application to connect to HomeBridge.

I’m using Insteon+ add a new device and it will find your Homebridge. Connect to Homebridge and enter the pin code in the config or check your SSH session to your RPi. Now you can start configuring the Siri Commands and create your Home with Rooms / Scenes and so on.

Autostart / start Homebridge

The final thing we need to do is to create an init.d script to start Homebridge. We use the following commands to create a script and add it to the defaults so it will start with a reboot from your RPi.

sudo nano /etc/init.d/homebridge

Paste the following code into this file and chmod it to 755 so we can execute it.

#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO

dir=”/home/pi”
cmd=”DEBUG=* /usr/local/bin/homebridge”
user=”pi”

name=`basename $0`
pid_file=”/var/run/$name.pid”
stdout_log=”/var/log/$name.log”
stderr_log=”/var/log/$name.err”

get_pid() {
cat “$pid_file”
}

is_running() {
[ -f “$pid_file” ] && ps `get_pid` > /dev/null 2>&1
}

case “$1” in
start)
if is_running; then
echo “Already started”
else
echo “Starting $name”
cd “$dir”
if [ -z “$user” ]; then
sudo $cmd >> “$stdout_log” 2>> “$stderr_log” &
else
sudo -u “$user” $cmd >> “$stdout_log” 2>> “$stderr_log” &
fi
echo $! > “$pid_file”
if ! is_running; then
echo “Unable to start, see $stdout_log and $stderr_log”
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n “Stopping $name..”
kill `get_pid`
for i in {1..10}
do
if ! is_running; then
break
fi

echo -n “.”
sleep 1
done
echo

if is_running; then
echo “Not stopped; may still be shutting down or shutdown may have failed”
exit 1
else
echo “Stopped”
if [ -f “$pid_file” ]; then
rm “$pid_file”
fi
fi
else
echo “Not running”
fi
;;
restart)
$0 stop
if is_running; then
echo “Unable to stop, will not attempt to start”
exit 1
fi
$0 start
;;
status)
if is_running; then
echo “Running”
else
echo “Stopped”
exit 1
fi
;;
*)
echo “Usage: $0 {start|stop|restart|status}”
exit 1
;;
esac

exit 0

chmod with the following command:

sudo chmod 755 /etc/init.d/homebridge

Next we have to tell the OS to start it at boot, we can do this with the following command

sudo update-rc.d homebridge defaults

Enjoy your Homebridge setup on your RPi 3!

 

EDIT 12-27-2016

For some reason my homebridge got killed after some hours, or some days or even after some minutes. I’m not sure why and was not in the mood to do research. I made a cronjob to check every hour if my homebridge is running (with the status), and if it was not running to just start it. You could set it to more ofter check for the status, like every 15 or even 5 minutes, but as i’m not checking every 5 minutes my iPhone or Apple Device for the Temps on my NetAtmo every hour was sufficient for me 🙂

You could also just run the /etc/init.d/homebridge restart command to make sure it gets restarted or started. Script i made is a bit buggy so not posting it here 🙂