1.2.2 • Published 8 years ago

homebridge-fakeswitchfs v1.2.2

Weekly downloads
1
License
ISC
Repository
github
Last release
8 years ago

Simulated switch plugin for Homebridge

Turn on or off a simulated switch

Created for testing homebridge

Installing

To install the plugin, head over to the machine with Homebridge set up and run

sudo npm install -g homebridge-sonytvpower
Configuration

To make Homebridge aware of the new plugin, you will have to add it to your configuration usually found in .homebridge/config.json. Somewhere inside that file you should see a key named accessories. You can just add this:

"accessories": [
    {
      "accessory": "FakeSwitch",
      "name": "Test Switch",
    } 
]

Accessory should always be FakeSwitch. You can change the name whatever you want. YOU NEED TO MAKE A .TXT FILE CALLED thenameyouentered_conf.txt WITH THE NUMBER 0 IN IT IN YOUR USER'S .homebridge/persist FOLDER!!!!!!!!!!! NOTE: The "state file" will be stored in the .homebridge/ folder. The filename is "name_conf.txt".

What it does?

WARNING: The text below containes description to beginners who want to write plugins for Homebridge. Professional programmers, GO AWAY! I import the fs(filesystem) package to write/read files:

var fs = require("fs");

I create variables for homebridge stuff:

var Service, Characteristic, HomebridgeAPI;

A function here for homebridge:

module.exports = function(homebridge){

Setting the Service variable to the HAP Service "module". Service tells the program I want a switch, or a lightbulb, or a door opener, etc.

    Service = homebridge.hap.Service;

Setting the Characteristic variable: Characteristic tells the Service what is the proper function to call if the user presses a button.

    Characteristic = homebridge.hap.Characteristic;

Setting the HomebridgeAPI variable: This is REALLY important. With this, we can tell Homebridge what accessory's plugin we are(more on that later).

    HomebridgeAPI = homebridge;

Registering our plugin into Homebridge: 1st argument: Module original name ("homebridge-xy") 2nd argument: Module name ("xy") 3rd argument: Module function name ("Xy")

    HomebridgeAPI.registerAccessory("homebridge-fakeswitch", "FakeSwitch", FakeSwitch);

Close this function:

}

Create our Module function. The name should be the name you entered into registerAccessory.

function FakeSwitch(log, config){

Creating our own logger function that Homebridge gave to us.

    this.log = log;

Getting the "name" entry from the config file:

    this.name = config.name;

Defining our file path for fs:

    this.filePath = HomebridgeAPI.user.persistPath() + "/" + this.name + "_conf.txt";

Defining what service is our device use: In this case, it's a switch.

    this._service = new Service.Switch(this.name);

"Telling" our functions via Characteristic: Get is for getting the state of the device. Set is for setting the state of the device.

    this._service.getCharacteristic(Characteristic.On)
        .on('get', this._get.bind(this))
        .on('set', this._set.bind(this));

Close this function:

}

Create a getServices function in our prototype for Homebridge to(guess for what) get our services:

FakeSwitch.prototype.getServices = function(){

Return the _service variable from our module:

    return [this._service];

Close this function:

}

Create a _set function in our prototype: We said go to here when setting device states to Homebridge earlier.

FakeSwitch.prototype._set = function (state, callback){

We are going to write a file: Path: this.filePath(we defined this earlier) Content: state(this is a variable we get from Homebridge when it calls this function)+''(this is used for converting int to string) Encoding: UTF-8(I don't know why) Callback: Our function which throws an error if it exists, or executes the callback function

    fs.writeFile(this.filePath, state + '', "utf8", function(err){ if (err) throw err; callback(null); });

Close this function:

}

Create a _get function in our prototype: We said go to here when getting device states to Homebridge earlier.

FakeSwitch.prototype._get = function(callback){

We are going to read a file: Path: this.filePath(we defined this earlier) Callback: Our function which throws an error if it exists, or executes the callback function

    fs.readFile(this.filePath, function(err, data){ if (err) throw err; callback(null, parseInt(data) ); });

Close this function:

}
1.2.2

8 years ago

1.2.1

8 years ago

1.1.1

8 years ago

1.1.0

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago