NEWS
TuyaMCU per Tasmota Daten Identifizieren?
-
hast du 2 Zähler oder 3 Phasen wegen der 07 00 und 07 01.
Ab 03 01 eventuell Zählerstände ?55AA Sync
03 Command Read0700
1C // dec 28 data length dec 28 Gesamt ab hier
12 dpIx
00 function length ( 00 )
0018 dec 24 ?
0101 2,57 Ampere Wert
003C 60 Watt Wert
0301
00FD04 // dec 64.772
0000B4 // dec 2120701
00 data length
00 dpIx
08 function length ( 08 )
00001E dec 30 ? hälfte der 60 Watt
0900 230,4 Volt
00007D dec 125 ? hälfte der A 1,25
0101 2,57 Ampere Wert
003C 60 Watt Wert
03
0100 dec 256 Volt ?
00FD dec 253 Volt ?
04
0000 ?
00B4 dec 180 ? -
@ralla66 said in TuyaMCU per Tasmota Daten Identifizieren?:
hast du 2 Zähler oder 3 Phasen wegen der 07 00 und 07 01.
Ab 03 01 eventuell Zählerstände ?Danke! Versuche gerade Deine Analyse nachzuvollziehn und am WE leider nicht dazu gekommen.
Das Ding hat nur 1 Phase, schaue ich aber in den Zigbee2Mqtt-Code des ähnlichen Models finde ich dort 2 Zähler zusätzlich zu den 3 Measurements (Spannung, Strom, Leistung):
""Zemismart Power Meter Attributes""" ZEMISMART_TOTAL_ENERGY_ATTR = 0x0201 ZEMISMART_TOTAL_REVERSE_ENERGY_ATTR = 0x0202 ZEMISMART_VCP_ATTR = 0x0006
VCP sagt mir noch nichts.
Edit: Einen neuen Benefit sehe ich aus dem Tool bisher nicht, aber möchte es hier nicht vorenthalten:
und in der Anleitung wird eindeutig Dein Ansatz bestätigt:
"What does the program not help with?
Basically, there is one situation where this program cannot help. Some of the more advanced Tuya electricity meters (higher-end, already DIN rail, in the price range of PLN 100 or more) use TuyaMCU to report measurements, but often report a group of measurements in one dpID. Then such a dpID is of the Raw type (no longer Value) and contains several bytes in which (depending on the device) data such as the current value of voltage, current, power, sometimes frequency are stored. Such a raw package has a device-dependent format and it is difficult to decode it more universally.
Cheaper products with energy measurement, in turn, do not use TuyaMCU, rather BL0937 or BL0942 are directly connected to the WiFI module there." -
Hab mir mal ein Excel gebaut um zu vergleichen. Das jetzt mit 60W Glühlampe und 5,5W LED.
dpIx 6 macht durchaus Sinn:
dpIx 18: auch wenn Ich Deinen gezeigten Ansatz nicht verstanden hab, hab ihn dennoch auch ins Excel überführt aber ein Vergleich 60W Last zu 5,5W macht kaum Sinn, da in beiden Fällen alles identisch bleibt:
-
Systeme sind ja alle ähnlich, dann würde ich Zählerstände suchen in dpIx 18 ab 03 01.
Mögliche Werte wären dann in etwa :Zum testen könnte man mal versuchen Werte zu nullen wenn es das Gerät hergibt.
-
Zum Nullen habe ich bisher in Anleitungen und App nichts finden können.
In der App ist noch ein "Balance"-Zähler drin. Wenn ich es aber richtig verstehe ist das aber die Summe der beiden Zählerrichtungen mit einem Preis je kWh aus der App verrechnet. Denke das passiert in der App und kommt nicht von der MCU.
Muß mir mal eine größere Last suchen. In der Auflösung kWh werde ich mit 60W nicht so schnell etwas sehen.
-
-> die Summe der beiden Zählerrichtungen , also 2 Werte
wenn die App ja verrechnet braucht die ja Zählerwerte und die können ja nur von der MCU kommen.
Mal angenommen Teiler ist 100 oder 1000, gibt es ein Bezug zu 647,72 / 64,77 Kw/h oder
1,8 / 0.18 Kw/h ?
3 Stunden 60 Watt Test kommt das hin ?
Das riecht nach Energy Total und Today -
Denke das ist gerade mein Hauptproblem. Ich habe den Zähler nie im Orginalzustand betrieben sondern direkt mit ESP umgebaut. Von daher weiß ich A) nicht wie der aktuelle Zählerstand ist und kann nur vermuten, dass er bei 0 gestartet ist.
Mit 60W und 5,5W ist das Ding allerhöchstens 30 Minuten in Betrieb gewesen und davon bestimmt nur 5 Minuten mit der 60W Birne -> der Zähler kann sich nicht groß bewegt haben.
Der Zähler in Speiserichtung kann noch weniger gezählt haben da ich ihn höchsten 2 Minuten am Anfang falschrum in Betrieb hatte mit 5,5W.
Aber mein Problem B) habe im Moment keine sichere Referenz um mir ein Delta im Zählerstand ableiten zu können. Muß mir mal ein Kabel bauen und denke daran meinen Fön mit 1800W mal 10 Minuten laufen zu lassen was ja zu mindest 0,3kWh sichtbar machen sollte.
-
Sieht nicht gut aus und irgendwas erscheint mir inaktiv auch durch die blinkende LED des Geräts signalisiert.
Hab jetzt einen Test gefahren mit dem Fön 2,2kW für 2 Min und dpIx 17 & 18 bleiben völlig unverändert. dpIx 6 macht Sinn:
-
Aus der OpenBK community war jemand so nett und hat mir die Infos aus dem alten Tuya Chip-Backup zerlegt und aufbereitet der vorher mit der MCU kommuniziert hat.
hiernach werden folgende dpIx mit der MCU ausgetauscht:
DP 2, VALUE(ro), cur_neutral DP 6, RAW(ro), phase_a DP 9, BITMAP(ro), fault DP 14, VALUE(rw), charge_energy DP 17, RAW(rw), alarm_set_1 DP 18, RAW(rw), alarm_set_2 DP 19, STRING(ro), breaker_id
Desweiteren gibt er mir folgende Info worin ich Funktionen der App wieder finde und vermute daraus jetzt das Mapping zwischen dpIx und fnIx erzeugen zu müssen.
"properties": [ { "abilityId": 1, "accessMode": "ro", "code": "total_forward_energy", "description": "", "extensions": { "iconName": "icon-dp_lightning", "attribute": "1152" }, "name": "\u6b63\u5411\u603b\u6709\u529f\u7535\u91cf", "typeSpec": { "type": "value", "max": 99999999, "min": 0, "scale": 2, "step": 1, "unit": "kW\u00b7h" } }, { "abilityId": 2, "accessMode": "ro", "code": "cur_neutral", "description": "", "extensions": { "iconName": "icon-power1", "attribute": "1152" }, "name": "\u53cd\u5411\u603b\u6709\u529f\u7535\u80fd", "typeSpec": { "type": "value", "max": 99999999, "min": 0, "scale": 2, "step": 1, "unit": "kW.h" } }, { "abilityId": 6, "accessMode": "ro", "code": "phase_a", "description": "1\uff0c\u7535\u538b\uff0c\u7535\u6d41\u53ca\u529f\u7387\n2\uff0c\u5927\u7aef\u6a21\u5f0f\uff0cHEX\u683c\u5f0f\uff0c\u51718\u4e2a\u5b57\u8282\n3\uff0c\u5355\u4f4d\u7cbe\u5ea6\uff1a\u7535\u538b\uff0c2\u5b57\u8282\uff0c\u5355\u4f4d0.1V\u3002\u7535\u6d41\uff0c3\u5b57\u8282\uff0c\u5355\u4f4d 0.001A \u3002A\u76f8\u6709\u529f\u529f\u7387\uff0c3\u5b57\u8282\uff0c\u5355\u4f4d0.0001kW\n4\uff0c\u62a5\u6587\u683c\u5f0f\n\u4e3e\u4f8b\uff1a08 80 00 03 E8 00 27 10 \u8868\u793aA\u76f8217.6V\uff0cA\u76f8\u7535\u6d411.000A\uff0cA\u76f8\u529f\u738710.000KW\n5\uff0c\u901a\u4fe1\u903b\u8f91\uff1a\n1\uff09\u7528\u6237\u8fdb\u9762\u677f\uff0c\u4e3b\u52a8\u67e5\u8be2\u3002\u7528\u6237\u8fdb\u5165\u9762\u677f\uff0c\u9762\u677f\u9a6c\u4e0a\u4e0b\u53d10x08\u5230\u7535\u8868\uff0c\u7535\u8868\u4e0a\u62a5\u6570\u636e\u5230\u4e91\u5e73\u53f0\uff0c\u9762\u677f\u62ff\u5230\u6570\u636e\uff0c\u7136\u540e\u5c55\u793a\u3002 \u6ce8\uff1a\u6700\u65b0WIFI\u652f\u6301\u3002 \n2\uff09\u7535\u8868\u57fa\u4e8e\u4e00\u5b9a\u5468\u671f\u4e0a\u62a5\u6570\u636e\u3002\u5efa\u8bae\uff1a\u5728WIFI\u6a21\u5f0f\u65f6\uff0c15\u79d2\u4e0a\u62a5\u4e00\u6b21\u3002NB\u6a21\u5f0f\u65f6\uff0c1\u4e2a\u5c0f\u65f6\u4e0a\u62a5\u4e00\u6b21\u3002", "extensions": { "iconName": "icon-dp_lightning", "attribute": "1152" }, "name": "\u7535\u538b\uff0c\u7535\u6d41\u53ca\u529f\u7387", "typeSpec": { "type": "raw", "maxlen": 128 } }, { "abilityId": 9, "accessMode": "ro", "code": "fault", "description": "1\uff0c\u544a\u8b66\n2\uff0c\u5927\u7aef\u6a21\u5f0f\uff0cHEX,4\u5b57\u8282\n3\uff0c\u62a5\u6587\u683c\u5f0f\n\u6309\u7167\u5b8c\u65744\u4e2a\u5b57\u8282,\u5bf9\u5e94\u7684\u544a\u8b66\u4f4d\u4e0a\u62a5\u544a\u8b66\uff1bbit\u4f4d\uff0c1\u8868\u793a\u6709\u544a\u8b66\uff0c0\u8868\u793a\u65e0\u544a\u8b66\uff1b\u5982\u679c\u6ca1\u7528\u7684\u544a\u8b66\u4f4d\uff0c\u88650\u3002\u9ad8\u4f4d\u65e0\u5b9a\u4e49\uff0c\u4e5f\u88650\uff1b\n\u4e3e\u4f8b\uff1a0X00 00 00 09,\u8868\u793a\u5f53\u524d\u53d1\u751f\u4e86\u6f0f\u7535\u81ea\u68c0\u4e0d\u6b63\u5e38\u544a\u8b66\u548c\u77ed\u8def\u544a\u8b66,\u65e0\u5176\u5b83\u544a\u8b66\u3002\n4\uff0c\u901a\u4fe1\u903b\u8f91\n\u53ea\u8981\u67091\u4e2a\u544a\u8b66\u53d1\u751f\uff0c\u5c31\u5b8c\u65744\u4e2a\u5b57\u8282\u4e0a\u62a5\u7ed9\u9762\u677f\uff1b\u53ea\u8981\u67091\u4e2a\u544a\u8b66\u5173\u95ed\uff0c\u5c31\u5b8c\u65744\u4e2a\u5b57\u8282\u4e0a\u62a5\u7ed9\u9762\u677f\uff0c\u66f4\u65b0\u9762\u677f\u663e\u793a\u3002", "extensions": { "iconName": "icon-baojing", "attribute": "1152" }, "name": "\u6545\u969c\u4e0a\u62a5", "typeSpec": { "type": "bitmap", "label": [ "short_circuit_alarm", "surge_alarm", "overload_alarm", "leakagecurr_alarm", "temp_dif_fault", "fire_alarm", "high_power_alarm", "self_test_alarm", "ov_cr", "unbalance_alarm", "ov_vol", "undervoltage_alarm", "miss_phase_alarm", "outage_alarm", "magnetism_alarm", "credit_alarm", "no_balance_alarm" ], "maxlen": 17 } }, { "abilityId": 11, "accessMode": "rw", "code": "switch_prepayment", "description": "", "extensions": { "iconName": "icon-dp_money", "attribute": "1152" }, "name": "\u9884\u4ed8\u8d39\u529f\u80fd\u5f00\u5173", "typeSpec": { "type": "bool" } }, { "abilityId": 12, "accessMode": "rw", "code": "clear_energy", "description": "", "extensions": { "iconName": "icon-dp_lightning", "attribute": "1152" }, "name": "\u4f59\u989d\u6e05\u96f6", "typeSpec": { "type": "bool" } }, { "abilityId": 13, "accessMode": "ro", "code": "balance_energy", "description": "", "extensions": { "iconName": "icon-dp_lightning", "attribute": "1152" }, "name": "\u5269\u4f59\u53ef\u7528\u7535\u91cf", "typeSpec": { "type": "value", "max": 99999999, "min": 0, "scale": 2, "step": 1, "unit": "kW\u00b7h" } }, { "abilityId": 14, "accessMode": "rw", "code": "charge_energy", "description": "", "extensions": { "iconName": "icon-dp_money", "attribute": "1152" }, "name": "\u7535\u91cf\u5145\u503c", "typeSpec": { "type": "value", "max": 999999, "min": 0, "scale": 2, "step": 1, "unit": "kW\u00b7h" } }, { "abilityId": 17, "accessMode": "rw", "code": "alarm_set_1", "description": "1\uff0c\u544a\u8b66\u9608\u503c\u4f7f\u80fd\u63a7\u5236\u53ca\u8bbe\u7f6e2 \n2\uff0cHEX\u683c\u5f0f\uff0c\u5927\u7aef\u6a21\u5f0f, \u603b\u544a\u8b66\u7684\u6570\u91cf*4\u5b57\u8282= \u8bbe\u7f6e\u544a\u8b66\u603b\u957f\u5ea6\u3002\n3\uff0c\u62a5\u6587\u683c\u5f0f\n\u6bcf\u4e2a\u544a\u8b66\u75314\u4e2a\u5b57\u8282\u7ec4\u6210\uff0c\u7b2c1\u4e2a\u5b57\u8282\uff08\u8868\u793a\u8be5\u544a\u8b66\u5b58\u5728\uff09\uff1b\u7b2c2\u4e2a\u5b57\u8282\uff08\u53d1\u751f\u6b64\u544a\u8b66\u65f6\uff0c\u65ad\u8def\u5668\u63a7\u5236\u6a21\u5f0f\uff080X01\u62c9\u95f8\uff0c0X00\u4e0d\u52a8\u4f5c\u53ea\u544a\u8b66\uff09\uff1b\u7b2c3\u30014\u5b57\u8282\uff1a\u8bbe\u7f6e\u544a\u8b66\u9608\u503c\n\u4e3e\u4f8b\uff1a0X01 01 00 00 03 01 00 14,\u8868\u793a\u8be5\u65ad\u8def\u5668\u652f\u6301\u77ed\u8def\u544a\u8b66\uff0c\u53d1\u751f\u8be5\u544a\u8b66\u65f6\uff0c\u81ea\u52a8\u8df3\u95f8\uff0c\u9600\u503c\u88650\u3002\u652f\u6301\u8fc7\u8f7d\u544a\u8b66\uff0c\u53d1\u751f\u8be5\u544a\u8b66\u65f6\uff0c\u62c9\u95f8\u52a8\u4f5c\uff0c\u52a8\u4f5c\u9600\u503c20KW\u3002\u65e0\u5176\u5b83\u544a\u8b66\u3002\n4\uff0c\u901a\u4fe1\u903b\u8f91\nA\uff0c\u914d\u7f51\u6210\u529f\u540e\uff0c\u6309\u7167\u4e0a\u9762\u7684\u683c\u5f0f\uff0c\u4e3b\u52a8\u4e0a\u62a5\u7ed9\u4e91\u5e73\u53f0\uff0c\u9762\u677f\u77e5\u9053\u54ea\u4e9b\u544a\u8b66\u662f\u65ad\u8def\u5668\u5f53\u524d\u652f\u6301\u7684\u3002\u8bbe\u7f6e\u4e0d\u6210\u529f\uff0c\u91cd\u65b0\u914d\u7f51\u518d\u4e0a\u62a5\u3002\nB\uff0c\u65ad\u8def\u5668\u4e0a\u7535\u65f6\uff0c\u4e5f\u4e0a\u62a5\u4e00\u6b21\u3002\nC\uff0c\u9762\u677f\u6839\u636e\u534f\u8bae\u4e0b\u53d1\u544a\u8b66\u8bbe\u7f6e\u3002", "extensions": { "iconName": "icon-dp_warming", "attribute": "1152" }, "name": "\u544a\u8b66\u8bbe\u7f6e1", "typeSpec": { "type": "raw", "maxlen": 128 } }, { "abilityId": 18, "accessMode": "rw", "code": "alarm_set_2", "description": "1\uff0c\u544a\u8b66\u9608\u503c\u4f7f\u80fd\u63a7\u5236\u53ca\u8bbe\u7f6e2 \n2\uff0cHEX\u683c\u5f0f\uff0c\u5927\u7aef\u6a21\u5f0f\n3\uff0c\u62a5\u6587\u683c\u5f0f\n\u6bcf\u4e2a\u544a\u8b66\u75314\u4e2a\u5b57\u8282\u7ec4\u6210\uff0c\u7b2c1\u4e2a\u5b57\u8282\uff08\u8868\u793a\u8be5\u544a\u8b66\u5b58\u5728\uff09\uff1b\u7b2c2\u4e2a\u5b57\u8282\uff08\u53d1\u751f\u6b64\u544a\u8b66\u65f6\uff0c\u65ad\u8def\u5668\u63a7\u5236\u6a21\u5f0f\uff080X01\u62c9\u95f8\uff0c0X00\u4e0d\u52a8\u4f5c\u53ea\u544a\u8b66\uff09\uff1b\u7b2c3\u30014\u5b57\u8282\uff1a\u8bbe\u7f6e\u544a\u8b66\u9608\u503c\n\u4e3e\u4f8b\uff1a0X01 01 00 3C 03 01 00 F5,\u8868\u793a\u8be5\u65ad\u8def\u5668\u652f\u6301\u8fc7\u6d41\u544a\u8b66\uff0c\u53d1\u751f\u8be5\u544a\u8b66\u65f6\uff0c\u62c9\u95f8\u52a8\u4f5c\uff0c\u52a8\u4f5c\u9600\u503c60A\u3002\u652f\u6301\u8fc7\u538b\u544a\u8b66\uff0c\u53d1\u751f\u8be5\u544a\u8b66\u65f6\uff0c\u62c9\u95f8\u52a8\u4f5c\uff0c\u52a8\u4f5c\u9600\u503c245V\n4\uff0c\u901a\u4fe1\u903b\u8f91\nA\uff0c\u914d\u7f51\u6210\u529f\u540e\uff0c\u6309\u7167\u4e0a\u9762\u7684\u683c\u5f0f\uff0c\u4e3b\u52a8\u4e0a\u62a5\u7ed9\u4e91\u5e73\u53f0\uff0c\u9762\u677f\u77e5\u9053\u54ea\u4e9b\u544a\u8b66\u662f\u65ad\u8def\u5668\u5f53\u524d\u652f\u6301\u7684\u3002\u8bbe\u7f6e\u4e0d\u6210\u529f\uff0c\u91cd\u65b0\u914d\u7f51\u518d\u4e0a\u62a5\u3002\nB\uff0c\u65ad\u8def\u5668\u4e0a\u7535\u65f6\uff0c\u4e5f\u4e0a\u62a5\u4e00\u6b21\u3002\nC\uff0c\u9762\u677f\u6839\u636e\u534f\u8bae\u4e0b\u53d1\u544a\u8b66\u8bbe\u7f6e\u3002", "extensions": { "iconName": "icon-dp_warming", "attribute": "1152" }, "name": "\u544a\u8b66\u8bbe\u7f6e2", "typeSpec": { "type": "raw", "maxlen": 128 } }, { "abilityId": 19, "accessMode": "ro", "code": "breaker_id", "description": "1\uff0c\u8bbe\u5907\u53f7\n2\uff0c\u5927\u7aef\u6a21\u5f0f\uff0c\u5b57\u7b26\u4e32\u578b\n3\uff0c\u5355\u4f4d\u7cbe\u5ea6\n4\uff0c\u62a5\u6587\u683c\u5f0f\n5\uff0c\u901a\u4fe1\u903b\u8f91\nA\uff0c\u914d\u7f51\u65f6\u4e0a\u62a5\u4e09\u6b21\uff0c\u4ee5\u786e\u4fdd\u4e0a\u62a5\u6210\u529f\u3002\u5982\u679c\u914d\u5bf9\u6210\u529f\uff0c\u9762\u677f\u6709\u663e\u793a\u8bbe\u5907\u53f7\u3002\nB\uff0c\u5982\u679c\u914d\u5bf9\u6210\u529f\uff0c\u9762\u677f\u6ca1\u6709\u663e\u793a\u8bbe\u5907\u53f7\uff0c\u9700\u8981\u79fb\u9664\u8bbe\u5907\uff0c\u518d\u914d\u7f6e\u4e00\u904d\u3002\nC\uff0c\u6bcf\u6b21\u65ad\u8def\u5668\u4e0a\u7535\uff0c\u4e5f\u4e0a\u62a5\u4e00\u6b21\u3002", "extensions": { "iconName": "icon-dp_mode", "attribute": "1152" }, "name": "\u65ad\u8def\u5668\u8bbe\u5907\u53f7", "typeSpec": { "type": "string", "maxlen": 255
Insbesondere bei den Daten im raw format und ergänzend warum aktuell manche dpIx gar nichts liefern, gibt es noch große ???
-
Hi
hab nun vorwiegend unter OpenBeken getestet welche Daten wie von und zu der TuyaMCU gehen.
Für eine Minimalkonfiguration unter Tasmota würde ich nun gerne Folgendes hinterlegen:
tuyaMcu_defWiFiState 4
muß nach dem Bootvorgang an die MCU geschickt werden um den Wifi Status als verbunden zu melden
addRepeatingEvent 5 -1 tuyaMcu_sendQueryState
Muss in Schleife zur MCU geschickt werden um Messerwerte zu erhalten.
Als Idee könnte ich per Regel tuyasend0 in Dauerschleife schicken.
Folgende minimal gewählten Datenpunkte gilt es zuzuordnen:
Größte Herausforderung der RaW Wert von dpId 6 wo 3 Werte (Power, Strom, Spannung) drin stehen
// Measurements - Dpid 6 "phase_a" - channel RAW_TAC2121C_VCP -> 5,6,7 // TAC2121C VoltageCurrentPower Packet // This will automatically set voltage, power and current linkTuyaMCUOutputToChannel 6 RAW_TAC2121C_VCP setChannelType 5 Voltage_div10 setChannelLabel 5 "Voltage" setChannelType 6 Power setChannelLabel 6 "Power" setChannelType 7 Current_div1000 setChannelLabel 7 "Current"
Als Standardsfunktion werde folgende FnIds angeboten:
Lässt sich zB per Skripting der RaW Wert zerlegen und dann den FnIds zuweisen?
Wie setzt man sowas unter Tasmota um?
Desweiteren gilt es direkt zuzuweisen:
DpId1 (Energy Counter):
// Total energy - Dpid 1 "total_forward_energy" -> channel 4 linkTuyaMCUOutputToChannel 1 val 4 setChannelType 4 EnergyTotal_kWh_div100 setChannelLabel 4 "Total Energy"
Hier scheint es keine FnId zu geben und Tasmota würde aus FnId 31 dies selbst berechnen? Über den Weg der Dauerschleife (Tuyasend0) würde das natürlich gemäß der Stützstellen eine Ungenauigkeit zusätzlich darein bringen.
DpId 12 (Reset Energy Counter):
// Clear Energy Counters - Dpid 12 "clear_energy" -> channel 3 linkTuyaMCUOutputToChannel 12 bool 3 setChannelType 3 toggle setChannelLabel 3 "Clear Energy Counters"
Entsprechend der Stromzählerfunktion noch keine Idee wie das umzusetzen wäre.
Auf den Rest könnte ich erst einmal verzichten. Insbesondere wie ich unter Tasmota die Befehle automatisch schicke ist mir nicht klar. Gibt es dort eine autoexec oder sollte ich eine Regel verwenden? Ergänzen die Schwierigkeit mit DpId6. Kann man über das Skripting den DpId zerlegen und entsprechenden FnIds zuweisen?
@Ralla66 Hast Du dazu eine Idee? Hänge nun leider schon länger und sehe keinen Weg was machbar ist.
Habt ihr Tips/Erfahrungen? Thx