francisco-navarro/climateberry

View on GitHub
homebridge-plugin/services/temperature.js

Summary

Maintainability
C
1 day
Test Coverage
const request = require('request');

function getFromUrl (next, field) {
  const me = this;
  request({
    url: me.getUrl,
    method: 'GET',
    json: true,
  },
  function (error, response, body) {
    if (error) {
      me.log(error.message);
      return next(error);
    }
    return next(null, body[field]);
  });
}

function getStateTemperature(next) {
  getFromUrl.call(this, next, 'currentTemp');
}

function getStateHumidity(next) {
  getFromUrl.call(this, next, 'humidity');
}

function getTargetTemperature(next) {
  getFromUrl.call(this, next, 'targetTemperature');
}

function setTargetTemperature(temp, next) {
  const me = this;
  me.log('Climateberry TargetTemperature ', temp);
  request({
      url: me.postUrl,
      json: {
        'targetTemperature': temp,
      },
      method: 'POST',
      headers: {
        'Content-type': 'application/json',
      },
    },
    function (error, response) {
      if (error) {
        me.log(error.message);
        return next(error);
      }
      return next();
    });
}

function getTemperatureDisplayUnits(next) {
  next(null, this.units);
}

function setTemperatureDisplayUnits(next) {
  next(null, this.units);
}

function getCurrentHeatingCoolingState(next) {
  const me = this;
  this.log("getCurrentHeatingCoolingState ");
  request({
      url: me.getUrl,
      method: 'GET',
      json: true,
    },
    function (error, response, body) {
      if (error) {
        me.log(error.message);
        return next(error);
      }
      if (response.body.heatingState) {
        // Si está encendido
        me.state = me.CurrentHeatingCoolingState.HEAT;
        me.targetHeatingCoolingState = me.TargetHeatingCoolingState.HEAT;
      } else {
        // Si está apagado:
        me.state = me.CurrentHeatingCoolingState.OFF;
        me.targetHeatingCoolingState = me.TargetHeatingCoolingState.OFF;
      }
      return next(null, body.mode);
    });
}

function setTargetHeatingCoolingState(state, next) {
  const me = this;
  me.log('Climateberry change HeatingCooling state: ', state);
  request({
      url: me.postUrl,
      json: {
        'heatingState': state,
      },
      method: 'POST',
      headers: {
        'Content-type': 'application/json',
      },
    },
    function (error, response) {
      if (error) {
        me.log(error.message);
        return next(error);
      }
      return next();
    });
}

module.exports = {
  getStateTemperature,
  getStateHumidity,
  getTargetTemperature,
  setTargetTemperature,
  getTemperatureDisplayUnits,
  setTemperatureDisplayUnits,
  getCurrentHeatingCoolingState,
  setTargetHeatingCoolingState,
};