{"library":"midea-local","title":"Midea Local Control","description":"midea-local is a Python library designed to control Midea M-Smart appliances directly via the local area network, bypassing the cloud. It provides an interface to discover, connect to, and manage various Midea devices such as air conditioners, dehumidifiers, and water heaters. The library is actively maintained, with frequent minor releases (typically monthly or bi-monthly) to add new features and support for more device models. The current version is 6.6.0, requiring Python >=3.11.","language":"python","status":"active","last_verified":"Thu Apr 16","install":{"commands":["pip install midea-local"],"cli":null},"imports":["from midea_local.appliance import Appliance","from midea_local.cloud import MSmartHome","from midea_local.exceptions import MideaError"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import asyncio\nimport os\nfrom midea_local.appliance import Appliance\nfrom midea_local.exceptions import MideaError\n\nasync def control_midea_appliance():\n    # Replace with your appliance's actual IP, ID, token, and key\n    # These credentials are often difficult to obtain and may require special tools.\n    device_ip = os.environ.get('MIDEA_DEVICE_IP', '192.168.1.100')\n    device_id = int(os.environ.get('MIDEA_DEVICE_ID', '12345678901'))\n    token = os.environ.get('MIDEA_DEVICE_TOKEN', 'your_32_byte_token_hex_string') # e.g., 'AABBCCDD...' (64 chars)\n    key = os.environ.get('MIDEA_DEVICE_KEY', 'your_16_byte_key_hex_string')   # e.g., '11223344...' (32 chars)\n\n    if not all([device_ip, device_id, token, key]):\n        print(\"Please set MIDEA_DEVICE_IP, MIDEA_DEVICE_ID, MIDEA_DEVICE_TOKEN, and MIDEA_DEVICE_KEY environment variables.\")\n        return\n\n    try:\n        # Find and create the appliance instance\n        # protocol_version can be 1 or 3, 3 is default and for newer devices.\n        appliance = await Appliance.find_and_create_appliance(\n            device_ip, device_id, token, key, protocol_version=3\n        )\n\n        if appliance:\n            print(f\"Connected to appliance: {appliance.name} ({appliance.ip_address})\")\n            print(f\"Current power state: {appliance.power_state}\")\n\n            # Example: Turn on the appliance if it's off\n            if not appliance.power_state:\n                print(\"Turning appliance ON...\")\n                await appliance.set_attribute(\"power_state\", True)\n                await appliance.refresh()\n                print(f\"New power state: {appliance.power_state}\")\n\n            # Example: Set target temperature (for AC units)\n            if hasattr(appliance, 'target_temperature'):\n                current_temp = appliance.target_temperature\n                new_temp = current_temp + 1 if current_temp < 30 else 20 # Cycle temperature\n                print(f\"Setting target temperature from {current_temp}°C to {new_temp}°C...\")\n                await appliance.set_attribute(\"target_temperature\", new_temp)\n                await appliance.refresh()\n                print(f\"New target temperature: {appliance.target_temperature}°C\")\n\n            # Example: Print all available attributes and their values\n            print(\"\\n--- Appliance Attributes ---\")\n            for attr in dir(appliance):\n                if not attr.startswith('_') and not callable(getattr(appliance, attr)):\n                    try:\n                        print(f\"{attr}: {getattr(appliance, attr)}\")\n                    except Exception:\n                        pass # Some attributes might not be directly readable\n\n        else:\n            print(\"Failed to find or connect to the appliance.\")\n\n    except MideaError as e:\n        print(f\"MideaError: {e}\")\n    except Exception as e:\n        print(f\"An unexpected error occurred: {e}\")\n\nif __name__ == \"__main__\":\n    asyncio.run(control_midea_appliance())\n","lang":"python","description":"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.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}