diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..3ab5fc5 --- /dev/null +++ b/config.toml @@ -0,0 +1,47 @@ +[[relays]] +name = "Unknown 1" + +[relays.chip] +name = "gpiochip0" +number = 0 + +[relays.pin] +name = "CON2-P22" +line_number = 2 + +[[relays]] +name = "Waterfall" + +[relays.chip] +name = "gpiochip0" +number = 0 + +[relays.pin] +name = "CON2-P18" +line_number = 68 + +[[relays]] +name = "Filter" + +[relays.chip] +name = "gpiochip0" +number = 0 + +[relays.pin] +name = "CON2-P16" +line_number = 15 + +[[relays]] +name = "Unknown 2" + +[relays.chip] +name = "gpiochip0" +number = 0 + +[relays.pin] +name = "CON2-P12" +line_number = 16 + +[rgpio] +host = "pool.ribble.net" +port = 8889 diff --git a/mdns-registration-test.py b/mdns-registration-test.py new file mode 100755 index 0000000..6c2ff0e --- /dev/null +++ b/mdns-registration-test.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Example of announcing 250 services (in this case, a fake HTTP server).""" + +import argparse +import asyncio +import logging +import socket +from typing import List, Optional + +from zeroconf import IPVersion +from zeroconf.asyncio import AsyncServiceInfo, AsyncZeroconf + + +class AsyncRunner: + def __init__(self, ip_version: IPVersion) -> None: + self.ip_version = ip_version + self.aiozc: Optional[AsyncZeroconf] = None + + async def register_services(self, infos: List[AsyncServiceInfo]) -> None: + self.aiozc = AsyncZeroconf(ip_version=self.ip_version) + tasks = [self.aiozc.async_register_service(info) for info in infos] + background_tasks = await asyncio.gather(*tasks) + await asyncio.gather(*background_tasks) + print("Finished registration, press Ctrl-C to exit...") + while True: + await asyncio.sleep(1) + + async def unregister_services(self, infos: List[AsyncServiceInfo]) -> None: + assert self.aiozc is not None + tasks = [self.aiozc.async_unregister_service(info) for info in infos] + background_tasks = await asyncio.gather(*tasks) + await asyncio.gather(*background_tasks) + await self.aiozc.async_close() + + +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG) + + parser = argparse.ArgumentParser() + parser.add_argument('--debug', action='store_true') + version_group = parser.add_mutually_exclusive_group() + version_group.add_argument('--v6', action='store_true') + version_group.add_argument('--v6-only', action='store_true') + args = parser.parse_args() + + if args.debug: + logging.getLogger('zeroconf').setLevel(logging.DEBUG) + if args.v6: + ip_version = IPVersion.All + elif args.v6_only: + ip_version = IPVersion.V6Only + else: + ip_version = IPVersion.V4Only + + infos = [] + for i in range(250): + infos.append( + AsyncServiceInfo( + "_http._tcp.local.", + f"Paul's Test Web Site {i}._http._tcp.local.", + addresses=[socket.inet_aton("127.0.0.1")], + port=80, + properties={'path': '/~paulsm/'}, + server=f"zcdemohost-{i}.local.", + ) + ) + + print("Registration of 250 services...") + loop = asyncio.get_event_loop() + runner = AsyncRunner(ip_version) + try: + loop.run_until_complete(runner.register_services(infos)) + except KeyboardInterrupt: + loop.run_until_complete(runner.unregister_services(infos)) diff --git a/mdns-scan-test.py b/mdns-scan-test.py new file mode 100755 index 0000000..8898d8a --- /dev/null +++ b/mdns-scan-test.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +from zeroconf import ServiceBrowser, ServiceListener, Zeroconf + + +class MyListener(ServiceListener): + + def update_service(self, zc: Zeroconf, type_: str, name: str) -> None: + print(f"Service {name} updated") + + def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None: + print(f"Service {name} removed") + + def add_service(self, zc: Zeroconf, type_: str, name: str) -> None: + info = zc.get_service_info(type_, name) + print(f"Service {name} added, service info: {info}") + + +zeroconf = Zeroconf() +listener = MyListener() +browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener) +try: + input("Press enter to exit...\n\n") +finally: + zeroconf.close()