Install & Compatibility
Where this runs
tested against v1.0.5 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
py 3.9
✕ build_error
✕ build_error
39MB installed
● package 39MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
Appliance
✓ from midealocal.device import Appliance
✗ from midealocal.appliance import Appliance
This quickstart demonstrates how to connect to a Midea appliance using its IP address, device ID, token, and key, then read its power state and toggle it, and set the target temperature for AC units. It also prints all available attributes. Remember to replace the placeholder credentials with your actual device details, which often require prior setup using other tools (like midea-discover) to extract from the official Midea app.
import asyncio
import os
from midea_local.appliance import Appliance
from midea_local.exceptions import MideaError
async def control_midea_appliance():
# Replace with your appliance's actual IP, ID, token, and key
# These credentials are often difficult to obtain and may require special tools.
device_ip = os.environ.get('MIDEA_DEVICE_IP', '192.168.1.100')
device_id = int(os.environ.get('MIDEA_DEVICE_ID', '12345678901'))
token = os.environ.get('MIDEA_DEVICE_TOKEN', 'your_32_byte_token_hex_string') # e.g., 'AABBCCDD...' (64 chars)
key = os.environ.get('MIDEA_DEVICE_KEY', 'your_16_byte_key_hex_string') # e.g., '11223344...' (32 chars)
if not all([device_ip, device_id, token, key]):
print("Please set MIDEA_DEVICE_IP, MIDEA_DEVICE_ID, MIDEA_DEVICE_TOKEN, and MIDEA_DEVICE_KEY environment variables.")
return
try:
# Find and create the appliance instance
# protocol_version can be 1 or 3, 3 is default and for newer devices.
appliance = await Appliance.find_and_create_appliance(
device_ip, device_id, token, key, protocol_version=3
)
if appliance:
print(f"Connected to appliance: {appliance.name} ({appliance.ip_address})")
print(f"Current power state: {appliance.power_state}")
# Example: Turn on the appliance if it's off
if not appliance.power_state:
print("Turning appliance ON...")
await appliance.set_attribute("power_state", True)
await appliance.refresh()
print(f"New power state: {appliance.power_state}")
# Example: Set target temperature (for AC units)
if hasattr(appliance, 'target_temperature'):
current_temp = appliance.target_temperature
new_temp = current_temp + 1 if current_temp < 30 else 20 # Cycle temperature
print(f"Setting target temperature from {current_temp}°C to {new_temp}°C...")
await appliance.set_attribute("target_temperature", new_temp)
await appliance.refresh()
print(f"New target temperature: {appliance.target_temperature}°C")
# Example: Print all available attributes and their values
print("\n--- Appliance Attributes ---")
for attr in dir(appliance):
if not attr.startswith('_') and not callable(getattr(appliance, attr)):
try:
print(f"{attr}: {getattr(appliance, attr)}")
except Exception:
pass # Some attributes might not be directly readable
else:
print("Failed to find or connect to the appliance.")
except MideaError as e:
print(f"MideaError: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
if __name__ == "__main__":
asyncio.run(control_midea_appliance())
Upgrade
Version history
6.7.2latest on PyPI · released Jun 7, 2026
Audit
Dependencies
No dependency data recorded yet.