Google Search

Custom Search

Powered by...

Find us on Facebook

Friday, 6 June 2014

XBMC Security CAM Overlay add-on – UPDATE / PART2

I’ve written about this great XBMC add-on previously here, however I have just updated two of my HTPC’s to OpenElec Gotham and have done a little more work with this add-on so thought it was worth writing an updated blog post about it all.  You can find the Security CAM Overlay add-on thread here on the XBMC forum.

So what’s new for me in Gotham and with this add-on? I wanted to add a second IP security camera, the add-on at the moment only allows you to add one IP camera, however you can do a little hack and modify some of the add-ons files to effectively make it in to two different add-ons or more. One instance of the add-on for each IP camera you wish to add in to XBMC.

Also I have customised my Aeon MQ5 skin and added a CAMS menu so I will throw up a few screen shots of that as well.

Creating the Security CAM Overlay add-on instances

OK here is how I got two IP cameras in to XBMC with the Security CAM Overlay add-on. First you need to download the latest version from this link and select Frodo or Gotham version. The downloaded file is called script.securitycam.zip extract this in to a folder called script.securitycam. I am using Winrar.

image

Look inside the script.securitycam folder there is a file called addon.xml edit this in a text editor.

image

I ended up with two instance of the Security CAM Overlay add-on, one for my front garden CAM and one for my back garden CAM, so I called the first instance “Front Garden CAM”

image

Change the name of the add-on.  “Front Garden CAM”

image

Also change the add-on id= from script.securitycam to something else, I named it “script.frontgardencam”
save and close the file.

image

Now edit the default.py file in the text editor

image

On this line: ADD_ON_ID =

Change the script.securitycam to the same thing as you named it in the addon.xml e.g. in my example its: script.frontgardencam

image

Save and close the edited file

image

Changing the add-ons icon image

If you plan to add the Security CAM Overlay add-on instances to a menu in XBMC, then I recommend you change the icon.png file to a screen grab of that particular IP camera.

image

Unless you want all your IP cameras to have this default icon ?

image

image

You should size your new icon.png file to 191x186

Now rename the folder script.securitycam to the same name e.g. script.frontgardencam

image

image

Now you need to ZIP up the script.frontgardencam folder into a zip file called script.frontgarden.zip
With Winrar installed I just right clicked the folder in Windows Explorer and from the menu I selected Add to Archive.

In Winrar I then selected ZIP rather than RAR and clicked OK.

image

I now have an add-on called script.frontgarden.zip that I can install in to XBMC.

image

I then repeated this whole process again to create a second instance of the Security CAM Overlay add-on called script.backgardencam

image

Installing the add-ons
XBMC Settings – Add-ons – Install From Zip File
Then browse to the folder where you put your two new zip files (hopefully some where your HTPC can access).

On this screen shot of XBMC you can see the two add-on instances I just created and I can select them from here to install them etc.

image

Once they are installed they will be listed in the Programs add-ons area of XBMC. You then configure the add-on as you normally would, entering the URL to your IP camera and user name and password, only you now need to do this in each instance of the Security CAM Overlay add-on for each IP camera etc.

image

Tip: For a Foscam camera I used this URL in the add-on settings and left the user name and password fields blank. The Foscam camera image loads faster if you do it this way.

http://xxx.xxx.xxx.xxx:port/snapshot.cgi?user=username&pwd=password&count=0

Micasaverde Vera Home Automation

If you are using Vera you can get Vera to tell XBMC to bring up an instance of the Security CAM Overlay add-on by using code such as below, in your Vera scenes.

Where 192.168.1.10 is the IP of the XBMC PC and 80 is the XBMC Webserver Port number. 

http://192.168.1.10:80/jsonrpc?request={"jsonrpc":"2.0","method":"Addons.ExecuteAddon","params":{"addonid":"script.frontgardencam"},"id":"1"}}

http://192.168.1.10:80/jsonrpc?request={"jsonrpc":"2.0","method":"Addons.ExecuteAddon","params":{"addonid":"script.backgardencam"},"id":"1"}}

So when someone presses my Z-wave enabled doorbell, my doorbell scene in Vera calls the script.frontgardencam add-on to bring up that cameras image in XBMC.

XBMC Aeon MQ5 Skin

Using the Aeon MQ5 menu customisation feature, I added a new main menu item called CAMS and added in both the Security CAM Overlay add-on instances.

image

image

image

I also created some .strm files for my IP cameras and some custom .nfo files to add them in to the Movies library, I then added them to favourites and in-turn added these favourites to the CAMS menu. When I click on these, I get a full screen live stream from the IP camera etc. Exactly how I did this is for another blog post maybe?

image

image

Movies Library – Genres - Security CAMS

image

image

Summary

Get tweaking and get your other IP Security cameras in to XBMC using new instances of the Security CAM Overlay add-on!

XBMC OpenElec / Logitech Harmony / Micasaverde Vera integration – PART2

In part one here I demonstrated my method of using a Logitech Harmony universal remote control to send keyboard shortcut commands to my XBMC PC. The XBMC PC then runs a python script to send a http request to Vera the Home automation controller, to do something like turn on / off lights or to control a device in my home.
In Part 2 I am adding some feedback in to the XBMC user interface. For example if the light or device you want to control is not in the same room as you, you don’t really see any feedback that the script file has been run? and that the light or device has been controlled?

To try and eliminate this lack of feedback somewhat, I will be demonstrating adding XBMC pop-up notifications upon each run of the python scripts.

I’d like to thank @Montellese on the XBMC forum, for his assistance with the Unicode stuff and for pointing me in the right direction for getting this working.

To give you an idea what I am talking about, here are some screen shots of the pop-up notifications in XBMC.

“Harrison Home” is the title and “Turning Lounge Lights On” is the message

image

image

image

OK so now you get the idea if you’d like to add this functionality we need to edit our python script files that were created in part 1.

But first ensure you have the web server turned on in XBMC or you wont be able to send the notifications to your XBMC PC.

Go into XBMC Settings – Network – Webserver and ensure it is enabled and also make a note of the port number, I changed mine to 8080. The username is XBMC and I have not set any password.

image

You also need to know the IP address of your XBMC PC? I recommend you set a static IP address on your XBMC PC.

I also recommend using Notepad++ text editor as these http commands for the XBMC notifications needs to be in Unicode so we can run them using curl in the python script file.

Open your first python script file to be edited

Below is my Lounge-On.py file, you can see on line 3: I have the http command which is sent to Vera to turn on the lights this was created in part 1.
We need to add a new line of code (line 4) into our python script file, to also now send a popup notification to the XBMC PC as well.

So we need to construct the line of code to send the popup to the XBMC PC and this is done in two parts.

The first part of this line is always the same and can be seen below. We’ll say the IP address of my XBMC PC is 192.168.1.10 and the webserver is on port 8080

Line #4 – First Part
proc = subprocess.Popen(["curl", "http://192.168.1.10:8080/jsonrpc?request="])

The second part of the line is the bit that needs to be encoded into Unicode and we will use a website to assist us with this: http://www.url-encode-decode.com/

image

Above is a screen shot of the website, on the box on the left enter this code:
{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"Your Title Here","message":"Your Message Here"},"id":1}
Change the Title and Message to suit your needs, select UTF-8 from the drop down list and then click the URL Encode button.

Then on the box on the right we get the encoded string that we need.

Line #4 – Second Part
%7B%22jsonrpc%22%3A%222.0%22%2C%22method%22%3A%22GUI.ShowNotification%22%2C%22params%22%3A%7B%22title%22%3A%22Harrison+Home%22%2C%22message%22%3A%22Turning+Lounge+Lights+On%22%7D%2C%22id%22%3A1%7D

Now we need to combine the first and second parts of the Line #4 in our python script file.

proc = subprocess.Popen(["curl", "http://192.168.1.10:8080/jsonrpc?request=ENTER-ENCODED-STRING-HERE"])

The fully combined line of code will then look like this:
proc = subprocess.Popen(["curl", "http://192.168.1.10:8080/jsonrpc?request=%7B%22jsonrpc%22%3A%222.0%22%2C%22method%22%3A%22GUI.ShowNotification%22%2C%22params%22%3A%7B%22title%22%3A%22Harrison+Home%22%2C%22message%22%3A%22Turning+Lounge+Lights+On%22%7D%2C%22id%22%3A1%7D"])

So now the fully completed Lounge-On.py script file looks like this:
#!/usr/bin/env python
import subprocess
proc = subprocess.Popen(["curl", "http://192.168.1.100:3480/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=1"])
proc = subprocess.Popen(["curl", "http://192.168.1.10:8080/jsonrpc?request=%7B%22jsonrpc%22%3A%222.0%22%2C%22method%22%3A%22GUI.ShowNotification%22%2C%22params%22%3A%7B%22title%22%3A%22Harrison+Home%22%2C%22message%22%3A%22Turning+Lounge+Lights+On%22%7D%2C%22id%22%3A1%7D"])

Click the links to download my sample Lounge-On.py and Lounge-Off.py scripts to have a look at them.

All of this might sound a bit complicated but its actually pretty simple to create these new lines of code to also send a pop-up notification to your XBMC PC, once you have done it a few times.

Now you need to repeat this entire process and add a new line of code into each of your existing python script files you created in part one changing the pop-up notification message for each.

Now when I click these buttons on my Harmony remote control handset to turn on /off my lights or fireplace etc I also get a feedback notification pop-up being displayed in XBMC, so I know the python script has been run and can therefore safely assume that the light or device I wanted to send the command too via Vera has received it.



Summary

A neat little way of adding some feedback notifications to my Logitech Harmony / XBMC / Vera Home Automation integration project.

Saturday, 31 May 2014

XBMC OpenElec / Logitech Harmony / Micasaverde Vera integration - UPDATED!

       
  
  

When I was using Windows Media Center, I was able to program my Logitech Harmony universal remote controls to control my Z-wave lights and devices in Micasaverde Vera, I wrote about that back here. And also here for mControl.

Basically the idea is this – Program your Logitech Harmony to send keyboard shortcuts to your HTPC via IR or with the RF extender. Your HTPC in response then runs a script to send a http request to your home automation system to do something, like turn on some lights or control a device in your home. I still think its a brilliant idea and whilst using your HTPC you can turn your bog standard IR universal remote control  handset in to a Z-wave / Home Automation remote control handset !

Since I moved to OpenElec XBMC I have lost this feature until now! There are no other how-to or guides on the Internet that talk about this topic directly? Not that I have seen anyway's and as my Linux programming skills are not great, I have had to battle through and cobble it all together myself. If you are more proficient in Linux then you may well spot some ways of improving what I have done, so please feel free to leave your comments.

I have this working currently on only one of my HTPC’s this is an Intel based mini ITX board using the CIR header and an Inteset CIR receiver board. I am using OpenElec 4.0.3 Gotham.

The break through came when I discovered this thread here, which talks about enabling the mce_kbd IR protocol in Linux (MCE Keyboard). As without this the QWERTY keyboard shortcuts just don’t work and are not seen.

Here is an over view of the steps required and what I will be covering in this blog post.

1. Enable the mce_kbd IR protocol in Linux

2. Figure out what http commands you need to send to your Home Automation controller (Vera)

3. Create the script files XBMC will run to send the http request to the Home Automation controller

4. Create / Tweak the XBMC keyboard.xml keymap file to add support for your new keyboard shortcuts in XBMC

5. Program your Logitech Harmony remote with the new keyboard shortcuts (MCE IR Keyboard required)

6. Test, hope it works and if it does, sit back and think WOW nice one CW-KID!

OK before we start just a word about the Logitech Harmony software there are several devices / profiles in the database relating to MCE:

Windows Media Center SE
Windows Media Center (EU)
Media Center Extender
MCE Keyboard

Are just the ones I know about. I am using the “Windows Media Center SE” device.  When using the MCE Keyboard profile I had big problems with the command being sent multiple times over and over so I don’t recommend you use that profile.

Also there may be ways to do this without actually owning a MCE IR keyboard and using the pre-defined keyboard shortcuts in the Harmony MCE profiles. However I think if you have Logitech Harmony’s then you should have one of these MCE IR Keyboards. So you can teach your Harmony any keyboard shortcut combination you wish, so I recommend you just buy one if you haven’t got one.  This will also give you much greater scope for creating many new keyboard shortcuts such as Ctrl+Alt+A  to Ctrl+Alt+Z and many more etc


1. Enable the mce_kbd IR protocol in Linux

Until you do this your just pissing in the wind trying to send IR keyboard shortcuts, believe me I know. Use Putty to SSH in to your OpenElec PC, if you don’t know how to do this use Google.
enter this command:

echo +mce_kbd > /sys/class/rc/rc0/protocols

then type ir-keytable –v

If you are in luck you should see a line that says:
/sys/class/rc/rc0/protocols protocol mce_kbd (enabled)

image

This worked on one of my HTPC’s with the Inteset CIR receiver board but did not work on another HTPC which has an iMon VFD/IR I’m still investigating that issue. Can you help me here?

OK so now you need to add this command in to your OpenElec autostart.sh script file. If you haven’t got one follow the wiki here to create one.

This will ensure that this command is run each time you turn on your PC.

image

2. Figure out what http commands you need to send to your Home Automation controller

I am basing this on Micasaverde Vera as that is my Home Automation controller, however this should work for any HA controller that can accept HTTP commands. I know it will work with mControl for example and probably many others like HomeSeer.

If you see my previous blog post here I talk about how to figure out what the http commands are to control devices and scenes.
So I am just going to copy and paste from that previous post and tweak it a little bit to save myself some time.

Turning a Z-wave device on and off
Here is an example HTTP command which turns on my Lamp (Left) device in my living room. You need to know what your DeviceNum is?

curl "http://192.168.1.100:3480/data_request?id=lu_action&output_format=xml&DeviceNum=3&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1"

There are two ways to work out the device number, you can go to the Vera UI in a browser find the device in question, click the spanner icon and then go to the settings tab. You can see that this Lamp (Left) device is ID 3 and DeviceNum=3 in the above HTTP string to turn on this device.

image

The second method of listing the ID numbers for all your devices and scenes in Vera is to use the URL below, which displays a page of XML with all the information in it. Change IP-Address for the internal IP address of your Vera box.
http://IP-Address/port_3480/data_request?id=lu_sdata&output_format=xml

This example HTTP command turns off the Lamp (Left) device:

curl "http://192.168.1.100:3480/data_request?id=lu_action&output_format=xml&DeviceNum=3&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0"

Note:
SetTarget&newTargetValue=0 = OFF
SetTarget&newTargetValue=1 = ON

To test your Vera HTTP commands you can just run them in a browser and the Z-wave device should respond. Obviously you need to change the IP address 192.168.1.100 to the IP address of your own Vera unit.

Run a Vera scene

In this example we are going to look at a HTTP command to run a scene in Vera. Again first you need to know the scene number of the particular scene you would like to create your script file for. My scene is called “Lounge On” if I look at the scene in Vera I can see its number is = 1

image

Or if I look at the XML code from the URL I mentioned above, I can see its id=1

<scene active="0" name="Lounge On" id="1" room="1"/>

So now I know the ID number of the scene I want to create a script file for, I can use the HTTP command below, note I have the number 1 at the end: RunScene&SceneNum=1

If my scene had an ID of 5 I would change this to be RunScene&SceneNum=5 etc.

HTTP Command to run a Vera Scene:

curl "http://192.168.1.100:3480/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=1"

3. Create the script files XBMC will run to send the http request to the Home Automation controller

OK so now we need to look at creating the script files for XBMC to run which will contain our http commands to be sent to the Home Automation Controller.

To do this I created a python script which runs a curl command to send the http request to the home automation controller.

Create the python script file

I am using EditPad Lite as my notpad editor program. Create a new file and paste in this code and use your own http command for Vera.

#!/usr/bin/env python
import subprocess
proc = subprocess.Popen(["curl", "http://192.168.1.100:3480/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=1"])
and save it as a .py file I called mine lounge-on.py

As you can see the lounge-on.py script file sends the http request to Vera using curl. In this example my http command will run a scene with ID=1 which is my lounge lights on scene.

Also worth noting now, I am saving all my script files in this location on the OpenElec PC:

/storage/.xbmc/userdata/vera/

I just created a new sub-folder called vera via the OpenElec samba shares














OK at this point we can now test its working? To do this we need to run the python script.

type: python lounge-on.py and press enter








It should say OK and your lights should have just been turned ON in your room!

So now what? Well you need to repeat this process of creating these python script files for each Vera scene or device you want to control. So I now need a lounge off script.

lounge-off.py

#!/usr/bin/env python
import subprocess
proc = subprocess.Popen(["curl", "http://192.168.1.100:3480/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=2"])

You can see my lounge off scene in Vera has an ID=2 / SceneNum=2

Now in terminal I can test the lounge-off.py script by running:

python lounge-off.py


image

Again it says OK and now my lights have just gone OFF.

4. Create / Tweak the XBMC keyboard.xml keymap file to add support for your new keyboard shortcuts in XBMC

Now we need some way for XBMC to be able to run the python .py script files, when we press our keyboard shortcuts / send them from the Harmony IR remote control handset.

Look in this folder on your OpenElec PC:

/storage/.xbmc/userdata/keymaps

Is there a keyboard.xml file in there? If not you will need to copy the master / default file from the system: /usr/share/xbmc/system/keymaps in to your /storage/.xbmc/userdata/keymaps folder

For example this command in terminal would copy the default keyboard.xml file in to your userdata/keymaps folder

cp /usr/share/xbmc/system/keymaps/keyboard.xml /storage/.xbmc/userdata/keymaps/keyboard.xml

We now need to edit the keyboard.xml file, to add in support for our keyboard shortcuts in XBMC, so I opened it in my EditPad Lite editor.

image

You can see in the global section at the top I have added two lines of code:

<A mod="ctrl,alt">RunScript(/storage/.xbmc/userdata/vera/lounge-on.py)</A>

<B mod="ctrl,alt">RunScript(/storage/.xbmc/userdata/vera/lounge-off.py)</B>

I wanted my keyboard shortcuts to be CTRL+ALT+(LETTER) for example CTRL+ALT+A and CTRL+ALT+B

That’s what this part of the code is <A mod="ctrl,alt"> a modifier for CTRL+ALT+A

We then RunScript and call the python script

RunScript(/storage/.xbmc/userdata/vera/lounge-on.py)

and close with </A>

Save the keyboard.xml file and reboot your OpenElec PC for the changes to take affect.

So what this means if I press CTRL+ALT+A on a keyboard XBMC will run my lounge-on.py script.  And when I press CTRL+ALT+B XBMC will run my lounge-off.py script.

5. Program your Logitech Harmony remote with the new keyboard shortcuts (MCE IR Keyboard required)

OK we are getting there, now we need to teach our Logitech Harmony remote control handset the keyboard shortcuts i.e. CTRL+ALT+A and CTRL+ALT+B

In the Harmony software or via the online myharmony.com site depending on which Harmony remote you have (I am using the Harmony software and a Harmony 895 remote).

Connect your Harmony remote via the USB cable to your workstation PC and then go to the Media Center PC device and select learn IR

image

Scroll down to the bottom and under Learn a New Command enter a name for your new command and click the Learn New Command button

image

You will then see this screen.

image

Now position your Harmony remote control handset and your MCE IR Keyboard, so you can teach the Harmony remote the new keyboard shortcut.

image

Press the keyboard shortcut you wish to teach the Harmony in my case CTRL+ALT+A

The Harmony software should then say Key Detected

image

It will then ask you to enter the keyboard shortcut a second time to confirm it.

Now on the Media Center PC device select Settings

image

Select Customise Buttons

image

Select the Additional Buttons tab and scroll to the page on the LCD screen where you would like to add your new custom buttons.

Type a name for your new button “Lounge On” and in the drop down list select the new command you just taught your Harmony “LoungeOn”

image

Repeat this process and teach your Harmony the other keyboard shortcuts and create new buttons on your Media Center PC device LCD screen.

You will probably also want to edit your Media Center PC activities and add the new custom buttons to those activities as well.

These are two photos of the new buttons I have added to my Harmony 895 LCD screen.














































































These are the new lines of code I ended up with in my Keyboard.xml file I used CTRL+ALT+A to CTRL+ALT+K




















Now point your Harmony remote at your OpenElec XBMC PC and press one of your new custom buttons, if its all working your lights should come on / off etc.

Summary

I’ve only got all of this working today on one of my HTPC’s and I’ve not had much time to test it, but so far it is working flawlessly, I press a button on the Harmony and my lights react immediately. I’ve also wrote this blog post quickly and I hope there are no serious errors, but all of this in Linux for me is still really a work in progress!

If you are a Linux guru? Please look at this post here I need help enabling the mce_kbd IR protocol on my other HTPC which has the iMon VFD/IR.

If anyone wants a copy of my .py script files? Let me know and I will post them up on the net somewhere.

UPDATE: Check out PART TWO here, I have added feedback pop-up notifications in to the XBMC user interface, so you know if the python script has been run by XBMC.