Advertisement
Guest User

SonoffMQTT_accessory.js

a guest
Jan 8th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Accessory = require('../').Accessory;
  2. var Service = require('../').Service;
  3. var Characteristic = require('../').Characteristic;
  4. var uuid = require('../').uuid;
  5. var mqtt = require('mqtt');
  6. var MQTT_IP = 'localhost' //change this if your MQTT broker is different
  7. var mqttMSG = false;
  8.  
  9.  
  10. var name = "Sonoff Outlet"; //accessory name
  11. var sonoffUUID = "hap-nodejs:accessories:sonoffstand"; //change this to your preferences
  12. var sonoffUsername = "1A:2B:3C:4D:5E:FF";
  13. var MQTT_NAME = 'sonoff' //MQTT topic that was set on the Sonoff firmware
  14.  
  15.  
  16. var options = {
  17.   port: 1883,
  18.   host: MQTT_IP,
  19. //  username: 'pi', //enable only if you have authentication on your MQTT broker
  20. //  password: 'raspberry', //enable only if you have authentication on your MQTT broker
  21.   clientId: MQTT_NAME+'HAP'
  22. };
  23. var sonoffTopic = 'cmnd/'+MQTT_NAME+'/power';
  24. var client = mqtt.connect(options);
  25.  
  26. client.on('message', function(topic, message) {
  27. //  console.log(message.toString());
  28.   message = message.toString();
  29.   mqttMSG = true;
  30.   if (message.includes('ON')){
  31.     sonoffObject.powerOn = true;
  32.   }
  33.   else{
  34.     sonoffObject.powerOn = false;
  35.   }
  36.   sonoff
  37.     .getService(Service.Outlet)
  38.     .setCharacteristic(Characteristic.On,sonoffObject.powerOn);
  39. });
  40.  
  41. client.on('connect', function () {
  42.   client.subscribe('stat/'+MQTT_NAME+'/POWER')
  43. });
  44.  
  45. var sonoffObject = {
  46.   powerOn: false,
  47.   setPowerOn: function(on) {
  48.     sonoffObject.powerOn = on;
  49.     if (on) {
  50.       client.publish(sonoffTopic, 'on');
  51.     } else {
  52.       client.publish(sonoffTopic, 'off');
  53.     }
  54.   },
  55.   identify: function() {
  56.     console.log(name + " Identified!");
  57.   }
  58. }
  59.  
  60. var sonoff = exports.accessory = new Accessory(name, uuid.generate(sonoffUUID));
  61.  
  62. sonoff.username = sonoffUsername;
  63. sonoff.pincode = "031-45-154";
  64.  
  65. // listen for the "identify" event for this Accessory
  66. sonoff.on('identify', function(paired, callback) {
  67.   sonoffObject.identify();
  68.   callback();
  69. });
  70.  
  71. sonoff
  72.   .addService(Service.Outlet, name)
  73.   .getCharacteristic(Characteristic.On)
  74.   .on('set', function(value, callback) {
  75.     if(mqttMSG){
  76.       mqttMSG = false;
  77.       callback();
  78.     }
  79.     else {
  80.       sonoffObject.setPowerOn(value);
  81.       callback();
  82.     }
  83.   });
  84.  
  85. sonoff
  86.   .getService(Service.Outlet)
  87.   .getCharacteristic(Characteristic.On)
  88.   .on('get', function(callback) {
  89.     client.publish(sonoffTopic,'')
  90.     callback(undefined, sonoffObject.powerOn);
  91.   });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement