本文整理汇总了Python中zeroconf.Zeroconf类的典型用法代码示例。如果您正苦于以下问题:Python Zeroconf类的具体用法?Python Zeroconf怎么用?Python Zeroconf使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Zeroconf类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_integration_with_subtype_and_listener
def test_integration_with_subtype_and_listener(self):
subtype_ = "_subtype._sub"
type_ = "_type._tcp.local."
name = "xxxyyy"
# Note: discovery returns only DNS-SD type not subtype
discovery_type = "%s.%s" % (subtype_, type_)
registration_name = "%s.%s" % (name, type_)
zeroconf_registrar = Zeroconf(interfaces=['127.0.0.1'])
desc = {'path': '/~paulsm/'}
info = ServiceInfo(
discovery_type, registration_name,
socket.inet_aton("10.0.1.2"), 80, 0, 0,
desc, "ash-2.local.")
zeroconf_registrar.register_service(info)
try:
service_types = ZeroconfServiceTypes.find(
interfaces=['127.0.0.1'], timeout=0.5)
assert discovery_type in service_types
service_types = ZeroconfServiceTypes.find(
zc=zeroconf_registrar, timeout=0.5)
assert discovery_type in service_types
finally:
zeroconf_registrar.close()
示例2: PublishService
class PublishService(Service):
"""Service implementing zeroconf publishing service for chains master servers"""
def onInit(self):
log.info('Zeroconf publish init')
self.ip_addr = self._get_ip()
self.hostname = socket.gethostname()
self.services = []
self.desc = {'Description': 'Chains Home Automation service on rabbitmq'}
self.amqp_info = ServiceInfo("_amqp._tcp.local.",
"Chains Master AMQP %s._amqp._tcp.local." % self.hostname,
socket.inet_aton(self.ip_addr), 5672, 0, 0,
self.desc, "%s.local." % self.hostname)
self.service.append(self.amqp_info)
self.zeroconf = Zeroconf()
def onStart(self):
log.info('Starting zeroconf publishing service')
for info in self.services:
self.zeroconf.registerService(info)
def _get_ip(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('google.com', 80))
ip = sock.getsockname()[0]
sock.close()
return ip
示例3: discover
def discover(self):
print("{status} Smart Module hosting asset {asset_id} {asset_type} {asset_context}.".format(
status="Mock" if self.rtc.mock else "Real",
asset_id=self.asset.id,
asset_type=self.asset.type,
asset_context=self.asset.context))
try:
max_sleep_time = 3 # Calling sleep should be reviewed.
zeroconf = Zeroconf()
Log.info("Performing Broker discovery...")
self.find_broker(zeroconf)
time.sleep(max_sleep_time) # Wait for max_sleep_time to see if we found it.
if self.comm.broker_name or self.comm.broker_ip: # Found it.
Log.info("MQTT Broker: {broker_name} IP: {broker_ip}.".format(
broker_name=self.comm.broker_name,
broker_ip=self.comm.broker_ip))
else: # Make necessary actions to become the broker.
Log.info("Broker not found. Becoming the broker.")
self.become_broker()
time.sleep(max_sleep_time)
self.comm.connect() # Now it's time to connect to the broker.
except Exception as excpt:
Log.exception("[Exiting] Trying to find or become the broker.")
finally:
Log.info("Closing Zeroconf connection.")
zeroconf.close()
t_end = time.time() + 10
while (time.time() < t_end) and not self.comm.is_connected:
time.sleep(1)
self.comm.subscribe("SCHEDULER/RESPONSE")
self.comm.send("SCHEDULER/QUERY", "Where are you?")
Log.info("Waiting for Scheduler response...")
time.sleep(5) # Just wait for reply... Need a review?
self.comm.send("ANNOUNCE", self.hostname + " is online.")
t_end = time.time() + 2
while (time.time() < t_end) and not self.comm.is_connected:
time.sleep(1)
if not self.comm.scheduler_found: # Become the Scheduler (necessary actions as Scheduler)
try:
Log.info("No Scheduler found. Becoming the Scheduler.")
self.scheduler = Scheduler()
self.scheduler.smart_module = self
self.scheduler.prepare_jobs(self.scheduler.load_schedule())
self.comm.scheduler_found = True
self.comm.subscribe("SCHEDULER/QUERY")
self.comm.unsubscribe("SCHEDULER/RESPONSE")
self.comm.subscribe("STATUS/RESPONSE" + "/#")
self.comm.subscribe("ASSET/RESPONSE" + "/#")
self.comm.subscribe("ALERT" + "/#")
self.comm.send("SCHEDULER/RESPONSE", self.hostname)
self.comm.send("ANNOUNCE", self.hostname + " is running the Scheduler.")
Log.info("Scheduler program loaded.")
except Exception as excpt:
Log.exception("Error initializing scheduler. %s.", excpt)
示例4: main
def main():
desc = '%s [Args] [Options]\nDetailed options -h or --help' % __file__
parser = ArgumentParser(description=desc)
add_mqtt_arguments(parser, topic_default=DEFAULT_TOPIC_BASE)
args = parser.parse_args()
global topic_base
topic_base = args.topic
logging.basicConfig(level=get_log_level(args), format=LOG_FORMAT)
zeroconf = Zeroconf()
mqtt_client = mqtt.Client()
listener = HostListener(mqtt_client)
mqtt_client.on_connect = listener.on_connect
mqtt_client.on_message = listener.on_message
connect_mqtt(args, mqtt_client)
browser = ServiceBrowser(zeroconf, SERVICE_TYPE, listener)
try:
mqtt_client.loop_forever()
except KeyboardInterrupt:
pass
finally:
zeroconf.close()
示例5: setup
def setup(hass, config):
"""Set up Zeroconf and make Home Assistant discoverable."""
from zeroconf import Zeroconf, ServiceInfo
zeroconf = Zeroconf()
zeroconf_name = '{}.{}'.format(hass.config.location_name, ZEROCONF_TYPE)
requires_api_password = hass.config.api.api_password is not None
params = {
'version': __version__,
'base_url': hass.config.api.base_url,
'requires_api_password': requires_api_password,
}
host_ip = util.get_local_ip()
try:
host_ip_pton = socket.inet_pton(socket.AF_INET, host_ip)
except socket.error:
host_ip_pton = socket.inet_pton(socket.AF_INET6, host_ip)
info = ServiceInfo(ZEROCONF_TYPE, zeroconf_name, host_ip_pton,
hass.http.server_port, 0, 0, params)
zeroconf.register_service(info)
def stop_zeroconf(event):
"""Stop Zeroconf."""
zeroconf.unregister_service(info)
zeroconf.close()
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_zeroconf)
return True
示例6: Scanner
class Scanner(threading.Thread):
def __init__(self):
super(Scanner, self).__init__()
self.abort = False
def run(self):
utils.Log('Starting Zeroconf Scan')
self.listener = MyListener()
self.zeroconf = Zeroconf()
self.browser = ServiceBrowser(self.zeroconf, "_http._tcp.local.", self.listener)
while not self.abort:
xbmc.sleep(100)
self.zeroconf.close()
utils.Log('Ending Zeroconf Scan')
exit()
def stop(self):
self.abort = True
def getServers(self):
return getServers()
示例7: setup
def setup(hass, config):
"""Set up Zeroconf and make Home Assistant discoverable."""
from zeroconf import Zeroconf, ServiceInfo
zeroconf = Zeroconf()
zeroconf_name = "{}.{}".format(hass.config.location_name,
ZEROCONF_TYPE)
requires_api_password = (hass.config.api.api_password is not None)
params = {"version": __version__, "base_url": hass.config.api.base_url,
"requires_api_password": requires_api_password}
info = ServiceInfo(ZEROCONF_TYPE, zeroconf_name,
socket.inet_aton(hass.config.api.host),
hass.config.api.port, 0, 0, params)
zeroconf.register_service(info)
def stop_zeroconf(event):
"""Stop Zeroconf."""
zeroconf.unregister_service(info)
zeroconf.close()
hass.bus.listen_once(EVENT_BLUMATE_STOP, stop_zeroconf)
return True
示例8: setup
def setup(hass, config):
"""Set up Zeroconf and make Home Assistant discoverable."""
from zeroconf import Zeroconf, ServiceInfo
zeroconf = Zeroconf()
zeroconf_name = '{}.{}'.format(hass.config.location_name, ZEROCONF_TYPE)
requires_api_password = hass.config.api.api_password is not None
params = {
'version': __version__,
'base_url': hass.config.api.base_url,
'requires_api_password': requires_api_password,
}
info = ServiceInfo(ZEROCONF_TYPE, zeroconf_name,
socket.inet_aton(hass.config.api.host),
hass.config.api.port, 0, 0, params)
zeroconf.register_service(info)
def stop_zeroconf(event):
"""Stop Zeroconf."""
zeroconf.unregister_service(info)
zeroconf.close()
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_zeroconf)
return True
示例9: MDnsListener
class MDnsListener(object):
"""A MDNS Listener."""
def __init__(self):
self.logger = _log.GetLogger('LogoCert')
self.zeroconf = Zeroconf(InterfaceChoice.All)
self.listener = MDnsService()
def add_listener(self, proto):
"""Browse for announcements of a particular protocol.
Args:
proto: string, type of traffic to listen for.
Returns:
boolean, True = browser activated, False = errors detected.
"""
protocols = {'http': '_http._tcp.local.',
'ipp': '_ipp._tcp.local.',
'mdns': '_mdns._udp.local.',
'printer': '_printer._tcp.local.',
'privet': '_privet._tcp.local.',
}
if proto not in protocols:
self.logger.error('Error starting listener, %s protocal unkown', proto)
return False
ServiceBrowser(self.zeroconf, protocols[proto], self.listener)
self.logger.info('Browsing for %s services...', proto)
return True
def remove_listeners(self):
"""Remove all listeners."""
self.zeroconf.close()
self.logger.info('All listeners have been stopped.')
示例10: test_integration
def test_integration():
service_added = Event()
service_removed = Event()
type_ = "_http._tcp.local."
registration_name = "xxxyyy.%s" % type_
def on_service_state_change(zeroconf, service_type, state_change, name):
if name == registration_name:
if state_change is ServiceStateChange.Added:
service_added.set()
elif state_change is ServiceStateChange.Removed:
service_removed.set()
zeroconf_browser = Zeroconf()
browser = ServiceBrowser(zeroconf_browser, type_, [on_service_state_change])
zeroconf_registrar = Zeroconf()
desc = {'path': '/~paulsm/'}
info = ServiceInfo(
type_, registration_name,
socket.inet_aton("10.0.1.2"), 80, 0, 0,
desc, "ash-2.local.")
zeroconf_registrar.register_service(info)
try:
service_added.wait(1)
assert service_added.is_set()
zeroconf_registrar.unregister_service(info)
service_removed.wait(1)
assert service_removed.is_set()
finally:
zeroconf_registrar.close()
browser.cancel()
zeroconf_browser.close()
示例11: find
def find(cls, timeout=10, fast=False):
"""Use Zeroconf/Bonjour to locate AirPlay servers on the local network
Args:
timeout(int): The number of seconds to wait for responses.
If fast is false, then this function will always block for this number of seconds.
fast(bool): If true, do not wait for timeout to expire,
return as soon as we've found at least one AirPlay server
Returns:
list: A list of AirPlay() objects; one for each AirPlay server found
"""
# this will be our list of devices
devices = []
# zeroconf will call this method when a device is found
def on_service_state_change(zeroconf, service_type, name, state_change):
if state_change is ServiceStateChange.Added:
info = zeroconf.get_service_info(service_type, name)
if info is None:
return
try:
name, _ = name.split('.', 1)
except ValueError:
pass
devices.append(
cls(socket.inet_ntoa(info.address), info.port, name)
)
# search for AirPlay devices
try:
zeroconf = Zeroconf()
browser = ServiceBrowser(zeroconf, "_airplay._tcp.local.", handlers=[on_service_state_change]) # NOQA
except NameError:
warnings.warn(
'AirPlay.find() requires the zeroconf package but it could not be imported. '
'Install it if you wish to use this method. https://pypi.python.org/pypi/zeroconf',
stacklevel=2
)
return None
# enforce the timeout
timeout = time.time() + timeout
try:
while time.time() < timeout:
# if they asked us to be quick, bounce as soon as we have one AirPlay
if fast and len(devices):
break
time.sleep(0.05)
except KeyboardInterrupt: # pragma: no cover
pass
finally:
zeroconf.close()
return devices
示例12: zeroconf_without_service_info
def zeroconf_without_service_info(mocker):
from zeroconf import Zeroconf
zeroconf_stub = mocker.stub(name='get_service_info')
zeroconf_stub.return_value = None
stub_object = Zeroconf()
stub_object.get_service_info = zeroconf_stub
return stub_object
示例13: zeroconf
def zeroconf(mocker):
from zeroconf import Zeroconf
service_info = ServiceInfoFactory().create()
zeroconf_stub = mocker.stub(name='get_service_info')
zeroconf_stub.return_value = service_info
stub_object = Zeroconf()
stub_object.get_service_info = zeroconf_stub
return stub_object
示例14: main
def main():
"""Main entry point."""
main = MainApplication()
zeroconf = Zeroconf()
listener = MyListener(main.get_control())
browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
try:
main.mainloop()
finally:
zeroconf.close()
示例15: get_others
def get_others(self):
"""
Wait for other services to make themselves visible
"""
zeroconf = Zeroconf()
_ = ServiceBrowser(zeroconf, "_http._tcp.local.", handlers=[self.on_service_state_change])
for _ in range(1, 10 + 1):
time.sleep(1)
zeroconf.close()
return self.known_servers