Add some more sensors to miele integration (#142979)

* Add some more sensors

* Add some debug logging and correct spelling

* Address review comments

* Split out duration sensors to separate PR

* Update strings

* Filter program phases by device type

* Update tests

* Fix auto link

* Address som of the comments

* Lint

* Lint

* Remove duplicates from enum sensor options

* Update snapshot

* Sort options in enum sensors
This commit is contained in:
Åke Strandberg 2025-04-29 13:07:55 +02:00 committed by GitHub
parent 1e880f7406
commit da6fb91886
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 2907 additions and 89 deletions

View File

@ -10,15 +10,17 @@ POWER_ON = "powerOn"
POWER_OFF = "powerOff"
PROCESS_ACTION = "processAction"
VENTILATION_STEP = "ventilationStep"
DISABLED_TEMP_ENTITIES = (
-32768 / 100,
-32766 / 100,
)
TARGET_TEMPERATURE = "targetTemperature"
AMBIENT_LIGHT = "ambientLight"
LIGHT = "light"
LIGHT_ON = 1
LIGHT_OFF = 2
DISABLED_TEMP_ENTITIES = (
-32768 / 100,
-32766 / 100,
)
class MieleAppliance(IntEnum):
"""Define appliance types."""
@ -161,3 +163,933 @@ PROCESS_ACTIONS = {
"start_supercooling": MieleActions.START_SUPERCOOL,
"stop_supercooling": MieleActions.STOP_SUPERCOOL,
}
STATE_PROGRAM_PHASE_WASHING_MACHINE = {
0: "not_running", # Returned by the API when the machine is switched off entirely.
256: "not_running",
257: "pre_wash",
258: "soak",
259: "pre_wash",
260: "main_wash",
261: "rinse",
262: "rinse_hold",
263: "cleaning",
264: "cooling_down",
265: "drain",
266: "spin",
267: "anti_crease",
268: "finished",
269: "venting",
270: "starch_stop",
271: "freshen_up_and_moisten",
272: "steam_smoothing",
279: "hygiene",
280: "drying",
285: "disinfecting",
295: "steam_smoothing",
65535: "not_running", # Seems to be default for some devices.
}
STATE_PROGRAM_PHASE_TUMBLE_DRYER = {
0: "not_running",
512: "not_running",
513: "program_running",
514: "drying",
515: "machine_iron",
516: "hand_iron_2",
517: "normal",
518: "normal_plus",
519: "cooling_down",
520: "hand_iron_1",
521: "anti_crease",
522: "finished",
523: "extra_dry",
524: "hand_iron",
526: "moisten",
527: "thermo_spin",
528: "timed_drying",
529: "warm_air",
530: "steam_smoothing",
531: "comfort_cooling",
532: "rinse_out_lint",
533: "rinses",
535: "not_running",
534: "smoothing",
536: "not_running",
537: "not_running",
538: "slightly_dry",
539: "safety_cooling",
65535: "not_running",
}
STATE_PROGRAM_PHASE_DISHWASHER = {
1792: "not_running",
1793: "reactivating",
1794: "pre_dishwash",
1795: "main_dishwash",
1796: "rinse",
1797: "interim_rinse",
1798: "final_rinse",
1799: "drying",
1800: "finished",
1801: "pre_dishwash",
65535: "not_running",
}
STATE_PROGRAM_PHASE_OVEN = {
0: "not_running",
3073: "heating_up",
3074: "process_running",
3078: "process_finished",
3084: "energy_save",
65535: "not_running",
}
STATE_PROGRAM_PHASE_WARMING_DRAWER = {
0: "not_running",
3075: "door_open",
3094: "keeping_warm",
3088: "cooling_down",
65535: "not_running",
}
STATE_PROGRAM_PHASE_MICROWAVE = {
0: "not_running",
3329: "heating",
3330: "process_running",
3334: "process_finished",
3340: "energy_save",
65535: "not_running",
}
STATE_PROGRAM_PHASE_COFFEE_SYSTEM = {
# Coffee system
3073: "heating_up",
4352: "not_running",
4353: "espresso",
4355: "milk_foam",
4361: "dispensing",
4369: "pre_brewing",
4377: "grinding",
4401: "2nd_grinding",
4354: "hot_milk",
4393: "2nd_pre_brewing",
4385: "2nd_espresso",
4404: "dispensing",
4405: "rinse",
65535: "not_running",
}
STATE_PROGRAM_PHASE_ROBOT_VACUUM_CLEANER = {
0: "not_running",
5889: "vacuum_cleaning",
5890: "returning",
5891: "vacuum_cleaning_paused",
5892: "going_to_target_area",
5893: "wheel_lifted", # F1
5894: "dirty_sensors", # F2
5895: "dust_box_missing", # F3
5896: "blocked_drive_wheels", # F4
5897: "blocked_brushes", # F5
5898: "motor_overload", # F6
5899: "internal_fault", # F7
5900: "blocked_front_wheel", # F8
5903: "docked",
5904: "docked",
5910: "remote_controlled",
65535: "not_running",
}
STATE_PROGRAM_PHASE_MICROWAVE_OVEN_COMBO = {
0: "not_running",
3863: "steam_reduction",
7938: "process_running",
7939: "waiting_for_start",
7940: "heating_up_phase",
7942: "process_finished",
65535: "not_running",
}
STATE_PROGRAM_PHASE: dict[int, dict[int, str]] = {
MieleAppliance.WASHING_MACHINE: STATE_PROGRAM_PHASE_WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_SEMI_PROFESSIONAL: STATE_PROGRAM_PHASE_WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_PROFESSIONAL: STATE_PROGRAM_PHASE_WASHING_MACHINE,
MieleAppliance.TUMBLE_DRYER: STATE_PROGRAM_PHASE_TUMBLE_DRYER,
MieleAppliance.DRYER_PROFESSIONAL: STATE_PROGRAM_PHASE_TUMBLE_DRYER,
MieleAppliance.TUMBLE_DRYER_SEMI_PROFESSIONAL: STATE_PROGRAM_PHASE_TUMBLE_DRYER,
MieleAppliance.DISHWASHER: STATE_PROGRAM_PHASE_DISHWASHER,
MieleAppliance.DISHWASHER_SEMI_PROFESSIONAL: STATE_PROGRAM_PHASE_DISHWASHER,
MieleAppliance.DISHWASHER_PROFESSIONAL: STATE_PROGRAM_PHASE_DISHWASHER,
MieleAppliance.OVEN: STATE_PROGRAM_PHASE_OVEN,
MieleAppliance.OVEN_MICROWAVE: STATE_PROGRAM_PHASE_MICROWAVE_OVEN_COMBO,
MieleAppliance.STEAM_OVEN: STATE_PROGRAM_PHASE_OVEN,
MieleAppliance.DIALOG_OVEN: STATE_PROGRAM_PHASE_OVEN,
MieleAppliance.MICROWAVE: STATE_PROGRAM_PHASE_MICROWAVE,
MieleAppliance.COFFEE_SYSTEM: STATE_PROGRAM_PHASE_COFFEE_SYSTEM,
MieleAppliance.ROBOT_VACUUM_CLEANER: STATE_PROGRAM_PHASE_ROBOT_VACUUM_CLEANER,
}
STATE_PROGRAM_TYPE = {
0: "normal_operation_mode",
1: "own_program",
2: "automatic_program",
3: "cleaning_care_program",
4: "maintenance_program",
}
WASHING_MACHINE_PROGRAM_ID: dict[int, str] = {
-1: "no_program", # Extrapolated from other device types.
0: "no_program", # Returned by the API when no program is selected.
1: "cottons",
3: "minimum_iron",
4: "delicates",
8: "woollens",
9: "silks",
17: "starch",
18: "rinse",
21: "drain_spin",
22: "curtains",
23: "shirts",
24: "denim",
27: "proofing",
29: "sportswear",
31: "automatic_plus",
37: "outerwear",
39: "pillows",
45: "cool_air", # washer-dryer
46: "warm_air", # washer-dryer
48: "rinse_out_lint", # washer-dryer
50: "dark_garments",
52: "separate_rinse_starch",
53: "first_wash",
69: "cottons_hygiene",
75: "steam_care", # washer-dryer
76: "freshen_up", # washer-dryer
77: "trainers",
91: "clean_machine",
95: "down_duvets",
122: "express_20",
123: "denim",
129: "down_filled_items",
133: "cottons_eco",
146: "quick_power_wash",
190: "eco_40_60",
}
DISHWASHER_PROGRAM_ID: dict[int, str] = {
-1: "no_program", # Sometimes returned by the API when the machine is switched off entirely, in conjunection with program phase 65535.
0: "no_program", # Returned by the API when the machine is switched off entirely.
1: "intensive",
2: "maintenance",
3: "eco",
6: "automatic",
7: "automatic",
9: "solar_save",
10: "gentle",
11: "extra_quiet",
12: "hygiene",
13: "quick_power_wash",
14: "pasta_paela",
17: "tall_items",
19: "glasses_warm",
26: "intensive",
27: "maintenance", # or maintenance_program?
28: "eco",
30: "normal",
31: "automatic",
32: "automatic", # sources disagree on ID
34: "solar_save",
35: "gentle",
36: "extra_quiet",
37: "hygiene",
38: "quick_power_wash",
42: "tall_items",
44: "power_wash",
}
TUMBLE_DRYER_PROGRAM_ID: dict[int, str] = {
-1: "no_program", # Extrapolated from other device types.
0: "no_program", # Extrapolated from other device types
10: "automatic_plus",
20: "cottons",
23: "cottons_hygiene",
30: "minimum_iron",
31: "gentle_minimum_iron",
40: "woollens_handcare",
50: "delicates",
60: "warm_air",
70: "cool_air",
80: "express",
90: "cottons",
100: "gentle_smoothing",
120: "proofing",
130: "denim",
131: "gentle_denim",
150: "sportswear",
160: "outerwear",
170: "silks_handcare",
190: "standard_pillows",
220: "basket_program",
240: "smoothing",
99001: "steam_smoothing",
99002: "bed_linen",
99003: "cottons_eco",
99004: "shirts",
99005: "large_pillows",
}
OVEN_PROGRAM_ID: dict[int, str] = {
-1: "no_program", # Extrapolated from other device types.
0: "no_program", # Extrapolated from other device types
1: "defrost",
6: "eco_fan_heat",
7: "auto_roast",
10: "full_grill",
11: "economy_grill",
13: "fan_plus",
14: "intensive_bake",
19: "microwave",
24: "conventional_heat",
25: "top_heat",
29: "fan_grill",
31: "bottom_heat",
35: "moisture_plus_auto_roast",
40: "moisture_plus_fan_plus",
74: "moisture_plus_intensive_bake",
76: "moisture_plus_conventional_heat",
49: "moisture_plus_fan_plus",
356: "defrost",
357: "drying",
358: "heat_crockery",
361: "steam_cooking",
362: "keeping_warm",
512: "1_tray",
513: "2_trays",
529: "baking_tray",
621: "prove_15_min",
622: "prove_30_min",
623: "prove_45_min",
99001: "steam_bake",
17003: "no_program",
}
DISH_WARMER_PROGRAM_ID: dict[int, str] = {
-1: "no_program",
0: "no_program",
1: "warm_cups_glasses",
2: "warm_dishes_plates",
3: "keep_warm",
4: "slow_roasting",
}
ROBOT_VACUUM_CLEANER_PROGRAM_ID: dict[int, str] = {
-1: "no_program", # Extrapolated from other device types
0: "no_program", # Extrapolated from other device types
1: "auto",
2: "spot",
3: "turbo",
4: "silent",
}
COFFEE_SYSTEM_PROGRAM_ID: dict[int, str] = {
-1: "no_program", # Extrapolated from other device types
0: "no_program", # Extrapolated from other device types
16016: "appliance_settings", # display brightness
16018: "appliance_settings", # volume
16019: "appliance_settings", # buttons volume
16020: "appliance_settings", # child lock
16021: "appliance_settings", # water hardness
16027: "appliance_settings", # welcome sound
16033: "appliance_settings", # connection status
16035: "appliance_settings", # remote control
16037: "appliance_settings", # remote update
17004: "check_appliance",
# profile 1
24000: "ristretto",
24001: "espresso",
24002: "coffee",
24003: "long_coffee",
24004: "cappuccino",
24005: "cappuccino_italiano",
24006: "latte_macchiato",
24007: "espresso_macchiato",
24008: "cafe_au_lait",
24009: "caffe_latte",
24012: "flat_white",
24013: "very_hot_water",
24014: "hot_water",
24015: "hot_milk",
24016: "milk_foam",
24017: "black_tea",
24018: "herbal_tea",
24019: "fruit_tea",
24020: "green_tea",
24021: "white_tea",
24022: "japanese_tea",
# profile 2
24032: "ristretto",
24033: "espresso",
24034: "coffee",
24035: "long_coffee",
24036: "cappuccino",
24037: "cappuccino_italiano",
24038: "latte_macchiato",
24039: "espresso_macchiato",
24040: "cafe_au_lait",
24041: "caffe_latte",
24044: "flat_white",
24045: "very_hot_water",
24046: "hot_water",
24047: "hot_milk",
24048: "milk_foam",
24049: "black_tea",
24050: "herbal_tea",
24051: "fruit_tea",
24052: "green_tea",
24053: "white_tea",
24054: "japanese_tea",
# profile 3
24064: "ristretto",
24065: "espresso",
24066: "coffee",
24067: "long_coffee",
24068: "cappuccino",
24069: "cappuccino_italiano",
24070: "latte_macchiato",
24071: "espresso_macchiato",
24072: "cafe_au_lait",
24073: "caffe_latte",
24076: "flat_white",
24077: "very_hot_water",
24078: "hot_water",
24079: "hot_milk",
24080: "milk_foam",
24081: "black_tea",
24082: "herbal_tea",
24083: "fruit_tea",
24084: "green_tea",
24085: "white_tea",
24086: "japanese_tea",
# profile 4
24096: "ristretto",
24097: "espresso",
24098: "coffee",
24099: "long_coffee",
24100: "cappuccino",
24101: "cappuccino_italiano",
24102: "latte_macchiato",
24103: "espresso_macchiato",
24104: "cafe_au_lait",
24105: "caffe_latte",
24108: "flat_white",
24109: "very_hot_water",
24110: "hot_water",
24111: "hot_milk",
24112: "milk_foam",
24113: "black_tea",
24114: "herbal_tea",
24115: "fruit_tea",
24116: "green_tea",
24117: "white_tea",
24118: "japanese_tea",
# profile 5
24128: "ristretto",
24129: "espresso",
24130: "coffee",
24131: "long_coffee",
24132: "cappuccino",
24133: "cappuccino_italiano",
24134: "latte_macchiato",
24135: "espresso_macchiato",
24136: "cafe_au_lait",
24137: "caffe_latte",
24140: "flat_white",
24141: "very_hot_water",
24142: "hot_water",
24143: "hot_milk",
24144: "milk_foam",
24145: "black_tea",
24146: "herbal_tea",
24147: "fruit_tea",
24148: "green_tea",
24149: "white_tea",
24150: "japanese_tea",
# special programs
24400: "coffee_pot",
24407: "barista_assistant",
# machine settings menu
24500: "appliance_settings", # total dispensed
24502: "appliance_settings", # lights appliance on
24503: "appliance_settings", # lights appliance off
24504: "appliance_settings", # turn off lights after
24506: "appliance_settings", # altitude
24513: "appliance_settings", # performance mode
24516: "appliance_settings", # turn off after
24537: "appliance_settings", # advanced mode
24542: "appliance_settings", # tea timer
24549: "appliance_settings", # total coffee dispensed
24550: "appliance_settings", # total tea dispensed
24551: "appliance_settings", # total ristretto
24552: "appliance_settings", # total cappuccino
24553: "appliance_settings", # total espresso
24554: "appliance_settings", # total coffee
24555: "appliance_settings", # total long coffee
24556: "appliance_settings", # total italian cappuccino
24557: "appliance_settings", # total latte macchiato
24558: "appliance_settings", # total caffe latte
24560: "appliance_settings", # total espresso macchiato
24562: "appliance_settings", # total flat white
24563: "appliance_settings", # total coffee with milk
24564: "appliance_settings", # total black tea
24565: "appliance_settings", # total herbal tea
24566: "appliance_settings", # total fruit tea
24567: "appliance_settings", # total green tea
24568: "appliance_settings", # total white tea
24569: "appliance_settings", # total japanese tea
24571: "appliance_settings", # total milk foam
24572: "appliance_settings", # total hot milk
24573: "appliance_settings", # total hot water
24574: "appliance_settings", # total very hot water
24575: "appliance_settings", # counter to descaling
24576: "appliance_settings", # counter to brewing unit degreasing
# maintenance
24750: "appliance_rinse",
24751: "descaling",
24753: "brewing_unit_degrease",
24754: "milk_pipework_rinse",
24759: "appliance_rinse",
24773: "appliance_rinse",
24787: "appliance_rinse",
24788: "appliance_rinse",
24789: "milk_pipework_clean",
# profiles settings menu
24800: "appliance_settings", # add profile
24801: "appliance_settings", # ask profile settings
24813: "appliance_settings", # modify profile name
}
STEAM_OVEN_MICRO_PROGRAM_ID: dict[int, str] = {
8: "steam_cooking",
19: "microwave",
53: "popcorn",
54: "quick_mw",
72: "sous_vide",
75: "eco_steam_cooking",
77: "rapid_steam_cooking",
326: "descale",
330: "menu_cooking",
2018: "reheating_with_steam",
2019: "defrosting_with_steam",
2020: "blanching",
2021: "bottling",
2022: "heat_crockery",
2023: "prove_dough",
2027: "soak",
2029: "reheating_with_microwave",
2030: "defrosting_with_microwave",
2031: "artichokes_small",
2032: "artichokes_medium",
2033: "artichokes_large",
2034: "eggplant_sliced",
2035: "eggplant_diced",
2036: "cauliflower_whole_small",
2039: "cauliflower_whole_medium",
2042: "cauliflower_whole_large",
2046: "cauliflower_florets_small",
2048: "cauliflower_florets_medium",
2049: "cauliflower_florets_large",
2051: "green_beans_whole",
2052: "green_beans_cut",
2053: "yellow_beans_whole",
2054: "yellow_beans_cut",
2055: "broad_beans",
2056: "common_beans",
2057: "runner_beans_whole",
2058: "runner_beans_pieces",
2059: "runner_beans_sliced",
2060: "broccoli_whole_small",
2061: "broccoli_whole_medium",
2062: "broccoli_whole_large",
2064: "broccoli_florets_small",
2066: "broccoli_florets_medium",
2068: "broccoli_florets_large",
2069: "endive_halved",
2070: "endive_quartered",
2071: "endive_strips",
2072: "chinese_cabbage_cut",
2073: "peas",
2074: "fennel_halved",
2075: "fennel_quartered",
2076: "fennel_strips",
2077: "kale_cut",
2080: "potatoes_in_the_skin_waxy_small_steam_cooking",
2081: "potatoes_in_the_skin_waxy_small_rapid_steam_cooking",
2083: "potatoes_in_the_skin_waxy_medium_steam_cooking",
2084: "potatoes_in_the_skin_waxy_medium_rapid_steam_cooking",
2086: "potatoes_in_the_skin_waxy_large_steam_cooking",
2087: "potatoes_in_the_skin_waxy_large_rapid_steam_cooking",
2088: "potatoes_in_the_skin_floury_small",
2091: "potatoes_in_the_skin_floury_medium",
2094: "potatoes_in_the_skin_floury_large",
2097: "potatoes_in_the_skin_mainly_waxy_small",
2100: "potatoes_in_the_skin_mainly_waxy_medium",
2103: "potatoes_in_the_skin_mainly_waxy_large",
2106: "potatoes_waxy_whole_small",
2109: "potatoes_waxy_whole_medium",
2112: "potatoes_waxy_whole_large",
2115: "potatoes_waxy_halved",
2116: "potatoes_waxy_quartered",
2117: "potatoes_waxy_diced",
2118: "potatoes_mainly_waxy_small",
2119: "potatoes_mainly_waxy_medium",
2120: "potatoes_mainly_waxy_large",
2121: "potatoes_mainly_waxy_halved",
2122: "potatoes_mainly_waxy_quartered",
2123: "potatoes_mainly_waxy_diced",
2124: "potatoes_floury_whole_small",
2125: "potatoes_floury_whole_medium",
2126: "potatoes_floury_whole_large",
2127: "potatoes_floury_halved",
2128: "potatoes_floury_quartered",
2129: "potatoes_floury_diced",
2130: "german_turnip_sliced",
2131: "german_turnip_cut_into_batons",
2132: "german_turnip_sliced",
2133: "pumpkin_diced",
2134: "corn_on_the_cob",
2135: "mangel_cut",
2136: "bunched_carrots_whole_small",
2137: "bunched_carrots_whole_medium",
2138: "bunched_carrots_whole_large",
2139: "bunched_carrots_halved",
2140: "bunched_carrots_quartered",
2141: "bunched_carrots_diced",
2142: "bunched_carrots_cut_into_batons",
2143: "bunched_carrots_sliced",
2144: "parisian_carrots_small",
2145: "parisian_carrots_medium",
2146: "parisian_carrots_large",
2147: "carrots_whole_small",
2148: "carrots_whole_medium",
2149: "carrots_whole_large",
2150: "carrots_halved",
2151: "carrots_quartered",
2152: "carrots_diced",
2153: "carrots_cut_into_batons",
2155: "carrots_sliced",
2156: "pepper_halved",
2157: "pepper_quartered",
2158: "pepper_strips",
2159: "pepper_diced",
2160: "parsnip_sliced",
2161: "parsnip_diced",
2162: "parsnip_cut_into_batons",
2163: "parsley_root_sliced",
2164: "parsley_root_diced",
2165: "parsley_root_cut_into_batons",
2166: "leek_pieces",
2167: "leek_rings",
2168: "romanesco_whole_small",
2169: "romanesco_whole_medium",
2170: "romanesco_whole_large",
2171: "romanesco_florets_small",
2172: "romanesco_florets_medium",
2173: "romanesco_florets_large",
2175: "brussels_sprout",
2176: "beetroot_whole_small",
2177: "beetroot_whole_medium",
2178: "beetroot_whole_large",
2179: "red_cabbage_cut",
2180: "black_salsify_thin",
2181: "black_salsify_medium",
2182: "black_salsify_thick",
2183: "celery_pieces",
2184: "celery_sliced",
2185: "celeriac_sliced",
2186: "celeriac_cut_into_batons",
2187: "celeriac_diced",
2188: "white_asparagus_thin",
2189: "white_asparagus_medium",
2190: "white_asparagus_thick",
2192: "green_asparagus_thin",
2194: "green_asparagus_medium",
2196: "green_asparagus_thick",
2197: "spinach",
2198: "pointed_cabbage_cut",
2199: "yam_halved",
2200: "yam_quartered",
2201: "yam_strips",
2202: "swede_diced",
2203: "swede_cut_into_batons",
2204: "teltow_turnip_sliced",
2205: "teltow_turnip_diced",
2206: "jerusalem_artichoke_sliced",
2207: "jerusalem_artichoke_diced",
2208: "green_cabbage_cut",
2209: "savoy_cabbage_cut",
2210: "courgette_sliced",
2211: "courgette_diced",
2212: "snow_pea",
2214: "perch_whole",
2215: "perch_fillet_2_cm",
2216: "perch_fillet_3_cm",
2217: "gilt_head_bream_whole",
2220: "gilt_head_bream_fillet",
2221: "codfish_piece",
2222: "codfish_fillet",
2224: "trout",
2225: "pike_fillet",
2226: "pike_piece",
2227: "halibut_fillet_2_cm",
2230: "halibut_fillet_3_cm",
2231: "codfish_fillet",
2232: "codfish_piece",
2233: "carp",
2234: "salmon_fillet_2_cm",
2235: "salmon_fillet_3_cm",
2238: "salmon_steak_2_cm",
2239: "salmon_steak_3_cm",
2240: "salmon_piece",
2241: "salmon_trout",
2244: "iridescent_shark_fillet",
2245: "red_snapper_fillet_2_cm",
2248: "red_snapper_fillet_3_cm",
2249: "redfish_fillet_2_cm",
2250: "redfish_fillet_3_cm",
2251: "redfish_piece",
2252: "char",
2253: "plaice_whole_2_cm",
2254: "plaice_whole_3_cm",
2255: "plaice_whole_4_cm",
2256: "plaice_fillet_1_cm",
2259: "plaice_fillet_2_cm",
2260: "coalfish_fillet_2_cm",
2261: "coalfish_fillet_3_cm",
2262: "coalfish_piece",
2263: "sea_devil_fillet_3_cm",
2266: "sea_devil_fillet_4_cm",
2267: "common_sole_fillet_1_cm",
2270: "common_sole_fillet_2_cm",
2271: "atlantic_catfish_fillet_1_cm",
2272: "atlantic_catfish_fillet_2_cm",
2273: "turbot_fillet_2_cm",
2276: "turbot_fillet_3_cm",
2277: "tuna_steak",
2278: "tuna_fillet_2_cm",
2279: "tuna_fillet_3_cm",
2280: "tilapia_fillet_1_cm",
2281: "tilapia_fillet_2_cm",
2282: "nile_perch_fillet_2_cm",
2283: "nile_perch_fillet_3_cm",
2285: "zander_fillet",
2288: "soup_hen",
2291: "poularde_whole",
2292: "poularde_breast",
2294: "turkey_breast",
2302: "chicken_tikka_masala_with_rice",
2312: "veal_fillet_whole",
2313: "veal_fillet_medaillons_1_cm",
2315: "veal_fillet_medaillons_2_cm",
2317: "veal_fillet_medaillons_3_cm",
2324: "goulash_soup",
2327: "dutch_hash",
2328: "stuffed_cabbage",
2330: "beef_tenderloin",
2333: "beef_tenderloin_medaillons_1_cm_steam_cooking",
2334: "beef_tenderloin_medaillons_2_cm_steam_cooking",
2335: "beef_tenderloin_medaillons_3_cm_steam_cooking",
2339: "silverside_5_cm",
2342: "silverside_7_5_cm",
2345: "silverside_10_cm",
2348: "meat_for_soup_back_or_top_rib",
2349: "meat_for_soup_leg_steak",
2350: "meat_for_soup_brisket",
2353: "viennese_silverside",
2354: "whole_ham_steam_cooking",
2355: "whole_ham_reheating",
2359: "kasseler_piece",
2361: "kasseler_slice",
2363: "knuckle_of_pork_fresh",
2364: "knuckle_of_pork_cured",
2367: "pork_tenderloin_medaillons_3_cm",
2368: "pork_tenderloin_medaillons_4_cm",
2369: "pork_tenderloin_medaillons_5_cm",
2429: "pumpkin_soup",
2430: "meat_with_rice",
2431: "beef_casserole",
2450: "risotto",
2451: "risotto",
2453: "rice_pudding_steam_cooking",
2454: "rice_pudding_rapid_steam_cooking",
2461: "amaranth",
2462: "bulgur",
2463: "spelt_whole",
2464: "spelt_cracked",
2465: "green_spelt_whole",
2466: "green_spelt_cracked",
2467: "oats_whole",
2468: "oats_cracked",
2469: "millet",
2470: "quinoa",
2471: "polenta_swiss_style_fine_polenta",
2472: "polenta_swiss_style_medium_polenta",
2473: "polenta_swiss_style_coarse_polenta",
2474: "polenta",
2475: "rye_whole",
2476: "rye_cracked",
2477: "wheat_whole",
2478: "wheat_cracked",
2480: "gnocchi_fresh",
2481: "yeast_dumplings_fresh",
2482: "potato_dumplings_raw_boil_in_bag",
2483: "potato_dumplings_raw_deep_frozen",
2484: "potato_dumplings_half_half_boil_in_bag",
2485: "potato_dumplings_half_half_deep_frozen",
2486: "bread_dumplings_boil_in_the_bag",
2487: "bread_dumplings_fresh",
2488: "ravioli_fresh",
2489: "spaetzle_fresh",
2490: "tagliatelli_fresh",
2491: "schupfnudeln_potato_noodels",
2492: "tortellini_fresh",
2493: "red_lentils",
2494: "brown_lentils",
2495: "beluga_lentils",
2496: "green_split_peas",
2497: "yellow_split_peas",
2498: "chick_peas",
2499: "white_beans",
2500: "pinto_beans",
2501: "red_beans",
2502: "black_beans",
2503: "hens_eggs_size_s_soft",
2504: "hens_eggs_size_s_medium",
2505: "hens_eggs_size_s_hard",
2506: "hens_eggs_size_m_soft",
2507: "hens_eggs_size_m_medium",
2508: "hens_eggs_size_m_hard",
2509: "hens_eggs_size_l_soft",
2510: "hens_eggs_size_l_medium",
2511: "hens_eggs_size_l_hard",
2512: "hens_eggs_size_xl_soft",
2513: "hens_eggs_size_xl_medium",
2514: "hens_eggs_size_xl_hard",
2515: "swiss_toffee_cream_100_ml",
2516: "swiss_toffee_cream_150_ml",
2518: "toffee_date_dessert_several_small",
2520: "cheesecake_several_small",
2521: "cheesecake_one_large",
2522: "christmas_pudding_cooking",
2523: "christmas_pudding_heating",
2524: "treacle_sponge_pudding_several_small",
2525: "treacle_sponge_pudding_one_large",
2526: "sweet_cheese_dumplings",
2527: "apples_whole",
2528: "apples_halved",
2529: "apples_quartered",
2530: "apples_sliced",
2531: "apples_diced",
2532: "apricots_halved_steam_cooking",
2533: "apricots_halved_skinning",
2534: "apricots_quartered",
2535: "apricots_wedges",
2536: "pears_halved",
2537: "pears_quartered",
2538: "pears_wedges",
2539: "sweet_cherries",
2540: "sour_cherries",
2541: "pears_to_cook_small_whole",
2542: "pears_to_cook_small_halved",
2543: "pears_to_cook_small_quartered",
2544: "pears_to_cook_medium_whole",
2545: "pears_to_cook_medium_halved",
2546: "pears_to_cook_medium_quartered",
2547: "pears_to_cook_large_whole",
2548: "pears_to_cook_large_halved",
2549: "pears_to_cook_large_quartered",
2550: "mirabelles",
2551: "nectarines_peaches_halved_steam_cooking",
2552: "nectarines_peaches_halved_skinning",
2553: "nectarines_peaches_quartered",
2554: "nectarines_peaches_wedges",
2555: "plums_whole",
2556: "plums_halved",
2557: "cranberries",
2558: "quinces_diced",
2559: "greenage_plums",
2560: "rhubarb_chunks",
2561: "gooseberries",
2562: "mushrooms_whole",
2563: "mushrooms_halved",
2564: "mushrooms_sliced",
2565: "mushrooms_quartered",
2566: "mushrooms_diced",
2567: "cep",
2568: "chanterelle",
2569: "oyster_mushroom_whole",
2570: "oyster_mushroom_strips",
2571: "oyster_mushroom_diced",
2572: "saucisson",
2573: "bruehwurst_sausages",
2574: "bologna_sausage",
2575: "veal_sausages",
2577: "crevettes",
2579: "prawns",
2581: "king_prawns",
2583: "small_shrimps",
2585: "large_shrimps",
2587: "mussels",
2589: "scallops",
2591: "venus_clams",
2592: "goose_barnacles",
2593: "cockles",
2594: "razor_clams_small",
2595: "razor_clams_medium",
2596: "razor_clams_large",
2597: "mussels_in_sauce",
2598: "bottling_soft",
2599: "bottling_medium",
2600: "bottling_hard",
2601: "melt_chocolate",
2602: "dissolve_gelatine",
2603: "sweat_onions",
2604: "cook_bacon",
2605: "heating_damp_flannels",
2606: "decrystallise_honey",
2607: "make_yoghurt",
2687: "toffee_date_dessert_one_large",
2694: "beef_tenderloin_medaillons_1_cm_low_temperature_cooking",
2695: "beef_tenderloin_medaillons_2_cm_low_temperature_cooking",
2696: "beef_tenderloin_medaillons_3_cm_low_temperature_cooking",
3373: "wild_rice",
3376: "wholegrain_rice",
3380: "parboiled_rice_steam_cooking",
3381: "parboiled_rice_rapid_steam_cooking",
3383: "basmati_rice_steam_cooking",
3384: "basmati_rice_rapid_steam_cooking",
3386: "jasmine_rice_steam_cooking",
3387: "jasmine_rice_rapid_steam_cooking",
3389: "huanghuanian_steam_cooking",
3390: "huanghuanian_rapid_steam_cooking",
3392: "simiao_steam_cooking",
3393: "simiao_rapid_steam_cooking",
3395: "long_grain_rice_general_steam_cooking",
3396: "long_grain_rice_general_rapid_steam_cooking",
3398: "chongming_steam_cooking",
3399: "chongming_rapid_steam_cooking",
3401: "wuchang_steam_cooking",
3402: "wuchang_rapid_steam_cooking",
3404: "uonumma_koshihikari_steam_cooking",
3405: "uonumma_koshihikari_rapid_steam_cooking",
3407: "sheyang_steam_cooking",
3408: "sheyang_rapid_steam_cooking",
3410: "round_grain_rice_general_steam_cooking",
3411: "round_grain_rice_general_rapid_steam_cooking",
}
STATE_PROGRAM_ID: dict[int, dict[int, str]] = {
MieleAppliance.WASHING_MACHINE: WASHING_MACHINE_PROGRAM_ID,
MieleAppliance.TUMBLE_DRYER: TUMBLE_DRYER_PROGRAM_ID,
MieleAppliance.DISHWASHER: DISHWASHER_PROGRAM_ID,
MieleAppliance.DISH_WARMER: DISH_WARMER_PROGRAM_ID,
MieleAppliance.OVEN: OVEN_PROGRAM_ID,
MieleAppliance.OVEN_MICROWAVE: OVEN_PROGRAM_ID,
MieleAppliance.STEAM_OVEN_MK2: OVEN_PROGRAM_ID,
MieleAppliance.STEAM_OVEN: OVEN_PROGRAM_ID,
MieleAppliance.STEAM_OVEN_COMBI: OVEN_PROGRAM_ID,
MieleAppliance.STEAM_OVEN_MICRO: STEAM_OVEN_MICRO_PROGRAM_ID,
MieleAppliance.WASHER_DRYER: WASHING_MACHINE_PROGRAM_ID,
MieleAppliance.ROBOT_VACUUM_CLEANER: ROBOT_VACUUM_CLEANER_PROGRAM_ID,
MieleAppliance.COFFEE_SYSTEM: COFFEE_SYSTEM_PROGRAM_ID,
}

View File

@ -31,6 +31,27 @@
},
"core_target_temperature": {
"default": "mdi:thermometer-probe"
},
"program_id": {
"default": "mdi:selection-ellipse-arrow-inside"
},
"program_phase": {
"default": "mdi:tray-full"
},
"elapsed_time": {
"default": "mdi:timelapse"
},
"start_time": {
"default": "mdi:clock-start"
},
"spin_speed": {
"default": "mdi:sync"
},
"program_type": {
"default": "mdi:state-machine"
},
"remaining_time": {
"default": "mdi:clock-end"
}
},
"switch": {

View File

@ -15,17 +15,32 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.const import UnitOfTemperature
from homeassistant.const import (
REVOLUTIONS_PER_MINUTE,
EntityCategory,
UnitOfEnergy,
UnitOfTemperature,
UnitOfVolume,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import STATE_STATUS_TAGS, MieleAppliance, StateStatus
from .const import (
STATE_PROGRAM_ID,
STATE_PROGRAM_PHASE,
STATE_PROGRAM_TYPE,
STATE_STATUS_TAGS,
MieleAppliance,
StateStatus,
)
from .coordinator import MieleConfigEntry, MieleDataUpdateCoordinator
from .entity import MieleEntity
_LOGGER = logging.getLogger(__name__)
DISABLED_TEMPERATURE = -32768
@dataclass(frozen=True, kw_only=True)
class MieleSensorDescription(SensorEntityDescription):
@ -80,7 +95,139 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
translation_key="status",
value_fn=lambda value: value.state_status,
device_class=SensorDeviceClass.ENUM,
options=list(STATE_STATUS_TAGS.values()),
options=sorted(set(STATE_STATUS_TAGS.values())),
),
),
MieleSensorDefinition(
types=(
MieleAppliance.WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_SEMI_PROFESSIONAL,
MieleAppliance.TUMBLE_DRYER,
MieleAppliance.TUMBLE_DRYER_SEMI_PROFESSIONAL,
MieleAppliance.DISHWASHER,
MieleAppliance.DISH_WARMER,
MieleAppliance.OVEN,
MieleAppliance.OVEN_MICROWAVE,
MieleAppliance.STEAM_OVEN,
MieleAppliance.MICROWAVE,
MieleAppliance.COFFEE_SYSTEM,
MieleAppliance.ROBOT_VACUUM_CLEANER,
MieleAppliance.WASHER_DRYER,
MieleAppliance.STEAM_OVEN_COMBI,
MieleAppliance.STEAM_OVEN_MICRO,
MieleAppliance.DIALOG_OVEN,
MieleAppliance.STEAM_OVEN_MK2,
),
description=MieleSensorDescription(
key="state_program_id",
translation_key="program_id",
device_class=SensorDeviceClass.ENUM,
value_fn=lambda value: value.state_program_id,
),
),
MieleSensorDefinition(
types=(
MieleAppliance.WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_SEMI_PROFESSIONAL,
MieleAppliance.TUMBLE_DRYER,
MieleAppliance.TUMBLE_DRYER_SEMI_PROFESSIONAL,
MieleAppliance.DISHWASHER,
MieleAppliance.DISH_WARMER,
MieleAppliance.OVEN,
MieleAppliance.OVEN_MICROWAVE,
MieleAppliance.STEAM_OVEN,
MieleAppliance.MICROWAVE,
MieleAppliance.COFFEE_SYSTEM,
MieleAppliance.ROBOT_VACUUM_CLEANER,
MieleAppliance.WASHER_DRYER,
MieleAppliance.STEAM_OVEN_COMBI,
MieleAppliance.STEAM_OVEN_MICRO,
MieleAppliance.DIALOG_OVEN,
MieleAppliance.STEAM_OVEN_MK2,
),
description=MieleSensorDescription(
key="state_program_phase",
translation_key="program_phase",
value_fn=lambda value: value.state_program_phase,
device_class=SensorDeviceClass.ENUM,
),
),
MieleSensorDefinition(
types=(
MieleAppliance.WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_SEMI_PROFESSIONAL,
MieleAppliance.TUMBLE_DRYER,
MieleAppliance.TUMBLE_DRYER_SEMI_PROFESSIONAL,
MieleAppliance.DISHWASHER,
MieleAppliance.DISH_WARMER,
MieleAppliance.OVEN,
MieleAppliance.OVEN_MICROWAVE,
MieleAppliance.STEAM_OVEN,
MieleAppliance.MICROWAVE,
MieleAppliance.ROBOT_VACUUM_CLEANER,
MieleAppliance.WASHER_DRYER,
MieleAppliance.STEAM_OVEN_COMBI,
MieleAppliance.STEAM_OVEN_MICRO,
MieleAppliance.DIALOG_OVEN,
MieleAppliance.COFFEE_SYSTEM,
MieleAppliance.STEAM_OVEN_MK2,
),
description=MieleSensorDescription(
key="state_program_type",
translation_key="program_type",
value_fn=lambda value: value.state_program_type,
entity_category=EntityCategory.DIAGNOSTIC,
device_class=SensorDeviceClass.ENUM,
options=sorted(set(STATE_PROGRAM_TYPE.values())),
),
),
MieleSensorDefinition(
types=(
MieleAppliance.WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_SEMI_PROFESSIONAL,
MieleAppliance.TUMBLE_DRYER,
MieleAppliance.TUMBLE_DRYER_SEMI_PROFESSIONAL,
MieleAppliance.DISHWASHER,
MieleAppliance.WASHER_DRYER,
),
description=MieleSensorDescription(
key="current_energy_consumption",
translation_key="energy_consumption",
value_fn=lambda value: value.current_energy_consumption,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
entity_category=EntityCategory.DIAGNOSTIC,
),
),
MieleSensorDefinition(
types=(
MieleAppliance.WASHING_MACHINE,
MieleAppliance.DISHWASHER,
MieleAppliance.WASHER_DRYER,
),
description=MieleSensorDescription(
key="current_water_consumption",
translation_key="water_consumption",
value_fn=lambda value: value.current_water_consumption,
device_class=SensorDeviceClass.WATER,
state_class=SensorStateClass.TOTAL_INCREASING,
native_unit_of_measurement=UnitOfVolume.LITERS,
entity_category=EntityCategory.DIAGNOSTIC,
),
),
MieleSensorDefinition(
types=(
MieleAppliance.WASHING_MACHINE,
MieleAppliance.WASHING_MACHINE_SEMI_PROFESSIONAL,
MieleAppliance.WASHER_DRYER,
),
description=MieleSensorDescription(
key="state_spinning_speed",
translation_key="spin_speed",
value_fn=lambda value: value.state_spinning_speed,
native_unit_of_measurement=REVOLUTIONS_PER_MINUTE,
entity_category=EntityCategory.DIAGNOSTIC,
),
),
MieleSensorDefinition(
@ -115,21 +262,32 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
),
MieleSensorDefinition(
types=(
MieleAppliance.TUMBLE_DRYER_SEMI_PROFESSIONAL,
MieleAppliance.OVEN,
MieleAppliance.OVEN_MICROWAVE,
MieleAppliance.DISH_WARMER,
MieleAppliance.STEAM_OVEN,
MieleAppliance.MICROWAVE,
MieleAppliance.FRIDGE,
MieleAppliance.FREEZER,
MieleAppliance.FRIDGE_FREEZER,
MieleAppliance.STEAM_OVEN_COMBI,
MieleAppliance.WINE_CABINET,
MieleAppliance.WINE_CONDITIONING_UNIT,
MieleAppliance.WINE_STORAGE_CONDITIONING_UNIT,
MieleAppliance.STEAM_OVEN_MICRO,
MieleAppliance.DIALOG_OVEN,
MieleAppliance.WINE_CABINET_FREEZER,
MieleAppliance.STEAM_OVEN_MK2,
),
description=MieleSensorDescription(
key="state_core_temperature",
translation_key="core_temperature",
zone=1,
key="state_temperature_2",
zone=2,
device_class=SensorDeviceClass.TEMPERATURE,
translation_key="temperature_zone_2",
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
value_fn=(
lambda value: cast(int, value.state_core_temperature[0].temperature)
/ 100.0
),
value_fn=lambda value: value.state_temperatures[1].temperature / 100.0, # type: ignore [operator]
),
),
MieleSensorDefinition(
@ -153,6 +311,25 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
),
),
),
MieleSensorDefinition(
types=(
MieleAppliance.OVEN,
MieleAppliance.OVEN_MICROWAVE,
MieleAppliance.STEAM_OVEN_COMBI,
),
description=MieleSensorDescription(
key="state_core_temperature",
translation_key="core_temperature",
zone=1,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
value_fn=(
lambda value: cast(int, value.state_core_temperature[0].temperature)
/ 100.0
),
),
),
)
@ -172,8 +349,21 @@ async def async_setup_entry(
match definition.description.key:
case "state_status":
entity_class = MieleStatusSensor
case "state_program_id":
entity_class = MieleProgramIdSensor
case "state_program_phase":
entity_class = MielePhaseSensor
case "state_program_type":
entity_class = MieleTypeSensor
case _:
entity_class = MieleSensor
if (
definition.description.device_class == SensorDeviceClass.TEMPERATURE
and definition.description.value_fn(device)
== DISABLED_TEMPERATURE / 100
):
# Don't create entity if API signals that datapoint is disabled
continue
entities.append(
entity_class(coordinator, device_id, definition.description)
)
@ -219,7 +409,7 @@ class MieleSensor(MieleEntity, SensorEntity):
@property
def native_value(self) -> StateType:
"""Return the state of the sensor."""
return self.entity_description.value_fn(self.device)
return cast(StateType, self.entity_description.value_fn(self.device))
class MieleStatusSensor(MieleSensor):
@ -249,3 +439,67 @@ class MieleStatusSensor(MieleSensor):
"""Return the availability of the entity."""
# This sensor should always be available
return True
class MielePhaseSensor(MieleSensor):
"""Representation of the program phase sensor."""
@property
def native_value(self) -> StateType:
"""Return the state of the sensor."""
ret_val = STATE_PROGRAM_PHASE.get(self.device.device_type, {}).get(
self.device.state_program_phase
)
if ret_val is None:
_LOGGER.debug(
"Unknown program phase: %s on device type: %s",
self.device.state_program_phase,
self.device.device_type,
)
return ret_val
@property
def options(self) -> list[str]:
"""Return the options list for the actual device type."""
return sorted(
set(STATE_PROGRAM_PHASE.get(self.device.device_type, {}).values())
)
class MieleTypeSensor(MieleSensor):
"""Representation of the program type sensor."""
@property
def native_value(self) -> StateType:
"""Return the state of the sensor."""
ret_val = STATE_PROGRAM_TYPE.get(int(self.device.state_program_type))
if ret_val is None:
_LOGGER.debug(
"Unknown program type: %s on device type: %s",
self.device.state_program_type,
self.device.device_type,
)
return ret_val
class MieleProgramIdSensor(MieleSensor):
"""Representation of the program id sensor."""
@property
def native_value(self) -> StateType:
"""Return the state of the sensor."""
ret_val = STATE_PROGRAM_ID.get(self.device.device_type, {}).get(
self.device.state_program_id
)
if ret_val is None:
_LOGGER.debug(
"Unknown program id: %s on device type: %s",
self.device.state_program_id,
self.device.device_type,
)
return ret_val
@property
def options(self) -> list[str]:
"""Return the options list for the actual device type."""
return sorted(set(STATE_PROGRAM_ID.get(self.device.device_type, {}).values()))

View File

@ -115,6 +115,15 @@
},
"entity": {
"binary_sensor": {
"door": {
"name": "Door"
},
"failure": {
"name": "Failure"
},
"info": {
"name": "Info"
},
"notification_active": {
"name": "Notification active"
},
@ -173,6 +182,638 @@
}
},
"sensor": {
"energy_consumption": {
"name": "Energy consumption"
},
"program_phase": {
"name": "Program phase",
"state": {
"2nd_espresso": "2nd espresso coffee",
"2nd_grinding": "2nd grinding",
"2nd_pre_brewing": "2nd pre-brewing",
"anti_crease": "Anti-crease",
"blocked_brushes": "Brushes blocked",
"blocked_drive_wheels": "Drive wheels blocked",
"blocked_front_wheel": "Front wheel blocked",
"cleaning": "Cleaning",
"comfort_cooling": "Comfort cooling",
"cooling_down": "Cooling down",
"dirty_sensors": "Dirty sensors",
"disinfecting": "Disinfecting",
"dispensing": "Dispensing",
"docked": "Docked",
"door_open": "Door open",
"drain": "Drain",
"drying": "Drying",
"dust_box_missing": "Missing dust box",
"energy_save": "Energy save",
"espresso": "Espresso coffee",
"extra_dry": "Extra dry",
"final_rinse": "Final rinse",
"finished": "Finished",
"freshen_up_and_moisten": "Freshen up & moisten",
"going_to_target_area": "Going to target area",
"grinding": "Grinding",
"hand_iron": "Hand iron",
"hand_iron_1": "Hand iron 1",
"hand_iron_2": "Hand iron 2",
"heating": "Heating",
"heating_up": "Heating up",
"heating_up_phase": "Heating up phase",
"hot_milk": "Hot milk",
"hygiene": "Hygiene",
"interim_rinse": "Interim rinse",
"keep_warm": "Keep warm",
"keeping_warm": "Keeping warm",
"machine_iron": "Machine iron",
"main_dishwash": "Cleaning",
"main_wash": "Main wash",
"milk_foam": "Milk foam",
"moisten": "Moisten",
"motor_overload": "Check dust box and filter",
"normal": "Normal",
"normal_plus": "Normal plus",
"not_running": "Not running",
"pre_brewing": "Pre-brewing",
"pre_dishwash": "Pre-cleaning",
"pre_wash": "Pre-wash",
"process_finished": "Process finished",
"process_running": "Process running",
"program_running": "Program running",
"reactivating": "Reactivating",
"remote_controlled": "Remote controlled",
"returning": "Returning",
"rinse": "Rinse",
"rinse_hold": "Rinse hold",
"rinse_out_lint": "Rinse out lint",
"rinses": "Rinses",
"safety_cooling": "Safety cooling",
"slightly_dry": "Slightly dry",
"slow_roasting": "Slow roasting",
"smoothing": "Smoothing",
"soak": "Soak",
"spin": "Spin",
"starch_stop": "Starch stop",
"steam_reduction": "Steam reduction",
"steam_smoothing": "Steam smoothing",
"thermo_spin": "Thermo spin",
"timed_drying": "Timed drying",
"vacuum_cleaning": "Cleaning",
"vacuum_cleaning_paused": "Cleaning paused",
"vacuum_internal_fault": "Internal fault - reboot",
"venting": "Venting",
"waiting_for_start": "Waiting for start",
"warm_air": "Warm air",
"warm_cups_glasses": "Warm cups/glasses",
"warm_dishes_plates": "Warm dishes/plates",
"wheel_lifted": "Wheel lifted"
}
},
"program_type": {
"name": "Program type",
"state": {
"automatic_program": "Automatic program",
"cleaning_care_program": "Cleaning/care program",
"maintenance_program": "Maintenance program",
"normal_operation_mode": "Normal operation mode",
"own_program": "Own program"
}
},
"program_id": {
"name": "Program",
"state": {
"1_tray": "1 tray",
"2_trays": "2 trays",
"amaranth": "Amaranth",
"apples_diced": "Apples (diced)",
"apples_halved": "Apples (halved)",
"apples_quartered": "Apples (quartered)",
"apples_sliced": "Apples (sliced)",
"apples_whole": "Apples (whole)",
"appliance_rinse": "Appliance rinse",
"appliance_settings": "Appliance settings menu",
"apricots_halved_skinning": "Apricots (halved, skinning)",
"apricots_halved_steam_cooking": "Apricots (halved, steam cooking)",
"apricots_quartered": "Apricots (quartered)",
"apricots_wedges": "Apricots (wedges)",
"artichokes_large": "Artichokes large",
"artichokes_medium": "Artichokes medium",
"artichokes_small": "Artichokes small",
"atlantic_catfish_fillet_1_cm": "Atlantic catfish (fillet, 1 cm)",
"atlantic_catfish_fillet_2_cm": "Atlantic catfish (fillet, 2 cm)",
"auto": "[%key:common::state::auto%]",
"auto_roast": "Auto roast",
"automatic": "Automatic",
"automatic_plus": "Automatic plus",
"baking_tray": "Baking tray",
"barista_assistant": "BaristaAssistant",
"basket_program": "Basket program",
"basmati_rice_rapid_steam_cooking": "Basmati rice (rapid steam cooking)",
"basmati_rice_steam_cooking": "Basmati rice (steam cooking)",
"bed_linen": "Bed linen",
"beef_casserole": "Beef casserole",
"beef_tenderloin": "Beef tenderloin",
"beef_tenderloin_medaillons_1_cm_low_temperature_cooking": "Beef tenderloin (medaillons, 1 cm, low-temperature cooking)",
"beef_tenderloin_medaillons_1_cm_steam_cooking": "Beef tenderloin (medaillons, 1 cm, steam cooking)",
"beef_tenderloin_medaillons_2_cm_low_temperature_cooking": "Beef tenderloin (medaillons, 2 cm, low-temperature cooking)",
"beef_tenderloin_medaillons_2_cm_steam_cooking": "Beef tenderloin (medaillons, 2 cm, steam cooking)",
"beef_tenderloin_medaillons_3_cm_low_temperature_cooking": "Beef tenderloin (medaillons, 3 cm, low-temperature cooking)",
"beef_tenderloin_medaillons_3_cm_steam_cooking": "Beef tenderloin (medaillons, 3 cm, steam cooking)",
"beetroot_whole_large": "Beetroot (whole, large)",
"beetroot_whole_medium": "Beetroot (whole, medium)",
"beetroot_whole_small": "Beetroot (whole, small)",
"beluga_lentils": "Beluga lentils",
"black_beans": "Black beans",
"black_salsify_medium": "Black salsify (medium)",
"black_salsify_thick": "Black salsify (thick)",
"black_salsify_thin": "Black salsify (thin)",
"black_tea": "Black tea",
"blanching": "Blanching",
"bologna_sausage": "Bologna sausage",
"bottling": "Bottling",
"bottling_hard": "Bottling (hard)",
"bottling_medium": "Bottling (medium)",
"bottling_soft": "Bottling (soft)",
"bottom_heat": "Bottom heat",
"bread_dumplings_boil_in_the_bag": "Bread dumplings (boil-in-the-bag)",
"bread_dumplings_fresh": "Bread dumplings (fresh)",
"brewing_unit_degrease": "Brewing unit degrease",
"broad_beans": "Broad beans",
"broccoli_florets_large": "Broccoli florets (large)",
"broccoli_florets_medium": "Broccoli florets (medium)",
"broccoli_florets_small": "Broccoli florets (small)",
"broccoli_whole_large": "Broccoli (whole, large)",
"broccoli_whole_medium": "Broccoli (whole, medium)",
"broccoli_whole_small": "Broccoli (whole, small)",
"brown_lentils": "Brown lentils",
"bruehwurst_sausages": "Brühwurst sausages",
"brussels_sprout": "Brussels sprout",
"bulgur": "Bulgur",
"bunched_carrots_cut_into_batons": "Bunched carrots (cut into batons)",
"bunched_carrots_diced": "Bunched carrots (diced)",
"bunched_carrots_halved": "Bunched carrots (halved)",
"bunched_carrots_quartered": "Bunched carrots (quartered)",
"bunched_carrots_sliced": "Bunched carrots (sliced)",
"bunched_carrots_whole_large": "Bunched carrots (whole, large)",
"bunched_carrots_whole_medium": "Bunched carrots (whole, medium)",
"bunched_carrots_whole_small": "Bunched carrots (whole, small)",
"cafe_au_lait": "Café au lait",
"caffe_latte": "Caffè latte",
"cappuccino": "Cappuccino",
"cappuccino_italiano": "Cappuccino Italiano",
"carp": "Carp",
"carrots_cut_into_batons": "Carrots (cut into batons)",
"carrots_diced": "Carrots (diced)",
"carrots_halved": "Carrots (halved)",
"carrots_quartered": "Carrots (quartered)",
"carrots_sliced": "Carrots (sliced)",
"carrots_whole_large": "Carrots (whole, large)",
"carrots_whole_medium": "Carrots (whole, medium)",
"carrots_whole_small": "Carrots (whole, small)",
"cauliflower_florets_large": "Cauliflower florets (large)",
"cauliflower_florets_medium": "Cauliflower florets (medium)",
"cauliflower_florets_small": "Cauliflower florets (small)",
"cauliflower_whole_large": "Cauliflower (whole, large)",
"cauliflower_whole_medium": "Cauliflower (whole, medium)",
"cauliflower_whole_small": "Cauliflower (whole, small)",
"celeriac_cut_into_batons": "Celeriac (cut into batons)",
"celeriac_diced": "Celeriac (diced)",
"celeriac_sliced": "Celeriac (sliced)",
"celery_pieces": "Celery (pieces)",
"celery_sliced": "Celery (sliced)",
"cep": "Cep",
"chanterelle": "Chanterelle",
"char": "Char",
"check_appliance": "Check appliance",
"cheesecake_one_large": "Cheesecake (one large)",
"cheesecake_several_small": "Cheesecake (several small)",
"chick_peas": "Chick peas",
"chicken_tikka_masala_with_rice": "Chicken Tikka Masala with rice",
"chinese_cabbage_cut": "Chinese cabbage (cut)",
"chongming_rapid_steam_cooking": "Chongming (rapid steam cooking)",
"chongming_steam_cooking": "Chongming (steam cooking)",
"christmas_pudding_cooking": "Christmas pudding (cooking)",
"christmas_pudding_heating": "Christmas pudding (heating)",
"clean_machine": "Clean machine",
"coalfish_fillet_2_cm": "Coalfish (fillet, 2 cm)",
"coalfish_fillet_3_cm": "Coalfish (fillet, 3 cm)",
"coalfish_piece": "Coalfish (piece)",
"cockles": "Cockles",
"codfish_fillet": "Codfish (fillet)",
"codfish_piece": "Codfish (piece)",
"coffee": "Coffee",
"coffee_pot": "Coffee pot",
"common_beans": "Common beans",
"common_sole_fillet_1_cm": "Common sole (fillet, 1 cm)",
"common_sole_fillet_2_cm": "Common sole (fillet, 2 cm)",
"conventional_heat": "Conventional heat",
"cook_bacon": "Cook bacon",
"cool_air": "Cool air",
"corn_on_the_cob": "Corn on the cob",
"cottons": "Cottons",
"cottons_eco": "Cottons ECO",
"cottons_hygiene": "Cottons hygiene",
"courgette_diced": "Courgette (diced)",
"courgette_sliced": "Courgette (sliced)",
"cranberries": "Cranberries",
"crevettes": "Crevettes",
"curtains": "Curtains",
"dark_garments": "Dark garments",
"decrystallise_honey": "Decrystallise honey",
"defrost": "Defrost",
"defrosting_with_microwave": "Defrosting with microwave",
"defrosting_with_steam": "Defrosting with steam",
"delicates": "Delicates",
"denim": "Denim",
"descale": "Descale",
"descaling": "Appliance descaling",
"dissolve_gelatine": "Dissolve gelatine",
"down_duvets": "Down duvets",
"down_filled_items": "Down-filled items",
"drain_spin": "Drain/spin",
"dutch_hash": "Dutch hash",
"eco": "ECO",
"eco_40_60": "ECO 40-60",
"eco_fan_heat": "ECO fan heat",
"eco_steam_cooking": "ECO steam cooking",
"economy_grill": "Economy grill",
"eggplant_diced": "Eggplant (diced)",
"eggplant_sliced": "Eggplant (sliced)",
"endive_halved": "Endive (halved)",
"endive_quartered": "Endive (quartered)",
"endive_strips": "Endive (strips)",
"espresso": "Espresso",
"espresso_macchiato": "Espresso macchiato",
"express": "Express",
"express_20": "Express 20'",
"extra_quiet": "Extra quiet",
"fan_grill": "Fan grill",
"fan_plus": "Fan plus",
"fennel_halved": "Fennel (halved)",
"fennel_quartered": "Fennel (quartered)",
"fennel_strips": "Fennel (strips)",
"first_wash": "First wash",
"flat_white": "Flat white",
"freshen_up": "Freshen up",
"fruit_tea": "Fruit tea",
"full_grill": "Full grill",
"gentle": "Gentle",
"gentle_denim": "Gentle denim",
"gentle_minimum_iron": "Gentle minimum iron",
"gentle_smoothing": "Gentle smoothing",
"german_turnip_cut_into_batons": "German turnip (cut into batons)",
"german_turnip_sliced": "German turnip (sliced)",
"gilt_head_bream_fillet": "Gilt-head bream (fillet)",
"gilt_head_bream_whole": "Gilt-head bream (whole)",
"glasses_warm": "Glasses warm",
"gnocchi_fresh": "Gnocchi (fresh)",
"goose_barnacles": "Goose barnacles",
"gooseberries": "Gooseberries",
"goulash_soup": "Goulash soup",
"green_asparagus_medium": "Green asparagus (medium)",
"green_asparagus_thick": "Green asparagus (thick)",
"green_asparagus_thin": "Green asparagus (thin)",
"green_beans_cut": "Green beans (cut)",
"green_beans_whole": "Green beans (whole)",
"green_cabbage_cut": "Green cabbage (cut)",
"green_spelt_cracked": "Green spelt (cracked)",
"green_spelt_whole": "Green spelt (whole)",
"green_split_peas": "Green split peas",
"green_tea": "Green tea",
"greenage_plums": "Greenage plums",
"halibut_fillet_2_cm": "Halibut (fillet, 2 cm)",
"halibut_fillet_3_cm": "Halibut (fillet, 3 cm)",
"heat_crockery": "Heat crockery",
"heating_damp_flannels": "Heating damp flannels",
"hens_eggs_size_l_hard": "Hens eggs (size „L“, hard)",
"hens_eggs_size_l_medium": "Hens eggs (size „L“, medium)",
"hens_eggs_size_l_soft": "Hens eggs (size „L“, soft)",
"hens_eggs_size_m_hard": "Hens eggs (size „M“, hard)",
"hens_eggs_size_m_medium": "Hens eggs (size „M“, medium)",
"hens_eggs_size_m_soft": "Hens eggs (size „M“, soft)",
"hens_eggs_size_s_hard": "Hens eggs (size „S“, hard)",
"hens_eggs_size_s_medium": "Hens eggs (size „S“, medium)",
"hens_eggs_size_s_soft": "Hens eggs (size „S“, soft)",
"hens_eggs_size_xl_hard": "Hens eggs (size „XL“, hard)",
"hens_eggs_size_xl_medium": "Hens eggs (size „XL“, medium)",
"hens_eggs_size_xl_soft": "Hens eggs (size „XL“, soft)",
"herbal_tea": "Herbal tea",
"hot_milk": "Hot milk",
"hot_water": "Hot water",
"huanghuanian_rapid_steam_cooking": "Huanghuanian (rapid steam cooking)",
"huanghuanian_steam_cooking": "Huanghuanian (steam cooking)",
"hygiene": "Hygiene",
"intensive": "Intensive",
"intensive_bake": "Intensive bake",
"iridescent_shark_fillet": "Iridescent shark (fillet)",
"japanese_tea": "Japanese tea",
"jasmine_rice_rapid_steam_cooking": "Jasmine rice (rapid steam cooking)",
"jasmine_rice_steam_cooking": "Jasmine rice (steam cooking)",
"jerusalem_artichoke_diced": "Jerusalem artichoke (diced)",
"jerusalem_artichoke_sliced": "Jerusalem artichoke (sliced)",
"kale_cut": "Kale (cut)",
"kasseler_piece": "Kasseler (piece)",
"kasseler_slice": "Kasseler (slice)",
"keeping_warm": "Keeping warm",
"king_prawns": "King prawns",
"knuckle_of_pork_cured": "Knuckle of pork (cured)",
"knuckle_of_pork_fresh": "Knuckle of pork (fresh)",
"large_pillows": "Large pillows",
"large_shrimps": "Large shrimps",
"latte_macchiato": "Latte macchiato",
"leek_pieces": "Leek (pieces)",
"leek_rings": "Leek (rings)",
"long_coffee": "Long coffee",
"long_grain_rice_general_rapid_steam_cooking": "Long grain rice (general, rapid steam cooking)",
"long_grain_rice_general_steam_cooking": "Long grain rice (general, steam cooking)",
"maintenance": "Maintenance program",
"make_yoghurt": "Make yoghurt",
"mangel_cut": "Mangel (cut)",
"meat_for_soup_back_or_top_rib": "Meat for soup (back or top rib)",
"meat_for_soup_brisket": "Meat for soup (brisket)",
"meat_for_soup_leg_steak": "Meat for soup (leg steak)",
"meat_with_rice": "Meat with rice",
"melt_chocolate": "Melt chocolate",
"menu_cooking": "Menu cooking",
"microwave": "Microwave",
"milk_foam": "Milk foam",
"milk_pipework_clean": "Milk pipework clean",
"milk_pipework_rinse": "Milk pipework rinse",
"millet": "Millet",
"minimum_iron": "Minimum iron",
"mirabelles": "Mirabelles",
"moisture_plus_auto_roast": "Moisture plus + Auto roast",
"moisture_plus_conventional_heat": "Moisture plus + Conventional heat",
"moisture_plus_fan_plus": "Moisture plus + Fan plus",
"moisture_plus_intensive_bake": "Moisture plus + Intensive bake",
"mushrooms_diced": "Mushrooms (diced)",
"mushrooms_halved": "Mushrooms (halved)",
"mushrooms_quartered": "Mushrooms (quartered)",
"mushrooms_sliced": "Mushrooms (sliced)",
"mushrooms_whole": "Mushrooms (whole)",
"mussels": "Mussels",
"mussels_in_sauce": "Mussels in sauce",
"nectarines_peaches_halved_skinning": "Nectarines/peaches (halved, skinning)",
"nectarines_peaches_halved_steam_cooking": "Nectarines/peaches (halved, steam cooking)",
"nectarines_peaches_quartered": "Nectarines/peaches (quartered)",
"nectarines_peaches_wedges": "Nectarines/peaches (wedges)",
"nile_perch_fillet_2_cm": "Nile perch (fillet, 2 cm)",
"nile_perch_fillet_3_cm": "Nile perch (fillet, 3 cm)",
"no_program": "No program",
"normal": "[%key:common::state::normal%]",
"oats_cracked": "Oats (cracked)",
"oats_whole": "Oats (whole)",
"outerwear": "Outerwear",
"oyster_mushroom_diced": "Oyster mushroom (diced)",
"oyster_mushroom_strips": "Oyster mushroom (strips)",
"oyster_mushroom_whole": "Oyster mushroom (whole)",
"parboiled_rice_rapid_steam_cooking": "Parboiled rice (rapid steam cooking)",
"parboiled_rice_steam_cooking": "Parboiled rice (steam cooking)",
"parisian_carrots_large": "Parisian carrots (large)",
"parisian_carrots_medium": "Parisian carrots (medium)",
"parisian_carrots_small": "Parisian carrots (small)",
"parsley_root_cut_into_batons": "Parsley root (cut into batons)",
"parsley_root_diced": "Parsley root (diced)",
"parsley_root_sliced": "Parsley root (sliced)",
"parsnip_cut_into_batons": "Parsnip (cut into batons)",
"parsnip_diced": "Parsnip (diced)",
"parsnip_sliced": "Parsnip (sliced)",
"pasta_paela": "Pasta/Paela",
"pears_halved": "Pears (halved)",
"pears_quartered": "Pears (quartered)",
"pears_to_cook_large_halved": "Pears to cook (large, halved)",
"pears_to_cook_large_quartered": "Pears to cook (large, quartered)",
"pears_to_cook_large_whole": "Pears to cook (large, whole)",
"pears_to_cook_medium_halved": "Pears to cook (medium, halved)",
"pears_to_cook_medium_quartered": "Pears to cook (medium, quartered)",
"pears_to_cook_medium_whole": "Pears to cook (medium, whole)",
"pears_to_cook_small_halved": "Pears to cook (small, halved)",
"pears_to_cook_small_quartered": "Pears to cook (small, quartered)",
"pears_to_cook_small_whole": "Pears to cook (small, whole)",
"pears_wedges": "Pears (wedges)",
"peas": "Peas",
"pepper_diced": "Pepper (diced)",
"pepper_halved": "Pepper (halved)",
"pepper_quartered": "Pepper (quartered)",
"pepper_strips": "Pepper (strips)",
"perch_fillet_2_cm": "Perch (fillet, 2 cm)",
"perch_fillet_3_cm": "Perch (fillet, 3 cm)",
"perch_whole": "Perch (whole)",
"pike_fillet": "Pike (fillet)",
"pike_piece": "Pike (piece)",
"pillows": "Pillows",
"pinto_beans": "Pinto beans",
"plaice_fillet_1_cm": "Plaice (fillet, 1 cm)",
"plaice_fillet_2_cm": "Plaice (fillet, 2 cm)",
"plaice_whole_2_cm": "Plaice (whole, 2 cm)",
"plaice_whole_3_cm": "Plaice (whole, 3 cm)",
"plaice_whole_4_cm": "Plaice (whole, 4 cm)",
"plums_halved": "Plums (halved)",
"plums_whole": "Plums (whole)",
"pointed_cabbage_cut": "Pointed cabbage (cut)",
"polenta": "Polenta",
"polenta_swiss_style_coarse_polenta": "Polenta Swiss style (coarse polenta)",
"polenta_swiss_style_fine_polenta": "Polenta Swiss style (fine polenta)",
"polenta_swiss_style_medium_polenta": "Polenta Swiss style (medium polenta)",
"popcorn": "Popcorn",
"pork_tenderloin_medaillons_3_cm": "Pork tenderloin (medaillons, 3 cm)",
"pork_tenderloin_medaillons_4_cm": "Pork tenderloin (medaillons, 4 cm)",
"pork_tenderloin_medaillons_5_cm": "Pork tenderloin (medaillons, 5 cm)",
"potato_dumplings_half_half_boil_in_bag": "Potato dumplings (half/half, boil-in-bag)",
"potato_dumplings_half_half_deep_frozen": "Potato dumplings (half/half, deep-frozen)",
"potato_dumplings_raw_boil_in_bag": "Potato dumplings (raw, boil-in-bag)",
"potato_dumplings_raw_deep_frozen": "Potato dumplings (raw, deep-frozen)",
"potatoes_floury_diced": "Potatoes (floury, diced)",
"potatoes_floury_halved": "Potatoes (floury, halved)",
"potatoes_floury_quartered": "Potatoes (floury, quartered)",
"potatoes_floury_whole_large": "Potatoes (floury, whole, large)",
"potatoes_floury_whole_medium": "Potatoes (floury, whole, medium)",
"potatoes_floury_whole_small": "Potatoes (floury, whole, small)",
"potatoes_in_the_skin_floury_large": "Potatoes (in the skin, floury, large)",
"potatoes_in_the_skin_floury_medium": "Potatoes (in the skin, floury, medium)",
"potatoes_in_the_skin_floury_small": "Potatoes (in the skin, floury, small)",
"potatoes_in_the_skin_mainly_waxy_large": "Potatoes (in the skin, mainly waxy, large)",
"potatoes_in_the_skin_mainly_waxy_medium": "Potatoes (in the skin, mainly waxy, medium)",
"potatoes_in_the_skin_mainly_waxy_small": "Potatoes (in the skin, mainly waxy, small)",
"potatoes_in_the_skin_waxy_large_rapid_steam_cooking": "Potatoes (in the skin, waxy, large, rapid steam cooking)",
"potatoes_in_the_skin_waxy_large_steam_cooking": "Potatoes (in the skin, waxy, large, steam cooking)",
"potatoes_in_the_skin_waxy_medium_rapid_steam_cooking": "Potatoes (in the skin, waxy, medium, rapid steam cooking)",
"potatoes_in_the_skin_waxy_medium_steam_cooking": "Potatoes (in the skin, waxy, medium, steam cooking)",
"potatoes_in_the_skin_waxy_small_rapid_steam_cooking": "Potatoes (in the skin, waxy, small, rapid steam cooking)",
"potatoes_in_the_skin_waxy_small_steam_cooking": "Potatoes (in the skin, waxy, small, steam cooking)",
"potatoes_mainly_waxy_diced": "Potatoes (mainly waxy, diced)",
"potatoes_mainly_waxy_halved": "Potatoes (mainly waxy, halved)",
"potatoes_mainly_waxy_large": "Potatoes (mainly waxy, large)",
"potatoes_mainly_waxy_medium": "Potatoes (mainly waxy, medium)",
"potatoes_mainly_waxy_quartered": "Potatoes (mainly waxy, quartered)",
"potatoes_mainly_waxy_small": "Potatoes (mainly waxy, small)",
"potatoes_waxy_diced": "Potatoes (waxy, diced)",
"potatoes_waxy_halved": "Potatoes (waxy, halved)",
"potatoes_waxy_quartered": "Potatoes (waxy, quartered)",
"potatoes_waxy_whole_large": "Potatoes (waxy, whole, large)",
"potatoes_waxy_whole_medium": "Potatoes (waxy, whole, medium)",
"potatoes_waxy_whole_small": "Potatoes (waxy, whole, small)",
"poularde_breast": "Poularde breast",
"poularde_whole": "Poularde (whole)",
"power_wash": "PowerWash",
"prawns": "Prawns",
"proofing": "Proofing",
"prove_15_min": "Prove for 15 min",
"prove_30_min": "Prove for 30 min",
"prove_45_min": "Prove for 45 min",
"prove_dough": "Prove dough",
"pumpkin_diced": "Pumpkin (diced)",
"pumpkin_soup": "Pumpkin soup",
"quick_mw": "Quick MW",
"quick_power_wash": "QuickPowerWash",
"quinces_diced": "Quinces (diced)",
"quinoa": "Quinoa",
"rapid_steam_cooking": "Rapid steam cooking",
"ravioli_fresh": "Ravioli (fresh)",
"razor_clams_large": "Razor clams (large)",
"razor_clams_medium": "Razor clams (medium)",
"razor_clams_small": "Razor clams (small)",
"red_beans": "Red beans",
"red_cabbage_cut": "Red cabbage (cut)",
"red_lentils": "Red lentils",
"red_snapper_fillet_2_cm": "Red snapper (fillet, 2 cm)",
"red_snapper_fillet_3_cm": "Red snapper (fillet, 3 cm)",
"redfish_fillet_2_cm": "Redfish (fillet, 2 cm)",
"redfish_fillet_3_cm": "Redfish (fillet, 3 cm)",
"redfish_piece": "Redfish (piece)",
"reheating_with_microwave": "Reheating with microwave",
"reheating_with_steam": "Reheating with steam",
"rhubarb_chunks": "Rhubarb chunks",
"rice_pudding_rapid_steam_cooking": "Rice pudding (rapid steam cooking)",
"rice_pudding_steam_cooking": "Rice pudding (steam cooking)",
"rinse": "Rinse",
"rinse_out_lint": "Rinse out lint",
"risotto": "Risotto",
"ristretto": "Ristretto",
"romanesco_florets_large": "Romanesco florets (large)",
"romanesco_florets_medium": "Romanesco florets (medium)",
"romanesco_florets_small": "Romanesco florets (small)",
"romanesco_whole_large": "Romanesco (whole, large)",
"romanesco_whole_medium": "Romanesco (whole, medium)",
"romanesco_whole_small": "Romanesco (whole, small)",
"round_grain_rice_general_rapid_steam_cooking": "Round grain rice (general, rapid steam cooking)",
"round_grain_rice_general_steam_cooking": "Round grain rice (general, steam cooking)",
"runner_beans_pieces": "Runner beans (pieces)",
"runner_beans_sliced": "Runner beans (sliced)",
"runner_beans_whole": "Runner beans (whole)",
"rye_cracked": "Rye (cracked)",
"rye_whole": "Rye (whole)",
"salmon_fillet_2_cm": "Salmon (fillet, 2 cm)",
"salmon_fillet_3_cm": "Salmon (fillet, 3 cm)",
"salmon_piece": "Salmon (piece)",
"salmon_steak_2_cm": "Salmon (steak, 2 cm)",
"salmon_steak_3_cm": "Salmon (steak, 3 cm)",
"salmon_trout": "Salmon trout",
"saucisson": "Saucisson",
"savoy_cabbage_cut": "Savoy cabbage (cut)",
"scallops": "Scallops",
"schupfnudeln_potato_noodels": "Schupfnudeln (potato noodels)",
"sea_devil_fillet_3_cm": "Sea devil (fillet, 3 cm)",
"sea_devil_fillet_4_cm": "Sea devil (fillet, 4 cm)",
"separate_rinse_starch": "Separate rinse/starch",
"sheyang_rapid_steam_cooking": "Sheyang (rapid steam cooking)",
"sheyang_steam_cooking": "Sheyang (steam cooking)",
"shirts": "Shirts",
"silent": "Silent",
"silks": "Silks",
"silks_handcare": "Silks handcare",
"silverside_10_cm": "Silverside (10 cm)",
"silverside_5_cm": "Silverside (5 cm)",
"silverside_7_5_cm": "Silverside (7.5 cm)",
"simiao_rapid_steam_cooking": "Simiao (rapid steam cooking)",
"simiao_steam_cooking": "Simiao (steam cooking)",
"small_shrimps": "Small shrimps",
"smoothing": "Smoothing",
"snow_pea": "Snow pea",
"soak": "Soak",
"solar_save": "SolarSave",
"soup_hen": "Soup hen",
"sour_cherries": "Sour cherries",
"sous_vide": "Sous-vide",
"spaetzle_fresh": "Spätzle (fresh)",
"spelt_cracked": "Spelt (cracked)",
"spelt_whole": "Spelt (whole)",
"spinach": "Spinach",
"sportswear": "Sportswear",
"spot": "Spot",
"standard_pillows": "Standard pillows",
"starch": "Starch",
"steam_care": "Steam care",
"steam_cooking": "Steam cooking",
"steam_smoothing": "Steam smoothing",
"stuffed_cabbage": "Stuffed cabbage",
"sweat_onions": "Sweat onions",
"swede_cut_into_batons": "Swede (cut into batons)",
"swede_diced": "Swede (diced)",
"sweet_cheese_dumplings": "Sweet cheese dumplings",
"sweet_cherries": "Sweet cherries",
"swiss_toffee_cream_100_ml": "Swiss toffee cream (100 ml)",
"swiss_toffee_cream_150_ml": "Swiss toffee cream (150 ml)",
"tagliatelli_fresh": "Tagliatelli (fresh)",
"tall_items": "Tall items",
"teltow_turnip_diced": "Teltow turnip (diced)",
"teltow_turnip_sliced": "Teltow turnip (sliced)",
"tilapia_fillet_1_cm": "Tilapia (fillet, 1 cm)",
"tilapia_fillet_2_cm": "Tilapia (fillet, 2 cm)",
"toffee_date_dessert_one_large": "Toffee-date dessert (one large)",
"toffee_date_dessert_several_small": "Toffee-date dessert (several small)",
"top_heat": "Top heat",
"tortellini_fresh": "Tortellini (fresh)",
"trainers": "Trainers",
"treacle_sponge_pudding_one_large": "Treacle sponge pudding (one large)",
"treacle_sponge_pudding_several_small": "Treacle sponge pudding (several small)",
"trout": "Trout",
"tuna_fillet_2_cm": "Tuna (fillet, 2 cm)",
"tuna_fillet_3_cm": "Tuna (fillet, 3 cm)",
"tuna_steak": "Tuna (steak)",
"turbo": "Turbo",
"turbot_fillet_2_cm": "Turbot (fillet, 2 cm)",
"turbot_fillet_3_cm": "Turbot (fillet, 3 cm)",
"turkey_breast": "Turkey breast",
"uonumma_koshihikari_rapid_steam_cooking": "Uonumma Koshihikari (rapid steam cooking)",
"uonumma_koshihikari_steam_cooking": "Uonumma Koshihikari (steam cooking)",
"veal_fillet_medaillons_1_cm": "Veal fillet (medaillons, 1 cm)",
"veal_fillet_medaillons_2_cm": "Veal fillet (medaillons, 2 cm)",
"veal_fillet_medaillons_3_cm": "Veal fillet (medaillons, 3 cm)",
"veal_fillet_whole": "Veal fillet (whole)",
"veal_sausages": "Veal sausages",
"venus_clams": "Venus clams",
"very_hot_water": "Very hot water",
"viennese_silverside": "Viennese silverside",
"warm_air": "Warm air",
"wheat_cracked": "Wheat (cracked)",
"wheat_whole": "Wheat (whole)",
"white_asparagus_medium": "White asparagus (medium)",
"white_asparagus_thick": "White asparagus (thick)",
"white_asparagus_thin": "White asparagus (thin)",
"white_beans": "White beans",
"white_tea": "White tea",
"whole_ham_reheating": "Whole ham (reheating)",
"whole_ham_steam_cooking": "Whole ham (steam cooking)",
"wholegrain_rice": "Wholegrain rice",
"wild_rice": "Wild rice",
"woollens": "Woollens",
"woollens_handcare": "Woollens hand care",
"wuchang_rapid_steam_cooking": "Wuchang (rapid steam cooking)",
"wuchang_steam_cooking": "Wuchang (steam cooking)",
"yam_halved": "Yam (halved)",
"yam_quartered": "Yam (quartered)",
"yam_strips": "Yam (strips)",
"yeast_dumplings_fresh": "Yeast dumplings (fresh)",
"yellow_beans_cut": "Yellow beans (cut)",
"yellow_beans_whole": "Yellow beans (whole)",
"yellow_split_peas": "Yellow split peas",
"zander_fillet": "Zander (fillet)"
}
},
"spin_speed": {
"name": "Spin speed"
},
"status": {
"name": "Status",
"state": {
@ -196,6 +837,15 @@
"waiting_to_start": "Waiting to start"
}
},
"temperature_zone_2": {
"name": "Temperature zone 2"
},
"temperature_zone_3": {
"name": "Temperature zone 3"
},
"water_consumption": {
"name": "Water consumption"
},
"core_temperature": {
"name": "Core temperature"
},

View File

@ -0,0 +1,534 @@
{
"Dummy_Appliance_1": {
"ident": {
"type": {
"key_localized": "Device type",
"value_raw": 20,
"value_localized": "Freezer"
},
"deviceName": "",
"protocolVersion": 201,
"deviceIdentLabel": {
"fabNumber": "Dummy_Appliance_1",
"fabIndex": "21",
"techType": "FNS 28463 E ed/",
"matNumber": "10805070",
"swids": ["4497"]
},
"xkmIdentLabel": {
"techType": "EK042",
"releaseVersion": "31.17"
}
},
"state": {
"ProgramID": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program name"
},
"status": {
"value_raw": 5,
"value_localized": "In use",
"key_localized": "status"
},
"programType": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program type"
},
"programPhase": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program phase"
},
"remainingTime": [0, 0],
"startTime": [],
"targetTemperature": [
{
"value_raw": -1800,
"value_localized": -18,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTargetTemperature": [],
"temperature": [
{
"value_raw": -1800,
"value_localized": -18,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTemperature": [],
"signalInfo": false,
"signalFailure": false,
"signalDoor": false,
"remoteEnable": {
"fullRemoteControl": true,
"smartGrid": false,
"mobileStart": false
},
"ambientLight": null,
"light": null,
"elapsedTime": [],
"spinningSpeed": {
"unit": "rpm",
"value_raw": null,
"value_localized": null,
"key_localized": "Spin speed"
},
"dryingStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Drying level"
},
"ventilationStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Fan level"
},
"plateStep": [],
"ecoFeedback": null,
"batteryLevel": null
}
},
"Dummy_Appliance_2": {
"ident": {
"type": {
"key_localized": "Device type",
"value_raw": 19,
"value_localized": "Refrigerator"
},
"deviceName": "",
"protocolVersion": 201,
"deviceIdentLabel": {
"fabNumber": "Dummy_Appliance_2",
"fabIndex": "17",
"techType": "KS 28423 D ed/c",
"matNumber": "10804770",
"swids": ["4497"]
},
"xkmIdentLabel": {
"techType": "EK042",
"releaseVersion": "31.17"
}
},
"state": {
"ProgramID": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program name"
},
"status": {
"value_raw": 5,
"value_localized": "In use",
"key_localized": "status"
},
"programType": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program type"
},
"programPhase": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program phase"
},
"remainingTime": [0, 0],
"startTime": [0, 0],
"targetTemperature": [
{
"value_raw": 400,
"value_localized": 4,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTargetTemperature": [],
"temperature": [
{
"value_raw": 400,
"value_localized": 4,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTemperature": [],
"signalInfo": false,
"signalFailure": false,
"signalDoor": false,
"remoteEnable": {
"fullRemoteControl": true,
"smartGrid": false,
"mobileStart": false
},
"ambientLight": null,
"light": null,
"elapsedTime": [],
"spinningSpeed": {
"unit": "rpm",
"value_raw": null,
"value_localized": null,
"key_localized": "Spin speed"
},
"dryingStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Drying level"
},
"ventilationStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Fan level"
},
"plateStep": [],
"ecoFeedback": null,
"batteryLevel": null
}
},
"Dummy_Appliance_3": {
"ident": {
"type": {
"key_localized": "Device type",
"value_raw": 1,
"value_localized": "Washing machine"
},
"deviceName": "",
"protocolVersion": 4,
"deviceIdentLabel": {
"fabNumber": "Dummy_Appliance_3",
"fabIndex": "44",
"techType": "WCI870",
"matNumber": "11387290",
"swids": [
"5975",
"20456",
"25213",
"25191",
"25446",
"25205",
"25447",
"25319"
]
},
"xkmIdentLabel": {
"techType": "EK057",
"releaseVersion": "08.32"
}
},
"state": {
"ProgramID": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program name"
},
"status": {
"value_raw": 1,
"value_localized": "Off",
"key_localized": "status"
},
"programType": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program type"
},
"programPhase": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program phase"
},
"remainingTime": [0, 0],
"startTime": [0, 0],
"targetTemperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTargetTemperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"temperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTemperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"signalInfo": false,
"signalFailure": false,
"signalDoor": true,
"remoteEnable": {
"fullRemoteControl": true,
"smartGrid": false,
"mobileStart": false
},
"ambientLight": null,
"light": null,
"elapsedTime": [0, 0],
"spinningSpeed": {
"unit": "rpm",
"value_raw": null,
"value_localized": null,
"key_localized": "Spin speed"
},
"dryingStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Drying level"
},
"ventilationStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Fan level"
},
"plateStep": [],
"ecoFeedback": null,
"batteryLevel": null
}
},
"Dummy_Appliance_4": {
"ident": {
"type": {
"key_localized": "Device type",
"value_raw": 12,
"value_localized": "Oven"
},
"deviceName": "",
"protocolVersion": 4,
"deviceIdentLabel": {
"fabNumber": "",
"fabIndex": "00",
"techType": "H7264B",
"matNumber": "",
"swids": ["swid00"]
},
"xkmIdentLabel": { "techType": "EK057", "releaseVersion": "08.21" }
},
"state": {
"ProgramID": {
"value_raw": 13,
"value_localized": "Fan plus",
"key_localized": "Program name"
},
"status": {
"value_raw": 3,
"value_localized": "Programmed",
"key_localized": "status"
},
"programType": {
"value_raw": 1,
"value_localized": "Own program",
"key_localized": "Program type"
},
"programPhase": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program phase"
},
"remainingTime": [0, 0],
"startTime": [0, 0],
"targetTemperature": [
{ "value_raw": 18000, "value_localized": "180.0", "unit": "Celsius" },
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" },
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" }
],
"temperature": [
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" },
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" },
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" }
],
"signalInfo": false,
"signalFailure": false,
"signalDoor": false,
"remoteEnable": {
"fullRemoteControl": true,
"smartGrid": false,
"mobileStart": false
},
"ambientLight": null,
"light": 2,
"elapsedTime": [0, 0],
"spinningSpeed": {
"unit": "rpm",
"value_raw": null,
"value_localized": null,
"key_localized": "Spin speed"
},
"dryingStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Drying level"
},
"ventilationStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Fan level"
},
"plateStep": [],
"ecoFeedback": null,
"batteryLevel": null
}
},
"Dummy_Appliance_5": {
"ident": {
"type": {
"key_localized": "Device type",
"value_raw": 7,
"value_localized": "Dishwasher"
},
"deviceName": "",
"protocolVersion": 2,
"deviceIdentLabel": {
"fabNumber": "<fabNumber5>",
"fabIndex": "64",
"techType": "G6865-W",
"matNumber": "<matNumber1>",
"swids": ["<swid1>", "<swid2>", "<swid3>", "<...>"]
},
"xkmIdentLabel": { "techType": "EK039W", "releaseVersion": "02.72" }
},
"state": {
"ProgramID": {
"value_raw": 99938,
"value_localized": "QuickPowerWash",
"key_localized": "Program name"
},
"status": {
"value_raw": 5,
"value_localized": "In use",
"key_localized": "status"
},
"programType": {
"value_raw": 9992,
"value_localized": "Automatic programme",
"key_localized": "Program type"
},
"programPhase": {
"value_raw": 9991799,
"value_localized": "Drying",
"key_localized": "Program phase"
},
"remainingTime": [0, 15],
"startTime": [0, 0],
"targetTemperature": [
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" }
],
"temperature": [
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" },
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" },
{ "value_raw": -32768, "value_localized": null, "unit": "Celsius" }
],
"signalInfo": false,
"signalFailure": false,
"signalDoor": false,
"remoteEnable": {
"fullRemoteControl": true,
"smartGrid": false,
"mobileStart": false
},
"ambientLight": null,
"light": null,
"elapsedTime": [0, 59],
"spinningSpeed": {
"unit": "rpm",
"value_raw": null,
"value_localized": null,
"key_localized": "Spin speed"
},
"dryingStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Drying level"
},
"ventilationStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Fan level"
},
"plateStep": [],
"ecoFeedback": {
"currentWaterConsumption": {
"unit": "l",
"value": 12
},
"currentEnergyConsumption": {
"unit": "kWh",
"value": 1.4
},
"waterForecast": 0.2,
"energyForecast": 0.1
},
"batteryLevel": null
}
}
}

View File

@ -6,24 +6,24 @@
'area_id': None,
'capabilities': dict({
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'config_entry_id': <ANY>,
@ -61,24 +61,24 @@
'friendly_name': 'Freezer',
'icon': 'mdi:fridge-industrial-outline',
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'context': <ANY>,
@ -148,24 +148,24 @@
'area_id': None,
'capabilities': dict({
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'config_entry_id': <ANY>,
@ -203,24 +203,24 @@
'friendly_name': 'Hood',
'icon': 'mdi:turbine',
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'context': <ANY>,
@ -238,24 +238,24 @@
'area_id': None,
'capabilities': dict({
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'config_entry_id': <ANY>,
@ -293,24 +293,24 @@
'friendly_name': 'Refrigerator',
'icon': 'mdi:fridge-industrial-outline',
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'context': <ANY>,
@ -380,24 +380,24 @@
'area_id': None,
'capabilities': dict({
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'config_entry_id': <ANY>,
@ -435,24 +435,24 @@
'friendly_name': 'Washing machine',
'icon': 'mdi:washing-machine',
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'programmed',
'waiting_to_start',
'in_use',
'pause',
'program_ended',
'failure',
'program_interrupted',
'idle',
'programmed',
'rinse_hold',
'service',
'superfreezing',
'supercooling',
'superheating',
'supercooling_superfreezing',
'autocleaning',
'not_connected',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'context': <ANY>,
@ -463,3 +463,430 @@
'state': 'off',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_energy_consumption-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.washing_machine_energy_consumption',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>,
'original_icon': None,
'original_name': 'Energy consumption',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'energy_consumption',
'unique_id': 'Dummy_Appliance_3-current_energy_consumption',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_energy_consumption-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'energy',
'friendly_name': 'Washing machine Energy consumption',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}),
'context': <ANY>,
'entity_id': 'sensor.washing_machine_energy_consumption',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_program-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'automatic_plus',
'clean_machine',
'cool_air',
'cottons',
'cottons_eco',
'cottons_hygiene',
'curtains',
'dark_garments',
'delicates',
'denim',
'down_duvets',
'down_filled_items',
'drain_spin',
'eco_40_60',
'express_20',
'first_wash',
'freshen_up',
'minimum_iron',
'no_program',
'outerwear',
'pillows',
'proofing',
'quick_power_wash',
'rinse',
'rinse_out_lint',
'separate_rinse_starch',
'shirts',
'silks',
'sportswear',
'starch',
'steam_care',
'trainers',
'warm_air',
'woollens',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.washing_machine_program',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Program',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'program_id',
'unique_id': 'Dummy_Appliance_3-state_program_id',
'unit_of_measurement': None,
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_program-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Washing machine Program',
'options': list([
'automatic_plus',
'clean_machine',
'cool_air',
'cottons',
'cottons_eco',
'cottons_hygiene',
'curtains',
'dark_garments',
'delicates',
'denim',
'down_duvets',
'down_filled_items',
'drain_spin',
'eco_40_60',
'express_20',
'first_wash',
'freshen_up',
'minimum_iron',
'no_program',
'outerwear',
'pillows',
'proofing',
'quick_power_wash',
'rinse',
'rinse_out_lint',
'separate_rinse_starch',
'shirts',
'silks',
'sportswear',
'starch',
'steam_care',
'trainers',
'warm_air',
'woollens',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.washing_machine_program',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'no_program',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_program_phase-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'anti_crease',
'cleaning',
'cooling_down',
'disinfecting',
'drain',
'drying',
'finished',
'freshen_up_and_moisten',
'hygiene',
'main_wash',
'not_running',
'pre_wash',
'rinse',
'rinse_hold',
'soak',
'spin',
'starch_stop',
'steam_smoothing',
'venting',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.washing_machine_program_phase',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Program phase',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'program_phase',
'unique_id': 'Dummy_Appliance_3-state_program_phase',
'unit_of_measurement': None,
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_program_phase-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Washing machine Program phase',
'options': list([
'anti_crease',
'cleaning',
'cooling_down',
'disinfecting',
'drain',
'drying',
'finished',
'freshen_up_and_moisten',
'hygiene',
'main_wash',
'not_running',
'pre_wash',
'rinse',
'rinse_hold',
'soak',
'spin',
'starch_stop',
'steam_smoothing',
'venting',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.washing_machine_program_phase',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'not_running',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_program_type-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'automatic_program',
'cleaning_care_program',
'maintenance_program',
'normal_operation_mode',
'own_program',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.washing_machine_program_type',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Program type',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'program_type',
'unique_id': 'Dummy_Appliance_3-state_program_type',
'unit_of_measurement': None,
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_program_type-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Washing machine Program type',
'options': list([
'automatic_program',
'cleaning_care_program',
'maintenance_program',
'normal_operation_mode',
'own_program',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.washing_machine_program_type',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'normal_operation_mode',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_spin_speed-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.washing_machine_spin_speed',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Spin speed',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'spin_speed',
'unique_id': 'Dummy_Appliance_3-state_spinning_speed',
'unit_of_measurement': 'rpm',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_spin_speed-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Washing machine Spin speed',
'unit_of_measurement': 'rpm',
}),
'context': <ANY>,
'entity_id': 'sensor.washing_machine_spin_speed',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_water_consumption-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.washing_machine_water_consumption',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.WATER: 'water'>,
'original_icon': None,
'original_name': 'Water consumption',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'water_consumption',
'unique_id': 'Dummy_Appliance_3-current_water_consumption',
'unit_of_measurement': <UnitOfVolume.LITERS: 'L'>,
})
# ---
# name: test_sensor_states[platforms0][sensor.washing_machine_water_consumption-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'water',
'friendly_name': 'Washing machine Water consumption',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfVolume.LITERS: 'L'>,
}),
'context': <ANY>,
'entity_id': 'sensor.washing_machine_water_consumption',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---

View File

@ -5,14 +5,14 @@ from unittest.mock import MagicMock
import pytest
from syrupy import SnapshotAssertion
from homeassistant.const import Platform
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, snapshot_platform
@pytest.mark.parametrize("platforms", [(Platform.SENSOR,)])
@pytest.mark.parametrize("platforms", [(SENSOR_DOMAIN,)])
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_sensor_states(
hass: HomeAssistant,