Просмотр исходного кода

Add support for Ketotek KTEM06pro energy meter

Issue #2770
Jason Rumney 1 год назад
Родитель
Сommit
e471d51e99

+ 1 - 0
ACKNOWLEDGEMENTS.md

@@ -826,3 +826,4 @@ Further device support has been made with the assistance of users. Please consid
 - [gurtjun](https://github.com/gurtjun) for contributing support for Sunred Triangle patio heater.
 - [josefelixh](https://github.com/josefelixh) for contributing support for KB15A Bluetooth keypad lock.
 - [JackM-521](https://github.com/JackM-521) for assisting with support for Rohnson R-9530 dehumidifier.
+- [fra-iesus](https://github.com/fra-iesus) for assisting with support for Ketotek KTEM06pro energy meter.

+ 1 - 0
DEVICES.md

@@ -461,6 +461,7 @@
 - ERZ04C smart meter
 - Gaqqee KWS-302-WF energy meter
 - Geonav HISB80A energy meter
+- Ketotek KTEM06pro energy meter
 - MatSee Plus bidirectional two channel clamp meter (multiple variants)
 - Meterk single phase clamp meter
 - Parkside PG/PMW-300 solar inverter

+ 488 - 0
custom_components/tuya_local/devices/ketotek_ktem06pro_energymeter.yaml

@@ -0,0 +1,488 @@
+name: Energy meter
+products:
+  - id: i55reuttymjocx0j
+    manufacturer: Ketotek
+    model: KTEM06pro
+entities:
+  - entity: sensor
+    translation_key: energy_consumed
+    class: energy
+    dps:
+      - id: 1
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+      - id: 108
+        type: string
+        name: breaker_id
+  - entity: sensor
+    translation_key: power_x
+    translation_placeholders:
+      x: A
+    class: power
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        unit: kW
+        class: measurement
+        mask: "00FFFFFF0000000000000000000000"
+        mapping:
+          - scale: 1000
+      - id: 106
+        type: integer
+        name: multiplier
+        optional: true
+  - entity: binary_sensor
+    name: Power direction A
+    translation_key: direction
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        mask: "010000000000000000000000000000"
+  - entity: sensor
+    name: Reactive power A
+    class: reactive_power
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        unit: var
+        class: measurement
+        mask: "0000000000FFFFFF00000000000000"
+  - entity: binary_sensor
+    name: Reactive power direction A
+    translation_key: direction
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        mask: "000000000100000000000000000000"
+  - entity: sensor
+    name: Power factor A
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        class: measurement
+        mask: "0000000000000000FFFF0000000000"
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    translation_key: current_x
+    translation_placeholders:
+      x: A
+    class: current
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        unit: A
+        class: measurement
+        mask: "00000000000000000000FFFFFF0000"
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    translation_key: voltage_x
+    translation_placeholders:
+      x: A
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 6
+        type: base64
+        optional: true
+        name: sensor
+        unit: V
+        class: measurement
+        mask: "00000000000000000000000000FFFF"
+        mapping:
+          - scale: 10
+  - entity: sensor
+    translation_key: power_x
+    translation_placeholders:
+      x: B
+    class: power
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        unit: kW
+        class: measurement
+        mask: "00FFFFFF0000000000000000000000"
+        mapping:
+          - scale: 1000
+  - entity: binary_sensor
+    name: Power direction B
+    translation_key: direction
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        mask: "010000000000000000000000000000"
+  - entity: sensor
+    name: Reactive power B
+    class: reactive_power
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        unit: var
+        class: measurement
+        mask: "0000000000FFFFFF00000000000000"
+  - entity: binary_sensor
+    name: Reactive power direction B
+    translation_key: direction
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        mask: "000000000100000000000000000000"
+  - entity: sensor
+    name: Power factor B
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        class: measurement
+        mask: "0000000000000000FFFF0000000000"
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    translation_key: current_x
+    translation_placeholders:
+      x: B
+    class: current
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        unit: A
+        class: measurement
+        mask: "00000000000000000000FFFFFF0000"
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    translation_key: voltage_x
+    translation_placeholders:
+      x: B
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 7
+        type: base64
+        optional: true
+        name: sensor
+        unit: V
+        class: measurement
+        mask: "00000000000000000000000000FFFF"
+        mapping:
+          - scale: 10
+  - entity: sensor
+    translation_key: power_x
+    translation_placeholders:
+      x: C
+    class: power
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        unit: kW
+        class: measurement
+        mask: "00FFFFFF0000000000000000000000"
+        mapping:
+          - scale: 1000
+  - entity: binary_sensor
+    name: Power direction C
+    translation_key: direction
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        mask: "010000000000000000000000000000"
+  - entity: sensor
+    name: Reactive power C
+    class: reactive_power
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        unit: var
+        class: measurement
+        mask: "0000000000FFFFFF00000000000000"
+  - entity: binary_sensor
+    name: Reactive power direction C
+    translation_key: direction
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        mask: "000000000100000000000000000000"
+  - entity: sensor
+    name: Power factor C
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        class: measurement
+        mask: "0000000000000000FFFF0000000000"
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    translation_key: current_x
+    translation_placeholders:
+      x: C
+    class: current
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        unit: A
+        class: measurement
+        mask: "00000000000000000000FFFFFF0000"
+        mapping:
+          - scale: 1000
+  - entity: sensor
+    translation_key: voltage_x
+    translation_placeholders:
+      x: C
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 8
+        type: base64
+        optional: true
+        name: sensor
+        unit: V
+        class: measurement
+        mask: "00000000000000000000000000FFFF"
+        mapping:
+          - scale: 10
+  - 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: switch
+    name: Prepayment
+    category: config
+    icon: "mdi:hand-coin"
+    dps:
+      - id: 11
+        type: boolean
+        name: switch
+  - entity: button
+    name: Clear energy
+    category: config
+    dps:
+      - id: 12
+        type: boolean
+        optional: true
+        name: button
+      - id: 11
+        type: boolean
+        name: available
+  - entity: sensor
+    name: Balance energy
+    category: diagnostic
+    dps:
+      - id: 13
+        type: integer
+        name: sensor
+        unit: kWh
+        class: measurement
+        mapping:
+          - scale: 100
+      - id: 11
+        type: boolean
+        name: available
+  - entity: number
+    name: Charge energy
+    category: config
+    class: energy
+    dps:
+      - id: 14
+        type: integer
+        optional: true
+        persist: false
+        name: value
+        unit: kWh
+        range:
+          min: 0
+          max: 999999
+        mapping:
+          - dps_val: null
+            value: 0
+      - id: 11
+        type: boolean
+        name: available
+  - entity: sensor
+    name: Leakage current
+    class: current
+    category: diagnostic
+    dps:
+      - id: 15
+        type: integer
+        optional: true
+        name: sensor
+        unit: mA
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: switch
+    icon: "mdi:fuse"
+    dps:
+      - id: 16
+        type: boolean
+        name: switch
+      - id: 17
+        type: string
+        optional: true
+        name: alarm_set_1
+      - id: 18
+        type: string
+        optional: true
+        name: alarm_set_2
+  - entity: sensor
+    class: energy
+    dps:
+      - id: 101
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    translation_key: energy_produced
+    class: energy
+    dps:
+      - id: 102
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total_increasing
+        mapping:
+          - scale: 100
+  - entity: sensor
+    class: power
+    category: diagnostic
+    dps:
+      - id: 103
+        type: integer
+        name: sensor
+        unit: kW
+        class: measurement
+        mapping:
+          - scale: 3
+  - entity: sensor
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 104
+        type: integer
+        optional: true
+        name: sensor
+        unit: C
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    class: frequency
+    category: diagnostic
+    dps:
+      - id: 105
+        type: integer
+        name: sensor
+        unit: Hz
+        class: measurement
+        mapping:
+          - scale: 100
+  - entity: number
+    translation_key: timer
+    class: duration
+    category: config
+    dps:
+      - id: 107
+        type: integer
+        name: value
+        unit: min
+        range:
+          min: 0
+          max: 1440
+  - entity: sensor
+    class: reactive_power
+    category: diagnostic
+    dps:
+      - id: 110
+        type: integer
+        name: sensor
+        unit: var
+        class: measurement
+      - id: 109
+        type: integer
+        name: energy_kvarh
+        mapping:
+          - scale: 100
+  - entity: sensor
+    class: power_factor
+    category: diagnostic
+    dps:
+      - id: 111
+        type: integer
+        name: sensor
+        class: measurement
+        mapping:
+          - scale: 1000

+ 7 - 0
custom_components/tuya_local/icons.json

@@ -1,6 +1,13 @@
 {
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "default": "mdi:arrow-left-right"
+                "state": {
+                    "off": "mdi:home-import-outline",
+                    "on": "mdi:home-export-outline"
+                }
+            },
             "defrost": {
                 "default": "mdi:circle-outline",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/bg.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Посока",
+                "state": {
+                    "off": "Входящ",
+                    "on": "Изходящ"
+                }
+            },
             "defrost": {
                 "name": "Размразяване",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/cz.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Směr",
+                "state": {
+                    "off": "Příchozí",
+                    "on": "Odchozí"
+                }
+            },
             "defrost": {
                 "name": "Rozmrazovat",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/de.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Richtung",
+                "state": {
+                    "off": "In",
+                    "on": "Out"
+                }
+            },
             "defrost": {
                 "name": "Defrost",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/el.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Κατεύθυνση",
+                "state": {
+                    "off": "Εισερχόμενο",
+                    "on": "Εξερχόμενο"
+                }
+            },
             "defrost": {
                 "name": "Απόψυξη",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/en.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Direction",
+                "state": {
+                    "off": "In",
+                    "on": "Out"
+                }
+            },
             "defrost": {
                 "name": "Defrost",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/es.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Dirección",
+                "state": {
+                    "off": "Entrante",
+                    "on": "Saliente"
+                }
+            },
             "defrost": {
                 "name": "Descongelar",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/fr.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Direction",
+                "state": {
+                    "off": "Entrant",
+                    "on": "Sortant"
+                }
+            },
             "defrost": {
                 "name": "Dégivrer",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/hu.json

@@ -101,6 +101,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Irány",
+                "state": {
+                    "off": "Bejövő",
+                    "on": "Kimenő"
+                }
+            },
             "defrost": {
                 "name": "Leolvasztani",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/id.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Arah",
+                "state": {
+                    "off": "Masuk",
+                    "on": "Keluar"
+                }
+            },
             "defrost": {
                 "name": "Mencairkan beku",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/it.json

@@ -101,6 +101,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Direzione",
+                "state": {
+                    "off": "In",
+                    "on": "Out"
+                }
+            },
             "defrost": {
                 "name": "Scongelare",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/ja.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "方向",
+                "state": {
+                    "off": "入る",
+                    "on": "出る"
+                }
+            },
             "defrost": {
                 "name": "デフロスト",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/no-NB.json

@@ -101,6 +101,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Retning",
+                "state": {
+                    "off": "Inne",
+                    "on": "Ute"
+                }
+            },
             "defrost": {
                 "name": "Tine",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/pl.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Kierunek",
+                "state": {
+                    "off": "Przychodzący",
+                    "on": "Wychodzący"
+                }
+            },
             "defrost": {
                 "name": "Rozmrażać",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/pt-BR.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Direção",
+                "state": {
+                    "off": "Entrada",
+                    "on": "Saída"
+                }
+            },
             "defrost": {
                 "name": "Descongelar",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/ru.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Направление",
+                "state": {
+                    "off": "Входящий",
+                    "on": "Исходящий"
+                }
+            },
             "defrost": {
                 "name": "Разморозка",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/uk.json

@@ -102,6 +102,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "Напрямок",
+                "state": {
+                    "off": "Вхідний",
+                    "on": "Вихідний"
+                }
+            },
             "defrost": {
                 "name": "Розморожування",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/ur.json

@@ -103,6 +103,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "سمت",
+                "state": {
+                    "off": "آنے والی",
+                    "on": "جانب"
+                }
+            },
             "defrost": {
                 "name": "ڈیفروسٹ",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/zh-Hans.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "方向",
+                "state": {
+                    "off": "进入",
+                    "on": "离开"
+                }
+            },
             "defrost": {
                 "name": "除霜",
                 "state": {

+ 7 - 0
custom_components/tuya_local/translations/zh-Hant.json

@@ -100,6 +100,13 @@
     },
     "entity": {
         "binary_sensor": {
+            "direction": {
+                "name": "方向",
+                "state": {
+                    "off": "進入",
+                    "on": "離開"
+                }
+            },
             "defrost": {
                 "name": "除霜",
                 "state": {