Grizzelbee / ioBroker.dysonairpurifier

ioBroker Adapter to control to your dyson fan and air purifier devices such as Pure Cool, Hot & Cool and others.
MIT License
13 stars 7 forks source link

PH04 - wrong HCHO values #244

Closed git2206 closed 7 months ago

git2206 commented 8 months ago

Hallo,

Zuerst mal danke für den tollen Adapter! Was mir aufgefallen ist, dass einige Werte leider nicht ganz passen... VOC und NO2 liefern in der App andre Werte als im Adapter. Und bei Formaldehyd werden laut dyson App dreistellige Commawerte dargestellt... zB. 0.055... Laut App Doku ist alles über 0.500 sehr schlecht... Ihr Adapter liefert aber ganze Zahlen.. zb. 8 oder 17.... :) - Kann es sein das im Adapter da etwas mit der Umrechnung nicht passt..

Vielen Dank!

Mit freundlichen Grüßen Flo

Grizzelbee commented 8 months ago

Hallo Flo,

Deine Beobachtungen sind absolut korrekt. ;o) ... und ich muss mal ein bisschen drüber nachdenken, wie ich das löse.

Zur Erklärung: Die Sensoren liefern zum Teil andere Werte/Rohdaten als das was in der App angezeigt wird. Deshalb habe ich erst einmal alles einigermaßen "Roh" übernommen um das irgendwann einmal anzugehen, wenn (falls) mehr Informationen vorliegen. VOC: Der Sensor liefert Zahlen von 0 bis über hundert. Deshalb berechne ich den VOC-Index wie folgt:

        // VOC QualityIndex
        // 0-3: Good, 4-6: Medium, 7-8, Bad, >9: very Bad
        let VOCIndex = 0;
        if (message[row].va10 < 40) {
            VOCIndex = 0;
        } else if (message[row].va10 >= 40 && message[row].va10 < 70) {
            VOCIndex = 1;
        } else if (message[row].va10 >= 70 && message[row].va10 < 90) {
            VOCIndex = 2;
        } else if (message[row].va10 >= 90) {
            VOCIndex = 3;
        }

NO2 läuft analog - wenngleich da keine Zehner-Potenzen im Spiel sind. Da sollten die werte also eigentlich soweit passen.

        // NO2 QualityIndex
        // 0-3: Good, 4-6: Medium, 7-8, Bad, >9: very Bad
        let NO2Index = 0;
        if (message[row].noxl < 4) {
            NO2Index = 0;
        } else if (message[row].noxl >= 4 && message[row].noxl <= 6) {
            NO2Index = 1;
        } else if (message[row].noxl >= 7 && message[row].noxl <= 8) {
            NO2Index = 2;
        } else if (message[row].noxl >= 9) {
            NO2Index = 3;
        }

Und bei den PMs sind - wie ich gerade zufällig sehe - die PMxxR Werte die eigentlich richtigen.

Was die HCHO-Werte betrifft ... die habe ich eingebaut noch bevor dyson die in seiner App hatte. Deshalb - und weil ich selbst keinen Lüfter mit HCHO-Sensor habe - habe ich die Werte einfach so roh ausgegeben und auch noch keinen Index zu eingebaut. Wenn Du mich da mit Daten und Infos versorgen kannst, baue ich das gerne korrekt ein.

git2206 commented 8 months ago

HAllo,

Erst mal vielen Dank für deine Antowort. Ich habe mir heute den Code ein bißchen angesehen… Hab die Outputs mit der Dyson App verglichen… 100% bin ich nicht überzeugt, ob die Dyson App das richtig ausgibt.. :) Zuminstens beim NO2 Wert...

PM25 & PM10 Werte passen mit App überein.

HCHO (Formaldehyd) … du verwendest den Wert von „hcho“… leider stimmt das nicht… lauf APP sollte das der API Wert von „hchr“ sein… wer auhc immer sich diese Namensgebung einfallen hat lassen.. :) und diesen Wert einfach /1000 … dann stimmt es mit der Dyson App überein… Fix: dysonConstants.js hcho -> hchr ersetzen

VOC: Deine Annahme dürfte richtig sein.. den Wert (va10) muss man dann /10 nehmen. was mir nicht ganz klar ist, in der Dyson App dürften sie einfach falsch runden bzw gar nicht runden… sprich ein Wert von zB 2,8 wird immer als 2 angezeigt… :)

NO2: Da wird bei mir in der Dyson App bei mir immer 0 angezeigt… ich wür einmal sagen, dass der Wert von noxl stimmt und in der Dyson App falsch ist… oder es wird die selbe Berechnungsmethode wie bei VOC genommen… dann würde es den Effekt erklären…. hmm.. muss ich mal weiter beobachten und kann ich berichten…

Mit freundlichen Grüßen Flo

Am 10.01.2024 um 12:19 schrieb Grizzelbee @.***>:

Hallo Flo,

Deine Beobachtungen sind absolut korrekt. ;o) ... und ich muss mal ein bisschen drüber nachdenken, wie ich das löse.

Zur Erklärung: Die Sensoren liefern zum Teil andere Werte/Rohdaten als das was in der App angezeigt wird. Deshalb habe ich erst einmal alles einigermaßen "Roh" übernommen um das irgendwann einmal anzugehen, wenn (falls) mehr Informationen vorliegen. VOC: Der Sensor liefert Zahlen von 0 bis über hundert. Deshalb berechne ich den VOC-Index wie folgt:

    // VOC QualityIndex
    // 0-3: Good, 4-6: Medium, 7-8, Bad, >9: very Bad
    let VOCIndex = 0;
    if (message[row].va10 < 40) {
        VOCIndex = 0;
    } else if (message[row].va10 >= 40 && message[row].va10 < 70) {
        VOCIndex = 1;
    } else if (message[row].va10 >= 70 && message[row].va10 < 90) {
        VOCIndex = 2;
    } else if (message[row].va10 >= 90) {
        VOCIndex = 3;
    }

NO2 läuft analog - wenngleich da keine Zehner-Potenzen im Spiel sind. Da sollten die werte also eigentlich soweit passen.

    // NO2 QualityIndex
    // 0-3: Good, 4-6: Medium, 7-8, Bad, >9: very Bad
    let NO2Index = 0;
    if (message[row].noxl < 4) {
        NO2Index = 0;
    } else if (message[row].noxl >= 4 && message[row].noxl <= 6) {
        NO2Index = 1;
    } else if (message[row].noxl >= 7 && message[row].noxl <= 8) {
        NO2Index = 2;
    } else if (message[row].noxl >= 9) {
        NO2Index = 3;
    }

Und bei den PMs sind - wie ich gerade zufällig sehe - die PMxxR Werte die eigentlich richtigen.

Was die HCHO-Werte betrifft ... die habe ich eingebaut noch bevor dyson die in seiner App hatte. Deshalb - und weil ich selbst keinen Lüfter mit HCHO-Sensor habe - habe ich die Werte einfach so roh ausgegeben und auch noch keinen Indey zu eingebaut. Wenn Du mich da mit Daten und Infos versorgen kannst, baue ich das gerne korrekt ein.

— Reply to this email directly, view it on GitHub https://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/244#issuecomment-1884656507, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATLEB3EDSCJ4EEYJNMASDH3YNZ2LPAVCNFSM6AAAAABBRG75K6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOBUGY2TMNJQG4. You are receiving this because you authored the thread.

Grizzelbee commented 8 months ago

HCHO->HOCR 🤦

Oh! Mein! Gott! Das ergibt (mit dem Wissen von heute) sogar Sinn! Die Datenfelder, die auf R enden, sind die, die die App verwendet! Keine Ahnung wofür die anderen sind. Das weiß ich deshalb, weil aktuell neben einem meiner dysons eine Obstschale steht und die PM25R und PM10R Werte komplett am Anschlag sind, die von PM25 und PM10 sind aber im niedrigen dreistelligen Bereich. Insofern ist es nur konsequent wenn HCHR genutzt wird statt HCHO (btw: hcho ist die chemische Formel von Formaldehyd).

The HCHO Scale is as follows: 0.000-0.099 Good 0.100-0.299 Medium 0.300-0.499 Bad 0.500+ Very Bad

 MQTT message received: {
    "msg": "ENVIRONMENTAL-CURRENT-SENSOR-DATA",
    "time": "2022-07-12T13:26:36.000Z",
    "data": {
        "tact": "2964",
        "hact": "0058",
        "pm25": "0003",
        "pm10": "0002",
        "va10": "INIT",
        "noxl": "INIT",
        "p25r": "0005",
        "p10r": "0005",
        "hcho": "NONE",
        "hchr": "NONE",
        "sltm": "OFF"
    }
}

TODO:

Bei NOXL habe ich damals schon vermutet, dass es auf ein floor(NOXL/10) rausläuft. Da ich aber keine Infos zum Sensor oder irgendetwas habe, habe ich mich entschlossen die Rohwerte zu nutzen und die Skala einfach anzupassen.

git2206 commented 8 months ago

HAllo,

ja, hab ich auch erst beim 2. mal hinsehen gemerkt, dass die R Werte die richtigen sind… hab mich schon gefragt, was die ohne R bedeuten! :)

Ich hab das heute mal weiter beobachtet… und gestestet… so bekomme ich die selbe Werte wie in der Dyson App VOC: ist so wie ich geschrieben habe… value / 10… und dann gegen Null abrunden.. geht mit der Math.trunc() methode..

NO2: gleich wie VOC …value / 10 und dann gegen Null abrunden.. … das müsstet du auch anpassen… in der main.js createNO2(message, row, device) {^M // NO2 QualityIndex^M // 0-3: Good, 4-6: Medium, 7-8, Bad, >9: very Bad^M let NO2Index = 0;^M if (message[row].noxl < 40) {^M NO2Index = 0;^M } else if (message[row].noxl >= 40 && message[row].noxl < 70) {^M NO2Index = 1;^M } else if (message[row].noxl >= 70 && message[row].noxl < 90) {^M NO2Index = 2;^M } else if (message[row].noxl >= 90) {^M NO2Index = 3;^M

Hoffe das hilft dir! Bei fragen kannst mich gerne kontaktieren - bzw kann ich sicherlich auch etwas testen wenn du magst.

Eine bitte hätte ich noch - kann man ev. bei Automodus auch den Fan-Speed ausgeben?… falls das die APIO her gibt…:)

Vielen Dank!

Mit freundlichen Grüßen Florian

Am 10.01.2024 um 13:40 schrieb Grizzelbee @.***>:

HCHO->HOCR faceplam

Oh! Mein! Gott! Das ergibt (mit dem Wissen von heute) sogar Sinn! Die Datenfelder, die auf R enden, sind die, die die App verwendet! Keine Ahnung wofür die anderen sind. Das weiß ich deshalb, weil aktuell neben einem meiner dysons eine Obstschale steht und die PM25R und PM10R Werte komplett am Anschlag sind, die von PM25 und PM10 sind aber im niedrigen dreistelligen Bereich. Insofern ist es nur konsequent wenn HCHR genutzt wird statt HCHO (btw: hcho ist die chemische Formel von Formaldehyd).

The HCHO Scale is as follows: 0.000-0.099 Good 0.100-0.299 Medium 0.300-0.499 Bad 0.500+ Very Bad

MQTT message received: { "msg": "ENVIRONMENTAL-CURRENT-SENSOR-DATA", "time": "2022-07-12T13:26:36.000Z", "data": { "tact": "2964", "hact": "0058", "pm25": "0003", "pm10": "0002", "va10": "INIT", "noxl": "INIT", "p25r": "0005", "p10r": "0005", "hcho": "NONE", "hchr": "NONE", "sltm": "OFF" } } TODO:

Replace hcho in dysonConstants with hchr devide value of hchr by 1000 Add hcho-Index (see scale above) remove PM10R from deviceTree (suppress further output) remove PM25R from deviceTree (suppress further output) Replace value of pm25 with pm25r Replace value of pm10 with pm10r Bei NOXL habe ich damals schon vermutet, dass es auf ein floor(NOXL/10) rausläuft. Da ich aber keine Infos zum Sensor oder irgendetwas habe, habe ich mich entschlossen die Rohwerte zu nutzen und die Skala einfach anzupassen.

— Reply to this email directly, view it on GitHub https://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/244#issuecomment-1884777788, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATLEB3ECN2ISA4QNX5ZWEIDYN2D47AVCNFSM6AAAAABBRG75K6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOBUG43TONZYHA. You are receiving this because you authored the thread.

Grizzelbee commented 8 months ago

Hallo Flo,

habe die V3.0.0 am Wochenende mal ins Beta Repo geschoben. Hast Du die zufällig gesehen und mal ausprobiert? Die sollte die Indizes sowie HCHO, PM2.5 und PM10 korrigieren und die alten *R Felder löschen.

Eine bitte hätte ich noch - kann man ev. bei Automodus auch den Fan-Speed ausgeben?… falls das die APIO her gibt…:)

Die Anfrage habe ich hier: https://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/243 bereits beantwortet. Leider ist mir kein Weg bekannt an diese Daten zu kommen - in den Nachrichten, die ich kenne steht der nicht drin. Über Hilfe zu dem Thema würde ich mich sehr freuen. Leider lässt sich der Traffic der dysons nicht so ohne weiteres sniffen um danach zu suchen (Fritz.box/capture, WireShark, ...), weil der nicht im Klartext läuft. Das ist alles TLS verschlüsselt ...

git2206 commented 8 months ago

HAllo,

nein, habe ich nicht gesehen. Wie komme ich zu dieser Version? Ich habe vorhin versucht im iobroker von stable auf latest umzustellen… sollte ich dann die version 3 sehen?

lg Flo

Am 18.01.2024 um 10:22 schrieb Grizzelbee @.***>:

Hallo Flo,

habe die V3.0.0 am Wochenende mal ins Beta Repo geschoben. Hast Du die zufällig gesehen und mal ausprobiert? Die sollte die Indizes sowie HCHO, PM2.5 und PM10 korrigieren und die alten *R Felder löschen.

Eine bitte hätte ich noch - kann man ev. bei Automodus auch den Fan-Speed ausgeben?… falls das die APIO her gibt…:)

Die Anfrage habe ich hier: #243 https://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/243 bereits beantwortet. Leider ist mir kein Weg bekannt an diese Daten zu kommen - in den Nachrichten, die ich kenne steht der nicht drin. Über Hilfe zu dem Thema würde ich mich sehr freuen. Leider lässt sich der Traffic der dysons nicht so ohne weiteres sniffen um danach zu suchen (Fritz.box/capture, WireShark, ...), weil der nicht im Klartext läuft. Das ist alles TLS verschlüsselt ...

— Reply to this email directly, view it on GitHub https://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/244#issuecomment-1898096332, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATLEB3GNOCY3SRPNKYWXTN3YPDSV5AVCNFSM6AAAAABBRG75K6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOJYGA4TMMZTGI. You are receiving this because you authored the thread.

Grizzelbee commented 8 months ago

Ich habe vorhin versucht im iobroker von stable auf latest umzustellen… sollte ich dann die version 3 sehen?

Japp. Das und dann einmal im Head auf aktualisieren klicken - oder einfach warten, bis das automatisch passiert.

git2206 commented 8 months ago

Hi,

ich war zu ungeduldig… hab v3.0.0 installiert..

Ws mir aufgefallen ist:

die pm10 & pm2.5 Werte stimmen direkt aus der API… somit ist das nicht notwendig! if ( (this.getDysonCode(deviceConfig) === 'p10r') || (this.getDysonCode(deviceConfig) === 'p25r') ) {^M value = Math.floor(value/10);^M }^

die VOC und NO2 Werte musst du durch 10 dividieren… ok, du nimmst Math.floor()… ich habs mit .trunc gemacht, aber ist in unsrem Fall egal, nur bei negativen zahlen macht es einen Unterschied! ;)

if ( (this.getDysonCode(deviceConfig) === 'va10') || (this.getDysonCode(deviceConfig) === 'noxl') ) {^M value = Math.trunc(value/10);^M }

VOC und NO2 Index const value = Math.trunc((message[row].va10) / 10); bzw const value = Math.trunc((message[row].noxl) / 10); und dann musst du die abfragen dementsprechend anpassen…

Hoffe das hilft dir! Bei Fragen einfach melden!

Mit freundlichen Grüßen Flo

Am 18.01.2024 um 12:44 schrieb Grizzelbee @.***>:

Ich habe vorhin versucht im iobroker von stable auf latest umzustellen… sollte ich dann die version 3 sehen?

Japp. Das und dann einmal im Head auf aktualisieren klicken - oder einfach warten, bis das automatisch passiert.

— Reply to this email directly, view it on GitHub https://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/244#issuecomment-1898323379, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATLEB3C4IUVFAPDUVCTHCBLYPEDIPAVCNFSM6AAAAABBRG75K6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOJYGMZDGMZXHE. You are receiving this because you authored the thread.

Grizzelbee commented 7 months ago

Hi Flo,

have you noticed the avaliability of V3.1.1 and tested it? From my point of view it looks pretty promising. ;)

git2206 commented 7 months ago

Hi,

I have seen, that there is an update - but i am not able to test it, because we don't have the dyson PH04 any more.

br Flo


Von: Grizzelbee @.> Gesendet: Donnerstag, 8. Februar 2024 13:36 An: Grizzelbee/ioBroker.dysonairpurifier @.> Cc: git2206 @.>; Author @.> Betreff: Re: [Grizzelbee/ioBroker.dysonairpurifier] PH04 - wrong HCHO values (Issue #244)

Hi Flo,

have you noticed the avaliability of V3.1.1 and tested it? From my point of view it looks pretty promising. ;)

— Reply to this email directly, view it on GitHubhttps://github.com/Grizzelbee/ioBroker.dysonairpurifier/issues/244#issuecomment-1934028238, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATLEB3ARM6BNSWZOMN2AVLLYSTBGHAVCNFSM6AAAAABBRG75K6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMZUGAZDQMRTHA. You are receiving this because you authored the thread.Message ID: @.***>