diff --git a/homeassistant/components/miele/const.py b/homeassistant/components/miele/const.py index d129bdcbbd4..85934afae09 100644 --- a/homeassistant/components/miele/const.py +++ b/homeassistant/components/miele/const.py @@ -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, +} diff --git a/homeassistant/components/miele/icons.json b/homeassistant/components/miele/icons.json index 1a4a7d8fbc6..a0fb1daaedd 100644 --- a/homeassistant/components/miele/icons.json +++ b/homeassistant/components/miele/icons.json @@ -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": { diff --git a/homeassistant/components/miele/sensor.py b/homeassistant/components/miele/sensor.py index 208d089c062..1c0c9835407 100644 --- a/homeassistant/components/miele/sensor.py +++ b/homeassistant/components/miele/sensor.py @@ -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())) diff --git a/homeassistant/components/miele/strings.json b/homeassistant/components/miele/strings.json index f1a79bd62f7..a0945529e8d 100644 --- a/homeassistant/components/miele/strings.json +++ b/homeassistant/components/miele/strings.json @@ -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": "Hen’s eggs (size „L“, hard)", + "hens_eggs_size_l_medium": "Hen’s eggs (size „L“, medium)", + "hens_eggs_size_l_soft": "Hen’s eggs (size „L“, soft)", + "hens_eggs_size_m_hard": "Hen’s eggs (size „M“, hard)", + "hens_eggs_size_m_medium": "Hen’s eggs (size „M“, medium)", + "hens_eggs_size_m_soft": "Hen’s eggs (size „M“, soft)", + "hens_eggs_size_s_hard": "Hen’s eggs (size „S“, hard)", + "hens_eggs_size_s_medium": "Hen’s eggs (size „S“, medium)", + "hens_eggs_size_s_soft": "Hen’s eggs (size „S“, soft)", + "hens_eggs_size_xl_hard": "Hen’s eggs (size „XL“, hard)", + "hens_eggs_size_xl_medium": "Hen’s eggs (size „XL“, medium)", + "hens_eggs_size_xl_soft": "Hen’s 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" }, diff --git a/tests/components/miele/fixtures/5_devices.json b/tests/components/miele/fixtures/5_devices.json new file mode 100644 index 00000000000..93b5bf9f887 --- /dev/null +++ b/tests/components/miele/fixtures/5_devices.json @@ -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": "", + "fabIndex": "64", + "techType": "G6865-W", + "matNumber": "", + "swids": ["", "", "", "<...>"] + }, + "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 + } + } +} diff --git a/tests/components/miele/snapshots/test_sensor.ambr b/tests/components/miele/snapshots/test_sensor.ambr index 72878482c08..9cbb493da23 100644 --- a/tests/components/miele/snapshots/test_sensor.ambr +++ b/tests/components/miele/snapshots/test_sensor.ambr @@ -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': , @@ -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': , @@ -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': , @@ -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': , @@ -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': , @@ -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': , @@ -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': , @@ -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': , @@ -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': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.washing_machine_energy_consumption', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + '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': , + }) +# --- +# 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': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.washing_machine_energy_consumption', + 'last_changed': , + 'last_reported': , + 'last_updated': , + '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': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.washing_machine_program', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + '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': , + 'entity_id': 'sensor.washing_machine_program', + 'last_changed': , + 'last_reported': , + 'last_updated': , + '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': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + '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': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + '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': , + 'entity_id': 'sensor.washing_machine_program_phase', + 'last_changed': , + 'last_reported': , + 'last_updated': , + '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': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.washing_machine_program_type', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + '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': , + 'entity_id': 'sensor.washing_machine_program_type', + 'last_changed': , + 'last_reported': , + 'last_updated': , + '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': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.washing_machine_spin_speed', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + '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': , + 'entity_id': 'sensor.washing_machine_spin_speed', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_sensor_states[platforms0][sensor.washing_machine_water_consumption-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.washing_machine_water_consumption', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + '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': , + }) +# --- +# 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': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.washing_machine_water_consumption', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.0', + }) +# --- diff --git a/tests/components/miele/test_sensor.py b/tests/components/miele/test_sensor.py index c86aa84bd6a..0a12a9e85e4 100644 --- a/tests/components/miele/test_sensor.py +++ b/tests/components/miele/test_sensor.py @@ -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,