homebridge-fakeswitchfs

1.2.2 • Public • Published

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:

}

Package Sidebar

Install

npm i homebridge-fakeswitchfs

Weekly Downloads

0

Version

1.2.2

License

ISC

Last publish

Collaborators

  • hugofesta