mirror of
https://github.com/Frankkkkk/python-linkplay-api.git
synced 2024-11-20 19:33:59 +00:00
init
Signed-off-by: Frank Villaro-Dixon <frank@villaro-dixon.eu>
This commit is contained in:
commit
50123b7690
2 changed files with 108 additions and 0 deletions
29
README.md
Normal file
29
README.md
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# Linkplay utils
|
||||||
|
|
||||||
|
A small library to interface with Linkplay, Acrylic, Wiimu, devices, namely:
|
||||||
|
|
||||||
|
- Power Dynamics F101
|
||||||
|
- Audiocast M5
|
||||||
|
- AudioPro
|
||||||
|
- WT10A
|
||||||
|
- Muzo
|
||||||
|
- etc.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
You can configure the wifi network to connect to, play/pause playback, etc..
|
||||||
|
|
||||||
|
|
||||||
|
By default, the program will change the wifi settings
|
||||||
|
|
||||||
|
|
||||||
|
## Changing WiFi network
|
||||||
|
|
||||||
|
- Connect to the devices' wifi network
|
||||||
|
- Launch `./command.py`
|
||||||
|
- Select the SSID you want to connect to
|
||||||
|
- Enter the password
|
||||||
|
- It should tell you that it was changed successfully
|
||||||
|
|
||||||
|
|
||||||
|
|
79
command.py
Normal file
79
command.py
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
import logging
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
# You can find some more functions here:
|
||||||
|
# https://developer.arylic.com/httpapi
|
||||||
|
# https://github.com/Jan21493/Linkplay
|
||||||
|
# https://github.com/AndersFluur/LinkPlayApi/blob/a11fefcf931827ff3d364d6a3b49575dd0bfc50f/api.md
|
||||||
|
|
||||||
|
|
||||||
|
class LinkPlay:
|
||||||
|
|
||||||
|
def __init__(self, ip: str = '10.10.10.254'):
|
||||||
|
if not ip.endswith('254'):
|
||||||
|
logging.warning('IP address should normally end with 254')
|
||||||
|
|
||||||
|
self.ip = ip
|
||||||
|
|
||||||
|
def _send_cmd(self, cmd: str, params: str=None) -> requests.Response:
|
||||||
|
cmd = f'http://{self.ip}/httpapi.asp?command={cmd}'
|
||||||
|
if params:
|
||||||
|
cmd += f':{params}'
|
||||||
|
r = requests.get(cmd)
|
||||||
|
r.raise_for_status()
|
||||||
|
return r
|
||||||
|
|
||||||
|
def list_wifi_networks(self):
|
||||||
|
res = self._send_cmd('wlanGetApListEx', '')
|
||||||
|
nets = []
|
||||||
|
for wifi in res.json().get('aplist', []):
|
||||||
|
ssid_hex = wifi.get('ssid', '')
|
||||||
|
ssid = bytes.fromhex(ssid_hex).decode('utf-8')
|
||||||
|
rssi = wifi.get('rssi', '')
|
||||||
|
auth = wifi.get('auth', '')
|
||||||
|
encry = wifi.get('encry', '')
|
||||||
|
nets.append({'ssid': ssid, 'rssi': rssi, 'auth': auth, 'encry': encry})
|
||||||
|
return nets
|
||||||
|
|
||||||
|
def connect_to_wifi_net(self, ssid: str, pwd: str, auth: str='WPA2PSK', encry: str='AES', ch: str='', chext: str='1'):
|
||||||
|
ssid_hex = ssid.encode().hex()
|
||||||
|
pwd_hex = pwd.encode().hex()
|
||||||
|
params = f'ssid={ssid_hex}:ch={ch}:auth={auth}:encry={encry}:pwd={pwd_hex}:chext={chext}'
|
||||||
|
self._send_cmd('wlanConnectApEx', params)
|
||||||
|
|
||||||
|
def getPlayerStatus(self):
|
||||||
|
res = self._send_cmd('getPlayerStatus')
|
||||||
|
return res.json()
|
||||||
|
|
||||||
|
def setDeviceName(self, name: str):
|
||||||
|
self._send_cmd('setDeviceName', name)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
w = LinkPlay('10.10.10.254')
|
||||||
|
w.setDeviceName('Salon')
|
||||||
|
|
||||||
|
print('Available networks:')
|
||||||
|
wifi_nets = w.list_wifi_networks()
|
||||||
|
for wifi in wifi_nets:
|
||||||
|
print(f'- {wifi["ssid"]} - rssi: {wifi["rssi"]} - auth: {wifi["auth"]}')
|
||||||
|
|
||||||
|
wifi_ssid = input('Enter the SSID of the network you want to connect to: ')
|
||||||
|
if wifi_ssid not in [wifi['ssid'] for wifi in wifi_nets]:
|
||||||
|
print('SSID not found')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
wifi_net = [wifi for wifi in wifi_nets if wifi['ssid'] == wifi_ssid][0]
|
||||||
|
if wifi_net['auth'] != 'OPEN':
|
||||||
|
wifi_pwd = input('Enter the password: ')
|
||||||
|
else:
|
||||||
|
wifi_pwd = ''
|
||||||
|
|
||||||
|
|
||||||
|
print(f'Connecting to {wifi_ssid}...')
|
||||||
|
w.connect_to_wifi_net(wifi_ssid, wifi_pwd, wifi_net['auth'], wifi_net['encry'])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue