lukasroegner / homebridge-dyson-pure-cool

Plugin for using the Dyson Pure Cool fans in homebridge.
MIT License
294 stars 51 forks source link

Unsupported: HP02 (Hot + Cool) #31

Closed jcvignes closed 4 years ago

jcvignes commented 4 years ago

Hello! Everything's in the Subject :) I know this model supports Siri Shortcuts but I like the Homebridge flexibility so if you could help that would be great. Happy to test things at my end if need be. Congrats on a great plugin!

JC

lukasroegner commented 4 years ago

Hi @jcvignes and @realdannys,

please check out the development branch, where I added the initial support for HP02 and HP04. Currently, the following features are supported (please report issues):

The following features are to be implemented:

Please provide me with the following information:

jcvignes commented 4 years ago

Dear Lukas,

Thanks for this. Happy to help, can you just tell me how to enable debug mode in homebridge?

Thanks, JC

Envoyé de mon iPhone

Le 1 janv. 2020 à 12:33, Lukas Rögner notifications@github.com a écrit :

 Hi @jcvignes and @realdannys,

please check out the development branch, where I added the initial support for HP02 and HP04. Currently, the following features are supported (please report issues):

Devices should be visible as Heating/Cooling device Air quality sensor should work as expected Humidity sensor should work as expected Night Mode/Jet Focus should work as expected Rotation Speed, Swing Mode should work as expected Filter Life should work as expected Current temperature of Heating/Cooling device should work The following features are to be implemented:

Target temperature Auto/Heat/Cool Mode of Heating/Cooling device Please provide me with the following information:

What is the supported temperature range you can set the target temperature in the Dyson app? Can you please start Homebridge in debug mode and provide output of lines that contain ENVIRONMENTAL-CURRENT-SENSOR-DATA, CURRENT-STATE and STATE-CHANGE. It would be ideal if you change the mode and target temperature in the Dyson app and send me the corresponding STATE-CHANGE entries in the logs. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

lukasroegner commented 4 years ago

Just start homebridge with parameter -D

jcvignes commented 4 years ago

Dear Lukas,

Apologies for being so dense, could you walk me through the process of installing from the dev-branch? I assume it’s a different npm query?

Thanks, JC

Le 1 janv. 2020 à 12:33, Lukas Rögner notifications@github.com a écrit :

Hi @jcvignes https://github.com/jcvignes and @realdannys https://github.com/realdannys,

please check out the development branch, where I added the initial support for HP02 and HP04. Currently, the following features are supported (please report issues):

Devices should be visible as Heating/Cooling device Air quality sensor should work as expected Humidity sensor should work as expected Night Mode/Jet Focus should work as expected Rotation Speed, Swing Mode should work as expected Filter Life should work as expected Current temperature of Heating/Cooling device should work The following features are to be implemented:

Target temperature Auto/Heat/Cool Mode of Heating/Cooling device Please provide me with the following information:

What is the supported temperature range you can set the target temperature in the Dyson app? Can you please start Homebridge in debug mode and provide output of lines that contain ENVIRONMENTAL-CURRENT-SENSOR-DATA, CURRENT-STATE and STATE-CHANGE. It would be ideal if you change the mode and target temperature in the Dyson app and send me the corresponding STATE-CHANGE entries in the logs. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/lukasroegner/homebridge-dyson-pure-cool/issues/31?email_source=notifications&email_token=ADTGLAOZ2KHZMMPL7IFARS3Q3R5PBA5CNFSM4KBQEKO2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEH5DLZA#issuecomment-570045924, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADTGLAPX7XZPOXIQDO5AFKTQ3R5PBANCNFSM4KBQEKOQ.

bmacfee commented 4 years ago

Hi Lukas,

On an HP04:

Heat Mode: temperature range: Off - 37C Cool Mode: no range - it's just cool mode.

I was able to get this started in debug mode:

MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-02T18:37:39.000Z","mode-reason":"LAPP","state-reason":"MODE","rssi":"-55","channel":"6","fqhp":"106272","fghp":"0","product-state":{"fpwr":"ON","auto":"ON","oscs":"ON","oson":"ON","nmod":"OFF","rhtm":"ON","fnst":"FAN","ercd":"11E1","wacd":"NONE","nmdv":"0004","fnsp":"AUTO","bril":"0002","corf":"ON","cflr":"0091","hflr":"0091","cflt":"CARF","hflt":"GHEP","sltm":"OFF","osal":"0005","osau":"0355","ancp":"CUST","hmod":"OFF","hmax":"2942","tilt":"OK","hsta":"OFF","psta":"CLNG","fdir":"OFF"},"scheduler":{"srsc":"000000005e0d4922","dstv":"0001","tzid":"0001"}}

MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-02T18:37:39.000Z","data":{"tact":"2938","hact":"0046","pm25":"0040","pm10":"0029","va10":"0005","noxl":"0000","p25r":"0036","p10r":"0038","sltm":"OFF"}}

I then get a variety of errors and Homebridge shuts down.

lukasroegner commented 4 years ago

Update: latest version contains correct maximum temperature.

@bmacfee Can you provide the error that is displayed?

@jcvignes You can install via npm install -g https://github.com/lukasroegner/homebridge-dyson-pure-cool.git#development

lukasroegner commented 4 years ago

@jcvignes @bmacfee Can you also clarify how the heating mode works? Is it independent from the fan mode? DP04 for example has the modes "off", "auto" (automatic fan speed and device enables/disables fan by itself), "on" (explicit fan speed set by user). How does the heating work with those modes?

bmacfee commented 4 years ago

@lukasroegner Here's the full log in Terminal of the sign-in and errors (I pulled out the serial number and IP address of the unit, though - if you need those let me know):

[1/2/2020, 2:37:39 PM] [DysonPureCoolPlatform] Signed in. [1/2/2020, 2:37:39 PM] [DysonPureCoolPlatform] XXX-CA-XXXXXXXX - MQTT connection requested for XXX.XXX.XX.XX. [1/2/2020, 2:37:39 PM] [DysonPureCoolPlatform] Got devices from the Dyson API. [1/2/2020, 2:37:40 PM] [DysonPureCoolPlatform] XXX-CA-XXXXXXXX - MQTT connection established. [1/2/2020, 2:37:40 PM] [DysonPureCoolPlatform] XXX-CA-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-02T18:37:39.000Z","mode-reason":"LAPP","state-reason":"MODE","rssi":"-55","channel":"6","fqhp":"106272","fghp":"0","product-state":{"fpwr":"ON","auto":"ON","oscs":"ON","oson":"ON","nmod":"OFF","rhtm":"ON","fnst":"FAN","ercd":"11E1","wacd":"NONE","nmdv":"0004","fnsp":"AUTO","bril":"0002","corf":"ON","cflr":"0091","hflr":"0091","cflt":"CARF","hflt":"GHEP","sltm":"OFF","osal":"0005","osau":"0355","ancp":"CUST","hmod":"OFF","hmax":"2942","tilt":"OK","hsta":"OFF","psta":"CLNG","fdir":"OFF"},"scheduler":{"srsc":"000000005e0d4922","dstv":"0001","tzid":"0001"}} [1/2/2020, 2:37:40 PM] [DysonPureCoolPlatform] XXX-CA-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-02T18:37:39.000Z","data":{"tact":"2938","hact":"0046","pm25":"0040","pm10":"0029","va10":"0005","noxl":"0000","p25r":"0036","p10r":"0038","sltm":"OFF"}} [1/2/2020, 2:37:40 PM] ReferenceError: temperatureService is not defined at MqttClient. (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/src/dyson-pure-hot-cool-device.js:251:17) at MqttClient.emit (events.js:210:5) at MqttClient._handlePublish (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/mqtt/lib/client.js:940:12) at MqttClient._handlePacket (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/mqtt/lib/client.js:305:12) at work (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/mqtt/lib/client.js:261:12) at Writable.writable._write (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/mqtt/lib/client.js:271:5) at doWrite (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/readable-stream/lib/_stream_writable.js:428:64) at writeOrBuffer (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/readable-stream/lib/_stream_writable.js:417:5) at Writable.write (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/node_modules/readable-stream/lib/_stream_writable.js:334:11) at Socket.ondata (_stream_readable.js:727:22) at Socket.emit (events.js:210:5) at addChunk (_stream_readable.js:309:12) at readableAddChunk (_stream_readable.js:290:11) at Socket.Readable.push (_stream_readable.js:224:10) at TCP.onStreamRead (internal/stream_base_commons.js:182:23) [1/2/2020, 2:37:40 PM] Got SIGTERM, shutting down Homebridge... [1/2/2020, 2:37:40 PM] ReferenceError: devices is not defined at API. (/usr/local/lib/node_modules/homebridge-dyson-pure-cool/src/dyson-pure-cool-platform.js:44:28) at API.emit (events.js:210:5) at process. (/usr/local/lib/node_modules/homebridge/lib/cli.js:48:19) at process.emit (events.js:210:5)

bmacfee commented 4 years ago

@lukasroegner On the heating mode and the fan, the heating mode is independent from the fan mode. The fan can be set from Off to 10, and the heating mode is set separate from that. There is an Auto setting, which adjusts the fan based on (1) purification required and (2) the Heating required. So, if the air is considered Poor and the machine is in Auto, it will automatically jack up the fan to suck in more air. If the temperature drops below the pre-defined level, it also will increase the fan to heat to the temperature set. I'm attaching a screenshot of the app and how I have it set right now. It shows the controls available.

IMG_94900F39ADE1-1

@jcvignes @bmacfee Can you also clarify how the heating mode works? Is it independent from the fan mode? DP04 for example has the modes "off", "auto" (automatic fan speed and device enables/disables fan by itself), "on" (explicit fan speed set by user). How does the heating work with those modes?

lukasroegner commented 4 years ago

@bmacfee The error from the logs is fixed now. Homebridge should no longer exit.

Regarding the heating mode: OK, so the AUTO setting is shared by the fan and the heater part of the device...we have to check in the coming iterations of this integration how to implemented it in HomeKit.

realdannys commented 4 years ago

I got mine working with - https://www.npmjs.com/package/homebridge-dyson-pure-cool

Not sure if we can improve on that implementation in anyway? It seems to work fine though sometimes if you setup a scene which sends multiple commands at once it can get a bit confused.

It's displayed as, a fan - with a slider to do speed, 0-100% in 10% increments (which match speed 1 to 10 on the machine), it also has a oscillation option on the fan, which turns the oscillator on (weirdly I can't get this to work with Siri even though it's an option built right in with Homekit!) Then it has the heat mode which has the temperature range and an on/off switch which turns the heat on/off. Then simple on/off switches for Night Mode, Auto mode, Jet Focus - and it provides all the sensors for air quality. It supplies them as one tile which you can separate if you want. I noticed the fan option has a filter one it but mine read 100%, i'm not sure if this info is available from the API because my filter isn't 100% so it probably should be showing it correctly here.

PedroRA561 commented 4 years ago

Hello Lukas,

i am using HOOBS and cant seam to be able to install the development version. When will you be merging the current development into prod ?

lukasroegner commented 4 years ago

@PedroRA561 As soon as implementation is finished, which is not the case.

@realdannys I assume you mean https://github.com/joe-ng/homebridge-dyson-link? I'm trying to implement the HP02 and HP04 as a cooler/heater device instead of a fan. This type of accessory supports all the required characteristics.

@bmacfee I hope to finish the final implementation soon.

realdannys commented 4 years ago

@realdannys I assume you mean https://github.com/joe-ng/homebridge-dyson-link? I'm trying to implement the HP02 and HP04 as a cooler/heater device instead of a fan. This type of accessory supports all the required characteristics.

Sorry yes, I just realised I linked to your project! It works well but the niggles for me would be that sending 3-4 different settings at once via a scene is unreliable (as I say, it never seems to reliably turn the Jet Focus switch off when you ask it to) - also if it is at all possible, showing the filter level would be amazing.

lukasroegner commented 4 years ago

I went through the docs of the HeaterCoolerService and the ThermostatService for HomeKit. I can see two ways of implementing the HP02 and HP04:

One air purifier accessory and a separate thermostat The air purifier would work exactly like the one implemented for the other device. The thermostat can be set to "Off" or "Heat" and you can set the target temperature. The logic for heating is completely separate from the air purifier, as already mentioned

On the heating mode and the fan, the heating mode is independent from the fan mode.

A combined heater/cooler accessory That would mean we have to think about the logic for the different modes: A heater/cooler as defined by HomeKit can have "Off", "Auto", "Heat" and "Cool" target modes. This would have to be mapped to the settings "Off", "Auto" and "Manual" (air purifier), and "Heating On", "Heating Off" (heat modes).

The first solution could me implemented really fast, the second one could be more convenient. What do you guys think?

jcvignes commented 4 years ago

I like the first option, it gets us where we want to be… I don't know about others but I'm in Europe so Heater/Thermostat is the one that I will need most in the coming months. Maybe it can be revisited later? :)

jcvignes commented 4 years ago

and Apologies, I was away for a few days so I couldn't help with the debugging. Is there something I can do to help now?

lukasroegner commented 4 years ago

New version on the development branch. As this implementation breaks the previous one, please

The HP02 and HP04 show up as an air purifier. Additionally, a thermostat is shown where you can set heating to ON/OFF, set the target temperature and read the current temperature.

jcvignes commented 4 years ago

Congrats Lukas, it works like a charm!!

Two nitpicks:

Thanks and congrats again! JC

lukasroegner commented 4 years ago

Hi @jcvignes,

The first one looks like an issue. Can you start homebridge in debug mode (argument -D), change the fan speed and send me the log of of this action?

The second one is intended. As far as I understood, the heat mode can be changed independently (ON or OFF) from the actual state of the device. Is that correct?

Best regards Lukas

jcvignes commented 4 years ago

[23/01/2020 à 01:25:44] [DysonPureCoolPlatform] A1A-EU-MAA3195A - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-23T00:25:42.000Z","mode-reason":"NONE","state-reason":"MODE","rssi":"-41","channel":"4","fqhp":"100912","fghp":"0","product-state":{"fpwr":"ON","auto":"OFF","oscs":"OFF","oson":"OFF","nmod":"OFF","rhtm":"ON","fnst":"FAN","ercd":"11E1","wacd":"NONE","nmdv":"0004","fnsp":"0001","bril":"0002","corf":"ON","cflr":"0099","hflr":"0099","cflt":"CARF","hflt":"GHEP","sltm":"OFF","osal":"0200","osau":"0200","ancp":"CUST","hmod":"HEAT","hmax":"2970","tilt":"OK","hsta":"HEAT","psta":"OFF","fdir":"ON"},"scheduler":{"srsc":"0000000000000000","dstv":"0000","tzid":"0001"}}

Interestingly, the Dyson app shows the fan at 1, but I still believe it’s more noisy (more powerful?) than when I use the app alone…

Also, when I turn the fan on (in homekit) even though the gradiant is very low, it shows as « A » (automatic) in the Dyson app.

Hope this helps… JC

Le 22 janv. 2020 à 09:09, Lukas Rögner notifications@github.com a écrit :

-D)

lukasroegner commented 4 years ago

You can see the fan speed in the MQTT message: "fnsp":"0001", in this case it is 1 of 10. If you think that the rotation speed is not correct in the home app, you can easily start homebridge in debug mode, change the settings in the Home app or the Dyson app and observe changes in the MQTT messages.

alexindigo commented 4 years ago

Report on HP02:

It's presented as cooling device, no heating options. There is separate widget that shows temperature, but doesn't really allows to control it. There is nameless button, that tries to enable heating mode, but it keeps switching back on. (And I can't adjust temperature either).

Video: https://c.ia.gs/jkunBKRy

Debug logs:

[1/26/2020, 2:50:21 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - set TargetHeatingCoolingState to 1: {"hmod":"ON"}
[1/26/2020, 2:50:21 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-26T22:50:21.000Z","mode-reason":"","state-reason":"MODE","product-state":{"fmod":["AUTO","AUTO"],"fnst":["OFF","OFF"],"fnsp":["AUTO","AUTO"],"qtar":["0003","0003"],"oson":["OFF","OFF"],"rhtm":["ON","ON"],"filf":["2899","2899"],"ercd":["NONE","NONE"],"nmod":["OFF","OFF"],"wacd":["NONE","NONE"],"hmod":["OFF","OFF"],"hmax":["2963","2963"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:50:22 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - set TargetHeatingCoolingState to 0: {"hmod":"OFF"}
[1/26/2020, 2:50:22 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-26T22:50:22.000Z","mode-reason":"","state-reason":"MODE","product-state":{"fmod":["AUTO","AUTO"],"fnst":["OFF","OFF"],"fnsp":["AUTO","AUTO"],"qtar":["0003","0003"],"oson":["OFF","OFF"],"rhtm":["ON","ON"],"filf":["2899","2899"],"ercd":["NONE","NONE"],"nmod":["OFF","OFF"],"wacd":["NONE","NONE"],"hmod":["OFF","OFF"],"hmax":["2963","2963"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}

This is logs for when I enabled heating mode from the Dyson app:

[1/26/2020, 2:56:12 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-26T22:56:12.000Z","mode-reason":"LAPP","state-reason":"MODE","product-state":{"fmod":["AUTO","AUTO"],"fnst":["OFF","OFF"],"fnsp":["AUTO","AUTO"],"qtar":["0003","0003"],"oson":["OFF","OFF"],"rhtm":["ON","ON"],"filf":["2899","2899"],"ercd":["NONE","NONE"],"nmod":["OFF","OFF"],"wacd":["NONE","NONE"],"hmod":["OFF","HEAT"],"hmax":["2963","2965"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:56:13 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-26T22:56:13.000Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-27","product-state":{"fmod":"AUTO","fnst":"OFF","fnsp":"AUTO","qtar":"0003","oson":"OFF","rhtm":"ON","filf":"2899","ercd":"NONE","nmod":"OFF","wacd":"NONE","hmod":"HEAT","hmax":"2965","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:56:13 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-26T22:56:13.001Z","data":{"tact":"2961","hact":"0059","pact":"0002","vact":"0000","sltm":"OFF"}}
[1/26/2020, 2:56:23 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-26T22:56:23.000Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-27","product-state":{"fmod":"AUTO","fnst":"OFF","fnsp":"AUTO","qtar":"0003","oson":"OFF","rhtm":"ON","filf":"2899","ercd":"NONE","nmod":"OFF","wacd":"NONE","hmod":"HEAT","hmax":"2965","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:56:23 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-26T22:56:23.001Z","data":{"tact":"2961","hact":"0059","pact":"0002","vact":"0000","sltm":"OFF"}}
[1/26/2020, 2:56:30 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-26T22:56:30.000Z","mode-reason":"LAPP","state-reason":"MODE","product-state":{"fmod":["AUTO","AUTO"],"fnst":["OFF","FAN"],"fnsp":["AUTO","AUTO"],"qtar":["0003","0003"],"oson":["OFF","OFF"],"rhtm":["ON","ON"],"filf":["2899","2899"],"ercd":["NONE","NONE"],"nmod":["OFF","OFF"],"wacd":["NONE","NONE"],"hmod":["HEAT","HEAT"],"hmax":["2965","2965"],"hsta":["OFF","HEAT"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:56:30 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-26T22:56:30.001Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-27","product-state":{"fmod":"AUTO","fnst":"FAN","fnsp":"AUTO","qtar":"0003","oson":"OFF","rhtm":"ON","filf":"2899","ercd":"NONE","nmod":"OFF","wacd":"NONE","hmod":"HEAT","hmax":"2965","hsta":"HEAT","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:56:30 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-26T22:56:30.002Z","data":{"tact":"2960","hact":"0059","pact":"0002","vact":"0000","sltm":"OFF"}}

And looks like Oscillation keeps turn off, this is the logs when I enabled it from the Dyson app:

[1/26/2020, 2:58:09 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-26T22:58:09.000Z","mode-reason":"LAPP","state-reason":"MODE","product-state":{"fmod":["AUTO","AUTO"],"fnst":["FAN","FAN"],"fnsp":["AUTO","AUTO"],"qtar":["0003","0003"],"oson":["OFF","ON"],"rhtm":["ON","ON"],"filf":["2898","2898"],"ercd":["NONE","NONE"],"nmod":["OFF","OFF"],"wacd":["NONE","NONE"],"hmod":["OFF","OFF"],"hmax":["2965","2965"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:58:09 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-26T22:58:09.001Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-27","product-state":{"fmod":"AUTO","fnst":"FAN","fnsp":"AUTO","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2898","ercd":"NONE","nmod":"OFF","wacd":"NONE","hmod":"OFF","hmax":"2965","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:58:09 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-26T22:58:09.002Z","data":{"tact":"2957","hact":"0060","pact":"0002","vact":"INIT","sltm":"OFF"}}
[1/26/2020, 2:58:23 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-26T22:58:23.000Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-30","product-state":{"fmod":"AUTO","fnst":"FAN","fnsp":"AUTO","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2898","ercd":"NONE","nmod":"OFF","wacd":"NONE","hmod":"OFF","hmax":"2965","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/26/2020, 2:58:23 PM] [DysonPureCoolPlatform] PE7-US-XXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-26T22:58:23.001Z","data":{"tact":"2957","hact":"0061","pact":"0002","vact":"INIT","sltm":"OFF"}}

Also temperature is shown in Fahrenheit, regardless of units set to Celsius by default, when I switch it back to Fahrenheit nothing changes and when I switch to Celsius one more time, again nothing changes.

Screenshot: F° vs C°

Let me know if you need more data.

Thank you.

lukasroegner commented 4 years ago

@alexindigo Thank you so much for the feedback, the logs are exactly what I need.

It's presented as cooling device, no heating options.

That intentional, see comment above. As owners of the HP02 or HP04 told me, the heating (ON/OFF) can be set independently of the operation mode of the Dyson itself, thus, a CoolerHeaterService could not represent all the states the Dyson app can.

There is separate widget that shows temperature, but doesn't really allows to control it. There is nameless button, that tries to enable heating mode, but it keeps switching back on. (And I can't adjust temperature either).

You are right, due to a bug that is fixed now, the temperature could not be set. The plugin did not send the correct command to enable heat (HEAT is correct, ON is wrong). Now, you can control the temperature if heating is enabled. The button is "nameless" due to a bug in the Home app. I have thermostats with native HomeKit support, that show the same "nameless" button. I think the buttons are missing an icon. I home that gets fixed in the next iOS update.

And looks like Oscillation keeps turn off,...

At which action does oscillation turn off? As I can see from the logs, the oscillation in HP02 is made in the same manner as for the DP02 and TP01, which seem to work fine.

Also temperature is shown in Fahrenheit, regardless of units set to Celsius by default, when I switch it back to Fahrenheit nothing changes and when I switch to Celsius one more time, again nothing changes.

That is strange, I didn't see this behavior yet. I assume that Fahrenheit is the default unit in your region? It could be that the Home app automatically displays in Fahrenheit...I just provide the Celsius value to HomeKit, so it must be an automatic calculation. Is there a global option in HomeKit to choose between Fahrenheit and Celsius?

The "hardware display" characteristic is a required characteristic for thermostats, however, it is not implemented in the plugin, so that shouldn't change anything.

alexindigo commented 4 years ago

@lukasroegner makes sense, and especially with HP02 it's not heater/cooler, since it can't auto switch between cooling and heating. Not sure about HP04 though.

I'll check updated version, thank you. As for the button labels, I do see button labels on the similar buttons in dyson-link package. Screenshot

For oscillation, it just happened by itself, I didn't press anything, was just sitting there, looking at the app and thinking something :) Maybe it was some MQTT echo :) Speaking of oscillation, in dyson-link they made it into a nice widget – screenshot, still not sure how that widgets and sub-widgets are controlled though.

Yes, I'm in US and all the defaults is for Fahrenheit, weird if it'd be Homekit bug :)

The "hardware display" characteristic is a required characteristic for thermostats, however, it is not implemented in the plugin, so that shouldn't change anything.

Looks like TemperatureDisplayUnits looks like it can have 0 or 1 values, not sure what they represent though.

By the way, in the comment above you mentioned that you read some docs, what are those docs and how can one read them? :)

Thank you.

lukasroegner commented 4 years ago

As for the button labels, I do see button labels on the similar buttons in dyson-link package.

The homebridge-dyson-link project uses a CoolerHeaterService instead of the ThermostatService...we can try that, too. I would like to close this issue first (make sure, everything works for HP02 and HP04, then merge to master and publish on NPM), we can refine the implementation afterwards.

in dyson-link they made it into a nice widget – screenshot, still not sure how that widgets and sub-widgets are controlled though.

If you mean the button arrangement of the air purifier: a HomeKit bug. The on/off button should be a small round one, not the slider that is currently being displayed. In an earlier iOS 13 Version, it has been displayed correctly (see https://github.com/lukasroegner/homebridge-dyson-pure-cool/issues/6#issuecomment-525822185).

Yes, I'm in US and all the defaults is for Fahrenheit, weird if it'd be Homekit bug :)

I found a post on Reddit explaining the behavior: the Home app uses the unit that you set under Settings app > General > Region & Language > Temperature unit

By the way, in the comment above you mentioned that you read some docs, what are those docs and how can one read them? :)

A popular homebridge developer shared a document that contained a documentation for HomeKit Hardware developers. As the SDK has been open-sourced now, you can just take a look at the source code.

I usually browse through the source code of hap-nodejs (the generated ts files) and also use the HomeKit Accessory Simulator app from Apple.

realdannys commented 4 years ago

The Dyson devices aren't cooling devices at all, despite the name. It's either a heater, or a fan which moves air - it can't cool anything, so doesn't make sense to have any sort of cooling options.

alexindigo commented 4 years ago

@lukasroegner

New change is working, I can control temperature of the heater now.

The homebridge-dyson-link project uses a CoolerHeaterService instead of the ThermostatService...we can try that, too. I would like to close this issue first (make sure, everything works for HP02 and HP04, then merge to master and publish on NPM), we can refine the implementation afterwards.

For sure, thanks a lot for doing it. And I don't think CoolerHeaterService is semantically correct here.

If you mean the button arrangement of the air purifier: a HomeKit bug. The on/off button should be a small round one, not the slider that is currently being displayed. In an earlier iOS 13 Version, it has been displayed correctly (see #6 (comment)).

That screenshots look much sweeter than what we have now, looks like iOS is full of bugs. Thanks for the details.

I found a post on Reddit explaining the behavior: the Home app uses the unit that you set under Settings app > General > Region & Language > Temperature unit

To be clear I do prefer Fahrenheit and I do like that it shows stuff in F° right out of the box for me, it's just weird that it says Celsius underneath :) Maybe something we can specify in the config.

This is the logs for when I switch from C° to F°:

  EventedHTTPServer [::ffff:10.13.196.118] HTTP request: /characteristics +4s
  HAPServer [CC:22:3D:E3:CE:30] HAP Request: PUT /characteristics +0ms
  Accessory [Homebridge] Processing characteristic set: [{"aid":30,"iid":14,"value":1}] +1ms
  Accessory [Homebridge] Setting Characteristic "Temperature Display Units" to value 1 +0ms
  EventedHTTPServer [::ffff:10.13.220.5] Sending HTTP event '30.14' with data: {"characteristics":[{"aid":30,"iid":14,"value":1}]} +0ms
  EventedHTTPServer [::ffff:10.13.196.118] Muting event '30.14' notification for this connection since it originated here. +0ms
  EventedHTTPServer [::ffff:10.13.196.118] HTTP Response is finished +0ms

A popular homebridge developer shared a document that contained a documentation for HomeKit Hardware developers. As the SDK has been open-sourced now, you can just take a look at the source code. I usually browse through the source code of hap-nodejs (the generated ts files) and also use the HomeKit Accessory Simulator app from Apple.

Yeah, this is what I was doing, the source code part, and I'll check HomeKit Accessory Simulator app, thank you.

Also, found another bug with Auto mode, in the native app, when I change speed of the fan, it turns off auto mode, and when I enable auto mode, it resets fan speed. In the current version I noticed that two things behave seemigly independent of one another.

Here are the logs for when I'm doing it in the native app:

While in auto mode, changing fan speed:

[1/28/2020, 12:05:10 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-28T08:05:10.000Z","mode-reason":"LAPP","state-reason":"MODE","product-state":{"fmod":["AUTO","FAN"],"fnst":["FAN","FAN"],"fnsp":["AUTO","0002"],"qtar":["0003","0003"],"oson":["ON","ON"],"rhtm":["ON","ON"],"filf":["2877","2877"],"ercd":["NONE","NONE"],"nmod":["ON","ON"],"wacd":["NONE","NONE"],"hmod":["OFF","OFF"],"hmax":["2963","2963"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
  EventedHTTPServer [::ffff:10.13.220.5] Sending HTTP event '29.12' with data: {"characteristics":[{"aid":29,"iid":12,"value":0}]} +14s
  EventedHTTPServer [::ffff:10.13.196.118] Sending HTTP event '29.12' with data: {"characteristics":[{"aid":29,"iid":12,"value":0}]} +1ms
[1/28/2020, 12:05:11 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-28T08:05:10.001Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-30","product-state":{"fmod":"FAN","fnst":"FAN","fnsp":"0002","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2877","ercd":"NONE","nmod":"ON","wacd":"NONE","hmod":"OFF","hmax":"2963","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:11 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-28T08:05:10.002Z","data":{"tact":"2945","hact":"0060","pact":"0003","vact":"INIT","sltm":"OFF"}}
  EventedHTTPServer [::ffff:10.13.220.5] Sending HTTP event '30.12' with data: {"characteristics":[{"aid":30,"iid":12,"value":21.5}]} +301ms
  EventedHTTPServer [::ffff:10.13.196.118] Sending HTTP event '30.12' with data: {"characteristics":[{"aid":30,"iid":12,"value":21.5}]} +1ms
  EventedHTTPServer [::ffff:10.13.220.5] Sending HTTP event '31.10' with data: {"characteristics":[{"aid":31,"iid":10,"value":60}]} +1ms
  EventedHTTPServer [::ffff:10.13.196.118] Sending HTTP event '31.10' with data: {"characteristics":[{"aid":31,"iid":10,"value":60}]} +0ms
[1/28/2020, 12:05:11 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-28T08:05:10.003Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-27","product-state":{"fmod":"FAN","fnst":"FAN","fnsp":"0002","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2877","ercd":"NONE","nmod":"ON","wacd":"NONE","hmod":"OFF","hmax":"2963","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:11 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-28T08:05:11.000Z","data":{"tact":"2945","hact":"0060","pact":"0003","vact":"INIT","sltm":"OFF"}}
[1/28/2020, 12:05:16 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-28T08:05:16.000Z","mode-reason":"LAPP","state-reason":"MODE","product-state":{"fmod":["FAN","FAN"],"fnst":["FAN","FAN"],"fnsp":["0002","0002"],"qtar":["0003","0003"],"oson":["ON","ON"],"rhtm":["ON","ON"],"filf":["2877","2877"],"ercd":["NONE","NONE"],"nmod":["ON","ON"],"wacd":["NONE","NONE"],"hmod":["OFF","OFF"],"hmax":["2963","2963"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:16 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-28T08:05:16.001Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-27","product-state":{"fmod":"FAN","fnst":"FAN","fnsp":"0002","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2877","ercd":"NONE","nmod":"ON","wacd":"NONE","hmod":"OFF","hmax":"2963","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:16 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-28T08:05:16.002Z","data":{"tact":"2945","hact":"0060","pact":"0003","vact":"INIT","sltm":"OFF"}}
[1/28/2020, 12:05:16 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-28T08:05:16.003Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-30","product-state":{"fmod":"FAN","fnst":"FAN","fnsp":"0002","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2877","ercd":"NONE","nmod":"ON","wacd":"NONE","hmod":"OFF","hmax":"2963","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:16 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-28T08:05:16.004Z","data":{"tact":"2945","hact":"0060","pact":"0003","vact":"INIT","sltm":"OFF"}}

And this is when I enable auto mode back:

[1/28/2020, 12:05:47 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"STATE-CHANGE","time":"2020-01-28T08:05:46.000Z","mode-reason":"LAPP","state-reason":"MODE","product-state":{"fmod":["FAN","AUTO"],"fnst":["FAN","FAN"],"fnsp":["0002","AUTO"],"qtar":["0003","0003"],"oson":["ON","ON"],"rhtm":["ON","ON"],"filf":["2877","2877"],"ercd":["NONE","NONE"],"nmod":["ON","ON"],"wacd":["NONE","NONE"],"hmod":["OFF","OFF"],"hmax":["2963","2963"],"hsta":["OFF","OFF"],"ffoc":["ON","ON"],"tilt":["OK","OK"]},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
  EventedHTTPServer [::ffff:10.13.220.5] Sending HTTP event '29.12' with data: {"characteristics":[{"aid":29,"iid":12,"value":1}]} +36s
  EventedHTTPServer [::ffff:10.13.196.118] Sending HTTP event '29.12' with data: {"characteristics":[{"aid":29,"iid":12,"value":1}]} +1ms
[1/28/2020, 12:05:47 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-28T08:05:47.000Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-30","product-state":{"fmod":"AUTO","fnst":"FAN","fnsp":"AUTO","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2877","ercd":"NONE","nmod":"ON","wacd":"NONE","hmod":"OFF","hmax":"2963","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:47 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-28T08:05:47.001Z","data":{"tact":"2945","hact":"0060","pact":"0003","vact":"INIT","sltm":"OFF"}}
[1/28/2020, 12:05:47 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"CURRENT-STATE","time":"2020-01-28T08:05:47.002Z","mode-reason":"LAPP","state-reason":"MODE","dial":"OFF","rssi":"-34","product-state":{"fmod":"AUTO","fnst":"FAN","fnsp":"AUTO","qtar":"0003","oson":"ON","rhtm":"ON","filf":"2877","ercd":"NONE","nmod":"ON","wacd":"NONE","hmod":"OFF","hmax":"2963","hsta":"OFF","ffoc":"ON","tilt":"OK"},"scheduler":{"srsc":"cdfb","dstv":"0001","tzid":"0001"}}
[1/28/2020, 12:05:47 AM] [DysonPureCoolPlatform] PE7-US-XXXXXXXX - MQTT message received: {"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2020-01-28T08:05:47.003Z","data":{"tact":"2945","hact":"0060","pact":"0003","vact":"INIT","sltm":"OFF"}}

And thanks again for all the work.

PS. @realdannys moving air produces cooling effect due to increased heat exchange and it has "Cool" right in the name. :)

realdannys commented 4 years ago

PS. @realdannys moving air produces cooling effect due to increased heat exchange and it has "Cool" right in the name. :)

It's still not a cooling device - it's just a fan. Hence it should be a fan in Homekit. It can't lower temperature like an AC. It can heat and blow air around.

lukasroegner commented 4 years ago

To end this discussion: it's an air purifier and it is exposed as air purifier. The HP02 and HP04 devices have an additional separate thermostat accessory exposed which manages the heating mode (on/off) and the target temperature.

realdannys commented 4 years ago

To end this discussion: it's an air purifier and it is exposed as air purifier. The HP02 and HP04 devices have an additional separate thermostat accessory exposed which manages the heating mode (on/off) and the target temperature.

@lukasroegner do you have a screenshot of how this appears in Homekit now? I'm wondering how it differs if it at all the homebridge-dyson-link project. Were you able to get filter quality sent from the API to the purifier device? It appears using homebridge-dyson-link but it's always at 100%.

lukasroegner commented 4 years ago

@realdannys For screenshots see https://github.com/lukasroegner/homebridge-dyson-pure-cool/issues/6#issuecomment-525822185. The homebridge-dyson-link plugin exposes the devices as fans. Filter level is supported and working in my plugin.

lukasroegner commented 4 years ago

@alexindigo Can you tell me the issue with the plugin when setting the rotation speed while the device is in AUTO mode (https://github.com/lukasroegner/homebridge-dyson-pure-cool/issues/31#issuecomment-579131971)?

lukasroegner commented 4 years ago

Merged to master. New version on NPM. If you notice errors or unexpected behavior, please open a new issue.

jcvignes commented 4 years ago

I upgraded but it's stuck in "Activation" and nothing happens… The Tail commands says nothing :( and the debug log is empty too… I just installed the plugin using npm install -g https://github.com/lukasroegner/homebridge-dyson-pure-cool.git what am I missing? Thanks!