mirror of
https://github.com/Screenly/Anthias.git
synced 2025-12-23 14:28:13 -05:00
83 lines
1.9 KiB
Python
83 lines
1.9 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import json
|
|
from argparse import ArgumentParser
|
|
from os import getenv
|
|
from time import sleep
|
|
|
|
import redis
|
|
import zmq
|
|
from netifaces import AF_INET, ifaddresses, interfaces
|
|
|
|
|
|
def get_portal_url():
|
|
gateway = getenv('PORTAL_GATEWAY', '192.168.42.1')
|
|
port = getenv('PORTAL_LISTENING_PORT', None)
|
|
|
|
if port is None:
|
|
return gateway
|
|
else:
|
|
return f'{gateway}:{port}'
|
|
|
|
|
|
def get_message(action):
|
|
if action == 'setup_wifi':
|
|
data = {
|
|
'network': getenv('PORTAL_SSID'),
|
|
'ssid_pswd': getenv('PORTAL_PASSPHRASE', None),
|
|
'address': get_portal_url(),
|
|
}
|
|
return f'{action}&{json.dumps(data)}'
|
|
elif action == 'show_splash':
|
|
ip_addresses = get_ip_addresses()
|
|
return f'{action}&{json.dumps(ip_addresses)}'
|
|
|
|
|
|
def get_ip_addresses():
|
|
return [
|
|
i['addr']
|
|
for interface_name in interfaces()
|
|
for i in ifaddresses(interface_name).setdefault(
|
|
AF_INET, [{'addr': None}]
|
|
)
|
|
if interface_name in ['eth0', 'wlan0']
|
|
if i['addr'] is not None
|
|
]
|
|
|
|
|
|
def is_viewer_subscriber_ready(r):
|
|
is_ready = r.get('viewer-subscriber-ready')
|
|
if is_ready is None:
|
|
return False
|
|
else:
|
|
return bool(int(is_ready))
|
|
|
|
|
|
def main():
|
|
argument_parser = ArgumentParser()
|
|
argument_parser.add_argument(
|
|
'--action',
|
|
required=True,
|
|
choices=('setup_wifi', 'show_splash'),
|
|
help='Specify the ZeroMQ message to be sent.',
|
|
)
|
|
args = argument_parser.parse_args()
|
|
r = redis.Redis(host='127.0.0.1', decode_responses=True, port=6379, db=0)
|
|
|
|
context = zmq.Context()
|
|
socket = context.socket(zmq.PUB)
|
|
socket.bind('tcp://0.0.0.0:10001')
|
|
sleep(1)
|
|
|
|
message = get_message(args.action)
|
|
|
|
while not is_viewer_subscriber_ready(r):
|
|
sleep(1)
|
|
continue
|
|
|
|
socket.send_string(f'viewer {message}')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|