Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
daikin-controller
Advanced tools
This library connects to a Daikin Air Conditioner device and allows to control the device and to read values from it. The Daikin Device needs to be equipped with a Daikin Wifi controller. Normally all wifi controllers should be supported that are supported by the Daikin App.
Device series from 2019
wireless adapter | device name | device series | test result |
---|---|---|---|
BRP069B42 | Urura Sarara | FTXZ-N | not tested, but should work (with 'useGetToPost') |
BRP084A42-1 | Stylish | CTXA-A*; FTXA-A*; FTXA-B* | works with 'useGetToPost' |
BRP069B41 | Emura | FTXJ-M* | works with 'useGetToPost' |
BRP069B41 | Perfera | CTXM-N; FTXM-N | works with 'useGetToPost' |
BRP069B45 | Comfora | FTXP-M | works with 'useGetToPost' |
BRP069B45 | Sensira (Austria) | FTXF-A | works with 'useGetToPost' |
BRP069B45 | Siesta (Germany) | ATXF-A | not tested, but should work (with 'useGetToPost') |
(*) is a placeholder for color of device (example: FTXA20AW ... "W" = White); (-) is a placeholder for cooling performance, as an approximate value (example: FTXA20AW … "20" = 2,0 kW);
What is meant by "with 'useGetToPost'":
var options = {'useGetToPost':true};
var daikin = new DaikinAC('192.168.0.100', options, function(err) {
...
Device series until 2019 According to Daikin Support Documents the following devices should be compatible (at least):
Compatible units in combination with BRP069A41: FTXG20LV1BW, FTXG20LV1BS , FTXG25LV1BW, FTXG25LV1BS, FTXG35LV1BW, FTXG35LV1BS, FTXG50LV1BW, FTXG50LV1BS, FTXJ20LV1BW, FTXJ20LV1BS, FTXJ25LV1BW, FTXJ25LV1BS, FTXJ35LV1BW, FTXJ35LV1BS, FTXJ50LV1BW, FTXJ50LV1BS ,
Compatible units in combination with BRP069A42: FTXZ25NV1B, FTXZ35NV1B, FTXZ50NV1B, FTXS35K2V1B, FTXS35K3V1B, FTXS42K2V1B, FTXS42K3V1B, FTXS50K2V1B, FTXS50K3V1B, FTXLS25K2V1B, FTXLS35K2V1B,FTXM35K3V1B, FTXM42K3V1B, FTXM50K3V1B, , FTXS60GV1B, FTXS71GV1B, ATXS35K2V1B, ATXS35K3V1B, ATXS50K2V1B, ATXS50K3V1B, , FTX50GV1B, FTX60GV1B, FTX71GV1B, , FVXG25K2V1B, FVXG35K2V1B, FVXG50K2V1B, , FVXS25FV1B, FVXS35FV1B, FVXS50FV1B, , FLXS25BAVMB, FLXS25BVMA, FLXS25BVMB, FLXS35BAVMB, FLXS35BAVMB9, FLXS35BVMA, FLXS35BVMB, FLXS50BAVMB, FLXS50BVMA, FLXS50BVMB, FLXS60BAVMB, FLXS60BVMA, FLXS60BVMB,
Compatible units in combination with BRP069A43 (?): CTXS15K2V1B, CTXS15K3V1B, FTXS20K2V1B, FTXS20K3V1B, FTXS25K2V1B, FTXS25K3V1B, CTXS35K2V1B, CTXS35K3V1B, FTXM20K3V1B, FTXM25K3V1B, , ATXS20K2V1B, ATXS20K3V1B, ATXS25K2V1B, ATXS25K3V1B, , FTX20J2V1B, FTX25J2V1B, FTX35J2V1B, FTX20J3V1B, FTX25J3V1B, FTX35J3V1B, , FTXL25J2V1B, FTXL35J2V1B, , FTX20KV1B, FTX25KV1B, FTX35KV1B, FTX20GV1B, FTX25GV1B, FTX35GV1B, , ATX20J2V1B, ATX20J3V1B, ATX25J2V1B, ATX25J3V1B, ATX35J2V1B, ATX35J3V1B, ATX20KV1B, ATX25KV1B, ATX35KV1B, , ATXL25J2V1B, ATXL35J2V1B,
Compatible units in combination with BRP069A44 (?): FTX50KV1B, FTX60KV1B
The library is based on the great work of the unofficial Daikin API documentation project (https://github.com/ael-code/daikin-control). Additional informations on parameters and values can be found there.
Note: For devices with newer WLAN-Adapters like BRP069C4x which can only be used by the Daikin Onecta App please use the Daikin-Controller-Cloud lib instead.
All product and company names or logos are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them or any associated subsidiaries! This personal project is maintained in spare time and has no business goal. Daikin is a trademark of DAIKIN INDUSTRIES, LTD.
The 2.x of the library is a port to Typescript. We tried to not break anything, but reality will proof how good we were on that :-) Some small changes are in that "might" be breaking depending on the usage:
var options = {'logger': console.log}; // optional logger method to get debug logging
var daikin = new DaikinAC('192.168.0.100', options, function(err) {
// will be called after successfull initialization
// daikin.currentCommonBasicInfo - contains automatically requested basic device data
// daikin.currentACModelInfo - contains automatically requested device model data
daikin.setUpdate(1000, function(err) {
// method to call after each update
// daikin.currentACControlInfo - contains control data from device updated on defined interval
// daikin.currentACSensorInfo - contains sensor data from device updated on defined interval
});
});
The library tries to make it easy to interact with a Daikin device, especially by caching the last read values as seen in the example above. These values can also be queried manually, but the library makes sure that the cached data are always current - this means that after changing some settings the relevant data are updated too.
On each call the result will be provided to a callback method together with an error flag containing an error message.
The library do not return the same field names as the Device (as listed on the unofficial documentation), but tries to make the fields more human-readable in camel case notation together with type conversion where possible. The corresponding mapping can be found in lib/DaikinACTypes.ts .
The callback method should have aa signature like
function (err, ret, response)
Constructor to initialize the Daikin instance to interact with the device. Usage see example above, the "options" parameter is optional. Using "options" you can set a logger function (see example). Additionally you can set the special flag useGetToPost for older Firmwares of the Daikin-WLAN-Interfaces (<1.4) that only supported HTTP GET also to set data. So if you get errors using it then you try if it works better with this flag. The callback function is called after initializing the device and requesting currentCommonBasicInfo and currentACModelInfo.
Use this method to initialize polling to get currentACControlInfo and currentACSensorInfo filled on the given interval. The interval is given in ms. The callback function is called after each polling/update.
This method is mainly used internally to update the data, but can also be used to update the data in between of the pollings. On result the callback from "setUpdate" is called, else only values are updated.
End the auto-update and clear all polling timeouts.
Get the "Basic-Info" details from the Daikin-Device. The callback will be called with the result.
Get the "Remote Method" details from the Daikin-Device. The callback will be called with the result.
Get the "Control-Info" details from the Daikin-Device. The callback will be called with the result.
Send an update for the "Control-Info" data to the device. values is an object with the following possible keys:
You can also set single of those keys (e.g. only "Power=true"). When this happens the current data are requested from the device, the relevant values will be changed and all required fields will be re-sent to the device. Be careful, especially on mode changes some values may be needed to be correct (e.g. when changing back from "FAN" to "AUTO" then temperature is empty too, but Auto needs a set temperature).
Get the "Sensor-Info" details from the Daikin-Device. The callback will be called with the result.
Get the "Model-Info" details from the Daikin-Device. The callback will be called with the result.
Get the "Week-Power" details from the Daikin-Device. The callback will be called with the result.
Get the "Year-Power" details from the Daikin-Device. The callback will be called with the result.
Get the "Extended Week-Power" details from the Daikin-Device. The callback will be called with the result.
Get the "Extended Year-Power" details from the Daikin-Device. The callback will be called with the result.
Send an update for the "Special Mode" data to the device. values is an object with the following possible keys:
Response:
It's possible to set STREAMER mode for a turned off device. POWERFUL/ECONOMY modes will only work when the the device is turned on.
Enables the Wifi Controller LEDs.
Disables the Wifi Controller LEDs.
Reboot the Wifi Controller. After this the Basic data are requested agsin and updated locally.
This methods sends UDP Broadcasts into the network to discover Daikin devices.
Example:
var Daikin = require('../../lib/index.js');
Daikin.discover(2, function(result) {
console.log(JSON.stringify(result));
});
The first Parameter is the number of found devices after which the method stops searching further, else it will do 10 Tries with a 1 second delay. The second parameter is the callback method called with the result.
Result is an Object with the IP as the key and some data as value.
The following endpoints (according to ...) are currently not implemented and can be if needed or if I find time to reverse engineer how they really work.
FAQs
Control Daikin Air Conditioner devices using nodejs
The npm package daikin-controller receives a total of 37 weekly downloads. As such, daikin-controller popularity was classified as not popular.
We found that daikin-controller demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.