コード例 #1
0
ファイル: example.py プロジェクト: premist/wideq
def mon(client, device_id):
    """Monitor any device, displaying generic information about its
    status.
    """

    device = client.get_device(device_id)
    model = client.model_info(device)

    with wideq.Monitor(client.session, device_id) as mon:
        try:
            while True:
                time.sleep(1)
                print('Polling...')
                res = mon.poll()
                if res:
                    for key, value in res.items():
                        try:
                            desc = model.value(key)
                        except KeyError:
                            print('- {}: {}'.format(key, value))
                        if isinstance(desc, wideq.EnumValue):
                            print('- {}: {}'.format(
                                key, desc.options.get(value, value)))
                        elif isinstance(desc, wideq.RangeValue):
                            print('- {0}: {1} ({2.min}-{2.max})'.format(
                                key,
                                value,
                                desc,
                            ))

        except KeyboardInterrupt:
            pass
コード例 #2
0
ファイル: example.py プロジェクト: jaedesignz/wideq
def mon(client, device_id):
    """Monitor any device, displaying generic information about its
    status.
    """

    device = client.get_device(device_id)
    model = client.model_info(device)

    with wideq.Monitor(client.session, device_id) as mon:
        try:
            while True:
                time.sleep(1)
                print('Polling...')
                res = mon.poll()

                if res:
                    if isinstance(res, list):
                        for key, item in enumerate(res):
                            protocol = model.data['Monitoring']['protocol']
                            values = model.data['Value']
                            try:
                                print('key: ', key)
                                desc = protocol[key]['value']
                                print('desc: ', desc)
                                value = values[desc]

                                if value['type'] == "Enum":
                                    info = value['option'][str(item)]
                                elif value['type'] == "Range":
                                    info = item
                                else:
                                    info = 'data not supported: ' + str(item)

                                print('{}:  {}'.format(desc, info))
                            except KeyError as e:
                                print(
                                    'Invalid Key: {} - {} -- error: {}'.format(
                                        key, item, e.args[0]))
                    else:
                        for key, value in res.items():
                            try:
                                desc = model.value(key)
                            except KeyError:
                                print('- {}: {}'.format(key, value))
                            if isinstance(desc, wideq.EnumValue):
                                print('- {}: {}'.format(
                                    key, desc.options.get(value, value)))
                            elif isinstance(desc, wideq.RangeValue):
                                print('- {0}: {1} ({2.min}-{2.max})'.format(
                                    key,
                                    value,
                                    desc,
                                ))

        except KeyboardInterrupt:
            pass
コード例 #3
0
def gen_mon(client, device_id):
    """Monitor any other device but AC device,
    displaying generic information about its status.
    """

    device = client.get_device(device_id)
    model = client.model_info(device)

    with wideq.Monitor(client.session, device_id) as mon:
        try:
            while True:
                time.sleep(1)
                print("Polling...")
                data = mon.poll()
                if data:
                    try:
                        res = model.decode_monitor(data)
                    except ValueError:
                        print("status data: {!r}".format(data))
                    else:
                        for key, value in res.items():
                            try:
                                desc = model.value(key)
                            except KeyError:
                                print("- {}: {}".format(key, value))
                            if isinstance(desc, wideq.EnumValue):
                                print(
                                    "- {}: {}".format(
                                        key, desc.options.get(value, value)
                                    )
                                )
                            elif isinstance(desc, wideq.RangeValue):
                                print(
                                    "- {0}: {1} ({2.min}-{2.max})".format(
                                        key,
                                        value,
                                        desc,
                                    )
                                )

        except KeyboardInterrupt:
            pass
コード例 #4
0
ファイル: example.py プロジェクト: dash1st/ha_tbot
def mon(client, device_id):
    """Monitor any device, displaying generic information about its
    status.
    """

    device = client.get_device(device_id)
    model = client.model_info(device)
    device.load_model_info
    device.load_lang_pack_product
    device.load_lang_pack_model

    with wideq.Monitor(client.session, device_id) as mon:
        try:
            #while True:
            data = mon.poll()
            time.sleep(2)
            now = datetime.datetime.now()
            print('polling... {}:{}:{}'.format(now.hour, now.minute,
                                               now.second))
            data = mon.poll()
            if data:
                try:
                    res = model.decode_monitor(data)
                    if DEBUG_MODE:
                        with open(device.name + '_polling.json', 'w', -1,
                                  'utf-8') as outfile:
                            #json.dump(res, outfile, ensure_ascii=False, indent="\t")
                            data = json.loads(outfile)
                            print(data['SensorPM1'])
                except ValueError:
                    print('status data: {!r}'.format(data))
                else:
                    print('-----------------------')
                    print(res['SensorPM1'])
                    print(res['SensorPM2'])
                    print(res['SensorPM10'])
                    print(res['SensorHumidity'])
                    print('-----------------------')
                    sys.exit(0)
        except KeyboardInterrupt:
            pass
コード例 #5
0
def monitor(device_id):
    """Monitor any device, displaying generic information about its
    status.
    """

    backup_id = device_id
    check_headers(request.headers)
    logging.debug("monitor {}".format(backup_id))

    try:
        # client = wideq.Client.load(state)
        device = client.get_device(backup_id)
        model = client.model_info(device)
    except wideq.NotLoggedInError as err:
        logging.error('mon {} NotLoggedInError: refresh session and try again. ({})'.format(backup_id, err))
        client.refresh();
        device = client.get_device(backup_id)
        model = client.model_info(device)
    except wideq.APIError as err:
        if err.code == 9003:
            logging.error('mon {} APIError: refresh session and try again. ({})'.format(backup_id, err))
            client.refresh();
            device = client.get_device(backup_id)
            model = client.model_info(device)

    with wideq.Monitor(client.session, backup_id) as mon:
        try:
            i = 0
            while i < 10:
                i += 1
                data = mon.poll()
                if data:
                    try:
                        res = model.decode_monitor(data)
                    except ValueError:
                        logging.error('status data: {!r}'.format(data))
                    else:
                        result = {}
                        for key, value in res.items():
                            try:
                                desc = model.value(key)
                            except KeyError:
                                logging.error('- {}: {}'.format(key, value))
                            if isinstance(desc, wideq.EnumValue):
                                # print('- {}: {}'.format( key, desc.options.get(value, value) ))
                                result[key] = desc.options.get(value, value)
                            elif isinstance(desc, wideq.RangeValue):
                                # print('- {0}: {1} ({2.min}-{2.max})'.format( key, value, desc, ))
                                result[key] = value
                                result[key + '.min'] = desc.min
                                result[key + '.max'] = desc.max

                        return Response(result)

                time.sleep(1)
                print('Polling...')

        except KeyboardInterrupt:
            pass

    raise InvalidUsage('Error, no response from LG cloud', 401)