Skip to content

Commit

Permalink
Conditional mappings do not support default mappings.
Browse files Browse the repository at this point in the history
Defaults for conditions have to be set one level up in the mapping,
as the conditions only look for matches, not keep track of defaults.
There may be some side-effect to changing this, and setting one level
up is an acceptable workaround.

In read-write situations that need to control which options are set
for a specific value, it is sometimes better to list all conditions
rather than use a default.

Main effect is on climate hvac_action, swing_mode where more than just
two options for vertical and horizontal are available, cover actions
where opened/opening, closed/closing need to distinguished based on
position, and complex logic to handle optional vacuum activate and
pause switches.

Issue #1709
  • Loading branch information
make-all committed Mar 7, 2024
1 parent 1d19ca0 commit aabc4e8
Show file tree
Hide file tree
Showing 31 changed files with 117 additions and 71 deletions.
11 changes: 11 additions & 0 deletions custom_components/tuya_local/devices/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,17 @@ If `constraint_dp` is readonly:
| c | y | target_dp: 2 |
| c | z | target_dp: 1 |

Note that each condition must specify a `dps_val` to match againt. If you want to specify a default match, do it outside the conditions.

```
mapping:
- dps_val: some_value
value: defaulted
constraint: other_dp
conditions:
- dps_val: other_value
value: overridden
```


## Entity types
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ primary_entity:
conditions:
- dps_val: false
value: "off"
- mapping:
- dps_val: true
mapping:
- dps_val: open
value: heating
- value: idle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,21 @@ primary_entity:
type: string
mapping:
- dps_val: opening
value: opening
constraint: current_position
conditions:
- dps_val: 100
value: opened
- dps_val: null
value: opened
- value: opening
- dps_val: closing
value: closing
constraint: current_position
conditions:
- dps_val: 0
value: closed
- dps_val: null
value: closed
- value: closing
secondary_entities:
- entity: select
translation_key: timer
Expand Down
2 changes: 1 addition & 1 deletion custom_components/tuya_local/devices/becool_heatpump.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ primary_entity:
- dps_val: false
value: "off"
- dps_val: true
value: fan_only
constraint: mode
conditions:
- dps_val: "0"
Expand All @@ -21,7 +22,6 @@ primary_entity:
value: cool
- dps_val: "5"
value: heat
- value: fan_only
- id: 4
type: integer
name: unknown_4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ primary_entity:
hidden: true
- dps_val: home
value: heat
- value: heat
- dps_val: leave
value: heat
hidden: true
- dps_val: false
value: "off"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,13 @@ primary_entity:
name: hvac_action
mapping:
- dps_val: open
value: idle
constraint: preset_mode
conditions:
- dps_val: [cool, floor]
value: cooling
- dps_val: [heat, floor_heat]
value: heating
- value: idle
- dps_val: close
constraint: hvac_mode
conditions:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ primary_entity:
name: action
mapping:
- dps_val: opening
value: opening
constraint: current_position
conditions:
- dps_val: 100
value: opened
- value: opening
- dps_val: closing
value: closing
constraint: current_position
conditions:
- dps_val: 0
value: closed
- value: closing
- id: 11
type: string
name: unknown_11
Expand Down
8 changes: 4 additions & 4 deletions custom_components/tuya_local/devices/daizuki_heatpump.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,26 +70,26 @@ primary_entity:
name: swing_mode
mapping:
- dps_val: "0"
value: horizontal
constraint: horizontal_swing
conditions:
- dps_val: "0"
value: "off"
- dps_val: "1"
value: horizontal
- value: horizontal
- dps_val: "1"
value: both
constraint: horizontal_swing
conditions:
- dps_val: "0"
value: vertical
- dps_val: "1"
value: both
- value: both
- constraint: horizontal_swing
- value: both
constraint: horizontal_swing
conditions:
- dps_val: "0"
value: vertical
- value: both
- id: 114
type: string
name: horizontal_swing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,19 @@ primary_entity:
type: string
mapping:
- dps_val: opening
value: opening
constraint: current_position
conditions:
- dps_val: 0
value: opened
- value: opening
- dps_val: closing
value: closing
constraint: current_position
conditions:
- dps_val: 100
value: closed
- dps_val: null
value: closed
- value: closing
- id: 12
name: fault_code
type: bitfield
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,18 @@ primary_entity:
type: string
mapping:
- dps_val: Running
value: heating
constraint: preset_mode
conditions:
- dps_val: ["Cooling_Powerful", "Cooling_Smart", "Cooling_Silent"]
value: cooling
- value: heating
- dps_val: Defrosting
value: preheating
- constraint: hvac_mode
- value: idle
constraint: hvac_mode
conditions:
- dps_val: false
value: "off"
- value: idle
- id: 101
name: temperature
type: integer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,8 @@ secondary_entities:
mapping:
- constraint: dehumidifier_mode
conditions:
- dps_val: Manual
- dps_val: Purifier
- invalid: true
- dps_val: [Auto, Laundrydrying, Sleeping]
invalid: true
- id: 4
name: speed
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ primary_entity:
value: "off"
- dps_val: true
value: horizontal
- value: "off"
- dps_val: null
value: "off"
hidden: true
- dps_val: true
constraint: swing_horiz
Expand All @@ -87,14 +88,16 @@ primary_entity:
value: vertical
- dps_val: true
value: both
- value: vertical
- dps_val: null
value: vertical
hidden: true
- constraint: swing_horiz
conditions:
- dps_val: true
value: horizontal
hidden: true
- value: "off"
- dps_val: null
value: "off"
hidden: true
- id: 33
type: boolean
Expand Down Expand Up @@ -130,21 +133,21 @@ secondary_entities:
optional: true
mapping:
- dps_val: 0
value: true
constraint: fault_code_2
conditions:
- dps_val: null
value: false
- dps_val: 0
value: false
- value: true
- dps_val: null
value: true
constraint: fault_code_2
conditions:
- dps_val: null
value: false
- dps_val: 0
value: false
- value: true
- value: true
- id: 22
type: bitfield
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,10 @@ primary_entity:
type: boolean
name: hvac_action
mapping:
- constraint: hvac_mode
- icon: "mdi:thermometer-off"
icon_priority: 5
value: "off"
constraint: hvac_mode
conditions:
- dps_val: "on"
mapping:
Expand All @@ -100,12 +103,7 @@ primary_entity:
icon_priority: 6
value: heating
- dps_val: false
icon: "mdi:thermometer-off"
icon_priority: 5
value: idle
- icon: "mdi:thermometer-off"
icon_priority: 5
value: "off"
- id: 116
type: integer
name: current_temperature_f
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ primary_entity:
conditions:
- dps_val: false
value: "off"
- mapping:
- dps_val: true
mapping:
- dps_val: true
value: heating
- dps_val: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,22 @@ primary_entity:
conditions:
- dps_val: true
value: false
- value: false
- dps_val: false
value: false
hidden: true
- dps_val: null
value: false
hidden: true
- dps_val: true
constraint: pause
conditions:
- dps_val: false
value: true
- value: true
- dps_val: true
value: true
hidden: true
- dps_val: null
value: true
hidden: true
- dps_val: null
value: false
Expand Down
4 changes: 2 additions & 2 deletions custom_components/tuya_local/devices/m027_curtain.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,21 @@ primary_entity:
persist: false
mapping:
- dps_val: opening
value: opening
constraint: current_position
conditions:
- dps_val: 100
value: opened
- dps_val: null
value: opened
- value: opening
- dps_val: closing
value: closing
constraint: current_position
conditions:
- dps_val: 0
value: closed
- dps_val: null
value: closed
- value: closing
- id: 12
name: fault_code
type: bitfield
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,11 @@ secondary_entities:
name: sensor
mapping:
- dps_val: 0
value: true
constraint: fault_2
conditions:
- dps_val: 0
value: false
- value: true
- value: true
- entity: sensor
name: Compressor strength
Expand Down
2 changes: 0 additions & 2 deletions custom_components/tuya_local/devices/me80_thermostat.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ primary_entity:
value: auto
- dps_val: manual
value: heat
# in case of unknown presets
- value: heat
- dps_val: false
value: "off"
- id: 2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ primary_entity:
hidden: true
- dps_val: CF
value: heat
- value: heat
- dps_val: [EC, AF]
value: heat
hidden: true
- dps_val: ST
value: "off"
hidden: true
- id: 2
type: integer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ primary_entity:
value: heat
- dps_val: mute
value: heat_cool
- value: heat_cool
- id: 2
name: heating_mode
hidden: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ secondary_entities:
conditions:
- dps_val: airpurify
value_redirect: purify_speed
- mapping:
- dps_val: [dehum_air, dehum30_air]
mapping:
- dps_val: low
value: 33
- dps_val: mid
Expand Down
Loading

0 comments on commit aabc4e8

Please sign in to comment.