# Miele Cloud Binding
This binding integrates Miele@home (opens new window) appliances via a cloud connection. A Miele cloud account and a set of developer credentials is required to use the binding. The latter can be requested from the Miele Developer Portal (opens new window).
# Supported Things
Most Miele appliances that directly connect to the cloud via a Wi-Fi module are supported. Appliances connecting to the XGW3000 gateway via Zigbee are also supported when registered with the cloud account. However they might be better supported by the gateway-based Miele binding (opens new window). Depending on the age of your appliance the functionality of the binding might be limited. Appliances from recent generations will support all functionality.
The following types of appliances are supported:
Appliance type | Thing type |
---|---|
Coffee Machine | coffee_system |
Dishwasher | dishwasher |
Dish Warmer | dish_warmer |
Freezer | freezer |
Fridge | fridge |
Fridge-Freezer Combination | fridge_freezer |
Hob | hob |
Hood | hood |
Microwave Oven | oven |
Oven | oven |
Robotic Vacuum Cleaner | robotic_vacuum_cleaner |
Tumble Dryer | dryer |
Washer Dryer | washer_dryer |
Washing Machine | washing_machine |
Wine Cabinet | wine_storage |
Wine Cabinet Freezer Combination | wine_storage |
# Discovery
Please take the following steps prior to using the binding. Create a Miele cloud account in the Miele@mobile app for Android (opens new window) or iOS (opens new window) (if not already done). Afterwards, pair your appliances. Once your appliances are set up, register at the Miele Developer Portal (opens new window). You will receive a pair of client ID and client secret which will be used to pair your Miele cloud account to the Miele cloud openHAB binding. Keep these credentials to yourself and treat them like a password! It may take some time until the registration e-mail arrives.
There is no auto discovery for the Miele cloud account.
The account is paired using OAuth2 with your Miele login and the developer credentials obtained from the Miele Developer Portal (opens new window).
To pair the account go to the binding's configuration UI at https://<your openHAB address>/mielecloud
.
For a standard openHABian Pi installation the address is https://openhabianpi:8443/mielecloud (opens new window).
Note that your browser will file a warning that the certificate is self-signed.
This is fine and you can safely continue.
It is also possible to use an unsecured connection for pairing but it is strongly recommended to use a secured connection because your credentials will otherwise be transferred without encryption over the local network.
For more information on this topic, see Securing access to openHAB (opens new window).
For a detailed walk through the account configuration, see Account Configuration Example.
Once a Miele account is paired, all supported appliances are automatically discovered as individual things and placed in the inbox. They can then be paired with your favorite management UI. As an alternative, the binding configuration UI provides a things-file template per paired account that can be used to pair the appliances.
# Thing Configuration
A Miele cloud account needs to be configured to get access to your appliances. After that appliances can be configured.
# Account Configuration
The Miele cloud account must be paired via the binding configuration UI before a bridge that relies on it can be configured in openHAB. For details on the configuration UI see Discovery and Account Configuration Example. The account serves as a bridge for the things representing your appliances. On success the configuration assistant will directly configure the account without requiring further actions. As an alternative, it provides a things-file template.
The account has the following parameters:
Name | Type | Description |
---|---|---|
required | E-mail address identifying this account. This exists only to distinguish accounts. If the address is changed after authorization then the account needs to be authorized again. | |
locale | optional | The locale to use for full text channels of things from this account. Possible values are en , de , da , es , fr , it , nl , nb . Default is en . |
# Appliance Configuration
The binding configuration UI will show a things-file template containing things for all supported appliances from the paired account. This can be used as a starting point for a custom things-file.
All Miele cloud appliance things have the following parameters:
Name | Type | Description |
---|---|---|
deviceIdentifier | required | Technical device identifier uniquely identifying the Miele appliance. Use the discovery result or the things-file template to obtain it. |
# Channels
The following table lists all available channels. See the following chapters for detailed information about which appliance supports which channels. Depending on the exact appliance configuration not all channels might be supported, e.g. a hob with four plates will only fill the channels for plates 1-4. Channel ID and channel type ID match unless noted.
Channel Type ID | Item Type | Description | Read only |
---|---|---|---|
remote_control_can_be_started | Switch | Indicates if this device can be started remotely. | Yes |
remote_control_can_be_stopped | Switch | Indicates if this device can be stopped remotely. | Yes |
remote_control_can_be_paused | Switch | Indicates if this device can be paused remotely. | Yes |
remote_control_can_be_switched_on | Switch | Indicates if the device can be switched on remotely. | Yes |
remote_control_can_be_switched_off | Switch | Indicates if the device can be switched off remotely. | Yes |
remote_control_can_set_program_active | Switch | Indicates if the active program of the device can be set remotely. | Yes |
spinning_speed | String | The spinning speed of the active program. | Yes |
spinning_speed_raw | Number | The raw spinning speed of the active program. | Yes |
program_active | String | The active program of the device. | Yes |
program_active_raw | Number | The raw active program of the device. | Yes |
dish_warmer_program_active | String | The active program of the device. | No |
vacuum_cleaner_program_active | String | The active program of the device. | No |
program_phase | String | The phase of the active program. | Yes |
program_phase_raw | Number | The raw phase of the active program. | Yes |
operation_state | String | The operation state of the device. | Yes |
operation_state_raw | Number | The raw operation state of the device. | Yes |
program_start | Switch | Starts the currently selected program. | No |
program_stop | Switch | Stops the currently selected program. | No |
program_start_stop | String | Starts or stops the currently selected program. | No |
program_start_stop_pause | String | Starts, stops or pauses the currently selected program. | No |
power_state_on_off | String | Switches the device On or Off. | No |
finish_state | Switch | Indicates whether the most recent program finished. | Yes |
delayed_start_time | Number | The delayed start time of the selected program. | Yes |
program_remaining_time | Number | The remaining time of the active program. | Yes |
program_elapsed_time | Number | The elapsed time of the active program. | Yes |
program_progress | Number | The progress of the active program. | Yes |
drying_target | String | The target drying step of the laundry. | Yes |
drying_target_raw | Number | The raw target drying step of the laundry. | Yes |
pre_heat_finished | Switch | Indicates whether the pre-heating finished. | Yes |
temperature_target | Number | The target temperature of the device. | Yes |
temperature_current | Number | The currently measured temperature of the device. | Yes |
ventilation_power | String | The current ventilation power of the hood. | Yes |
ventilation_power_raw | Number | The current raw ventilation power of the hood. | Yes |
error_state | Switch | Indication flag which signals an error state for the device. | Yes |
info_state | Switch | Indication flag which signals an information of the device. | Yes |
fridge_super_cool | Switch | Start the super cooling mode of the fridge. | No |
freezer_super_freeze | Switch | Start the super freezing mode of the freezer. | No |
super_cool_can_be_controlled | Switch | Indicates if super cooling can be toggled. | Yes |
super_freeze_can_be_controlled | Switch | Indicates if super freezing can be toggled | Yes |
fridge_temperature_target | Number | The target temperature of the fridge. | Yes |
fridge_temperature_current | Number | The currently measured temperature of the fridge. | Yes |
freezer_temperature_target | Number | The target temperature of the freezer. | Yes |
freezer_temperature_current | Number | The currently measured temperature of the freezer. | Yes |
top_temperature_target | Number | The target temperature of the top area. | Yes |
top_temperature_current | Number | The currently measured temperature of the top area. | Yes |
middle_temperature_target | Number | The target temperature of the middle area. | Yes |
middle_temperature_current | Number | The currently measured temperature of the middle area. | Yes |
bottom_temperature_target | Number | The target temperature of the bottom area. | Yes |
bottom_temperature_current | Number | The currently measured temperature of the bottom area. | Yes |
light_switch | Switch | Indicates if the light of the device is enabled. | No |
light_can_be_controlled | Switch | Indicates if the light of the device can be controlled. | Yes |
plate_power_step | String | The power level of the heating plate. | Yes |
plate_power_step_raw | Number | The raw power level of the heating plate. | Yes |
door_state | Switch | Indicates if the door of the device is open. | Yes |
door_alarm | Switch | Indicates if the door alarm of the device is active. | Yes |
water_consumption_current | Number | The amount of water used by the current running program up to the present moment. | Yes |
energy_consumption_current | Number | The amount of energy used by the current running program up to the present moment. | Yes |
battery_level | Number | The battery level of the robotic vacuum cleaner. | Yes |
# Coffee System
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- program_active
- program_active_raw
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- finish_state
- power_state_on_off
- program_remaining_time
- program_elapsed_time
- error_state
- info_state
- light_switch
- light_can_be_controlled
# Dish Warmer
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- dish_warmer_program_active
- program_active_raw
- operation_state
- operation_state_raw
- power_state_on_off
- finish_state
- program_remaining_time
- program_elapsed_time
- program_progress
- temperature_target
- temperature_current
- error_state
- info_state
- door_state
# Dishwasher
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- program_active
- program_active_raw
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- program_start_stop
- finish_state
- power_state_on_off
- delayed_start_time
- program_remaining_time
- program_elapsed_time
- program_progress
- error_state
- info_state
- door_state
- water_consumption_current
- energy_consumption_current
# Tumble Dryer
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- program_active
- program_active_raw
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- program_start_stop
- finish_state
- power_state_on_off
- delayed_start_time
- program_remaining_time
- program_elapsed_time
- program_progress
- drying_target
- drying_target_raw
- error_state
- info_state
- light_switch
- light_can_be_controlled
- door_state
- energy_consumption_current
# Freezer
- operation_state
- operation_state_raw
- error_state
- info_state
- freezer_super_freeze
- super_freeze_can_be_controlled
- freezer_temperature_target
- freezer_temperature_current
- door_state
- door_alarm
# Fridge
- operation_state
- operation_state_raw
- error_state
- info_state
- fridge_super_cool
- super_cool_can_be_controlled
- fridge_temperature_target
- fridge_temperature_current
- door_state
- door_alarm
# Fridge Freezer
- operation_state
- operation_state_raw
- error_state
- info_state
- fridge_super_cool
- freezer_super_freeze
- super_cool_can_be_controlled
- super_freeze_can_be_controlled
- fridge_temperature_target
- fridge_temperature_current
- freezer_temperature_target
- freezer_temperature_current
- door_state
- door_alarm
# Hob
- operation_state
- operation_state_raw
- error_state
- info_state
- plate_1_power_step to plate_6_power_step with channel type ID plate_power_step
- plate_1_power_step_raw to plate_6_power_step_raw with channel type ID plate_power_step_raw
# Hood
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- power_state_on_off
- ventilation_power
- ventilation_power_raw
- error_state
- info_state
- light_switch
- light_can_be_controlled
# Oven
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- program_active
- program_active_raw
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- program_start_stop
- finish_state
- power_state_on_off
- delayed_start_time
- program_remaining_time
- program_elapsed_time
- program_progress
- pre_heat_finished
- temperature_target
- temperature_current
- error_state
- info_state
- light_switch
- light_can_be_controlled
- door_state
# Robotic Vacuum Cleaner
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_paused
- remote_control_can_set_program_active
- vacuum_cleaner_program_active
- program_active_raw
- operation_state
- operation_state_raw
- finish_state
- program_start_stop_pause
- power_state_on_off
- error_state
- info_state
- battery_level
# Washer Dryer
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- spinning_speed
- spinning_speed_raw
- program_active
- program_active_raw
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- program_start_stop
- finish_state
- power_state_on_off
- delayed_start_time
- program_remaining_time
- program_elapsed_time
- program_progress
- drying_target
- drying_target_raw
- error_state
- info_state
- temperature_target
- light_switch
- light_can_be_controlled
- door_state
- water_consumption_current
- energy_consumption_current
# Washing Machine
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- spinning_speed
- spinning_speed_raw
- program_active
- program_active_raw
- program_phase
- program_phase_raw
- operation_state
- operation_state_raw
- program_start_stop
- finish_state
- power_state_on_off
- delayed_start_time
- program_remaining_time
- program_elapsed_time
- program_progress
- error_state
- info_state
- temperature_target
- light_switch
- light_can_be_controlled
- door_state
- water_consumption_current
- energy_consumption_current
# Wine Storage
- remote_control_can_be_started
- remote_control_can_be_stopped
- remote_control_can_be_switched_on
- remote_control_can_be_switched_off
- operation_state
- operation_state_raw
- power_state_on_off
- error_state
- info_state
- temperature_target
- temperature_current
- top_temperature_target
- top_temperature_current
- middle_temperature_target
- middle_temperature_current
- bottom_temperature_target
- bottom_temperature_current
# Note on plate_power_step channels
Hob things have an additional property plateCount
that indicates the number of plates present on the appliance.
Only the channels plate_1_power_step
to plate_x_power_step
will be populated by the binding where x
is the value of the plateCount
property.
The plate numbers do not represent the physical layout of the plates on the appliance, but always start with the plate_1_power_step
channel.
This means that a hob with two plates will have plate_1_power_step
and plate_2_power_step
populated and all other plate_x_power_step
channels empty.
The plate_x_power_step
channels show the current power step of the according plate.
Please note that some hobs may use dynamic numbering for plates.
Hobs that use dynamic numbering will use the first power step channel that is currently at a power step of zero when the plate is turned on.
Additionally, when a plate is turned off all other plates with higher numbers will decrease their number by one.
For example if plate 1, 2 and 3 are active and plate 1 is turned off then plate 2 will become plate 1, plate 3 will become plate 2 and plate 3 will have a power step of zero.
This behavior is a fixed part of the affected appliances and cannot be changed.
# Note on door_state channel
The door_state
channel might not always provide a value matching the actual state.
For example, a washing machine will not provide a valid door_state
when the appliance is turned off.
A valid door state can be expected when the appliance is in one of the following raw operation states, compare the operation_state_raw
channel:
3
: Program selected4
: Program selected, waiting to start5
: Running6
: Paused
# Properties
The following chapters list the properties offered by appliances.
# Common Properties
Property Name | Description |
---|---|
serialNumber | Serial number of the appliance, only present for physical appliances |
modelId | Model ID of the appliance |
vendor | Always "Miele" |
# Account
Property Name | Description |
---|---|
connection | Type of connection used by the account, always "INTERNET" |
accessToken | The currently used OAuth 2 access token for accessing the Miele 3rd Party API |
# Hob
Property Name | Description |
---|---|
plateCount | Number of plates offered by the appliance |
# Full Example
# demo.things
Example
Bridge mielecloud:account:home [ email="me@openhab.org", locale="en" ] {
Thing coffee_system 000703261234 "Coffee machine CVA7440" [ deviceIdentifier="000703261234" ]
Thing hob 000160102345 "Cooktop KM7677" [ deviceIdentifier="000160102345" ]
}
# demo.items
Example
// Coffee system
Switch coffee_system_remote_control_can_be_started { channel="mielecloud:coffee_system:home:000703261234:remote_control_can_be_started" }
Switch coffee_system_remote_control_can_be_stopped { channel="mielecloud:coffee_system:home:000703261234:remote_control_can_be_stopped" }
Switch coffee_system_remote_control_can_be_switched_on { channel="mielecloud:coffee_system:home:000703261234:remote_control_can_be_switched_on" }
Switch coffee_system_remote_control_can_be_switched_off { channel="mielecloud:coffee_system:home:000703261234:remote_control_can_be_switched_off" }
String coffee_system_program_active { channel="mielecloud:coffee_system:home:000703261234:program_active" }
String coffee_system_program_phase { channel="mielecloud:coffee_system:home:000703261234:program_phase" }
String coffee_system_power_state_on_off { channel="mielecloud:coffee_system:home:000703261234:power_state_on_off" }
String coffee_system_operation_state { channel="mielecloud:coffee_system:home:000703261234:operation_state" }
Switch coffee_system_finish_state { channel="mielecloud:coffee_system:home:000703261234:finish_state" }
Number coffee_system_program_remaining_time { channel="mielecloud:coffee_system:home:000703261234:program_remaining_time" }
Switch coffee_system_error_state { channel="mielecloud:coffee_system:home:000703261234:error_state" }
Switch coffee_system_info_state { channel="mielecloud:coffee_system:home:000703261234:info_state" }
Switch coffee_system_light_switch { channel="mielecloud:coffee_system:home:000703261234:light_switch" }
Switch coffee_system_light_can_be_controlled { channel="mielecloud:coffee_system:home:000703261234:light_can_be_controlled" }
// Hob
Switch hob_remote_control_can_be_started { channel="mielecloud:hob:home:000160102345:remote_control_can_be_started" }
Switch hob_remote_control_can_be_stopped { channel="mielecloud:hob:home:000160102345:remote_control_can_be_stopped" }
String hob_operation_state { channel="mielecloud:hob:home:000160102345:operation_state" }
Switch hob_error_state { channel="mielecloud:hob:home:000160102345:error_state" }
Switch hob_info_state { channel="mielecloud:hob:home:000160102345:info_state" }
Switch hob_plate_1_is_present { channel="mielecloud:hob:home:000160102345:plate_1_is_present" }
String hob_plate_1_power_step { channel="mielecloud:hob:home:000160102345:plate_1_power_step" }
Switch hob_plate_2_is_present { channel="mielecloud:hob:home:000160102345:plate_2_is_present" }
String hob_plate_2_power_step { channel="mielecloud:hob:home:000160102345:plate_2_power_step" }
Switch hob_plate_3_is_present { channel="mielecloud:hob:home:000160102345:plate_3_is_present" }
String hob_plate_3_power_step { channel="mielecloud:hob:home:000160102345:plate_3_power_step" }
Switch hob_plate_4_is_present { channel="mielecloud:hob:home:000160102345:plate_4_is_present" }
String hob_plate_4_power_step { channel="mielecloud:hob:home:000160102345:plate_4_power_step" }
Switch hob_plate_5_is_present { channel="mielecloud:hob:home:000160102345:plate_5_is_present" }
String hob_plate_5_power_step { channel="mielecloud:hob:home:000160102345:plate_5_power_step" }
Switch hob_plate_6_is_present { channel="mielecloud:hob:home:000160102345:plate_6_is_present" }
String hob_plate_6_power_step { channel="mielecloud:hob:home:000160102345:plate_6_power_step" }
# demo.sitemap
Example
sitemap demo label="Kitchen"
{
Frame {
// Coffee system
Text item=coffee_system_program_active
Text item=coffee_system_program_phase
Text item=coffee_system_power_state_on_off
Text item=coffee_system_operation_state
Switch item=coffee_system_finish_state
Default item=coffee_system_program_remaining_time
Switch item=coffee_system_error_state
Switch item=coffee_system_info_state
Switch item=coffee_system_light_switch
// Hob
Text item=hob_operation_state
Switch item=hob_error_state
Switch item=hob_info_state
Text item=hob_plate_1_power_step
Text item=hob_plate_2_power_step
Text item=hob_plate_3_power_step
Text item=hob_plate_4_power_step
Text item=hob_plate_5_power_step
Text item=hob_plate_6_power_step
}
}
# Account Configuration Example
The configuration UI is accessible at https://<your openHAB address>/mielecloud
.
See Discovery for a detailed description of how to open the configuration UI in a browser.
When first opening the configuration UI no account will be paired.
We strongly recommend to use a secure connection for pairing, details on this topic can also be found in the Discovery section.
Click Pair Account
to start the pairing process.
If not already done, go to the Miele Developer Portal (opens new window), register there and wait for the confirmation e-mail.
Obtain your client ID and client secret according to the instructions presented there.
Once you obtained your client ID and client secret continue pairing by filling in your client ID, client secret, bridge ID and an e-mail address that you wish to use for identifying the account.
You may choose any bridge ID you like as long as you only use letters, numbers, underscores and dashes.
The e-mail address does not need to match the e-mail address used for your Miele Cloud Account.
If you need to change the e-mail address later then you will need to authorize the account again.
A click on Pair Account
will take you to the Miele cloud service login form where you need to log in with the same account as you used for the Miele@mobile app.
When this is the first time you pair an account, you will need to allow openHAB to access your account.
When everything worked, you are presented with a page stating that pairing was successful. Select the locale which should be used to display localized texts in openHAB channels. From here, you have two options: Either let the binding automatically configure a bridge instance or copy the presented things-file template to a things-file and return to the overview page.
Once the bridge instance is ONLINE
, you can either pair things for all appliances via your favorite management UI or use a things-file.
The account overview provides a things-file template that is shown when you expand the account.
This can serve as a starting point for your own things-file.
# Rule Ideas
Here are some ideas on what could be done with this binding. You have more ideas or even an example? Great! Feel free to contribute!
- Notify yourself of a finished dishwasher, tumble dryer, washer dryer or washing machine, e.g. by changing the lighting
- Control the supercooler / superfreezer of your freezer, fridge or fridge-freezer combination with a voice assistant
- Notify yourself when the oven has finished pre-heating
# Acknowledgements
The development of this binding was initiated and sponsored by Miele & Cie. KG.
← MfFan Miele@home →