summaryrefslogtreecommitdiff
path: root/python-aioshelly.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-aioshelly.spec')
-rw-r--r--python-aioshelly.spec480
1 files changed, 480 insertions, 0 deletions
diff --git a/python-aioshelly.spec b/python-aioshelly.spec
new file mode 100644
index 0000000..959fa02
--- /dev/null
+++ b/python-aioshelly.spec
@@ -0,0 +1,480 @@
+%global _empty_manifest_terminate_build 0
+Name: python-aioshelly
+Version: 5.3.1
+Release: 1
+Summary: Asynchronous library to control Shelly devices.
+License: Apache License 2.0
+URL: https://github.com/home-assistant-libs/aioshelly
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/09/97/83984e757775b1222f058fd2aa9fab1aa7feed5a20d2dbe12fabeef6aa3c/aioshelly-5.3.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-bluetooth-data-tools
+Requires: python3-aiohttp
+Requires: python3-orjson
+
+%description
+# Aioshelly
+
+Asynchronous library to control Shelly devices
+
+**This library is under development**
+
+## Requirements
+
+- Python >= 3.9
+- bluetooth-data-tools
+- aiohttp
+- orjson
+
+## Install
+```bash
+pip install aioshelly
+```
+
+## Install from Source
+Run the following command inside this folder
+```bash
+pip install --upgrade .
+```
+
+## Examples
+### Gen1 Device (Block/CoAP) example:
+
+```python
+import asyncio
+from pprint import pprint
+
+import aiohttp
+
+from aioshelly.block_device import COAP, BlockDevice
+from aioshelly.common import ConnectionOptions
+from aioshelly.exceptions import (
+ DeviceConnectionError,
+ FirmwareUnsupported,
+ InvalidAuthError,
+)
+
+
+async def test_block_device():
+ """Test Gen1 Block (CoAP) based device."""
+ options = ConnectionOptions("192.168.1.165", "username", "password")
+
+ async with aiohttp.ClientSession() as aiohttp_session, COAP() as coap_context:
+ try:
+ device = await BlockDevice.create(aiohttp_session, coap_context, options)
+ except FirmwareUnsupported as err:
+ print(f"Device firmware not supported, error: {repr(err)}")
+ return
+ except InvalidAuthError as err:
+ print(f"Invalid or missing authorization, error: {repr(err)}")
+ return
+ except DeviceConnectionError as err:
+ print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
+ return
+
+ for block in device.blocks:
+ print(block)
+ pprint(block.current_values())
+ print()
+
+
+if __name__ == "__main__":
+ asyncio.run(test_block_device())
+```
+
+### Gen2 (RPC/WebSocket) device example:
+
+```python
+import asyncio
+from pprint import pprint
+
+import aiohttp
+
+from aioshelly.common import ConnectionOptions
+from aioshelly.exceptions import (
+ DeviceConnectionError,
+ FirmwareUnsupported,
+ InvalidAuthError,
+)
+from aioshelly.rpc_device import RpcDevice, WsServer
+
+
+async def test_rpc_device():
+ """Test Gen2 RPC (WebSocket) based device."""
+ options = ConnectionOptions("192.168.1.188", "username", "password")
+ ws_context = WsServer()
+ await ws_context.initialize(8123)
+
+ async with aiohttp.ClientSession() as aiohttp_session:
+ try:
+ device = await RpcDevice.create(aiohttp_session, ws_context, options)
+ except FirmwareUnsupported as err:
+ print(f"Device firmware not supported, error: {repr(err)}")
+ return
+ except InvalidAuthError as err:
+ print(f"Invalid or missing authorization, error: {repr(err)}")
+ return
+ except DeviceConnectionError as err:
+ print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
+ return
+
+ pprint(device.status)
+
+
+if __name__ == "__main__":
+ asyncio.run(test_rpc_device())
+```
+
+## Example script
+
+The repository includes example script to quickly try it out.
+
+### Connect to a device and print its status whenever we receive a state change:
+
+```
+python3 example.py -ip <ip> [-u <username>] [-p <password] -i
+```
+
+### Connect to all the devices in `devices.json` at once and print their status:
+
+```
+python3 example.py -d -i
+```
+### Show usage help:
+```
+python3 example.py -h
+```
+
+## Contribution guidelines
+
+Object hierarchy and property/method names should match the [Shelly API](https://shelly-api-docs.shelly.cloud/).
+
+
+%package -n python3-aioshelly
+Summary: Asynchronous library to control Shelly devices.
+Provides: python-aioshelly
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-aioshelly
+# Aioshelly
+
+Asynchronous library to control Shelly devices
+
+**This library is under development**
+
+## Requirements
+
+- Python >= 3.9
+- bluetooth-data-tools
+- aiohttp
+- orjson
+
+## Install
+```bash
+pip install aioshelly
+```
+
+## Install from Source
+Run the following command inside this folder
+```bash
+pip install --upgrade .
+```
+
+## Examples
+### Gen1 Device (Block/CoAP) example:
+
+```python
+import asyncio
+from pprint import pprint
+
+import aiohttp
+
+from aioshelly.block_device import COAP, BlockDevice
+from aioshelly.common import ConnectionOptions
+from aioshelly.exceptions import (
+ DeviceConnectionError,
+ FirmwareUnsupported,
+ InvalidAuthError,
+)
+
+
+async def test_block_device():
+ """Test Gen1 Block (CoAP) based device."""
+ options = ConnectionOptions("192.168.1.165", "username", "password")
+
+ async with aiohttp.ClientSession() as aiohttp_session, COAP() as coap_context:
+ try:
+ device = await BlockDevice.create(aiohttp_session, coap_context, options)
+ except FirmwareUnsupported as err:
+ print(f"Device firmware not supported, error: {repr(err)}")
+ return
+ except InvalidAuthError as err:
+ print(f"Invalid or missing authorization, error: {repr(err)}")
+ return
+ except DeviceConnectionError as err:
+ print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
+ return
+
+ for block in device.blocks:
+ print(block)
+ pprint(block.current_values())
+ print()
+
+
+if __name__ == "__main__":
+ asyncio.run(test_block_device())
+```
+
+### Gen2 (RPC/WebSocket) device example:
+
+```python
+import asyncio
+from pprint import pprint
+
+import aiohttp
+
+from aioshelly.common import ConnectionOptions
+from aioshelly.exceptions import (
+ DeviceConnectionError,
+ FirmwareUnsupported,
+ InvalidAuthError,
+)
+from aioshelly.rpc_device import RpcDevice, WsServer
+
+
+async def test_rpc_device():
+ """Test Gen2 RPC (WebSocket) based device."""
+ options = ConnectionOptions("192.168.1.188", "username", "password")
+ ws_context = WsServer()
+ await ws_context.initialize(8123)
+
+ async with aiohttp.ClientSession() as aiohttp_session:
+ try:
+ device = await RpcDevice.create(aiohttp_session, ws_context, options)
+ except FirmwareUnsupported as err:
+ print(f"Device firmware not supported, error: {repr(err)}")
+ return
+ except InvalidAuthError as err:
+ print(f"Invalid or missing authorization, error: {repr(err)}")
+ return
+ except DeviceConnectionError as err:
+ print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
+ return
+
+ pprint(device.status)
+
+
+if __name__ == "__main__":
+ asyncio.run(test_rpc_device())
+```
+
+## Example script
+
+The repository includes example script to quickly try it out.
+
+### Connect to a device and print its status whenever we receive a state change:
+
+```
+python3 example.py -ip <ip> [-u <username>] [-p <password] -i
+```
+
+### Connect to all the devices in `devices.json` at once and print their status:
+
+```
+python3 example.py -d -i
+```
+### Show usage help:
+```
+python3 example.py -h
+```
+
+## Contribution guidelines
+
+Object hierarchy and property/method names should match the [Shelly API](https://shelly-api-docs.shelly.cloud/).
+
+
+%package help
+Summary: Development documents and examples for aioshelly
+Provides: python3-aioshelly-doc
+%description help
+# Aioshelly
+
+Asynchronous library to control Shelly devices
+
+**This library is under development**
+
+## Requirements
+
+- Python >= 3.9
+- bluetooth-data-tools
+- aiohttp
+- orjson
+
+## Install
+```bash
+pip install aioshelly
+```
+
+## Install from Source
+Run the following command inside this folder
+```bash
+pip install --upgrade .
+```
+
+## Examples
+### Gen1 Device (Block/CoAP) example:
+
+```python
+import asyncio
+from pprint import pprint
+
+import aiohttp
+
+from aioshelly.block_device import COAP, BlockDevice
+from aioshelly.common import ConnectionOptions
+from aioshelly.exceptions import (
+ DeviceConnectionError,
+ FirmwareUnsupported,
+ InvalidAuthError,
+)
+
+
+async def test_block_device():
+ """Test Gen1 Block (CoAP) based device."""
+ options = ConnectionOptions("192.168.1.165", "username", "password")
+
+ async with aiohttp.ClientSession() as aiohttp_session, COAP() as coap_context:
+ try:
+ device = await BlockDevice.create(aiohttp_session, coap_context, options)
+ except FirmwareUnsupported as err:
+ print(f"Device firmware not supported, error: {repr(err)}")
+ return
+ except InvalidAuthError as err:
+ print(f"Invalid or missing authorization, error: {repr(err)}")
+ return
+ except DeviceConnectionError as err:
+ print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
+ return
+
+ for block in device.blocks:
+ print(block)
+ pprint(block.current_values())
+ print()
+
+
+if __name__ == "__main__":
+ asyncio.run(test_block_device())
+```
+
+### Gen2 (RPC/WebSocket) device example:
+
+```python
+import asyncio
+from pprint import pprint
+
+import aiohttp
+
+from aioshelly.common import ConnectionOptions
+from aioshelly.exceptions import (
+ DeviceConnectionError,
+ FirmwareUnsupported,
+ InvalidAuthError,
+)
+from aioshelly.rpc_device import RpcDevice, WsServer
+
+
+async def test_rpc_device():
+ """Test Gen2 RPC (WebSocket) based device."""
+ options = ConnectionOptions("192.168.1.188", "username", "password")
+ ws_context = WsServer()
+ await ws_context.initialize(8123)
+
+ async with aiohttp.ClientSession() as aiohttp_session:
+ try:
+ device = await RpcDevice.create(aiohttp_session, ws_context, options)
+ except FirmwareUnsupported as err:
+ print(f"Device firmware not supported, error: {repr(err)}")
+ return
+ except InvalidAuthError as err:
+ print(f"Invalid or missing authorization, error: {repr(err)}")
+ return
+ except DeviceConnectionError as err:
+ print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
+ return
+
+ pprint(device.status)
+
+
+if __name__ == "__main__":
+ asyncio.run(test_rpc_device())
+```
+
+## Example script
+
+The repository includes example script to quickly try it out.
+
+### Connect to a device and print its status whenever we receive a state change:
+
+```
+python3 example.py -ip <ip> [-u <username>] [-p <password] -i
+```
+
+### Connect to all the devices in `devices.json` at once and print their status:
+
+```
+python3 example.py -d -i
+```
+### Show usage help:
+```
+python3 example.py -h
+```
+
+## Contribution guidelines
+
+Object hierarchy and property/method names should match the [Shelly API](https://shelly-api-docs.shelly.cloud/).
+
+
+%prep
+%autosetup -n aioshelly-5.3.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-aioshelly -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 5.3.1-1
+- Package Spec generated