Ejemplo n.º 1
0
def echo(server, ha_ip, pwd, idx, loc_name):
    websocket = yield from asyncws.connect(
        'ws://%s:8123/api/websocket?api_password=%s' % (ha_ip, pwd))

    objects = server.get_objects_node()

    yield from websocket.send(
        json.dumps({
            'id': 1,
            'type': 'subscribe_events',
            'event_type': 'state_changed'
        }))

    while True:
        message = yield from websocket.recv()
        if message is None:
            break
        msgobj = json.loads(message)

        if (msgobj['type'] == 'event'):
            entity_id = msgobj['event']['data']['entity_id']
            new_state = msgobj['event']['data']['new_state']['state']
            old_state = msgobj['event']['data']['old_state']['state']

            if new_state != old_state:
                print(entity_id + ": " + old_state + " -> " + new_state)
                var_node = objects.get_child([
                    "%d:%s" % (idx, loc_name),
                    "%d:%s" % (idx, entity_id),
                    "%d:state" % idx
                ])
                var_node.set_value(new_state)
Ejemplo n.º 2
0
def echo():
    websocket = yield from asyncws.connect('ws://localhost:8000')
    while True:
        yield from websocket.send('hello')
        echo = yield from websocket.recv()
        if echo is None:
            break
        print(echo)
Ejemplo n.º 3
0
def echo():
    """ Connect to Home Assistant Websocket and save all messages """
    websocket = yield from asyncws.connect(settings.HOME_ASSISTANT_WS_URL)

    yield from websocket.send(
        json.dumps({
            'id': 1,
            'type': 'subscribe_events',
            'event_type': 'state_changed'
        }))

    while True:
        message = yield from websocket.recv()
        if message is None:
            break
        message = json.loads(message)
        df = json_normalize(message)
        if df.type[0] == 'event':
            for _, row in df.iterrows():
                entity_id = row['event.data.entity_id']
                domain_name, _ = entity_id.split(".")
                domain, created = Domain.objects.get_or_create(
                    name=domain_name)
                friendly_name = ''
                if hasattr(row,
                           'event.data.new_state.attributes.friendly_name '):
                    friendly_name = row[
                        'event.data.new_state.attributes.friendly_name']
                entity, _ = Entity.objects.update_or_create(
                    entity_id=entity_id,
                    domain=domain,
                    defaults={
                        'friendly_name': friendly_name,
                    })
                Attribute.objects.filter(entity=entity).update(
                    is_current=False)
                for index, value in df.iteritems():
                    new_state = False
                    old_state = False
                    is_current = False
                    title = ''
                    if 'new_state' in index:
                        new_state = True
                        is_current = True
                        title = index.split('new_state.')[1]
                    elif 'old_state' in index:
                        old_state = True
                        title = index.split('old_state.')[1]
                    elif 'event' in index:
                        title = index.split('event.')[1]
                    Attribute.objects.create(
                        entity=entity,
                        title=title,
                        status=str(value[0]),
                        is_current=is_current,
                        is_old_state=old_state,
                        is_new_state=new_state,
                    )
Ejemplo n.º 4
0
def echo():
    ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    ssl_context.check_hostname = False
    ssl_context.load_verify_locations('example.crt')

    websocket = yield from asyncws.connect('wss://localhost:8000', ssl = ssl_context)
    while True:
        yield from websocket.send('hello')
        echo = yield from websocket.recv()
        if echo is None:
            break
        print (echo)
Ejemplo n.º 5
0
    def test_server(self):
        global server, serverthread, wsocket

        loop = asyncio.get_event_loop()
        websocket = loop.run_until_complete(asyncws.connect(self.url))
        loop.run_until_complete(self.non_ssl_server(websocket))

        # Send stop signal to server
        wsocket.send(b"stop")
        serverthread.join()

        serverthread = None
        server = None
Ejemplo n.º 6
0
def echo():
    ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    ssl_context.check_hostname = False
    ssl_context.load_verify_locations('example.crt')

    websocket = yield from asyncws.connect('wss://localhost:8000',
                                           ssl=ssl_context)
    while True:
        yield from websocket.send('hello')
        echo = yield from websocket.recv()
        if echo is None:
            break
        print(echo)
Ejemplo n.º 7
0
    def __init__(self):
        self._authenticated = False
        self._connection = None
        self._iden = 0
        self._subs = {}

        self._loop = asyncio.get_event_loop()
        self._connection = self._loop.run_until_complete(
            asyncws.connect('ws://localhost:8123/api/websocket'))
        try:
            self._loop.run_until_complete(self.auth_phase())
        except Exception as e:
            _LOGGER.error(e)
            self._loop.run_until_complete(self._connection.close())
Ejemplo n.º 8
0
def echo():
    websocket = yield from asyncws.connect(
        'ws://172.16.230.225:8123/api/websocket')

    yield from websocket.send(
        json.dumps({
            "type": "auth",
            "api_password": "******"
        }))
    yield from websocket.send(
        json.dumps({
            'id': 1,
            'type': 'subscribe_events',
        }))
    while True:
        message = yield from websocket.recv()
        if message is None:
            break
        # print(message)
        parse_state_json(message)
Ejemplo n.º 9
0
def chat_send(websocket):
    reader = yield from stdin()
    print("Welcome, type some text!")
    while True:
        msg = yield from reader.readline()
        yield from websocket.send(
            msg.decode('utf-8').strip('\r\n'), True)


@asyncio.coroutine
def chat(websocket):
    send_task = asyncio.Task(chat_send(websocket))
    recv_task = asyncio.Task(chat_recv(websocket, send_task))
    return [recv_task, send_task]


loop = asyncio.get_event_loop()
websocket = loop.run_until_complete(
    asyncws.connect('ws://localhost:8000'))
try:
    chat_tasks = loop.run_until_complete(chat(websocket))
    loop.run_until_complete(asyncio.wait(chat_tasks))
except KeyboardInterrupt as e:
    loop.run_until_complete(websocket.close())
    loop.run_until_complete(websocket.wait_closed())
    for task in chat_tasks:
        task.cancel()
    loop.run_until_complete(asyncio.wait(chat_tasks))
finally:
    loop.close()
Ejemplo n.º 10
0
    try:
        print ('连接转发服务器')
        while True:
            messageFromServer = yield from websocketFromServer.recv()
            if messageFromServer is None:
                raise Exception;
            if messageFromServer == '':
                continue
            messageFromServerObj = json.loads(messageFromServer)

            if messageFromServerObj is not None and messageFromServerObj['code'] == 0:
                if websocket is not None:
                    print("Rev Command:" + messageFromServer)
                    yield from websocket.send(json.dumps(messageFromServerObj['command']))

    except Exception as inst:
        print(inst)
        raise Exception


while True:
    try:
        loop = asyncio.get_event_loop()
        websocket = loop.run_until_complete(asyncws.connect(wslocalAdd))
        websocketFromServer = loop.run_until_complete(asyncws.connect(wsServerAdd))
        tasks = [asyncio.Task(wslocal(websocket,websocketFromServer)), asyncio.Task(wsServer(websocket,websocketFromServer))]
        loop.run_until_complete(asyncio.gather(*tasks))
    except Exception as inst:
        print('开始重连')
        sleep(5)
Ejemplo n.º 11
0
import asyncio
import asyncws


@asyncio.coroutine
def echo(websocket):
    while True:
        yield from websocket.send('hello')
        msg = yield from websocket.recv()
        if msg is None:
            break
        print(msg)


loop = asyncio.get_event_loop()
websocket = loop.run_until_complete(asyncws.connect('ws://localhost:8000'))
try:
    loop.run_until_complete(echo(websocket))
except KeyboardInterrupt as e:
    loop.run_until_complete(websocket.close())
    loop.run_until_complete(websocket.wait_closed())
finally:
    loop.close()
Ejemplo n.º 12
0
def chat():
    websocket = yield from asyncws.connect('ws://localhost:8000')
    tasks = [chat_recv(websocket), chat_send(websocket)]
    yield from asyncio.wait(tasks)
Ejemplo n.º 13
0
def chat():
    websocket = yield from asyncws.connect('ws://localhost:8000')
    tasks = [chat_recv(websocket), chat_send(websocket)]
    yield from asyncio.wait(tasks)
Ejemplo n.º 14
0
import asyncio
import asyncws
import ssl


@asyncio.coroutine
def echo(websocket):
    while True:
        yield from websocket.send('hello')
        echo = yield from websocket.recv()
        if echo is None:
            break
        print(echo)


ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
ssl_context.load_verify_locations('example.crt')

loop = asyncio.get_event_loop()
websocket = loop.run_until_complete(
    asyncws.connect('wss://localhost:8000', ssl=ssl_context))
try:
    loop.run_until_complete(echo(websocket))
except KeyboardInterrupt as e:
    loop.run_until_complete(websocket.close())
    loop.run_until_complete(websocket.wait_closed())
finally:
    loop.close()