From 57c71be68fe8f73f51fc814d5204ab3098d8ea6b Mon Sep 17 00:00:00 2001 From: sweidinger Date: Sun, 1 Mar 2015 10:31:17 +0100 Subject: [PATCH 1/7] HomeMatic Added a HomeMatic shim --- accessories/HomeMatic.js | 116 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100755 accessories/HomeMatic.js diff --git a/accessories/HomeMatic.js b/accessories/HomeMatic.js new file mode 100755 index 0000000..94f4ee7 --- /dev/null +++ b/accessories/HomeMatic.js @@ -0,0 +1,116 @@ +var types = require("../lib/HAP-NodeJS/accessories/types.js"); +var request = require("request"); + +function HomeMatic(log, config) { + this.log = log; + this.name = config["name"]; + this.ccuID = config["ccu_id"]; + this.ccuIP = config["ccu_ip"]; +} + +HomeMatic.prototype = { + + setPowerState: function(powerOn) { + + var binaryState = powerOn ? 1 : 0; + var that = this; + + this.log("Setting power state of CCU to " + powerOn); + this.log(this.ccuID+ powerOn); + + request.put({ + url: "http://"+this.ccuIP+"/config/xmlapi/statechange.cgi?ise_id="+this.ccuID+"&new_value="+ powerOn, + }, function(err, response, body) { + + if (!err && response.statusCode == 200) { + that.log("State change complete."); + } + else { + that.log("Error '"+err+"' setting lock state: " + body); + } + }); + }, + + getServices: function() { + var that = this; + return [{ + sType: types.ACCESSORY_INFORMATION_STYPE, + characteristics: [{ + cType: types.NAME_CTYPE, + onUpdate: null, + perms: ["pr"], + format: "string", + initialValue: this.name, + supportEvents: false, + supportBonjour: false, + manfDescription: "Name of the accessory", + designedMaxLength: 255 + },{ + cType: types.MANUFACTURER_CTYPE, + onUpdate: null, + perms: ["pr"], + format: "string", + initialValue: "WeMo", + supportEvents: false, + supportBonjour: false, + manfDescription: "Manufacturer", + designedMaxLength: 255 + },{ + cType: types.MODEL_CTYPE, + onUpdate: null, + perms: ["pr"], + format: "string", + initialValue: "Rev-1", + supportEvents: false, + supportBonjour: false, + manfDescription: "Model", + designedMaxLength: 255 + },{ + cType: types.SERIAL_NUMBER_CTYPE, + onUpdate: null, + perms: ["pr"], + format: "string", + initialValue: "A1S2NASF88EW", + supportEvents: false, + supportBonjour: false, + manfDescription: "SN", + designedMaxLength: 255 + },{ + cType: types.IDENTIFY_CTYPE, + onUpdate: null, + perms: ["pw"], + format: "bool", + initialValue: false, + supportEvents: false, + supportBonjour: false, + manfDescription: "Identify Accessory", + designedMaxLength: 1 + }] + },{ + sType: types.SWITCH_STYPE, + characteristics: [{ + cType: types.NAME_CTYPE, + onUpdate: null, + perms: ["pr"], + format: "string", + initialValue: this.name, + supportEvents: false, + supportBonjour: false, + manfDescription: "Name of service", + designedMaxLength: 255 + },{ + cType: types.POWER_STATE_CTYPE, + onUpdate: function(value) { that.setPowerState(value); }, + perms: ["pw","pr","ev"], + format: "bool", + initialValue: false, + supportEvents: false, + supportBonjour: false, + manfDescription: "Change the power state of a Variable", + designedMaxLength: 1 + }] + }]; + } +}; + +module.exports.accessory = HomeMatic; From df71f21c9ad8a6aaa43b82916740861fcaa771a6 Mon Sep 17 00:00:00 2001 From: sweidinger Date: Sun, 1 Mar 2015 10:37:09 +0100 Subject: [PATCH 2/7] Update config-sample.json --- config-sample.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config-sample.json b/config-sample.json index ca0b69b..43f0a74 100644 --- a/config-sample.json +++ b/config-sample.json @@ -43,6 +43,13 @@ "password": "your-comcast-password", "dsig": "your-digital-signature", "pin": "your-security-system-pin-code" + }, + { + "accessory": "HomeMaticCCU", + "name": "Light", + "description": "HomeMatic Variable as PowerPlug", + "ccu_id": "3158" + "ccu_ip": "10.0.1.18" } ] -} \ No newline at end of file +} From 1443643b5d53a733635c94bd30b574c6e97acff1 Mon Sep 17 00:00:00 2001 From: sweidinger Date: Sun, 1 Mar 2015 10:37:56 +0100 Subject: [PATCH 3/7] Update config-sample.json --- config-sample.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-sample.json b/config-sample.json index 43f0a74..3d05003 100644 --- a/config-sample.json +++ b/config-sample.json @@ -48,7 +48,7 @@ "accessory": "HomeMaticCCU", "name": "Light", "description": "HomeMatic Variable as PowerPlug", - "ccu_id": "3158" + "ccu_id": "3158", "ccu_ip": "10.0.1.18" } ] From 017cf9faafba4a7d3fb6f195515b6acc099ccf92 Mon Sep 17 00:00:00 2001 From: sweidinger Date: Sun, 1 Mar 2015 10:46:44 +0100 Subject: [PATCH 4/7] Update config-sample.json --- config-sample.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-sample.json b/config-sample.json index 3d05003..2459b6d 100644 --- a/config-sample.json +++ b/config-sample.json @@ -45,7 +45,7 @@ "pin": "your-security-system-pin-code" }, { - "accessory": "HomeMaticCCU", + "accessory": "HomeMatic", "name": "Light", "description": "HomeMatic Variable as PowerPlug", "ccu_id": "3158", From fcab2bc7d36886fe863b7a5905301918a5c5ec0b Mon Sep 17 00:00:00 2001 From: sweidinger Date: Sun, 1 Mar 2015 10:54:55 +0100 Subject: [PATCH 5/7] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b30ca6..cec9b10 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,12 @@ At this point, you should be able to tell Siri to control your devices. However, Also, keep in mind HomeKit is not very robust yet, and it is common for it to fail intermittently ("Sorry, I wasn't able to control your devices" etc.) then start working again for no reason. Also I've noticed that it will get cranky and stop working altogether sometimes. The usual voodoo applies here: reboot your device, or run the BetterHomeKit app and poke around, etc. One final thing to remember is that Siri will almost always prefer its default phrase handling over HomeKit devices. For instance, if you name your Sonos device "Radio" and try saying "Siri, turn on the Radio" then Siri will probably start playing an iTunes Radio station on your phone. Even if you name it "Sonos" and say "Siri, turn on the Sonos", Siri will probably just launch the Sonos app instead. This is why, for instance, the suggested `name` for the Sonos shim in `config-samples.json` is "Speakers". +# HomeMatic + +The XML-API addon is required. + +"ccu_id": "3158" = The XMP-API id of your HomeMatic device +"ccu_ip": "10.0.1.18" = The IP-Adress of your CCU # Final Notes @@ -97,4 +103,4 @@ HomeKit is definitely amazing when it works. Speaking to Siri is often much quic I welcome any suggestions or pull requests, but keep in mind that it's likely not possible to support all the things you might want to do with a device through HomeKit. For instance, you might want to hack the Sonos shim to play the specific kind of music you want and that's great, but it might not be appropriate to merge those specific changes into this repository. The shims here should be mostly simple "canonical examples" and easily hackable by others. -Good luck! \ No newline at end of file +Good luck! From 83af68372145ea58369b85eb6e598e0a99c0da73 Mon Sep 17 00:00:00 2001 From: sweidinger Date: Wed, 4 Mar 2015 17:38:13 +0100 Subject: [PATCH 6/7] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index cec9b10..e550ae7 100644 --- a/README.md +++ b/README.md @@ -90,12 +90,6 @@ At this point, you should be able to tell Siri to control your devices. However, Also, keep in mind HomeKit is not very robust yet, and it is common for it to fail intermittently ("Sorry, I wasn't able to control your devices" etc.) then start working again for no reason. Also I've noticed that it will get cranky and stop working altogether sometimes. The usual voodoo applies here: reboot your device, or run the BetterHomeKit app and poke around, etc. One final thing to remember is that Siri will almost always prefer its default phrase handling over HomeKit devices. For instance, if you name your Sonos device "Radio" and try saying "Siri, turn on the Radio" then Siri will probably start playing an iTunes Radio station on your phone. Even if you name it "Sonos" and say "Siri, turn on the Sonos", Siri will probably just launch the Sonos app instead. This is why, for instance, the suggested `name` for the Sonos shim in `config-samples.json` is "Speakers". -# HomeMatic - -The XML-API addon is required. - -"ccu_id": "3158" = The XMP-API id of your HomeMatic device -"ccu_ip": "10.0.1.18" = The IP-Adress of your CCU # Final Notes From 8756607c57f5f3da51a1a60ea8d71d112bb4547d Mon Sep 17 00:00:00 2001 From: sweidinger Date: Wed, 4 Mar 2015 17:41:02 +0100 Subject: [PATCH 7/7] Update config-sample.json --- config-sample.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config-sample.json b/config-sample.json index 2459b6d..c5f4243 100644 --- a/config-sample.json +++ b/config-sample.json @@ -47,9 +47,9 @@ { "accessory": "HomeMatic", "name": "Light", - "description": "HomeMatic Variable as PowerPlug", - "ccu_id": "3158", - "ccu_ip": "10.0.1.18" + "description": "Control HomeMatic devices (The XMP-API addon for the CCU is required)", + "ccu_id": "The XMP-API id of your HomeMatic device", + "ccu_ip": "The IP-Adress of your HomeMatic CCU device" } ] }