iobroker.miele-local 0.3.40 → 0.3.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -237,6 +237,13 @@ engineering work of the projects `MieleRESTServer` (akappner),
237
237
  ### **WORK IN PROGRESS**
238
238
  -->
239
239
 
240
+ ### 0.3.41
241
+
242
+ - (SmarthomeElektroniker) Device types corrected: 16 is the microwave (was: steam oven combi), 67 the dialog oven (was: dish warmer, now 25), the washer-dryer (24) uses the washing machine programs, the oven with microwave (13) its own phases
243
+ - (SmarthomeElektroniker) New device types: semi-professional/professional washers, dryers and dishwashers, robot vacuum (23), steam oven combi (31), steam oven with microwave (45, 418 programs), steam oven MK2 (73); dishwasher program 5 added
244
+ - (SmarthomeElektroniker) Programs without a German name are shown readably ("Artichokes small") instead of as raw identifier
245
+ - (SmarthomeElektroniker) Credits for the tables taken over from Home Assistant, ha-miele-at-lan and ioBroker.miele-unbound
246
+
240
247
  ### 0.3.40
241
248
 
242
249
  - (SmarthomeElektroniker) README: hints for a failing login (ad blocker), moving to another system and why mDNS may find nothing; clearer log message when no appliance is found (#12, thanks @meistermopper)
@@ -480,6 +487,15 @@ Most of the above was contributed by [meistermopper](https://github.com/meisterm
480
487
 
481
488
  [Older changelog entries can be found here](CHANGELOG_OLD.md)
482
489
 
490
+ ## Credits
491
+
492
+ The program and phase tables in `lib/enums.js` and the mapping of device types to tables come
493
+ from [Home Assistant](https://github.com/home-assistant/core) (Apache License 2.0, © Home Assistant
494
+ Authors), taken over via [ha-miele-at-lan](https://github.com/tiehfood/ha-miele-at-lan) (MIT, ©
495
+ tiehfood) and cross-checked against
496
+ [ioBroker.miele-unbound](https://github.com/meistermopper/ioBroker.miele-unbound) (MIT, ©
497
+ meistermopper). Thanks to all three projects.
498
+
483
499
  ## License
484
500
 
485
501
  MIT License
package/README_de.md CHANGED
@@ -355,6 +355,15 @@ Reverse-Engineering-Arbeit der Projekte `MieleRESTServer` (akappner),
355
355
 
356
356
  [Ältere Einträge sind hier zu finden](CHANGELOG_OLD.md)
357
357
 
358
+ ## Danksagung
359
+
360
+ Die Programm- und Phasentabellen in `lib/enums.js` und die Zuordnung der Gerätetypen stammen aus
361
+ [Home Assistant](https://github.com/home-assistant/core) (Apache License 2.0, © Home Assistant
362
+ Authors), übernommen über [ha-miele-at-lan](https://github.com/tiehfood/ha-miele-at-lan) (MIT, ©
363
+ tiehfood) und abgeglichen mit
364
+ [ioBroker.miele-unbound](https://github.com/meistermopper/ioBroker.miele-unbound) (MIT, ©
365
+ meistermopper). Danke an alle drei Projekte.
366
+
358
367
  ## Lizenz
359
368
 
360
369
  MIT License - Copyright (c) 2026 Immanuel <github@freitag.online>
package/io-package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "miele-local",
4
- "version": "0.3.40",
4
+ "version": "0.3.41",
5
5
  "titleLang": {
6
6
  "en": "Miele@local",
7
7
  "de": "Miele@local",
@@ -52,6 +52,19 @@
52
52
  "readme": "https://github.com/SmarthomeElektroniker/ioBroker.miele-local/blob/main/README.md",
53
53
  "loglevel": "info",
54
54
  "news": {
55
+ "0.3.41": {
56
+ "en": "Device types corrected (16 microwave, 67 dialog oven, 25 dish warmer, washer-dryer uses washing machine programs); new types: robot vacuum, steam oven combi, steam oven with microwave (418 programs), professional appliances. Credits for tables from Home Assistant.",
57
+ "de": "Gerätetypen berichtigt (16 Mikrowelle, 67 Dialoggarer, 25 Wärmeschublade, Waschtrockner mit Waschmaschinenprogrammen); neue Typen: Saugroboter, Dampfbackofen, Dampfgarer mit Mikrowelle (418 Programme), Profi-Geräte. Danksagung für die Tabellen aus Home Assistant.",
58
+ "ru": "Исправлены типы устройств (16 микроволновка, 67 Dialog-печь, 25 подогреватель посуды, стирально-сушильная машина с программами стиральной машины); новые типы: робот-пылесос, пароконвектомат, пароварка с микроволновкой (418 программ), профессиональные приборы. Благодарность Home Assistant за таблицы.",
59
+ "pt": "Tipos de aparelho corrigidos (16 micro-ondas, 67 forno Dialog, 25 aquecedor de loiça, máquina de lavar e secar com programas de lavagem); novos tipos: aspirador robô, forno a vapor combinado, forno a vapor com micro-ondas (418 programas), aparelhos profissionais. Créditos pelas tabelas do Home Assistant.",
60
+ "nl": "Apparaattypes gecorrigeerd (16 magnetron, 67 Dialog-oven, 25 servieswarmer, was-droogcombinatie met wasmachineprogramma's); nieuwe types: robotstofzuiger, combi-stoomoven, stoomoven met magnetron (418 programma's), professionele apparaten. Dank aan Home Assistant voor de tabellen.",
61
+ "fr": "Types d'appareils corrigés (16 micro-ondes, 67 four Dialog, 25 chauffe-vaisselle, lave-linge séchant avec programmes de lave-linge) ; nouveaux types : aspirateur robot, four vapeur combiné, four vapeur avec micro-ondes (418 programmes), appareils professionnels. Remerciements à Home Assistant pour les tables.",
62
+ "it": "Tipi di apparecchio corretti (16 microonde, 67 forno Dialog, 25 scaldavivande, lavasciuga con programmi della lavatrice); nuovi tipi: robot aspirapolvere, forno a vapore combinato, forno a vapore con microonde (418 programmi), apparecchi professionali. Ringraziamenti a Home Assistant per le tabelle.",
63
+ "es": "Tipos de aparato corregidos (16 microondas, 67 horno Dialog, 25 calientaplatos, lavadora-secadora con programas de lavadora); nuevos tipos: robot aspirador, horno de vapor combinado, horno de vapor con microondas (418 programas), aparatos profesionales. Agradecimientos a Home Assistant por las tablas.",
64
+ "pl": "Poprawiono typy urządzeń (16 mikrofalówka, 67 piekarnik Dialog, 25 podgrzewacz naczyń, pralko-suszarka z programami pralki); nowe typy: robot sprzątający, piekarnik parowy kombi, piekarnik parowy z mikrofalą (418 programów), urządzenia profesjonalne. Podziękowania dla Home Assistant za tabele.",
65
+ "uk": "Виправлено типи пристроїв (16 мікрохвильова піч, 67 піч Dialog, 25 підігрівач посуду, прально-сушильна машина з програмами пральної машини); нові типи: робот-пилосос, комбі-пароварка, пароварка з мікрохвильовою піччю (418 програм), професійні прилади. Подяка Home Assistant за таблиці.",
66
+ "zh-cn": "修正设备类型(16 微波炉、67 Dialog 烤箱、25 暖碟机、洗干一体机使用洗衣机程序);新增类型:扫地机器人、蒸烤箱、微波蒸箱(418 个程序)、专业设备。感谢 Home Assistant 提供的表格。"
67
+ },
55
68
  "0.3.40": {
56
69
  "en": "README: hints for a failing login (ad blocker), moving to another system and why mDNS may find nothing; clearer log message when no appliance is found (#12).",
57
70
  "de": "README: Hinweise bei scheiterndem Login (Werbeblocker), zum Umzug auf ein anderes System und warum mDNS nichts findet; deutlichere Logmeldung, wenn kein Gerät gefunden wird (#12).",
package/lib/enums.js CHANGED
@@ -1,5 +1,12 @@
1
1
  'use strict';
2
- // Auto-generiert aus der RE-Referenz (ha-miele-at-lan/enums.py). Klartext-Dekodierung.
2
+ // Klartext-Dekodierung. Die Tabellen und die Zuordnung Geraetetyp -> Tabelle stammen aus
3
+ // Home Assistant (homeassistant/components/miele/const.py, Apache-2.0, (c) Home Assistant
4
+ // Authors), uebernommen ueber ha-miele-at-lan (custom_components/miele_lan/enums.py und
5
+ // sensor.py, MIT, (c) 2026 tiehfood). Abgeglichen mit ioBroker.miele-unbound
6
+ // (src/lib/definitions.ts, MIT, (c) 2026 meistermopper). Eigene Ergaenzungen sind im Text
7
+ // gekennzeichnet (etwa die 200er-Reihe der Spuelmaschinen).
8
+ // https://github.com/home-assistant/core - Apache License 2.0
9
+ // https://github.com/tiehfood/ha-miele-at-lan - MIT License
3
10
  //
4
11
  // ANMERKUNG ZU StateStatus 12 ("service"), am Geraet geprueft am 25.08.2026:
5
12
  // Der Wert meldet nicht, dass das Geraet gewartet wird, sondern dass jemand am Geraet das
@@ -330,6 +337,7 @@ const TABLES = {
330
337
  1: 'intensive',
331
338
  2: 'maintenance',
332
339
  3: 'eco',
340
+ 5: 'normal',
333
341
  6: 'automatic',
334
342
  7: 'automatic',
335
343
  9: 'solar_save',
@@ -820,20 +828,509 @@ const TABLES = {
820
828
  2: 'medium',
821
829
  3: 'high',
822
830
  },
831
+ // Dampfgarer mit Mikrowelle (45)
832
+ SteamOvenMicroProgramId: {
833
+ '-1': 'no_program',
834
+ 0: 'no_program',
835
+ 8: 'steam_cooking',
836
+ 19: 'microwave',
837
+ 53: 'popcorn',
838
+ 54: 'quick_mw',
839
+ 72: 'sous_vide',
840
+ 75: 'eco_steam_cooking',
841
+ 77: 'rapid_steam_cooking',
842
+ 326: 'descale',
843
+ 330: 'menu_cooking',
844
+ 2018: 'reheating_with_steam',
845
+ 2019: 'defrosting_with_steam',
846
+ 2020: 'blanching',
847
+ 2021: 'bottling',
848
+ 2022: 'sterilize_crockery',
849
+ 2023: 'prove_dough',
850
+ 2027: 'soak',
851
+ 2029: 'reheating_with_microwave',
852
+ 2030: 'defrosting_with_microwave',
853
+ 2031: 'artichokes_small',
854
+ 2032: 'artichokes_medium',
855
+ 2033: 'artichokes_large',
856
+ 2034: 'eggplant_sliced',
857
+ 2035: 'eggplant_diced',
858
+ 2036: 'cauliflower_whole_small',
859
+ 2039: 'cauliflower_whole_medium',
860
+ 2042: 'cauliflower_whole_large',
861
+ 2046: 'cauliflower_florets_small',
862
+ 2048: 'cauliflower_florets_medium',
863
+ 2049: 'cauliflower_florets_large',
864
+ 2051: 'green_beans_whole',
865
+ 2052: 'green_beans_cut',
866
+ 2053: 'yellow_beans_whole',
867
+ 2054: 'yellow_beans_cut',
868
+ 2055: 'broad_beans',
869
+ 2056: 'common_beans',
870
+ 2057: 'runner_beans_whole',
871
+ 2058: 'runner_beans_pieces',
872
+ 2059: 'runner_beans_sliced',
873
+ 2060: 'broccoli_whole_small',
874
+ 2061: 'broccoli_whole_medium',
875
+ 2062: 'broccoli_whole_large',
876
+ 2064: 'broccoli_florets_small',
877
+ 2066: 'broccoli_florets_medium',
878
+ 2068: 'broccoli_florets_large',
879
+ 2069: 'endive_halved',
880
+ 2070: 'endive_quartered',
881
+ 2071: 'endive_strips',
882
+ 2072: 'chinese_cabbage_cut',
883
+ 2073: 'peas',
884
+ 2074: 'fennel_halved',
885
+ 2075: 'fennel_quartered',
886
+ 2076: 'fennel_strips',
887
+ 2077: 'kale_cut',
888
+ 2080: 'potatoes_in_the_skin_waxy_small_steam_cooking',
889
+ 2081: 'potatoes_in_the_skin_waxy_small_rapid_steam_cooking',
890
+ 2083: 'potatoes_in_the_skin_waxy_medium_steam_cooking',
891
+ 2084: 'potatoes_in_the_skin_waxy_medium_rapid_steam_cooking',
892
+ 2086: 'potatoes_in_the_skin_waxy_large_steam_cooking',
893
+ 2087: 'potatoes_in_the_skin_waxy_large_rapid_steam_cooking',
894
+ 2088: 'potatoes_in_the_skin_floury_small',
895
+ 2091: 'potatoes_in_the_skin_floury_medium',
896
+ 2094: 'potatoes_in_the_skin_floury_large',
897
+ 2097: 'potatoes_in_the_skin_mainly_waxy_small',
898
+ 2100: 'potatoes_in_the_skin_mainly_waxy_medium',
899
+ 2103: 'potatoes_in_the_skin_mainly_waxy_large',
900
+ 2106: 'potatoes_waxy_whole_small',
901
+ 2109: 'potatoes_waxy_whole_medium',
902
+ 2112: 'potatoes_waxy_whole_large',
903
+ 2115: 'potatoes_waxy_halved',
904
+ 2116: 'potatoes_waxy_quartered',
905
+ 2117: 'potatoes_waxy_diced',
906
+ 2118: 'potatoes_mainly_waxy_small',
907
+ 2119: 'potatoes_mainly_waxy_medium',
908
+ 2120: 'potatoes_mainly_waxy_large',
909
+ 2121: 'potatoes_mainly_waxy_halved',
910
+ 2122: 'potatoes_mainly_waxy_quartered',
911
+ 2123: 'potatoes_mainly_waxy_diced',
912
+ 2124: 'potatoes_floury_whole_small',
913
+ 2125: 'potatoes_floury_whole_medium',
914
+ 2126: 'potatoes_floury_whole_large',
915
+ 2127: 'potatoes_floury_halved',
916
+ 2128: 'potatoes_floury_quartered',
917
+ 2129: 'potatoes_floury_diced',
918
+ 2130: 'german_turnip_sliced',
919
+ 2131: 'german_turnip_cut_into_batons',
920
+ 2132: 'german_turnip_diced',
921
+ 2133: 'pumpkin_diced',
922
+ 2134: 'corn_on_the_cob',
923
+ 2135: 'mangel_cut',
924
+ 2136: 'bunched_carrots_whole_small',
925
+ 2137: 'bunched_carrots_whole_medium',
926
+ 2138: 'bunched_carrots_whole_large',
927
+ 2139: 'bunched_carrots_halved',
928
+ 2140: 'bunched_carrots_quartered',
929
+ 2141: 'bunched_carrots_diced',
930
+ 2142: 'bunched_carrots_cut_into_batons',
931
+ 2143: 'bunched_carrots_sliced',
932
+ 2144: 'parisian_carrots_small',
933
+ 2145: 'parisian_carrots_medium',
934
+ 2146: 'parisian_carrots_large',
935
+ 2147: 'carrots_whole_small',
936
+ 2148: 'carrots_whole_medium',
937
+ 2149: 'carrots_whole_large',
938
+ 2150: 'carrots_halved',
939
+ 2151: 'carrots_quartered',
940
+ 2152: 'carrots_diced',
941
+ 2153: 'carrots_cut_into_batons',
942
+ 2155: 'carrots_sliced',
943
+ 2156: 'pepper_halved',
944
+ 2157: 'pepper_quartered',
945
+ 2158: 'pepper_strips',
946
+ 2159: 'pepper_diced',
947
+ 2160: 'parsnip_sliced',
948
+ 2161: 'parsnip_diced',
949
+ 2162: 'parsnip_cut_into_batons',
950
+ 2163: 'parsley_root_sliced',
951
+ 2164: 'parsley_root_diced',
952
+ 2165: 'parsley_root_cut_into_batons',
953
+ 2166: 'leek_pieces',
954
+ 2167: 'leek_rings',
955
+ 2168: 'romanesco_whole_small',
956
+ 2169: 'romanesco_whole_medium',
957
+ 2170: 'romanesco_whole_large',
958
+ 2171: 'romanesco_florets_small',
959
+ 2172: 'romanesco_florets_medium',
960
+ 2173: 'romanesco_florets_large',
961
+ 2175: 'brussels_sprout',
962
+ 2176: 'beetroot_whole_small',
963
+ 2177: 'beetroot_whole_medium',
964
+ 2178: 'beetroot_whole_large',
965
+ 2179: 'red_cabbage_cut',
966
+ 2180: 'black_salsify_thin',
967
+ 2181: 'black_salsify_medium',
968
+ 2182: 'black_salsify_thick',
969
+ 2183: 'celery_pieces',
970
+ 2184: 'celery_sliced',
971
+ 2185: 'celeriac_sliced',
972
+ 2186: 'celeriac_cut_into_batons',
973
+ 2187: 'celeriac_diced',
974
+ 2188: 'white_asparagus_thin',
975
+ 2189: 'white_asparagus_medium',
976
+ 2190: 'white_asparagus_thick',
977
+ 2192: 'green_asparagus_thin',
978
+ 2194: 'green_asparagus_medium',
979
+ 2196: 'green_asparagus_thick',
980
+ 2197: 'spinach',
981
+ 2198: 'pointed_cabbage_cut',
982
+ 2199: 'yam_halved',
983
+ 2200: 'yam_quartered',
984
+ 2201: 'yam_strips',
985
+ 2202: 'swede_diced',
986
+ 2203: 'swede_cut_into_batons',
987
+ 2204: 'teltow_turnip_sliced',
988
+ 2205: 'teltow_turnip_diced',
989
+ 2206: 'jerusalem_artichoke_sliced',
990
+ 2207: 'jerusalem_artichoke_diced',
991
+ 2208: 'green_cabbage_cut',
992
+ 2209: 'savoy_cabbage_cut',
993
+ 2210: 'courgette_sliced',
994
+ 2211: 'courgette_diced',
995
+ 2212: 'snow_pea',
996
+ 2214: 'perch_whole',
997
+ 2215: 'perch_fillet_2_cm',
998
+ 2216: 'perch_fillet_3_cm',
999
+ 2217: 'gilt_head_bream_whole',
1000
+ 2220: 'gilt_head_bream_fillet',
1001
+ 2221: 'codfish_piece',
1002
+ 2222: 'codfish_fillet',
1003
+ 2224: 'trout',
1004
+ 2225: 'pike_fillet',
1005
+ 2226: 'pike_piece',
1006
+ 2227: 'halibut_fillet_2_cm',
1007
+ 2230: 'halibut_fillet_3_cm',
1008
+ 2231: 'codfish_fillet',
1009
+ 2232: 'codfish_piece',
1010
+ 2233: 'carp',
1011
+ 2234: 'salmon_fillet_2_cm',
1012
+ 2235: 'salmon_fillet_3_cm',
1013
+ 2238: 'salmon_steak_2_cm',
1014
+ 2239: 'salmon_steak_3_cm',
1015
+ 2240: 'salmon_piece',
1016
+ 2241: 'salmon_trout',
1017
+ 2244: 'iridescent_shark_fillet',
1018
+ 2245: 'red_snapper_fillet_2_cm',
1019
+ 2248: 'red_snapper_fillet_3_cm',
1020
+ 2249: 'redfish_fillet_2_cm',
1021
+ 2250: 'redfish_fillet_3_cm',
1022
+ 2251: 'redfish_piece',
1023
+ 2252: 'char',
1024
+ 2253: 'plaice_whole_2_cm',
1025
+ 2254: 'plaice_whole_3_cm',
1026
+ 2255: 'plaice_whole_4_cm',
1027
+ 2256: 'plaice_fillet_1_cm',
1028
+ 2259: 'plaice_fillet_2_cm',
1029
+ 2260: 'coalfish_fillet_2_cm',
1030
+ 2261: 'coalfish_fillet_3_cm',
1031
+ 2262: 'coalfish_piece',
1032
+ 2263: 'sea_devil_fillet_3_cm',
1033
+ 2266: 'sea_devil_fillet_4_cm',
1034
+ 2267: 'common_sole_fillet_1_cm',
1035
+ 2270: 'common_sole_fillet_2_cm',
1036
+ 2271: 'atlantic_catfish_fillet_1_cm',
1037
+ 2272: 'atlantic_catfish_fillet_2_cm',
1038
+ 2273: 'turbot_fillet_2_cm',
1039
+ 2276: 'turbot_fillet_3_cm',
1040
+ 2277: 'tuna_steak',
1041
+ 2278: 'tuna_fillet_2_cm',
1042
+ 2279: 'tuna_fillet_3_cm',
1043
+ 2280: 'tilapia_fillet_1_cm',
1044
+ 2281: 'tilapia_fillet_2_cm',
1045
+ 2282: 'nile_perch_fillet_2_cm',
1046
+ 2283: 'nile_perch_fillet_3_cm',
1047
+ 2285: 'zander_fillet',
1048
+ 2288: 'soup_hen',
1049
+ 2291: 'poularde_whole',
1050
+ 2292: 'poularde_breast',
1051
+ 2294: 'turkey_breast',
1052
+ 2302: 'chicken_tikka_masala_with_rice',
1053
+ 2312: 'veal_fillet_whole',
1054
+ 2313: 'veal_fillet_medaillons_1_cm',
1055
+ 2315: 'veal_fillet_medaillons_2_cm',
1056
+ 2317: 'veal_fillet_medaillons_3_cm',
1057
+ 2324: 'goulash_soup',
1058
+ 2327: 'dutch_hash',
1059
+ 2328: 'stuffed_cabbage',
1060
+ 2330: 'beef_tenderloin',
1061
+ 2333: 'beef_tenderloin_medaillons_1_cm_steam_cooking',
1062
+ 2334: 'beef_tenderloin_medaillons_2_cm_steam_cooking',
1063
+ 2335: 'beef_tenderloin_medaillons_3_cm_steam_cooking',
1064
+ 2339: 'silverside_5_cm',
1065
+ 2342: 'silverside_7_5_cm',
1066
+ 2345: 'silverside_10_cm',
1067
+ 2348: 'meat_for_soup_back_or_top_rib',
1068
+ 2349: 'meat_for_soup_leg_steak',
1069
+ 2350: 'meat_for_soup_brisket',
1070
+ 2353: 'viennese_silverside',
1071
+ 2354: 'whole_ham_steam_cooking',
1072
+ 2355: 'whole_ham_reheating',
1073
+ 2359: 'kasseler_piece',
1074
+ 2361: 'kasseler_slice',
1075
+ 2363: 'knuckle_of_pork_fresh',
1076
+ 2364: 'knuckle_of_pork_cured',
1077
+ 2367: 'pork_tenderloin_medaillons_3_cm',
1078
+ 2368: 'pork_tenderloin_medaillons_4_cm',
1079
+ 2369: 'pork_tenderloin_medaillons_5_cm',
1080
+ 2429: 'pumpkin_soup',
1081
+ 2430: 'meat_with_rice',
1082
+ 2431: 'beef_casserole',
1083
+ 2450: 'pumpkin_risotto',
1084
+ 2451: 'risotto',
1085
+ 2453: 'rice_pudding_steam_cooking',
1086
+ 2454: 'rice_pudding_rapid_steam_cooking',
1087
+ 2461: 'amaranth',
1088
+ 2462: 'bulgur',
1089
+ 2463: 'spelt_whole',
1090
+ 2464: 'spelt_cracked',
1091
+ 2465: 'green_spelt_whole',
1092
+ 2466: 'green_spelt_cracked',
1093
+ 2467: 'oats_whole',
1094
+ 2468: 'oats_cracked',
1095
+ 2469: 'millet',
1096
+ 2470: 'quinoa',
1097
+ 2471: 'polenta_swiss_style_fine_polenta',
1098
+ 2472: 'polenta_swiss_style_medium_polenta',
1099
+ 2473: 'polenta_swiss_style_coarse_polenta',
1100
+ 2474: 'polenta',
1101
+ 2475: 'rye_whole',
1102
+ 2476: 'rye_cracked',
1103
+ 2477: 'wheat_whole',
1104
+ 2478: 'wheat_cracked',
1105
+ 2480: 'gnocchi_fresh',
1106
+ 2481: 'yeast_dumplings_fresh',
1107
+ 2482: 'potato_dumplings_raw_boil_in_bag',
1108
+ 2483: 'potato_dumplings_raw_deep_frozen',
1109
+ 2484: 'potato_dumplings_half_half_boil_in_bag',
1110
+ 2485: 'potato_dumplings_half_half_deep_frozen',
1111
+ 2486: 'bread_dumplings_boil_in_the_bag',
1112
+ 2487: 'bread_dumplings_fresh',
1113
+ 2488: 'ravioli_fresh',
1114
+ 2489: 'spaetzle_fresh',
1115
+ 2490: 'tagliatelli_fresh',
1116
+ 2491: 'schupfnudeln_potato_noodels',
1117
+ 2492: 'tortellini_fresh',
1118
+ 2493: 'red_lentils',
1119
+ 2494: 'brown_lentils',
1120
+ 2495: 'beluga_lentils',
1121
+ 2496: 'green_split_peas',
1122
+ 2497: 'yellow_split_peas',
1123
+ 2498: 'chick_peas',
1124
+ 2499: 'white_beans',
1125
+ 2500: 'pinto_beans',
1126
+ 2501: 'red_beans',
1127
+ 2502: 'black_beans',
1128
+ 2503: 'hens_eggs_size_s_soft',
1129
+ 2504: 'hens_eggs_size_s_medium',
1130
+ 2505: 'hens_eggs_size_s_hard',
1131
+ 2506: 'hens_eggs_size_m_soft',
1132
+ 2507: 'hens_eggs_size_m_medium',
1133
+ 2508: 'hens_eggs_size_m_hard',
1134
+ 2509: 'hens_eggs_size_l_soft',
1135
+ 2510: 'hens_eggs_size_l_medium',
1136
+ 2511: 'hens_eggs_size_l_hard',
1137
+ 2512: 'hens_eggs_size_xl_soft',
1138
+ 2513: 'hens_eggs_size_xl_medium',
1139
+ 2514: 'hens_eggs_size_xl_hard',
1140
+ 2515: 'swiss_toffee_cream_100_ml',
1141
+ 2516: 'swiss_toffee_cream_150_ml',
1142
+ 2518: 'toffee_date_dessert_several_small',
1143
+ 2520: 'cheesecake_several_small',
1144
+ 2521: 'cheesecake_one_large',
1145
+ 2522: 'christmas_pudding_cooking',
1146
+ 2523: 'christmas_pudding_heating',
1147
+ 2524: 'treacle_sponge_pudding_several_small',
1148
+ 2525: 'treacle_sponge_pudding_one_large',
1149
+ 2526: 'sweet_cheese_dumplings',
1150
+ 2527: 'apples_whole',
1151
+ 2528: 'apples_halved',
1152
+ 2529: 'apples_quartered',
1153
+ 2530: 'apples_sliced',
1154
+ 2531: 'apples_diced',
1155
+ 2532: 'apricots_halved_steam_cooking',
1156
+ 2533: 'apricots_halved_skinning',
1157
+ 2534: 'apricots_quartered',
1158
+ 2535: 'apricots_wedges',
1159
+ 2536: 'pears_halved',
1160
+ 2537: 'pears_quartered',
1161
+ 2538: 'pears_wedges',
1162
+ 2539: 'sweet_cherries',
1163
+ 2540: 'sour_cherries',
1164
+ 2541: 'pears_to_cook_small_whole',
1165
+ 2542: 'pears_to_cook_small_halved',
1166
+ 2543: 'pears_to_cook_small_quartered',
1167
+ 2544: 'pears_to_cook_medium_whole',
1168
+ 2545: 'pears_to_cook_medium_halved',
1169
+ 2546: 'pears_to_cook_medium_quartered',
1170
+ 2547: 'pears_to_cook_large_whole',
1171
+ 2548: 'pears_to_cook_large_halved',
1172
+ 2549: 'pears_to_cook_large_quartered',
1173
+ 2550: 'mirabelles',
1174
+ 2551: 'nectarines_peaches_halved_steam_cooking',
1175
+ 2552: 'nectarines_peaches_halved_skinning',
1176
+ 2553: 'nectarines_peaches_quartered',
1177
+ 2554: 'nectarines_peaches_wedges',
1178
+ 2555: 'plums_whole',
1179
+ 2556: 'plums_halved',
1180
+ 2557: 'cranberries',
1181
+ 2558: 'quinces_diced',
1182
+ 2559: 'greenage_plums',
1183
+ 2560: 'rhubarb_chunks',
1184
+ 2561: 'gooseberries',
1185
+ 2562: 'mushrooms_whole',
1186
+ 2563: 'mushrooms_halved',
1187
+ 2564: 'mushrooms_sliced',
1188
+ 2565: 'mushrooms_quartered',
1189
+ 2566: 'mushrooms_diced',
1190
+ 2567: 'cep',
1191
+ 2568: 'chanterelle',
1192
+ 2569: 'oyster_mushroom_whole',
1193
+ 2570: 'oyster_mushroom_strips',
1194
+ 2571: 'oyster_mushroom_diced',
1195
+ 2572: 'saucisson',
1196
+ 2573: 'bruehwurst_sausages',
1197
+ 2574: 'bologna_sausage',
1198
+ 2575: 'veal_sausages',
1199
+ 2577: 'crevettes',
1200
+ 2579: 'prawns',
1201
+ 2581: 'king_prawns',
1202
+ 2583: 'small_shrimps',
1203
+ 2585: 'large_shrimps',
1204
+ 2587: 'mussels',
1205
+ 2589: 'scallops',
1206
+ 2591: 'venus_clams',
1207
+ 2592: 'goose_barnacles',
1208
+ 2593: 'cockles',
1209
+ 2594: 'razor_clams_small',
1210
+ 2595: 'razor_clams_medium',
1211
+ 2596: 'razor_clams_large',
1212
+ 2597: 'mussels_in_sauce',
1213
+ 2598: 'bottling_soft',
1214
+ 2599: 'bottling_medium',
1215
+ 2600: 'bottling_hard',
1216
+ 2601: 'melt_chocolate',
1217
+ 2602: 'dissolve_gelatine',
1218
+ 2603: 'sweat_onions',
1219
+ 2604: 'cook_bacon',
1220
+ 2605: 'heating_damp_flannels',
1221
+ 2606: 'decrystallise_honey',
1222
+ 2607: 'make_yoghurt',
1223
+ 2687: 'toffee_date_dessert_one_large',
1224
+ 2694: 'beef_tenderloin_medaillons_1_cm_low_temperature_cooking',
1225
+ 2695: 'beef_tenderloin_medaillons_2_cm_low_temperature_cooking',
1226
+ 2696: 'beef_tenderloin_medaillons_3_cm_low_temperature_cooking',
1227
+ 3373: 'wild_rice',
1228
+ 3376: 'wholegrain_rice',
1229
+ 3380: 'parboiled_rice_steam_cooking',
1230
+ 3381: 'parboiled_rice_rapid_steam_cooking',
1231
+ 3383: 'basmati_rice_steam_cooking',
1232
+ 3384: 'basmati_rice_rapid_steam_cooking',
1233
+ 3386: 'jasmine_rice_steam_cooking',
1234
+ 3387: 'jasmine_rice_rapid_steam_cooking',
1235
+ 3389: 'huanghuanian_steam_cooking',
1236
+ 3390: 'huanghuanian_rapid_steam_cooking',
1237
+ 3392: 'simiao_steam_cooking',
1238
+ 3393: 'simiao_rapid_steam_cooking',
1239
+ 3395: 'long_grain_rice_general_steam_cooking',
1240
+ 3396: 'long_grain_rice_general_rapid_steam_cooking',
1241
+ 3398: 'chongming_steam_cooking',
1242
+ 3399: 'chongming_rapid_steam_cooking',
1243
+ 3401: 'wuchang_steam_cooking',
1244
+ 3402: 'wuchang_rapid_steam_cooking',
1245
+ 3404: 'uonumma_koshihikari_steam_cooking',
1246
+ 3405: 'uonumma_koshihikari_rapid_steam_cooking',
1247
+ 3407: 'sheyang_steam_cooking',
1248
+ 3408: 'sheyang_rapid_steam_cooking',
1249
+ 3410: 'round_grain_rice_general_steam_cooking',
1250
+ 3411: 'round_grain_rice_general_rapid_steam_cooking',
1251
+ },
1252
+ // Saugroboter (23)
1253
+ RobotVacuumCleanerProgramId: {
1254
+ '-1': 'no_program',
1255
+ 0: 'no_program',
1256
+ 1: 'auto',
1257
+ 2: 'spot',
1258
+ 3: 'turbo',
1259
+ 4: 'silent',
1260
+ },
1261
+ // Backofen mit Mikrowelle (13)
1262
+ ProgramPhaseMicrowaveOvenCombo: {
1263
+ 0: 'not_running',
1264
+ 3329: 'heating_up_phase',
1265
+ 3330: 'process_running',
1266
+ 3334: 'process_finished',
1267
+ 3339: 'cooling_phase',
1268
+ 3340: 'energy_save',
1269
+ 3863: 'steam_reduction',
1270
+ 7938: 'process_running',
1271
+ 7939: 'waiting_for_start',
1272
+ 7940: 'heating_up_phase',
1273
+ 7942: 'process_finished',
1274
+ 65535: 'not_running',
1275
+ },
1276
+ // Dampfgarer mit Mikrowelle (45)
1277
+ ProgramPhaseSteamOvenMicro: {
1278
+ 0: 'not_running',
1279
+ 3329: 'heating',
1280
+ 3330: 'process_running',
1281
+ 3334: 'process_finished',
1282
+ 3340: 'energy_save',
1283
+ 3863: 'steam_reduction',
1284
+ 7938: 'process_running',
1285
+ 7939: 'waiting_for_start',
1286
+ 7940: 'heating_up_phase',
1287
+ 7942: 'process_running',
1288
+ 65535: 'not_running',
1289
+ },
1290
+ // Saugroboter (23)
1291
+ ProgramPhaseRobotVacuumCleaner: {
1292
+ 0: 'not_running',
1293
+ 5889: 'vacuum_cleaning',
1294
+ 5890: 'returning',
1295
+ 5891: 'vacuum_cleaning_paused',
1296
+ 5892: 'going_to_target_area',
1297
+ 5903: 'docked',
1298
+ 5904: 'docked',
1299
+ 5910: 'remote_controlled',
1300
+ 65535: 'not_running',
1301
+ },
823
1302
  };
824
1303
 
825
1304
  // Gerätetyp (DeviceType aus /Ident) → passende Programm-/Phasen-Tabelle.
1305
+ /*
1306
+ * Nummern und Zuordnung wie in Home Assistant (MieleAppliance, ha-miele-at-lan sensor.py).
1307
+ * Bis 0.3.40 stimmten hier vier Eintraege nicht: 16 stand als Dampfbackofen (ist die Mikrowelle),
1308
+ * 67 als Waermeschublade (ist der Dialoggarer; die Schublade ist 25), der Waschtrockner (24) nahm
1309
+ * die Programme des Trockners, und 13 die Phasen des Backofens. Geprueft war davon nie etwas -
1310
+ * an den eigenen Geraeten (Waschmaschine, Spuelmaschine, Backofen) faellt es nicht auf.
1311
+ */
826
1312
  const BY_TYPE = {
827
1313
  1: { program: 'WashingMachineProgramId', phase: 'ProgramPhaseWashingMachine' }, // Waschmaschine
1314
+ 3: { program: 'WashingMachineProgramId', phase: 'ProgramPhaseWashingMachine' }, // Waschmaschine Semi-Prof
1315
+ 5: { program: 'WashingMachineProgramId', phase: 'ProgramPhaseWashingMachine' }, // Waschmaschine Prof
828
1316
  2: { program: 'TumbleDryerProgramId', phase: 'ProgramPhaseTumbleDryer' }, // Trockner
829
- 24: { program: 'TumbleDryerProgramId', phase: 'ProgramPhaseWasherDryer' }, // Waschtrockner
1317
+ 4: { program: 'TumbleDryerProgramId', phase: 'ProgramPhaseTumbleDryer' }, // Trockner Semi-Prof
1318
+ 6: { program: 'TumbleDryerProgramId', phase: 'ProgramPhaseTumbleDryer' }, // Trockner Prof
1319
+ 24: { program: 'WashingMachineProgramId', phase: 'ProgramPhaseWasherDryer' }, // Waschtrockner
830
1320
  7: { program: 'DishWasherProgramId', phase: 'ProgramPhaseDishwasher' }, // Spülmaschine
1321
+ 8: { program: 'DishWasherProgramId', phase: 'ProgramPhaseDishwasher' }, // Spülmaschine Semi-Prof
1322
+ 9: { program: 'DishWasherProgramId', phase: 'ProgramPhaseDishwasher' }, // Spülmaschine Prof
831
1323
  12: { program: 'OvenProgramId', phase: 'ProgramPhaseOven' }, // Backofen
832
- 13: { program: 'OvenProgramId', phase: 'ProgramPhaseOven' }, // Backofen+Mikrowelle
1324
+ 13: { program: 'OvenProgramId', phase: 'ProgramPhaseMicrowaveOvenCombo' }, // Backofen mit Mikrowelle
833
1325
  15: { program: 'OvenProgramId', phase: 'ProgramPhaseSteamOven' }, // Dampfgarer
834
- 16: { program: 'OvenProgramId', phase: 'ProgramPhaseSteamOvenCombi' }, // Dampfbackofen
1326
+ 16: { program: 'OvenProgramId', phase: 'ProgramPhaseMicrowave' }, // Mikrowelle
1327
+ 31: { program: 'OvenProgramId', phase: 'ProgramPhaseSteamOvenCombi' }, // Dampfbackofen
1328
+ 45: { program: 'SteamOvenMicroProgramId', phase: 'ProgramPhaseSteamOvenMicro' }, // Dampfgarer mit Mikrowelle
1329
+ 67: { program: 'OvenProgramId', phase: 'ProgramPhaseOven' }, // Dialoggarer
1330
+ 73: { program: 'OvenProgramId', phase: 'ProgramPhaseSteamOven' }, // Dampfgarer (MK2)
835
1331
  17: { program: 'CoffeeSystemProgramId', phase: 'ProgramPhaseCoffeeSystem' }, // Kaffeevollautomat
836
- 67: { program: 'DishWarmerProgramId', phase: 'ProgramPhaseWarmingDrawer' }, // Wärmeschublade
1332
+ 23: { program: 'RobotVacuumCleanerProgramId', phase: 'ProgramPhaseRobotVacuumCleaner' }, // Saugroboter
1333
+ 25: { program: 'DishWarmerProgramId', phase: 'ProgramPhaseWarmingDrawer' }, // Wärmeschublade
837
1334
  };
838
1335
 
839
1336
  /**
package/lib/enums_de.js CHANGED
@@ -458,6 +458,16 @@ const PhaseNameDe = {
458
458
  // Wärmeschublade
459
459
  door_open: 'Tür offen',
460
460
  keeping_warm: 'Warmhalten',
461
+ // Backofen mit Mikrowelle, Dampfgarer mit Mikrowelle
462
+ heating: 'Aufheizen',
463
+ cooling_phase: 'Abkühlphase',
464
+ // Saugroboter
465
+ vacuum_cleaning: 'Saugt',
466
+ returning: 'Rückfahrt zur Station',
467
+ vacuum_cleaning_paused: 'Saugen pausiert',
468
+ going_to_target_area: 'Fährt zum Zielbereich',
469
+ docked: 'In der Station',
470
+ remote_controlled: 'Ferngesteuert',
461
471
  };
462
472
 
463
473
  /**
@@ -491,7 +501,7 @@ const BY_TYPE_DE = {
491
501
  24: { phase: ProgramPhaseWashingMachineDe }, // Waschtrockner
492
502
  7: { phase: ProgramPhaseDishwasherDe }, // Spülmaschine
493
503
  12: { phase: ProgramPhaseOvenDe }, // Backofen
494
- 13: { phase: ProgramPhaseOvenDe },
504
+ 67: { phase: ProgramPhaseOvenDe }, // Dialoggarer (gleiche Phasentabelle wie der Backofen)
495
505
  };
496
506
 
497
507
  /**
package/lib/objects.js CHANGED
@@ -80,7 +80,24 @@ function mitErsatz(text, art, v) {
80
80
  function programTextDe(dt, v) {
81
81
  const en = enums.programText(dt, v);
82
82
  const eigen = de.programNameDe(en);
83
- return eigen != null ? eigen : en;
83
+ return eigen != null ? eigen : lesbar(en);
84
+ }
85
+
86
+ /**
87
+ * Englischen Enum-Wert lesbar machen, wenn es keine deutsche Fassung gibt.
88
+ *
89
+ * Die 410 Rezeptprogramme des Dampfgarers mit Mikrowelle (seit 0.3.41) haben keine deutschen
90
+ * Namen; roh stuende dort "artichokes_small". "Artichokes small" ist nicht Deutsch, aber lesbar.
91
+ *
92
+ * @param {string|null} en Enum-Wert
93
+ * @returns {string|null} lesbarer Text
94
+ */
95
+ function lesbar(en) {
96
+ if (!en) {
97
+ return en;
98
+ }
99
+ const t = String(en).replace(/_/g, ' ');
100
+ return t.charAt(0).toUpperCase() + t.slice(1);
84
101
  }
85
102
  // Phase: erst numerische DE-Tabelle (Waschen/Spülen/Backofen), dann englisch-basierte DE-Map
86
103
  // (deckt alle uebrigen Gerätetypen ab), sonst englischer Klartext.
@@ -104,7 +121,7 @@ function phaseTextDe(dt, v) {
104
121
  if (uebersetzt != null) {
105
122
  return uebersetzt;
106
123
  }
107
- return en;
124
+ return lesbar(en);
108
125
  }
109
126
 
110
127
  /**
@@ -526,8 +543,8 @@ function zustandsTexte(sub, deviceType, german) {
526
543
  // die Schleuderdrehzahl auch bei Spülmaschine und Backofen (sinnlos). Key = STATE_FIELDS-Schlüssel,
527
544
  // Wert = erlaubte deviceTypes. Nicht gelistete Felder gelten für ALLE Geräte (Status, Programm, …).
528
545
  const FIELD_DEVICE_TYPES = {
529
- SpinningSpeed: [1, 24], // Schleuderdrehzahl: Waschmaschine, Waschtrockner
530
- DryingStep: [2, 24], // Trockenstufe: Trockner, Waschtrockner
546
+ SpinningSpeed: [1, 3, 5, 24], // Schleuderdrehzahl: Waschmaschinen (auch Semi-Prof/Prof), Waschtrockner
547
+ DryingStep: [2, 4, 6, 24], // Trockenstufe: Trockner (auch Semi-Prof/Prof), Waschtrockner
531
548
  };
532
549
 
533
550
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.miele-local",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
4
4
  "description": "Connect modern Miele@Home appliances locally without the internet (MieleH256/DOP2).",
5
5
  "author": "Immanuel <github@freitag.online>",
6
6
  "license": "MIT",