Integrate Dyson Pure Cool Link

Hi,
you get the messages, the sitemap seems to be okay.
So what about the items and rules files? And is there something in the error log?
At the moment I have no specific idea what is going wrong.

Hi,
I took the files (just copied them over) from the script. One more information: I have openhab 2.4 running. and i set python3.5 as default (running on debian).

Is it right when the rule-file got not modified (with the dyson-serial/name)?
here is the items file.

// Dyson Pure Cool Link Items

// REQUESTS
// 475//command
String Dyson475_Request “[%s]” {mqtt=">[dyson475:475/NN2-EU-HEA0325A/command:command:*:default]"}
// TOPIC
// 475//status/current
String Dyson475_Topic_Status_Current “[%s]” {mqtt="<[dyson475:475/NN2-EU-HEA0325A/status/current:state:default]"}

//VIRTUAL ITEMS
Number Dyson475_Tact “Temperature [%.1f °C]”
Number Dyson475_Hact “Humidity [%.0f %%]”
Number Dyson475_Pact “P-Value [%d]”
Number Dyson475_Vact “V-Value [%d]”
Number Dyson475_Fmod “Mode”
Switch Dyson475_Rhtm “Contin. Measurement”
Number Dyson475_Fnsp “Fan Speed [%d]”
Number Dyson475_Qtar “Quality Target”
Switch Dyson475_Oson “Turning”
Switch Dyson475_Nmod “Night Mode”
Number Dyson475_Filf “Remaining Filter Hours”
Number Dyson475_Fnst “Fan Activity [%d]”

I just have the mqtt 1 binding installed, do i need something else? thanks again

one update: i looked into the logs, i see:

[INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model ‘dyson475.rules’, using it anyway:
The import ‘java.text.SimpleDateFormat’ is never used.

is this relevant?

hi,
and one more update: i tried a different java - the zulu-version.
when starting i got gollowing error, the beheaviour stays the same.

2019-01-10 17:21:33.625 [ERROR] [xtext.validation.CompositeEValidator] - Error executing EValidator
java.util.ConcurrentModificationException: null
at org.eclipse.emf.common.util.AbstractEList$EIterator.checkModCount(AbstractEList.java:758) ~[?:?]
at org.eclipse.emf.common.util.AbstractEList$EIterator.doNext(AbstractEList.java:712) ~[?:?]
at org.eclipse.emf.common.util.AbstractEList$EIterator.next(AbstractEList.java:692) ~[?:?]
at com.google.common.collect.Iterators$7.computeNext(Iterators.java:651) ~[22:com.google.guava:18.0.0]
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) ~[22:com.google.guava:18.0.0]
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) ~[22:com.google.guava:18.0.0]
at java.lang.Iterable.forEach(Iterable.java:74) ~[?:?]
at org.eclipse.xtext.xbase.validation.UniqueClassNameValidator.checkUniqueName(UniqueClassNameValidator.java:76) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
at org.eclipse.xtext.validation.AbstractDeclarativeValidator$MethodWrapper.invoke(AbstractDeclarativeValidator.java:118) ~[154:org.eclipse.xtext:2.14.0.v20180522-1821]
at org.eclipse.xtext.validation.AbstractDeclarativeValidator.internalValidate(AbstractDeclarativeValidator.java:312) ~[154:org.eclipse.xtext:2.14.0.v20180522-1821]
at org.eclipse.xtext.validation.AbstractInjectableValidator.validate(AbstractInjectableValidator.java:71) ~[154:org.eclipse.xtext:2.14.0.v20180522-1821]
at org.eclipse.xtext.validation.CompositeEValidator.validate(CompositeEValidator.java:151) [154:org.eclipse.xtext:2.14.0.v20180522-1821]
at org.eclipse.emf.ecore.util.Diagnostician.doValidate(Diagnostician.java:171) [66:org.eclipse.emf.ecore:2.12.0.v20160420-0247]
at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:158) [66:org.eclipse.emf.ecore:2.12.0.v20160420-0247]
at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:137) [66:org.eclipse.emf.ecore:2.12.0.v20160420-0247]
at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:108) [66:org.eclipse.emf.ecore:2.12.0.v20160420-0247]
at org.eclipse.smarthome.model.core.internal.ModelRepositoryImpl.validateModel(ModelRepositoryImpl.java:280) [128:org.eclipse.smarthome.model.core:0.10.0.oh240]
at org.eclipse.smarthome.model.core.internal.ModelRepositoryImpl.addOrRefreshModel(ModelRepositoryImpl.java:93) [128:org.eclipse.smarthome.model.core:0.10.0.oh240]
at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.checkFile(FolderObserver.java:227) [128:org.eclipse.smarthome.model.core:0.10.0.oh240]
at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.processIgnoredFiles(FolderObserver.java:137) [128:org.eclipse.smarthome.model.core:0.10.0.oh240]
at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.addModelParser(FolderObserver.java:85) [128:org.eclipse.smarthome.model.core:0.10.0.oh240]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]

i’m using openhab2.4, i did not find a possibility to install a lower version…

I just updated to 2.4 and experienced also some problems. On my configuration I got no values and can not command the dyson.
I try to get it working on my side first and then we will see if it was the same issue on your side.

Edit: I think it will take some days until I got time to have a look onto it.

hi,
i’m glad i am not the only one… no pressure :slight_smile:

I got it to work if I enable the mqtt1 binding again manualy after enabling the legacy bindings.
For the future I try to adapt my scripts to the “new” mqtt binding. At the moment I don’t know how long it will take until I got some spare time to work on it.

Has anybody made sense of the V and P values?
Curious if anybody has figured out what they mean and done anything useful with it

Any idea about the credentials for the new model of the HP04 (Pure Hot & Cool Link)?

This one has no SSID, because the setup use NFC or Bluetooth. So the sticker contains the MAC address as well as a two 4 digit number separated by a colon (1234:5678).

Neither hashed nor using them directly seems to work. But the new model still has an MQTT server running.

Any ideas?

I assume that V is for volatile and P for particle. So they are two different indicators how ‘dirty’ the air is.

You could try to log the network communication between the app and the air purifier. The old device only encryptes the communication towards the internet. If you are in the same Wifi, the app should communicate directly unencrypted to the air purifier.

I do have a tp04, a newer Pure Cool Link (dyson438).
The SSID was used as login name, with the new devices the login name is the full serial number (e.g. VS9-XX-YYYYYYYY). I still have no idea what the password is, so I had to sniff it.

But I have a different question: I’m running openhab 2.4. I added mqtt binding from openhab v.1 and jsonpath transformation 2.4, prepared the files and copied them into their directories… but even after a restart of openhab, I can’t find anything new in the GUI. Did I miss something?

Thank you in advance!

Thats what I eventually did, thanks

What do you mean by “anything new in the GUI”? The Paper UI or your sitemap?
I had to enable the legacy bindings in the addons.cfg to ensure the “old” mqtt binding is not deactivated every time after restart of openhab 2.4.

I switched to the new mqtt binding this weekend at home and try to adapt it to the repository within the next days.

I modified the script at github, it now uses the new mqtt binding.

Well, I’m not sure about how the device should “appear” in my openhab (e. g. Paper UI)… For my understanding, either it should just be there after copying the files or at least it should become discoverable. But neither this nor that happened.
Of course I enabled legacy bindings. I just re-checked, but it seems the old MQTT-binding keeps being enabled. So that should not be an issue.
As to the openhab.log, the item, rules and sitemap files are loaded without error.
In the event logs, I find the following 2 lines repeated:

[ome.event.ItemCommandEvent] - Item 'Dyson438_Request' received command {"msg":"REQUEST-CURRENT-STATE", "time":"2019-01-26T18:27:30.004Z"}
[vent.ItemStateChangedEvent] - Dyson438_Request changed from {"msg":"REQUEST-CURRENT-STATE", "time":"2019-01-26T18:27:00.005Z"} to {"msg":"REQUEST-CURRENT-STATE", "time":"2019-01-26T18:27:30.004Z"}

Great, I will immediately give it a try! :slight_smile:

I see you are using the Dyson 438, have you adapted the files for the Dyson 438 or just typed in 438 in the prepare script?

I modified the files at least as far as I was aware of it was necessary. I think i will have to do a little more finetuning later on, to be able to read all the data.
To be honest, did not use the preparation script, as it couldn’t manage to handle the serial number correctly (it just cutted of the first two parts and left over the last one). I just read what it wanted to do and modified the files manually.
And yes, of course you were right. In the Basic UI I found an acitve sitemap.

Ok, I opened up a new issue for the 438 and together we can try to bring in the 438 into the repo.
What’s the name ane which capabilities are implemented on the Dyson438?