Reverse Engineering the iHome iSP5 SmartPlug Communications

I got a couple of the iHome iSP5 Smart Plugs and wanted to integrate them into OpenHAB. This is just some rough digging I have done so far in the communications between the phone app and their server. Part 2, if I get to it will look at the communications between the server and the plug. This will be much harder as I will need to find a way to become a MITM for the SSL communications.

Maybe this will help someone create an openHAB binding as I have never really worked with OpenHAB.

The following is all done using CURL.

Get Your Authorization ID

To start off you need to send a request to their server with your login information to get the authorization ID to communicate with the device server.

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -X POST https://www.ihomeaudio.com/api/v3/login/ -d 'password=yourPassword&email=email%40domain.com'

The response to this will contain 2 important fields:

  • evrythng_user_id
  • evrythng_api_key

The evrythng_user_id isnt really useful but its nice to know. The evrythng_api_key is really where the magic happens.

Get Your Device ID(s)

Using the evrythng_api_key you can then send a packet to query all the things you have in your account. Replace evrythng_api_key with your actual value in the Authorization field.

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -H "Authorization: evrythng_api_key" https://api.evrythng.com/thngs?perPage=100&sortOrder=ASCENDING

This then returns a large JSON response with all your devices.

Most of these fields can then be queried later but a few are really the most important:

  • id (Unique device ID)
  • currentpowerstate1 (1=On, 0=Off)
  • outletinuse1 (1=yes, 0=no)
  • ~connected (true=Connected, false=Disconnected)

These fields are pretty self-explanatory. currentpowerstate1 is if the switch is on/off, outletinuse1 is if there is something actually plugged into it and, ~connected is if the device is connected to the internet/accessible.

Get Device Properties

To query the device for a specific property use a GET as follows and remember to replace id in the URL with the id you found in the last command:

curl -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: evrythng_api_key" https://api.evrythng.com/thngs/id/properties/~connected?perPage=100&sortOrder=ASCENDING

Replace the last part of the URL with the property you want to query.

This query actually returns a few values so you may want to limit it to 1 instead of 100 to get the last result. I did also notice that the sortOrder didn’t appear to do anything but that may need to be experimented with a bit more.

Another example to get powerstate1

curl -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: evrythng_api_key" https://api.evrythng.com/thngs/id/properties/currentpowerstate1?perPage=1&sortOrder=ASCENDING

Setting A Property

To actually set a property value it’s basically the same except sending a PUT instead of a GET.

The following will turn the switch off:
curl -H "Authorization: evrythng_api_key" -H "Content-Type: application/json" -H "Accept: application/json" -H "Content-Length: 15" -X PUT https://api.evrythng.com/thngs/id/properties/targetpowerstate1 -d '[{"value":"0"}]'

Ya, so that’s really all there is to it. I’m sure a binding would be pretty simple for someone.

Edit: So the communications between the server and the device are SSL encrypted so I dont have a way to see what its doing. I ran TCPdump on my router and I can see packets but nothing I can work with. Not sure if anyone has any ideas.

Seagate Backup Plus 4tb External Drive Disassembly

I picked up a few of Seagate Backup Plus 4tb drives at Walmart for an incredible price the other day.  My plan is to replace the 2tb drives in my fileserver so I needed to remove the case.  I first did some testing to make sure it wasn’t DOA before I started to take it apart.

It turned out to be very easy — the cover is held on with just a few clips that are easy to undo.  I managed to get it out with no damage at all.  The case is still fully usable if I choose in the future.

What is the drive inside?  Its Seagates standard ST4000DM000 consumer desktop drive.  

Check out the images below for instructions on how to remove the drive.

Specs

  • Capacity: 4TB
    • 4TB (ST4000DM000)
    • 8 heads, 4 disks
  • Interface: SATA 6Gb/s
  • Spindle: 5,900 RPM
  • Cache: 64MB
  • Throughput Max: 180/MBs
  • Average Data Rate: 146MB/s
  • Average Latency: 5.16ms
  • Power
    • Typical Idle Operating 5W
    • Average Operating 7.5W
  • Warranty: 2 years

Full Spec Sheet

[Not a valid template]

 

Review: http://www.storagereview.com/seagate_desktop_hdd15_review_st4000dm000

Great Video on Kayak Forward Stroke Technique

Saw this great video on the correct technique for the kayak forward stroke.

For obvious reasons, the forward stroke is the most important stroke to learn. But you don’t need to have good technique to get a kayak moving. But by developing good technique, you’ll be able to paddle more efficiently, more effectively, and more comfortably.

Check it out.

Allegheny River Kayak – Trip Report

This was my second overnight paddle trip - the first being the Delaware River.  Both are technically easy kayak trips but I found them to be much different from one another.

The scenery is beautiful in parts, but the majority of the trip is through populated areas with cottages, and with the cottages comes the noise, boats and seadoos.  There are parts that have the feeling of seclusion but I was disappointed with the serenity of the trip as a whole - I never really felt like I was in deep woods.

However, if you are ever in an emergency situation help is never far away. (more…)

Rainmeter Google Traffic Estimation Skin

For anyone who has wondered how to have a meter on your desktop to estimate time in traffic to a set destination, its actually very easy. I have created a demo on how to do this in the attached ZIP file. You need to fill in the configuration with a google maps API key as well as your start and end locations. It will then assign a different picture depending on how much time it will take to get home. (Configuration of the time thresholds also required.)

Example of the skin:

Rainmeter Google Traffic Rainmeter Google Traffic Rainmeter Google Traffic
Download the Source: Rainmeter Google Traffic Skin

Icons licenced under Creative Commons Attribution-NoDerivs 3.0 Unported