Last active
September 2, 2018 15:11
-
-
Save Jxck-S/5c4bca0ac9c4943f08f2652b0a453000 to your computer and use it in GitHub Desktop.
Dash_accessory.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//START CONFIG | |
var dashMAC = "38:f7:3d:e3:98:46"; //enter your Amazon Dash Button mac ID here | |
var accessoryName = 'Gatorade Dash'; //enter what you want your Amazon Dash to be called in HomeKit | |
var uuidNAME = 'GADash'; //enter a singleword name here (use for UUID) | |
//END CONFIG | |
var Accessory = require('../').Accessory; | |
var Service = require('../').Service; | |
var Characteristic = require('../').Characteristic; | |
var uuid = require('../').uuid; | |
var node_dash = require('node-dash-button'); | |
var dashUUID = uuid.generate('hap-nodejs:accessories:'+uuidNAME); | |
var detector = node_dash(dashMAC); | |
var switchState = false; | |
var dash = exports.accessory = new Accessory(accessoryName, dashUUID); | |
// Properties for Core.js | |
dash.username = dashMAC; | |
dash.pincode = "031-45-154"; | |
dash | |
.getService(Service.AccessoryInformation) | |
.setCharacteristic(Characteristic.Manufacturer, "Amazon") | |
.setCharacteristic(Characteristic.Model, "Dash") | |
dash.on('identify', function(paired, callback) { | |
console.log(accessoryName + 'Identified!'); | |
callback(); | |
}); | |
dash | |
.addService(Service.Switch, accessoryName) | |
.getCharacteristic(Characteristic.On) | |
.on('set', function(value, callback) { | |
callback(); | |
}); | |
//dash detector | |
dash | |
detector.on("detected", function (){ | |
switchState = !switchState; | |
console.log(accessoryName+" Toggled!"); | |
dash | |
.getService(Service.Switch) | |
.setCharacteristic(Characteristic.On, switchState); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//START SETUP | |
var garageName = 'Garage Door'; | |
var uuidTag = 'garage'; | |
//END SETUP | |
var Accessory = require('../').Accessory; | |
var Service = require('../').Service; | |
var Characteristic = require('../').Characteristic; | |
var uuid = require('../').uuid; | |
var cmd=require('node-cmd'); | |
var wpi = require('wiringpi-node'); | |
wpi.setup('phys'); | |
wpi.pinMode(12,wpi.INPUT); | |
wpi.pullUpDnControl(12,wpi.PUD_UP); | |
var sensorReading; | |
var newStatus; | |
var falseAlert = false; | |
var GARAGE_DOOR = { | |
opened: false, | |
open: function() { | |
if(!GARAGE_DOOR.opened) | |
console.log("Opening the Garage!"); | |
cmd.run('sudo python /home/pi/HAP-NodeJS/python/garage.py'); | |
GARAGE_DOOR.opened = true; | |
}, | |
close: function() { | |
if(GARAGE_DOOR.opened) | |
console.log("Closing the Garage!"); | |
cmd.run('sudo python /home/pi/HAP-NodeJS/python/garage.py'); | |
GARAGE_DOOR.opened = false; | |
}, | |
identify: function() { | |
console.log("Identify the Garage"); | |
} | |
}; | |
var garageUUID = uuid.generate('hap-nodejs:accessories:'+uuidTag); | |
var garage = exports.accessory = new Accessory(garageName, garageUUID); | |
// Add properties for publishing (in case we're using Core.js and not BridgedCore.js) | |
garage.username = "C1:5D:3F:EE:5E:FA"; //edit this if you use Core.js | |
garage.pincode = "031-45-154"; | |
garage.on('identify', function(paired, callback) { | |
GARAGE_DOOR.identify(); | |
callback(); | |
}); | |
garage | |
.addService(Service.GarageDoorOpener, "Garage Door") | |
.setCharacteristic(Characteristic.TargetDoorState, Characteristic.TargetDoorState.CLOSED) // force initial state to CLOSED | |
.getCharacteristic(Characteristic.TargetDoorState) | |
.on('set', function(value, callback) { | |
if (value == Characteristic.TargetDoorState.CLOSED) { | |
if(falseAlert) | |
{ | |
falseAlert=false; | |
callback(); | |
} | |
else{ | |
GARAGE_DOOR.close(); | |
callback(); | |
} | |
} | |
else if (value == Characteristic.TargetDoorState.OPEN) { | |
if(falseAlert) | |
{ | |
falseAlert=false; | |
callback(); | |
} | |
else{ | |
GARAGE_DOOR.open(); | |
callback(); | |
} | |
} | |
}); | |
garage | |
.getService(Service.GarageDoorOpener) | |
.setCharacteristic(Characteristic.CurrentDoorState, Characteristic.CurrentDoorState.CLOSED) | |
.setCharacteristic(Characteristic.ObstructionDetected, Characteristic.ObstructionDetected.NO) | |
.getCharacteristic(Characteristic.CurrentDoorState) | |
.on('get', function(callback) { | |
var err = null; | |
sensorReading = wpi.digitalRead(12); | |
sensorReading = Number(sensorReading); | |
if (sensorReading == '1'){ | |
GARAGE_DOOR.opened = false; | |
} | |
if (sensorReading == '0'){ | |
GARAGE_DOOR.opened = true; | |
} | |
if (GARAGE_DOOR.opened) { | |
console.log("Query: Is Garage Open? Yes."); | |
callback(err, Characteristic.CurrentDoorState.OPEN); | |
} | |
else { | |
console.log("Query: Is Garage Open? No."); | |
callback(err, Characteristic.CurrentDoorState.CLOSED); | |
} | |
}); | |
setInterval(function() { | |
sensorReading = wpi.digitalRead(12); | |
sensorReading = Number(sensorReading); | |
if (sensorReading == '1'){ | |
newStatus = false; | |
} | |
if (sensorReading == '0'){ | |
newStatus = true; | |
} | |
if(newStatus != GARAGE_DOOR.opened){ | |
falseAlert = true; | |
GARAGE_DOOR.opened = newStatus; | |
garage | |
.getService(Service.GarageDoorOpener) | |
.setCharacteristic(Characteristic.CurrentDoorState, !GARAGE_DOOR.opened); | |
garage | |
.getService(Service.GarageDoorOpener) | |
.setCharacteristic(Characteristic.TargetDoorState, !GARAGE_DOOR.opened); | |
} | |
}, 1000); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var exports = module.exports = {}; | |
//HomeKit Types UUID's | |
var stPre = "000000"; | |
var stPost = "-0000-1000-8000-0026BB765291"; | |
//HomeKitTransportCategoryTypes | |
exports.OTHER_TCTYPE = 1; | |
exports.FAN_TCTYPE = 3; | |
exports.GARAGE_DOOR_OPENER_TCTYPE = 4; | |
exports.LIGHTBULB_TCTYPE = 5; | |
exports.DOOR_LOCK_TCTYPE = 6; | |
exports.OUTLET_TCTYPE = 7; | |
exports.SWITCH_TCTYPE = 8; | |
exports.THERMOSTAT_TCTYPE = 9; | |
exports.SENSOR_TCTYPE = 10; | |
exports.ALARM_SYSTEM_TCTYPE = 11; | |
exports.DOOR_TCTYPE = 12; | |
exports.WINDOW_TCTYPE = 13; | |
exports.WINDOW_COVERING_TCTYPE = 14; | |
exports.PROGRAMMABLE_SWITCH_TCTYPE = 15; | |
//HomeKitServiceTypes | |
exports.LIGHTBULB_STYPE = stPre + "43" + stPost; | |
exports.SWITCH_STYPE = stPre + "49" + stPost; | |
exports.THERMOSTAT_STYPE = stPre + "4A" + stPost; | |
exports.GARAGE_DOOR_OPENER_STYPE = stPre + "41" + stPost; | |
exports.ACCESSORY_INFORMATION_STYPE = stPre + "3E" + stPost; | |
exports.FAN_STYPE = stPre + "40" + stPost; | |
exports.OUTLET_STYPE = stPre + "47" + stPost; | |
exports.LOCK_MECHANISM_STYPE = stPre + "45" + stPost; | |
exports.LOCK_MANAGEMENT_STYPE = stPre + "44" + stPost; | |
exports.ALARM_STYPE = stPre + "7E" + stPost; | |
exports.WINDOW_COVERING_STYPE = stPre + "8C" + stPost; | |
exports.OCCUPANCY_SENSOR_STYPE = stPre + "86" + stPost; | |
exports.CONTACT_SENSOR_STYPE = stPre + "80" + stPost; | |
exports.MOTION_SENSOR_STYPE = stPre + "85" + stPost; | |
exports.HUMIDITY_SENSOR_STYPE = stPre + "82" + stPost; | |
exports.TEMPERATURE_SENSOR_STYPE = stPre + "8A" + stPost; | |
//HomeKitCharacteristicsTypes | |
exports.ALARM_CURRENT_STATE_CTYPE = stPre + "66" + stPost; | |
exports.ALARM_TARGET_STATE_CTYPE = stPre + "67" + stPost; | |
exports.ADMIN_ONLY_ACCESS_CTYPE = stPre + "01" + stPost; | |
exports.AUDIO_FEEDBACK_CTYPE = stPre + "05" + stPost; | |
exports.BRIGHTNESS_CTYPE = stPre + "08" + stPost; | |
exports.BATTERY_LEVEL_CTYPE = stPre + "68" + stPost; | |
exports.COOLING_THRESHOLD_CTYPE = stPre + "0D" + stPost; | |
exports.CONTACT_SENSOR_STATE_CTYPE = stPre + "6A" + stPost; | |
exports.CURRENT_DOOR_STATE_CTYPE = stPre + "0E" + stPost; | |
exports.CURRENT_LOCK_MECHANISM_STATE_CTYPE = stPre + "1D" + stPost; | |
exports.CURRENT_RELATIVE_HUMIDITY_CTYPE = stPre + "10" + stPost; | |
exports.CURRENT_TEMPERATURE_CTYPE = stPre + "11" + stPost; | |
exports.HEATING_THRESHOLD_CTYPE = stPre + "12" + stPost; | |
exports.HUE_CTYPE = stPre + "13" + stPost; | |
exports.IDENTIFY_CTYPE = stPre + "14" + stPost; | |
exports.LOCK_MANAGEMENT_AUTO_SECURE_TIMEOUT_CTYPE = stPre + "1A" + stPost; | |
exports.LOCK_MANAGEMENT_CONTROL_POINT_CTYPE = stPre + "19" + stPost; | |
exports.LOCK_MECHANISM_LAST_KNOWN_ACTION_CTYPE = stPre + "1C" + stPost; | |
exports.LOGS_CTYPE = stPre + "1F" + stPost; | |
exports.MANUFACTURER_CTYPE = stPre + "20" + stPost; | |
exports.MODEL_CTYPE = stPre + "21" + stPost; | |
exports.MOTION_DETECTED_CTYPE = stPre + "22" + stPost; | |
exports.NAME_CTYPE = stPre + "23" + stPost; | |
exports.OBSTRUCTION_DETECTED_CTYPE = stPre + "24" + stPost; | |
exports.OUTLET_IN_USE_CTYPE = stPre + "26" + stPost; | |
exports.OCCUPANCY_DETECTED_CTYPE = stPre + "71" + stPost; | |
exports.POWER_STATE_CTYPE = stPre + "25" + stPost; | |
exports.PROGRAMMABLE_SWITCH_SWITCH_EVENT_CTYPE = stPre + "73" + stPost; | |
exports.PROGRAMMABLE_SWITCH_OUTPUT_STATE_CTYPE = stPre + "74" + stPost; | |
exports.ROTATION_DIRECTION_CTYPE = stPre + "28" + stPost; | |
exports.ROTATION_SPEED_CTYPE = stPre + "29" + stPost; | |
exports.SATURATION_CTYPE = stPre + "2F" + stPost; | |
exports.SERIAL_NUMBER_CTYPE = stPre + "30" + stPost; | |
exports.STATUS_LOW_BATTERY_CTYPE = stPre + "79" + stPost; | |
exports.STATUS_FAULT_CTYPE = stPre + "77" + stPost; | |
exports.TARGET_DOORSTATE_CTYPE = stPre + "32" + stPost; | |
exports.TARGET_LOCK_MECHANISM_STATE_CTYPE = stPre + "1E" + stPost; | |
exports.TARGET_RELATIVE_HUMIDITY_CTYPE = stPre + "34" + stPost; | |
exports.TARGET_TEMPERATURE_CTYPE = stPre + "35" + stPost; | |
exports.TEMPERATURE_UNITS_CTYPE = stPre + "36" + stPost; | |
exports.VERSION_CTYPE = stPre + "37" + stPost; | |
exports.WINDOW_COVERING_TARGET_POSITION_CTYPE = stPre + "7C" + stPost; | |
exports.WINDOW_COVERING_CURRENT_POSITION_CTYPE = stPre + "6D" + stPost; | |
exports.WINDOW_COVERING_OPERATION_STATE_CTYPE = stPre + "72" + stPost; | |
exports.CURRENTHEATINGCOOLING_CTYPE = stPre + "0F" + stPost; | |
exports.TARGETHEATINGCOOLING_CTYPE = stPre + "33" + stPost; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment