1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
import asyncio
from devolo_plc_api import Device, wifi_qr_code
# IP of the device to query
IP = "192.168.0.10"
# Password, if the device has one. It is the same as the Web-UI has. It no password is set, you can remove the password
# parameter or set it to None.
PASSWORD = "super_secret"
async def run():
async with Device(ip=IP) as dpa:
# Set the password
dpa.password = PASSWORD
# Get LED settings of the device. The state might be LED_ON or LED_OFF.
print("LED is on" if await dpa.device.async_get_led_setting() else "LED if off")
# Set LED settings of the device. Set enable to True to them turn on, to False to turn them off.
# If the state was changed successfully, True is returned, otherwise False.
print("success" if await dpa.device.async_set_led_setting(enable=True) else "failed")
# Get MultiAP details. If the device is not aware of a mesh controller or doesn't know its IP, it is left empty.
multi_ap = await dpa.device.async_get_wifi_multi_ap()
print(multi_ap.enabled) # True
print(multi_ap.controller_id) # "AA:BB:CC:DD:EE:FF"
print(multi_ap.controller_ip) # "192.0.2.1"
# Factory reset the device. If the reset will happen shortly, True is returned, otherwise False.
print("success" if await dpa.device.async_factory_reset() else "failed")
# Restart the device. If the restart will happen shortly, True is returned, otherwise False.
print("success" if await dpa.device.async_restart() else "failed")
# Get uptime of the device. This value can only be used as a strict monotonically increasing number and therefore has no unit.
print(await dpa.device.async_uptime())
# Get support information from the device.
print(await dpa.device.async_get_support_info())
# Check for new firmware versions
firmware = await dpa.device.async_check_firmware_available()
print(firmware.result) # devolo_plc_api.device_api.UPDATE_NOT_AVAILABLE
print(firmware.new_firmware_version) # ""
# Start firmware update, if new version is available. Important: The response does not tell you anything about the
# success of the update itself.
print("update started" if await dpa.device.async_start_firmware_update() else "no update available")
# Get details of wifi stations connected to the device: MAC address, access point type (main or guest), wifi band and
# connection rates.
connected_stations = await dpa.device.async_get_wifi_connected_station()
print(connected_stations[0].mac_address) # "AA:BB:CC:DD:EE:FF"
print(connected_stations[0].vap_type) # devolo_plc_api.device_api.WIFI_VAP_MAIN_AP
print(connected_stations[0].band) # devolo_plc_api.device_api.WIFI_BAND_5G
print(connected_stations[0].rx_rate) # 87800
print(connected_stations[0].tx_rate) # 87800
# Get details about wifi guest access: SSID, Wifi key, state (enabled/disabled) and if time limited, the remaining
# duration.
guest_wifi = await dpa.device.async_get_wifi_guest_access()
print(guest_wifi.ssid) # "devolo-guest-930"
print(guest_wifi.key) # "HMANPGBA"
print(guest_wifi.enabled) # False
print(guest_wifi.remaining_duration) # 0
# Get a QR code of the guest wifi settings as byte stream in SVG format
qr = wifi_qr_code(guest_wifi)
with open("qr.svg", "wb") as binary_file:
binary_file.write(qr)
# Enable or disable the wifi guest access. Set enable to True to it turn on, to False to turn it off. Optionally
# specify a duration in minutes. Changing SSID or the wifi key is currently not supported. If the state was changed
# successfully, True is returned, otherwise False.
print("success" if await dpa.device.async_set_wifi_guest_access(enable=True, duration=5) else "failed")
# Get details about other access points in your neighborhood: MAC address, SSID, wifi band, used channel, signal
# strength in DB and a value from 1 to 5, if you would want to map the signal strength to a signal bars.
neighbor_aps = await dpa.device.async_get_wifi_neighbor_access_points()
print(neighbor_aps[0].mac_address) # "AA:BB:CC:DD:EE:FF"
print(neighbor_aps[0].ssid) # "wifi"
print(neighbor_aps[0].band) # devolo_plc_api.device_api.WIFI_BAND_2G
print(neighbor_aps[0].channel) # 1
print(neighbor_aps[0].signal) # -73
print(neighbor_aps[0].signal_bars) # 1
# Start WPS push button configuration. If WPS was started successfully, True is returned, otherwise False.
print("WPS started" if await dpa.device.async_start_wps() else "WPS start failed")
# Start WPS clone mode. If clone mode was started successfully, True is returned, otherwise False.
print("WPS clone mode started" if await dpa.device.async_start_wps_clone() else "WPS clone mode start failed")
# Get PLC network overview with enriched information like firmware version.
network = await dpa.plcnet.async_get_network_overview()
print(network.devices[0].product_name) # "devolo Magic 2 WiFi next"
print(network.devices[0].product_id) # "MT3056"
print(network.devices[0].friendly_version) # "7.12.5.124"
print(network.devices[0].full_version) # "magic-2-wifi-next 7.12.5.124_2022-08-29"
print(network.devices[0].user_device_name) # "Living Room"
print(network.devices[0].mac_address) # "AABBCCDDEEFF"
print(network.devices[0].topology) # devolo_plc_api.plcnet_api.LOCAL
print(network.devices[0].technology) # devolo_plc_api.plcnet_api.GHN_SPIRIT
print(network.devices[0].bridged_devices) # []
print(network.devices[0].attached_to_router) # True
print(network.devices[0].user_network_name) # ""
print(network.devices[0].ipv4_address) # ""
print(network.data_rates[0].mac_address_from) # "AABBCCDDEEFF"
print(network.data_rates[0].mac_address_to) # "AABBCCDDEEFF"
print(network.data_rates[0].tx_rate) # 129.9375
print(network.data_rates[0].rx_rate) # 124.6875
# Identify the device by making the PLC LED blink. This call returns directly with True, if identifying was started
# successfully, otherwise False. However, the LED stays blinking for two minutes.
print("success" if await dpa.plcnet.async_identify_device_start() else "failed")
# Stop identify the device if you don't want to wait for the timeout.
print("success" if await dpa.plcnet.async_identify_device_stop() else "failed")
# Start pairing the device. This call returns directly with True, if pairing was started successfully, otherwise
# False. However, the device stays in pairing mode for up to three minutes.
print("success" if await dpa.plcnet.async_pair_device() else "failed")
# Set the user device name. If the name was changed successfully, True is returned, otherwise False.
print("success" if await dpa.plcnet.async_set_user_device_name(name="New name") else "failed")
if __name__ == "__main__":
asyncio.run(run())
|