Browse Source

Add Olight Ostation 2 (#5442)

* Add Olight Ostation 2

* Make chemistry sensor an enum

* Remove empty line

* Fix long lines

* Review comments

* Make temperature as an attribute

* fix(naming convention, comment spacing)

- fix lint warnings with comment spacing
- use unknown_ prefix for unknown dp

---------

Co-authored-by: Jason Rumney <make-all@users.noreply.github.com>
Zsolt Prontvai 6 days ago
parent
commit
2c68495bab

+ 553 - 0
custom_components/tuya_local/devices/olight_ostation_2_battery_charger.yaml

@@ -0,0 +1,553 @@
+name: Battery charger
+products:
+  - id: 1fnensm6
+    manufacturer: Olight
+    model: Ostation 2
+  - id: v8znljza
+    manufacturer: Olight
+    model: Ostation 2
+entities:
+  - entity: switch
+    dps:
+      - id: 101
+        type: boolean
+        name: switch
+  - entity: number
+    name: Wake sensor sensitivity
+    category: config
+    dps:
+      - id: 105
+        type: integer
+        name: value
+        range:
+          min: 1
+          max: 5
+  - entity: switch
+    name: Pause schedule
+    category: config
+    dps:
+      - id: 111
+        type: boolean
+        name: switch
+  - entity: time
+    name: Pause window start
+    category: config
+    dps:
+      - id: 112
+        name: hour
+        type: base64
+        optional: true
+        mask: "FF000000"
+      - id: 112
+        name: minute
+        type: base64
+        optional: true
+        mask: "00FF0000"
+  - entity: time
+    name: Pause window end
+    category: config
+    dps:
+      - id: 112
+        name: hour
+        type: base64
+        optional: true
+        mask: "0000FF00"
+      - id: 112
+        name: minute
+        type: base64
+        optional: true
+        mask: "000000FF"
+  - entity: binary_sensor
+    name: Invalid battery bin full
+    dps:
+      - id: 103
+        type: boolean
+        name: sensor
+  - entity: binary_sensor
+    name: AA storage compartment full
+    dps:
+      - id: 104
+        type: boolean
+        name: sensor
+  - entity: binary_sensor
+    name: AAA storage compartment full
+    dps:
+      - id: 106
+        type: boolean
+        name: sensor
+  - entity: sensor
+    name: Fully charged count
+    category: diagnostic
+    dps:
+      - id: 102
+        type: integer
+        name: sensor
+  - entity: sensor
+    name: Invalid battery count
+    category: diagnostic
+    dps:
+      - id: 108
+        type: integer
+        name: sensor
+      - id: 113
+        type: integer
+        name: unknown_113
+  ######################################################################################################################################################
+  # Slot 3 (bytes 0–16)
+  ######################################################################################################################################################
+  - entity: sensor
+    name: AA slot 1 ID
+    category: diagnostic
+    hidden: true
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "FF00000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 1 chemistry
+    class: enum
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "00FF000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+        mapping:
+          - dps_val: 0
+            value: Detecting
+          - dps_val: 1
+            value: Ni-MH
+  - entity: sensor
+    class: battery
+    name: AA slot 1 charge
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: "%"
+        optional: true
+        mask: "0000FF0000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 1 charge time hour
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: h
+        optional: true
+        mask: "000000FF00000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 1 charge time min
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: min
+        optional: true
+        mask: "00000000FF000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  # Bytes 5–7 are unmapped zero when charging non Li-ion batteries
+  - entity: sensor
+    name: AA slot 1 voltage
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mV
+        optional: true
+        mask: "0000000000000000FFFF00000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 1 current
+    class: current
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mA
+        optional: true
+        mask: "00000000000000000000FFFF0000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+        mapping:
+          - scale: 10
+      - id: 110  # Unknown purpose, added as an attribute for visibility
+        type: base64
+        name: byte12
+        optional: true
+        mask: "000000000000000000000000FF00000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  # Bytes 13–16 are unmapped zero when charging non Li-ion batteries
+
+  ######################################################################################################################################################
+  # Slot 4 (bytes 17–33)
+  ######################################################################################################################################################
+  - entity: sensor
+    name: AA slot 2 ID
+    category: diagnostic
+    hidden: true
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          FF00000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 2 chemistry
+    class: enum
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          00FF000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+        mapping:
+          - dps_val: 0
+            value: Detecting
+          - dps_val: 1
+            value: Ni-MH
+  - entity: sensor
+    class: battery
+    name: AA slot 2 charge
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: "%"
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000FF0000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 2 charge time hour
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: h
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          000000FF00000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 2 charge time min
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: min
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          00000000FF000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  # Bytes 5–7 are unmapped zero when charging non Li-ion batteries
+  - entity: sensor
+    name: AA slot 2 voltage
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mV
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000FFFF00000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AA slot 2 current
+    class: current
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mA
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          00000000000000000000FFFF0000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+        mapping:
+          - scale: 10
+      - id: 110  # Unknown purpose, added as an attribute for visibility
+        type: base64
+        name: byte12
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          000000000000000000000000FF00000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  # Bytes 13–16 are unmapped zero when charging non Li-ion batteries
+
+  ######################################################################################################################################################
+  # Slot 1 (bytes 34–50)
+  ######################################################################################################################################################
+  - entity: sensor
+    name: AAA slot 1 ID
+    category: diagnostic
+    hidden: true
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          FF00000000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 1 chemistry
+    class: enum
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          00FF000000000000000000000000000000\
+          0000000000000000000000000000000000"
+        mapping:
+          - dps_val: 0
+            value: Detecting
+          - dps_val: 1
+            value: Ni-MH
+  - entity: sensor
+    class: battery
+    name: AAA slot 1 charge
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: "%"
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000FF0000000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 1 charge time hour
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: h
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          000000FF00000000000000000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 1 charge time min
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: min
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          00000000FF000000000000000000000000\
+          0000000000000000000000000000000000"
+  # Bytes 5–7 are unmapped zero when charging non Li-ion batteries
+  - entity: sensor
+    name: AAA slot 1 voltage
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mV
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000FFFF00000000000000\
+          0000000000000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 1 current
+    class: current
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mA
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          00000000000000000000FFFF0000000000\
+          0000000000000000000000000000000000"
+        mapping:
+          - scale: 10
+      - id: 110  # Unknown purpose, added as an attribute for visibility
+        type: base64
+        name: byte12
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          000000000000000000000000FF00000000\
+          0000000000000000000000000000000000"
+  # Bytes 13–16 are unmapped zero when charging non Li-ion batteries
+
+  ######################################################################################################################################################
+  # Slot 2 (bytes 51–67)
+  ######################################################################################################################################################
+  - entity: sensor
+    name: AAA slot 2 ID
+    category: diagnostic
+    hidden: true
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          FF00000000000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 2 chemistry
+    class: enum
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          00FF000000000000000000000000000000"
+        mapping:
+          - dps_val: 0
+            value: Detecting
+          - dps_val: 1
+            value: Ni-MH
+  - entity: sensor
+    class: battery
+    name: AAA slot 2 charge
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: "%"
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000FF0000000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 2 charge time hour
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: h
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          000000FF00000000000000000000000000"
+  - entity: sensor
+    name: AAA slot 2 charge time min
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: min
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          00000000FF000000000000000000000000"
+  # Bytes 5–7 are unmapped zero when charging non Li-ion batteries
+  - entity: sensor
+    name: AAA slot 2 voltage
+    class: voltage
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mV
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000FFFF00000000000000"
+  - entity: sensor
+    name: AAA slot 2 current
+    class: current
+    category: diagnostic
+    dps:
+      - id: 110
+        type: base64
+        name: sensor
+        unit: mA
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          00000000000000000000FFFF0000000000"
+        mapping:
+          - scale: 10
+      - id: 110  # Unknown purpose, added as an attribute for visibility
+        type: base64
+        name: byte12
+        optional: true
+        mask: "0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          0000000000000000000000000000000000\
+          000000000000000000000000FF00000000"
+          # Bytes 13–16 are unmapped zero when charging non Li-ion batteries