[Anleitung, gelöst] Dyson Air Ventilator einbinden

Begonnen von eddy242, 02 Dezember 2018, 16:45:45

Vorheriges Thema - Nächstes Thema

eddy242

Hallo zusammen,

es gibt bereits mehrere Anfragen von Nutzern (u.a. von mir), wie man Dyson Ventilatoren einbindet. Skipper hat mir ein paar Denkanstösse gegeben (Danke) und so habe ich mich drangemacht. Die Einbindung basiert auf MQTT. MQTT2 habe ich nicht verwendet, müsste aber gehen.

1. Voraussetzung
a) Der Dyson ist bereits in Eurem Homenetzwerk integriert, Ihr habt die IP-Adresse
b) Für Begrifflichkeiten unbedingt die ersten paar Kapitel hiervon lesen [1] https://www.hackster.io/uladzislau-bayouski/merge-the-dyson-link-b763c3
c) MQTT Client ist installiert falls Ihr nicht MQTT2 verwendet: [2] https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung

2. Password Hash
Password Hash erzeugen. Danke an Skipper für das Windows Powershell Script. Wer Python bevorzugt: [3] https://github.com/mecks52/openhab2-dyson475

function Hash($textToHash)
{
    $hasher = new-object System.Security.Cryptography.SHA256Managed
    $hasher = new-object System.Security.Cryptography.SHA512Managed
    $toHash = [System.Text.Encoding]::UTF8.GetBytes($textToHash)
    $hashByteArray = $hasher.ComputeHash($toHash)

    $EncodedText =[Convert]::ToBase64String($hashByteArray)
    $res = $EncodedText
    #foreach($byte in $hashByteArray)
    #{
     #    $res += $byte.ToString()
    #}
    return $res;
}

$consumerkey ="HIER DAS WIFI PW DES DYSON"
Hash($consumerkey)


3. MQTT Broker
MQTT Broker anlegen. IP-Adresse Eures Dyson, Benutzername, Password Hash

defmod dyson_broker MQTT <IP EURES DYSON>:1883 [<username>] [<PASSWORD HASH>]   ### siehe LINK [1] wie man da rankommt
attr dyson_broker DbLogExclude .*
attr dyson_broker room Server




4. MQTT Device
MQTT Device anlegen. Problem bei publishSet ist, dass normalerweise die Kommandos auch direkt an das Topic gesendet werden. Das funktioniert beim Dyson aber nicht, da vom Dyson und an den Dyson ein JSON kommt bzw. hingesendet werden muss. Also "macht" dieses Device erstmal nichts ausser Nachrichten parsen (die alle 30s reinkommen). die 469/NB2-EU-HEA4515A müsst Ihr gegen die Codierung Eures Modells ersetzen, siehe hierzu auch Link [1]


defmod mqtt_Dyson_Arbeitszimmer MQTT_DEVICE
attr mqtt_Dyson_Arbeitszimmer DbLogExclude .*
attr mqtt_Dyson_Arbeitszimmer IODev dyson_broker
attr mqtt_Dyson_Arbeitszimmer alias Arbeitszimmer Dyson Ventilator
attr mqtt_Dyson_Arbeitszimmer icon fhem_dyson_air
attr mqtt_Dyson_Arbeitszimmer publishSet_command_JSON 469/NB2-EU-HEA4515A/command
attr mqtt_Dyson_Arbeitszimmer room Server
attr mqtt_Dyson_Arbeitszimmer stateFormat act_mode:act_fan_HML
attr mqtt_Dyson_Arbeitszimmer subscribeReading_command 469/NB2-EU-HEA4515A/command
attr mqtt_Dyson_Arbeitszimmer subscribeReading_connection 469/NB2-EU-HEA4515A/status/connection
attr mqtt_Dyson_Arbeitszimmer subscribeReading_current 469/NB2-EU-HEA4515A/status/current
attr mqtt_Dyson_Arbeitszimmer subscribeReading_faults 469/NB2-EU-HEA4515A/status/faults
attr mqtt_Dyson_Arbeitszimmer userReadings act_temperature:data_tact:.* { (sprintf("%.1f °C", (ReadingsNum("$NAME","data_tact",0) - 2731.5)/10)) },\
act_humidity:data_hact:.* { (sprintf("%.1f %", ReadingsNum("$NAME","data_hact",0))) },\
act_p-value:data_pact:.* { (sprintf("%.1f %", ReadingsNum("$NAME","data_pact",0))) },\
act_v-value:data_vact:.* { (sprintf("%.1f %", ReadingsNum("$NAME","data_vact",0))) },\
act_mode:product-state_fmod:.* { (ReadingsVal("$NAME", "product-state_fmod", "")) },\
act_quality_target:product-state_qtar:.* { (ReadingsVal("$NAME", "product-state_qtar", 0)) },\
act_oscillation:product-state_oson:.* { (ReadingsVal("$NAME", "product-state_oson", "")) },\
act_nightmode:product-state_nmod:.* { (ReadingsVal("$NAME", "product-state_nmod", "")) },\
act_continous_measure:product-state_rhtm:.* { (ReadingsVal("$NAME", "product-state_rhtm", "")) },\
act_filter_hours:product-state_filf:.* { (ReadingsVal("$NAME", "product-state_filf", "")) },\
act_fan_speed:product-state_fnsp:.* { (sprintf("%.0f ", ReadingsNum("$NAME","product-state_fnsp",0))) },\
act_fan_activity:product-state_fnst:.* { (sprintf("%.0f ", ReadingsNum("$NAME","product-state_fnst",0))) },\
act_fan_HML:product-state_fnsp:.* { \
my $speed= ReadingsNum("$NAME","product-state_fnsp",0);;\
my $HML = "low";;\
if ($speed>6) {$HML = "high"} elsif ($speed>3) {$HML = "medium"};;\
return $HML;;\
}



5a. JSON parsen
Zur Bequemlichkeit lassen wir die einkommenden Meldungen über einen expandJSON umwandeln und generieren später über userreadings lesbares draus.

defmod dyson_expandJSON expandJSON mqtt_Dyson_Arbeitszimmer:(current):.\{.*} (data_hact|data_vact|data_pact|data_tact|data_sltm|dial|msg|product-state_ercd|product-state_filf|product-state_fmod|product-state_fnsp|product-state_fnst|product-state_nmod|product-state_oson|product-state_qtar|product-state_rhtm|product-state_wacd|rssi|scheduler_dstv|scheduler_srsc|scheduler_tzid|time|state-reason)
attr dyson_expandJSON DbLogExclude .*
attr dyson_expandJSON room Server


5b. JSON basteln
Um das Kommandostring in JSON zu basteln, am besten diesen Code in die 99_myUtils.pm:


######################################################
########    JSON für Dyson basteln
########         
######################################################
sub dyson_json_compose {
my ($command,$value) = @_;

# das spezielle Format für die Zeit im JSON für den Dyson
my $t = time;
my $date = strftime "%Y-%m-%dT%H:%M:%S", gmtime $t;
$date .= sprintf ".%03dZ", ($t-int($t))*1000; # without rounding

my $commandString = "{\"msg\":\"STATE-SET\",\"time\":\"".$date."\",\"mode-reason\":\"LAPP\","; # der erste Teil ist immer Kommando & Datum

if   ($command eq "fmod") { $commandString .= "\"data\":{\"fmod\":\"".$value."\"}"} # Fan-Mode, VALID: OFF, AUTO, FAN
elsif ($command eq "fnsp") { $commandString .= "\"data\":{\"fnsp\":\"".$value."\"}"} # Fan-Speed, VALID: 1..10
elsif ($command eq "qtar") { $commandString .= "\"data\":{\"qtar\":\"".$value."\"}"} # Quality?
elsif ($command eq "nmod") { $commandString .= "\"data\":{\"nmod\":\"".$value."\"}"} # nmod?
elsif ($command eq "oson") { $commandString .= "\"data\":{\"oson\":\"".$value."\"}"} # Oszillation, VALID: OFF, ON
elsif ($command eq "rhtm") { $commandString .= "\"data\":{\"fmod\":\"FAN\", \"rhtm\":\"".$value."\", }"} # Fan-Mode + rhtm?, VALID (Fan-Mode: OFF, AUTO, FAN) + (rhtm: OFF, ON)
else { $commandString .= "\"data\":{\"fmod\":\"OFF\"}" }; # notfalls aus

# und noch die Klammer zu
$commandString .= "}";

# Wenn das Kommando Status Request war ist der Commandstring simpel
if ($command eq "sreq") { $commandString = "{\"msg\":\"REQUEST-CURRENT-STATE\",\"time\":\"".$date."\"}"};

return $commandString;
}



6. DOIF
Wegen der o.a. Einschränkungen mit dem Command über JSON steuere ich den Dyson (einschl. Statusanzeige) nur über ein DOIF. Falls das jemand eleganter abbilden kann, nur her mit dem Feedback

defmod DOIF_update_Dyson DOIF ([$SELF:desired_fanspeed])\
(\
set mqtt_Dyson_Arbeitszimmer command_JSON [$SELF:command_JSON_fanspeed];;\
sleep 1;;\
set mqtt_Dyson_Arbeitszimmer command_JSON [$SELF:command_JSON_statusrequest];; \
)\
DOELSEIF ([$SELF:desired_oscillation])\
(\
set mqtt_Dyson_Arbeitszimmer command_JSON [$SELF:command_JSON_oscillation];;\
sleep 1;;\
set mqtt_Dyson_Arbeitszimmer command_JSON [$SELF:command_JSON_statusrequest];; \
)\
DOELSEIF ([$SELF:desired_mode])\
(\
set mqtt_Dyson_Arbeitszimmer command_JSON [$SELF:command_JSON_mode];;\
sleep 1;;\
set mqtt_Dyson_Arbeitszimmer command_JSON [$SELF:command_JSON_statusrequest];; \
)\
DOELSEIF (\
(([mqtt_Dyson_Arbeitszimmer:act_mode] eq "FAN") or \
([mqtt_Dyson_Arbeitszimmer:act_mode] eq "AUTO")) and \
([mqtt_Dyson_Arbeitszimmer:act_fan_HML] eq "low")\
) (\
setreading $SELF desired_fanspeed [mqtt_Dyson_Arbeitszimmer:act_fan_speed];;\
setreading $SELF desired_oscillation [mqtt_Dyson_Arbeitszimmer:act_oscillation];;\
setreading $SELF desired_mode [mqtt_Dyson_Arbeitszimmer:act_mode];;\
)\
DOELSEIF (\
(([mqtt_Dyson_Arbeitszimmer:act_mode] eq "FAN") or \
([mqtt_Dyson_Arbeitszimmer:act_mode] eq "AUTO")) and \
([mqtt_Dyson_Arbeitszimmer:act_fan_HML] eq "medium")\
) (\
setreading $SELF desired_fanspeed [mqtt_Dyson_Arbeitszimmer:act_fan_speed];;\
setreading $SELF desired_oscillation [mqtt_Dyson_Arbeitszimmer:act_oscillation];;\
setreading $SELF desired_mode [mqtt_Dyson_Arbeitszimmer:act_mode];;\
)\
DOELSEIF (\
(([mqtt_Dyson_Arbeitszimmer:act_mode] eq "FAN") or \
([mqtt_Dyson_Arbeitszimmer:act_mode] eq "AUTO")) and \
([mqtt_Dyson_Arbeitszimmer:act_fan_HML] eq "high")\
) (\
setreading $SELF desired_fanspeed [mqtt_Dyson_Arbeitszimmer:act_fan_speed];;\
setreading $SELF desired_oscillation [mqtt_Dyson_Arbeitszimmer:act_oscillation];;\
setreading $SELF desired_mode [mqtt_Dyson_Arbeitszimmer:act_mode];;\
)\
DOELSEIF (\
([mqtt_Dyson_Arbeitszimmer:act_mode] eq "OFF")\
) (\
setreading $SELF desired_fanspeed [mqtt_Dyson_Arbeitszimmer:act_fan_speed];;\
setreading $SELF desired_oscillation [mqtt_Dyson_Arbeitszimmer:act_oscillation];;\
setreading $SELF desired_mode [mqtt_Dyson_Arbeitszimmer:act_mode];;\
)\

attr DOIF_update_Dyson DbLogExclude .*
attr DOIF_update_Dyson DbLogInclude cmd
attr DOIF_update_Dyson alias Arbeitszimmer Dyson Ventilator
attr DOIF_update_Dyson cmdState set_fanspeed|set_oscillation|set_mode|stat_AnLow|stat_AnMedium|stat_AnHigh|stat_Off
attr DOIF_update_Dyson devStateIcon set_.*:vent_ventilation stat_AnLow:vent_ventilation_level_0@green stat_AnMedium:vent_ventilation_level_1@orange stat_AnHigh:vent_ventilation_level_3@red stat_Off:vent_ventilation_level_0@grey
attr DOIF_update_Dyson do always
attr DOIF_update_Dyson group Klima,Sonstige Events
attr DOIF_update_Dyson icon fhem_dyson_air
attr DOIF_update_Dyson readingList desired_fanspeed,desired_oscillation,desired_mode
attr DOIF_update_Dyson room ControlCenter,Tagesablauf
attr DOIF_update_Dyson setList desired_fanspeed:slider,0,1,10 desired_oscillation:ON,OFF desired_mode:FAN,AUTO,OFF
attr DOIF_update_Dyson userReadings command_JSON_fanspeed { (dyson_json_compose("fnsp", ReadingsVal("$NAME", "desired_fanspeed", "1"))) }, \
command_JSON_oscillation { (dyson_json_compose("oson", ReadingsVal("$NAME", "desired_oscillation", "OFF"))) }, \
command_JSON_mode { (dyson_json_compose("fmod", ReadingsVal("$NAME", "desired_mode", "OFF"))) },\
command_JSON_staterequest { (dyson_json_compose("sreq", "dummy")) }
attr DOIF_update_Dyson webCmd desired_fanspeed:desired_oscillation:desired_mode
attr DOIF_update_Dyson webCmdLabel Fanspeed:Drehen:Modus



7. Homebridge
Das könnte man natürlich nun über Siri auch an den Homebridge FHEM Skin geben, aber es ginbt einen Native Skin https://www.npmjs.com/package/homebridge-dyson-link, der in Homekit gleich noch schöne Symbole erzeugt. Ist natürlich Geschmackssache.

8. Wiki
Lassen wir diesen Thread mal etwas laufen, vielleicht kommen noch Verbesserungsvorschläge, danach kann ich mich an ein Wiki machen

9. Andere Modelle
Siehe Link [3]. Ich denke, über diese Methode sollten noch mehr Modelle einbindbar sein, da ich nur den einen habe, kann ich nicht mehr testen.

Skipper

Hallo zusammen,

ich habe meinen Dyson nun auch erfolgreich eingebunden. Wobei so ganz erfolgreich noch nicht, meine Readings ändern sich nicht und irgendwie läuft das mit dem korrekten Konvertieren der Readings aus dem JSON noch nicht ganz rund. Ich wollte auch nur mal zurück melden, dass die Anleitung grundsätzlich geht. Ich gehe bei mir von einem Fehler von mir aus. Ich suche weiter.

Beste Grüße
Skipper

BrandonQuest

#2
Moin Feedback von mir: prima erklärt und vielen Dank!
Selbst ich als blutiger Anfänger habe es zum Laufen bekommen.
Desired-Readings funktionieren ebenfalls.

Ich werde das Beispiel nutzen, um ein wenig daran zu üben und FHEM zu verstehen (ich weiß - dafür ist es nicht gedacht).

Welche Readings natürlich nicht umgesetzt worden sind, ist die Anzeige ob Sensordaten gesammelt werden (fhtm) und richtig interessant und die Frage ob die Implementierung
von allgemeinem Interesse wäre: die Auswertung der Sensordaten (tact für Temperatur in Kelvin (mit 1/10 K Auflösung), hact (relative Luftfeuchtigkeit)).

Wie die Information für die Luftqualität übermittelt wird, weiß ich allerdings nicht - zwar gibt es dafür die Daten pact (Staub) und vact (flüchtige organische Verbindungen (die kann mein Dyson generationsbedingt noch nicht)),
allerdings stehen diese Daten bei mir immer auf '0' obwohl die App einen Verlauf anzeigt:


475/NNX-EU-xxxxxx/status/

{"msg":"ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":"2019-01-01T16:25:20.001Z","data":{"tact":"2942","hact":"0054","pact":"0000","vact":"0000","sltm":"OFF"}}


Grüße und frohes Neues!
Brandon

eddy242

Hallöchen,

BrandonQuest: verstehe nicht ganz was Du meinst... Unter Punkt 4 werden doch die Readings für Temp, Luftfeuchtigkeit etc angelegt?

Skipper: Kannst Du das Problem etwas eingrenzen und genauer beschreiben?

Grüße
Ed

BrandonQuest

#4
Stimmt - jetzt sehe ich das auch ...
Allerdings auftauchen in fhem tun sie letztendlich nicht.

Aber ich sehe schon: das ist der Teil, den ich ja erst noch verstehen will.
Die Readings werden nicht angezeigt, weil man sie in den nachfolgenden Schritten (nach 4) erstmal zu Readings aufbereiten muss.

Grüße
Brandon

BrandonQuest

eddy242:
bist Du so nett, mir einmal Teile des Userreadings zu erklären?


act_fan_HML:product-state_fnsp:.* { \
my $speed= ReadingsNum("$NAME","product-state_fnsp",0);;\
my $HML = "low";;\
if ($speed>6) {$HML = "high"} elsif ($speed>3) {$HML = "medium"};;\
return $HML;;\
}


Ich weiß, es ist wohl eher Perl- denn FHEM-spezifisch.
Aber ich hangle mich jetzt seit Tagen Zeile für Zeile an Deinem Code entlang
und hänge speziell an dieser Stelle seit ein paar Stunden:

Wann wie und weshalb funktionieren die Anschnitte nur mit Doppel
Semikolon?
Wenn ich danach Google komme ich nicht wirklich zu konsistenten Aussagen
über die konkreten Anwendungsfälle.

Um die Funktionsweise zu verstehen würde es mir außerdem helfen, wenn
Du mir vielleicht alternative Schreibvarianten darstellen könntest.

Danke und beste Grüße

Shadow3561

Moin,
Ich versuche auch gerade einen Dyson Pure Cool einzubinden.
Leider habe ich keine Ahnung wo ich das Standart-WLAN-Passwort herbekomme.

Auf dem Aufkleber ist leider nur eine Zahl im Format 1234:5678 und eine MAC Adresse.

Kann mir jeamd auf dei Sprünge helfen wie ich einen Passwort-Hash erzeugen kann?

MfG

eddy242

@BrandonQuest - sorry das nennt man wohl miserable Reaktionszeit...

das Doppel ;; ist dem Perl-Editor in FHEM geschuldet. Wenn Du das in 99_myUtils eingibst, tippst Du nur 1 ein.

HTH, Ed

eddy242

@Shadow3561

sieh Dir mal den Link in meinem Post an.  [1] https://www.hackster.io/uladzislau-bayouski/merge-the-dyson-link-b763c3

Da steht es ziemlich gut beschrieben drin.

Shadow3561

Danke.

Das habe ich mir durchgelesen. Problem ist nur, dass die neuen Dyson Modelle diesen Aufkleber mit dem en Passwort nicht mehr haben und anders verbunden werden.
Nun fehlt mir leider das Passwort um es in Fhem im Dyson_broker einzutragen.

Habe schon versucht diese 8-stellige Zahl im Format 1234:5678 und das Passwort aus der App zu nutzen, jeweils verschlüsselt und unverschlüsselt, aber er verbindet einfach nicht.
Habes es mit mqqt2 versucht.

Werde aus Mqqt aber auch nicht wirklich schlau.
Habe den Mqqt2_broker mit port 1883 konfiguriert und bin dann genau deiner Anleitung gefolgt.
Habe ich evtl etwas vergessen oder falsch gemacht? Muss ich auch noch einen mqqt2_client definieren?

Mir würde es helfen wenn du mir die ganze Sache mal genau beschreibst (dein mqqt system).

MfG


Blackcat

Hallo ihr Lieben,

Danke schonmal für die tolle Anleitung :)

ich habe von meinem Mann einen Dyson pure cool link (TP02) zu Weihnachten bekommen.


Leider bekomme ich aber beim Verbinden (step 3) immer nur ein disconnect zu sehen.
Das log schweigt auch bei verbose 5.
Habe das Passwort und den user mit und ohne Klammern versucht. Ebenso gehashed und nicht gehashed.
Pakete für MQTT habe ich nachinstalliert, die waren es wahrscheinlich auch nicht.

Mit dem Modul MQTT2_DEVICE bekomme ich immerhin eine Rückmeldung Connection refused.

Hat dyson den Zugriff blockiert? Oder wurde am Modul MQTT etwas angepasst, dass etwas hier geändert werden muss?
Vielleicht übersehe ich auch etwas  ::)

Vielen Dank für eure Hilfe und noch frohe Weihnachten
Viele Grüße Sandra - FHEM Style Entwicklerin iOS6+12
-----
ZBox nano, Homematic, Homebridge, Hue + Mi Light, ZWave, Dyson, etc.
https://www.foodcat.de
https://www.youtube.com/c/FoodCat (hier gibt es auch immer mehr Hausautomatisierungsvideos)

Blackcat

Scheinbar hatte sich mein Dyson etwas verschluckt, habe ihn komplett auf Werkseinstellung zurückgesetzt, neu verbunden und jetzt geht es.
Sehr gut gefällt mir, dass man die Dyson Cloud Verbindung entfernen kann und somit wieder ein reines "offline" Device hat.  ;D

Ich konnte mit der Lib https://libpurecoollink.readthedocs.io/en/stable/ einige Werte lesen und frage mich ob das auch in FHEM ginge

DysonEnvironmentalSensorState received
DysonEnvironmentalSensorState(humidity=38,air quality=0,temperature=294.7,dust=3,sleep_timer=0)
DysonPureCoolState message received
DysonPureCoolState(fan_mode=AUTO,fan_state=OFF,night_mode=OFF,speed=AUTO,oscillation=OFF,filter_life=4289,quality_target=0003,standby_monitoring=OFF)


PS: Stabiler läuft es bei mir über den MQTT2 Broker ;)
Viele Grüße Sandra - FHEM Style Entwicklerin iOS6+12
-----
ZBox nano, Homematic, Homebridge, Hue + Mi Light, ZWave, Dyson, etc.
https://www.foodcat.de
https://www.youtube.com/c/FoodCat (hier gibt es auch immer mehr Hausautomatisierungsvideos)

Shadow3561

Wo hast du denn das Passwort her?
Auf meinem Dyson ist kein Wlan Passwort Aufkleber gewesen und ich benötigte auch keines zum verbinden.

CoolTux

Zitat von: Blackcat am 29 Dezember 2019, 19:29:31
Scheinbar hatte sich mein Dyson etwas verschluckt, habe ihn komplett auf Werkseinstellung zurückgesetzt, neu verbunden und jetzt geht es.
Sehr gut gefällt mir, dass man die Dyson Cloud Verbindung entfernen kann und somit wieder ein reines "offline" Device hat.  ;D

Ich konnte mit der Lib https://libpurecoollink.readthedocs.io/en/stable/ einige Werte lesen und frage mich ob das auch in FHEM ginge

DysonEnvironmentalSensorState received
DysonEnvironmentalSensorState(humidity=38,air quality=0,temperature=294.7,dust=3,sleep_timer=0)
DysonPureCoolState message received
DysonPureCoolState(fan_mode=AUTO,fan_state=OFF,night_mode=OFF,speed=AUTO,oscillation=OFF,filter_life=4289,quality_target=0003,standby_monitoring=OFF)


PS: Stabiler läuft es bei mir über den MQTT2 Broker ;)

Deine Temperatur Würste wohl noch umrechnen müssen  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Blackcat

Es war vorne ein Aufkleber auf dem Gerät. Zusätzlich ist noch einer auf der Anleitung.
Alternativ habe ich aber durch mein Testen auch gelernt, dann man sich das Passwort auch aus den localcredentials aus der Json Antwort des Dyson Servers generieren kann. Der hash ist dann der gleiche wie der von eddy. Das war bei mir dann der Grund zum zurücksetzen 😅 aber vielleicht für dich interessant

Ich habe dafür mit der genannten lib die Dyson Account Antwort ausgeben (einfaches Print in Python) und dann bin ich auf diese lib gestoßen:

https://github.com/patrickvaler/dyson-cloud
Ich habe nur noch die Entschlüsselung genutzt, aber für dich wäre es bestimmt einfacher sie gleich zu nutzen. Benötigt wird Note.js

Welches Gerät hast du denn? Ggf. gab es auch noch kein Passwort für das Gerät

PS: Dank MQTT.fx konnte ich nun alle Werte ermitteln und als Reading übertragen. Ich weiß nur nicht was ercd und wacd sein könnten. Beide haben den Wert none
Wenn Interesse besteht kann ich euch die fertige MQTT2 config zur Verfügung stellen. Ich baue gerade aber noch das publish neu und muss dafür noch das Befehlsmapping machen
Viele Grüße Sandra - FHEM Style Entwicklerin iOS6+12
-----
ZBox nano, Homematic, Homebridge, Hue + Mi Light, ZWave, Dyson, etc.
https://www.foodcat.de
https://www.youtube.com/c/FoodCat (hier gibt es auch immer mehr Hausautomatisierungsvideos)