Răsfoiți Sursa

Add support for Zemismart 3-phase energy meter

Issue #2489

- also add missing docs for translation_placeholder
Jason Rumney 1 an în urmă
părinte
comite
3ef330caf0

+ 1 - 0
ACKNOWLEDGEMENTS.md

@@ -751,3 +751,4 @@ Further device support has been made with the assistance of users. Please consid
 - [brunohenriquy](https://github.com/brunohenriquy) for contributing support for HLG Infinity alarm.
 - [kcoffau](https://github.com/kcoffau) for assisting with support for Spa Electrics Iris light controller.
 - [rale](https://github.com/rale) for contributing improvements to Ryra TYTE-D1 thermostat.
+- [marleshi](https://github.com/marleshi) for assisting with support for Zemismart SDM01 energy meter.

+ 1 - 0
DEVICES.md

@@ -445,6 +445,7 @@
 - WDYK 3 phase 4 pole 400V energy meter circuit breaker
 - WDYK 4P100A energy meter circuit breaker
 - Yagusmart 3PN 63A 3-phase eneregy meter
+- Zemismart SDM01-TW0-12-ZM 3-phase bidirectional energy meter
 - ZM-Wi-Fi smart meter
 
 ### Battery Charger

+ 17 - 0
custom_components/tuya_local/devices/README.md

@@ -89,6 +89,23 @@ use `translation_only_key` instead (this is mostly useful to retain
 backward compatibility where `translation_key` is used to define icons and
 attribute strings but not the entity name.
 
+### `translation_placeholders`
+
+*Optional*
+
+A container for placeholders to be used in the translation string. Contents
+are a mapping from parameter keys used in the translation files, to actual
+values to be used for this entity. If this is specified, then either
+translation_key or translation_only_key must be specified with it.
+
+Example:
+
+```
+  translation_key: switch_x
+  translation_placeholders:
+    x: "1"
+```
+
 ### `category`
 
 *Optional.*

+ 377 - 0
custom_components/tuya_local/devices/zemismart_sdm01_energymeter.yaml

@@ -0,0 +1,377 @@
+name: Energy meter
+products:
+  - id: fzxonzodwjiugioz
+    name: Zemismart SDM01-TW0-12-ZM
+primary_entity:
+  entity: sensor
+  class: energy
+  translation_key: energy_consumed
+  dps:
+    - id: 1
+      type: integer
+      name: sensor
+      unit: kWh
+      class: total_increasing
+      mapping:
+        - scale: 100
+    # Standard phase dps do not appear in log, and data appears to be covered
+    # as X/Y/Z below, so not decoded
+    - id: 6
+      type: string
+      optional: true
+      name: phase_a
+    - id: 7
+      type: string
+      optional: true
+      name: phase_b
+    - id: 8
+      type: string
+      optional: true
+      name: phase_c
+    # Alarms are binary encoded and do not appear in logs, so not decoded
+    - id: 17
+      type: string
+      optional: true
+      name: alarm_set_1
+    - id: 18
+      type: string
+      optional: true
+      name: alarm_set_2
+    - id: 19
+      type: string
+      name: breaker_id
+    - id: 131
+      type: integer
+      name: r485_address
+    - id: 132
+      type: string
+      name: r485_baud_rate
+    - id: 133
+      type: string
+      name: r485_data_format
+secondary_entities:
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 9
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - value: true
+      - id: 9
+        type: bitfield
+        name: fault_code
+  - entity: button
+    name: Clear energy
+    category: config
+    dps:
+      - id: 12
+        type: boolean
+        optional: true
+        name: button
+  - entity: sensor
+    translation_key: energy_produced
+    class: energy
+    dps:
+      - id: 23
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    class: power
+    category: diagnostic
+    dps:
+      - id: 29
+        type: integer
+        name: sensor
+        unit: kW
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    class: frequency
+    category: diagnostic
+    dps:
+      - id: 32
+        type: integer
+        name: sensor
+        unit: Hz
+        class: measurement
+        mapping:
+          - scale: 100
+  - entity: binary_sensor
+    class: connectivity
+    category: diagnostic
+    dps:
+      - id: 35
+        type: string
+        name: sensor
+        mapping:
+          - dps_val: online
+            value: true
+          - dps_val: offline
+            value: false
+  - entity: sensor
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 50
+        type: integer
+        name: sensor
+        class: measurement
+        mapping:
+          - scale: 100
+  - entity: switch
+    name: Locator
+    category: config
+    icon: "mdi:led-on"
+    dps:
+      - id: 101
+        type: boolean
+        name: switch
+  - entity: number
+    name: Reporting interval
+    category: config
+    icon: "mdi:autorenew"
+    dps:
+      - id: 102
+        type: integer
+        name: value
+        unit: s
+        range:
+          min: 5
+          max: 3600
+  - entity: sensor
+    name: Voltage X
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 103
+        type: integer
+        name: sensor
+        unit: V
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    name: Current X
+    class: current
+    category: diagnostic
+    dps:
+      - id: 104
+        type: integer
+        name: sensor
+        unit: A
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    name: Power X
+    class: power
+    category: diagnostic
+    dps:
+      - id: 105
+        type: integer
+        name: sensor
+        unit: kW
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    name: Power factor X
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 108
+        type: integer
+        name: sensor
+        class: measurement
+  - entity: sensor
+    translation_key: energy_consumed_x
+    translation_placeholders:
+      x: X
+    class: energy
+    category: diagnostic
+    dps:
+      - id: 109
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    translation_key: energy_produced_x
+    translation_placeholders:
+      x: X
+    class: energy
+    category: diagnostic
+    dps:
+      - id: 110
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    name: Voltage Y
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 112
+        type: integer
+        name: sensor
+        unit: V
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    name: Current Y
+    class: current
+    category: diagnostic
+    dps:
+      - id: 113
+        type: integer
+        name: sensor
+        unit: A
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    name: Power Y
+    class: power
+    category: diagnostic
+    dps:
+      - id: 114
+        type: integer
+        name: sensor
+        unit: kW
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    name: Power factor Y
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 117
+        type: integer
+        name: sensor
+        class: measurement
+  - entity: sensor
+    translation_key: energy_consumed_x
+    translation_placeholders:
+      x: Y
+    class: energy
+    category: diagnostic
+    dps:
+      - id: 118
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    translation_key: energy_produced_x
+    translation_placeholders:
+      x: Y
+    class: energy
+    category: diagnostic
+    dps:
+      - id: 119
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    name: Voltage Z
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 121
+        type: integer
+        name: sensor
+        unit: V
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    name: Current Z
+    class: current
+    category: diagnostic
+    dps:
+      - id: 122
+        type: integer
+        name: sensor
+        unit: A
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    name: Power Z
+    class: power
+    category: diagnostic
+    dps:
+      - id: 123
+        type: integer
+        name: sensor
+        unit: kW
+        class: measurement
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    name: Power factor Z
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 126
+        type: integer
+        name: sensor
+        class: measurement
+  - entity: sensor
+    translation_key: energy_consumed_x
+    translation_placeholders:
+      x: Z
+    class: energy
+    category: diagnostic
+    dps:
+      - id: 127
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    translation_key: energy_produced_x
+    translation_placeholders:
+      x: Z
+    class: energy
+    category: diagnostic
+    dps:
+      - id: 128
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    name: Current imbalance
+    category: diagnostic
+    dps:
+      - id: 130
+        type: integer
+        name: sensor
+        unit: "%"
+        class: measurement