@caitken-com/node-red-contrib-daikin-api
Version:
Daikin Control API
230 lines (210 loc) • 7.26 kB
JavaScript
/**
* @description Utility class to generate payloads
* @package DaikinApiNode
* @author Christopher Aitken
* @version 1 2022
*/
class DaikinApi
{
/**
* @description Generates human config payload
* @static
* @memberof DaikinApi
* @param {DaikinConfig} daikin DaikinConfig instance
* @param {DaikinUserConfig} user DaikinUserConfig instance
* @returns {Object} JSON object
*/
static getConfig(daikin, user)
{
return {
'Power': daikin.getPower(),
'Mode': user.getMode(daikin.getMode()),
'TargetTemperature': daikin.getEnTempSetting() ? daikin.getStemp() : 'Disabled',
'FanRate': daikin.getEnfrate() ? daikin.getFrate() : 'Disabled',
'FanDirection': daikin.getEnfdir() ? daikin.getFdir() : 'Disabled',
'OutsideTemperature': isNaN(daikin.getOtemp()) ? 'Disabled' : daikin.getOtemp(),
'InsideTemperature': isNaN(daikin.getHtemp()) ? 'Disabled' : daikin.getHtemp(),
'ZoneNames': daikin.getZoneNames(),
'ZoneStates': daikin.getZoneStates(),
'EnableZones': daikin.getEnzone(),
'EnableLinearZones': daikin.getEnlinearzone(),
'EnableSetZones': daikin.getEnSetZone(),
'EnableCommonZone': daikin.getEnCommonZone(),
'EnableAutoMode': daikin.getEnauto(),
'EnableDryMode': daikin.getEndry(),
'EnableQuickTimer': daikin.getEnquicktimer(),
'EnableFanRate': daikin.getEnfrate(),
'EnableFanRateAuto': daikin.getEnFrateAuto(),
'EnableFanDirection': daikin.getEnfdir(),
'EnableSpecialMode': daikin.getEnSpMode(),
'EnableCh': daikin.getEnch(),
'EnableHolidayMode': daikin.getEnhol(),
'EnableCent': daikin.getEncent(),
'EnableFilterSign': daikin.getEnfiltersign(),
'EnableTemperatureSetting': daikin.getEnTempSetting(),
'EnablePatrol': daikin.getEnpatrol(),
'EnableAirSide': daikin.getEnairside(),
'SpecialMode': daikin.getEnSpMode() ? daikin.getSpMode() : 'Disabled',
'Model': daikin.getModel(),
'Type': daikin.getType(),
'Version': daikin.getVer(),
'Revision': daikin.getRev(),
'Name': daikin.getName(),
'ID': daikin.getId() ? daikin.getId() : 'Disabled',
'Errors': daikin.getErr(),
'Location': daikin.getLocation() !== '0' ? daikin.getLocation() : 'Disabled',
'CountryCode': daikin.getReg(),
"Method": daikin.getMethod(),
'SSID': daikin.getSsid(),
'Mac': daikin.getMac(),
'Port': daikin.getPort(),
'AdapterKind': daikin.getAdpkind(),
'AdaptorMode': daikin.getAdpmode(),
'LED': daikin.getLed(),
'AcLED': daikin.getAcled(),
'ErrorType': daikin.getErrtype(),
'ErrorCode': daikin.getErrcode(),
'HolidayMode': daikin.getEnhol() ? daikin.getHoliday() : 'Disabled',
'Operate': daikin.getOperate(),
'LowPowerFlag': daikin.getLpwflag(),
'SyncTime': daikin.getSynctime(),
'NoticeIpInt': daikin.getNoticeIpInt(),
'NoticeSyncInt': daikin.getNoticeSyncInt(),
'BkAuto': daikin.getBkauto(),
'Dt1': daikin.getDt1(),
'Dt2': daikin.getDt2(),
'FanSteps': daikin.getFratesteps(),
'FanDirection1': daikin.getDfr1(),
'FanDirection1': daikin.getDfr2(),
'FanAirSide': daikin.getEnairside() ? daikin.getFairside() : 'Disabled',
'AirSide1': daikin.getEnairside() ? daikin.getAirside1() : 'Disabled',
'AirSide2': daikin.getEnairside() ? daikin.getAirside2() : 'Disabled',
'FanAuto': daikin.getEnauto() ? daikin.getFauto() : 'Disabled',
'Auto1': daikin.getEnauto() ? daikin.getAuto1() : 'Disabled',
'Auto2': daikin.getEnauto() ? daikin.getAuto2() : 'Disabled',
'FanDirection1': daikin.getEnfdir() ? daikin.getDfd1() : 'Disabled',
'FanDirection2': daikin.getEnfdir() ? daikin.getDfd2() : 'Disabled',
'FilterSign': daikin.getEnfiltersign() ? daikin.getFiltersigninfo() : 'Disabled',
'Cent': daikin.getEncent() ? daikin.getCent() : 'Disabled',
'NumRemotes': daikin.getRemotes(),
'Humidity': daikin.getHumd(),
'TargetHumidity': daikin.getShumd(),
"CoolTemperatureMin": daikin.getCoolL(),
'CoolTemperatureMax': daikin.getCoolH(),
'HeatTemperatureMin': daikin.getHeatL(),
'HeatTemperatureMax': daikin.getHeatH(),
'SpecialModeKind': daikin.getEnSpMode() ? daikin.getSpModeKind() : 'Disabled',
'AdvancedMode': daikin.getAdvanced(),
}
}
/**
* @description Generates human control-info payload
* @static
* @memberof DaikinApi
* @param {DaikinConfig} daikin DaikinConfig instance
* @param {DaikinUserConfig} user DaikinUserConfig instance
* @returns {Object} JSON object
*/
static getControlInfo(daikin, user)
{
return {
'Power': daikin.getPower(),
'Mode': user.getMode(daikin.getMode()),
'TargetTemperature': daikin.getEnTempSetting() ? daikin.getStemp() : 'Disabled',
'FanRate': daikin.getEnfrate() ? daikin.getFrate() : 'Disabled',
'FanDirection': daikin.getEnfdir() ? daikin.getFdir() : 'Disabled',
};
}
/**
* @description Generates Daikin control-info payload
* @static
* @memberof DaikinApi
* @param {Object} data
* @param {DaikinConfig} daikin DaikinConfig instance
* @param {DaikinUserConfig} user DaikinUserConfig instance
* @returns {Object} JSON object
*/
static setControlInfo(data, daikin, user)
{
if (typeof data !== 'object') data = {};
// Minimum payload
let payload = {
'pow': daikin.config.pow,
'mode': daikin.config.mode,
'stemp': daikin.config.stemp,
'f_rate': daikin.config.f_rate,
'f_dir': daikin.config.f_dir,
};
if ('Mode' in data)
{
daikin.setMode(user.setMode(data.Mode));
payload.mode = daikin.getMode();
}
if ('Power' in data)
{
daikin.setPower(data.Power);
payload.pow = daikin.config.pow;
}
if ('TargetTemperature' in data)
{
daikin.setStemp(data.TargetTemperature);
payload.stemp = daikin.config.stemp;
}
if ('FanRate' in data)
{
daikin.setFrate(data.FanRate);
payload.f_rate = daikin.config.f_rate;
}
if ('FanDirection' in data)
{
daikin.setFdir(data.FanDirection);
payload.f_dir = daikin.config.f_dir;
}
return payload;
}
/**
* @description Generates human sensor-info payload
* @static
* @memberof DaikinApi
* @param {DaikinConfig} daikin DaikinConfig instance
* @param {DaikinUserConfig} user DaikinUserConfig instance
* @returns {Object} JSON object
*/
static getSensorInfo(daikin, user)
{
return {
'OutsideTemperature': isNaN(daikin.getOtemp()) ? 'Disabled' : daikin.getOtemp(),
'InsideTemperature': isNaN(daikin.getHtemp()) ? 'Disabled' : daikin.getHtemp(),
};
}
/**
* @description Generates human zone-settings payload
* @static
* @memberof DaikinApi
* @param {DaikinConfig} daikin DaikinConfig instance
* @param {DaikinUserConfig} user DaikinUserConfig instance
* @returns {Object} JSON object
*/
static getZoneSetting(daikin, user)
{
let zones = daikin.getZoneNames();
let values = daikin.getZoneStates();
return {'Zones': zones, 'On': values};
}
/**
* @description Generates Daikin zone-settings payload
* @static
* @param {Object} data
* @param {DaikinConfig} daikin DaikinConfig instance
* @param {DaikinUserConfig} user DaikinUserConfig instance
* @returns {Object} JSON object
*/
static setZoneSetting(data, daikin, user)
{
let payload = {
'zone_name': daikin.getZoneNames().join(';'),
'zone_onoff': daikin.getZoneStates().join(';'),
};
}
}
module.exports = DaikinApi;