Beispiel #1
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the LaCrosse sensors."""
    import pylacrosse
    from serial import SerialException

    usb_device = config.get(CONF_DEVICE)
    baud = int(config.get(CONF_BAUD))
    expire_after = config.get(CONF_EXPIRE_AFTER)

    _LOGGER.debug("%s %s", usb_device, baud)

    try:
        lacrosse = pylacrosse.LaCrosse(usb_device, baud)
        lacrosse.open()
    except SerialException as exc:
        _LOGGER.warning("Unable to open serial port: %s", exc)
        return False

    hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, lacrosse.close)

    sensors = []
    for device, device_config in config[CONF_SENSORS].items():
        _LOGGER.debug("%s %s", device, device_config)

        typ = device_config.get(CONF_TYPE)
        sensor_class = TYPE_CLASSES[typ]
        name = device_config.get(CONF_NAME, device)

        sensors.append(
            sensor_class(hass, lacrosse, device, name, expire_after,
                         device_config))

    add_devices(sensors)
def setup_platform(
    hass: HomeAssistant,
    config: ConfigType,
    add_entities: AddEntitiesCallback,
    discovery_info: DiscoveryInfoType | None = None,
) -> None:
    """Set up the LaCrosse sensors."""
    usb_device = config[CONF_DEVICE]
    baud = int(config[CONF_BAUD])
    expire_after = config.get(CONF_EXPIRE_AFTER)

    _LOGGER.debug("%s %s", usb_device, baud)

    try:
        lacrosse = pylacrosse.LaCrosse(usb_device, baud)
        lacrosse.open()
    except SerialException as exc:
        _LOGGER.warning("Unable to open serial port: %s", exc)
        return

    hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                         lambda event: lacrosse.close())

    if CONF_JEELINK_LED in config:
        lacrosse.led_mode_state(config.get(CONF_JEELINK_LED))
    if CONF_FREQUENCY in config:
        lacrosse.set_frequency(config.get(CONF_FREQUENCY))
    if CONF_DATARATE in config:
        lacrosse.set_datarate(config.get(CONF_DATARATE))
    if CONF_TOGGLE_INTERVAL in config:
        lacrosse.set_toggle_interval(config.get(CONF_TOGGLE_INTERVAL))
    if CONF_TOGGLE_MASK in config:
        lacrosse.set_toggle_mask(config.get(CONF_TOGGLE_MASK))

    lacrosse.start_scan()

    sensors = []
    for device, device_config in config[CONF_SENSORS].items():
        _LOGGER.debug("%s %s", device, device_config)

        typ = device_config.get(CONF_TYPE)
        sensor_class = TYPE_CLASSES[typ]
        name = device_config.get(CONF_NAME, device)

        sensors.append(
            sensor_class(hass, lacrosse, device, name, expire_after,
                         device_config))

    add_entities(sensors)
if mqtt_username:
    mqtt_client.username_pw_set(mqtt_username, mqtt_password)

try:
    mqtt_client.connect(os.environ.get('MQTT_HOSTNAME', config['MQTT'].get('hostname', 'localhost')),
                        port=int(os.environ.get('MQTT_PORT', config['MQTT'].get('port', '1883'))),
                        keepalive=config['MQTT'].getint('keepalive', 60))
except:
    print_line('MQTT connection error. Please check your settings in the configuration file "config.ini"', error=True, sd_notify=True)
    sys.exit(1)

sd_notifier.notify('READY=1')

# Initialize Lacrosse sensors
try:
    lacrosse = pylacrosse.LaCrosse(used_adapter, 57600)
    lacrosse.open()
except SerialException as exc:
    print_line("Unable to open serial port: %s".format(exc), error=True, sd_notify=True)
    sys.exit(1)

if toggle_interval is not None:
    print_line("Setting interval")
    lacrosse.set_toggle_interval(toggle_interval)
if toggle_mask is not None:
    lacrosse.set_toggle_mask(toggle_mask)
if datarate is not None:
    lacrosse.set_datarate(datarate)
lacrosse.led_mode_state(not disable_led)

lacrosse.start_scan()
Beispiel #4
0
def main(args=None):
    parser = argparse.ArgumentParser('LaCrosse sensor CLI tool.', formatter_class=argparse.RawTextHelpFormatter)
    parser.add_argument('-v', action='store_true', dest='verbose',
            help='be more verbose')
    parser.add_argument('-d', '--device', type=str, dest='device',
            help='set local device e.g. \'{0}\' or\n'
                 'set remote device e.g. \'rfc2217://[IP]:[PORT]\'\n'
                 'default: \'{0}\''.format(DEFAULT_DEVICE),
            default=DEFAULT_DEVICE)
    parser.add_argument('-f', type=str, dest='frequency_rfm1',
            help='set the frequency for RFM1')
    parser.add_argument('-F', type=str, dest='frequency_rfm2',
            help='set the frequency for RFM2')
    parser.add_argument('-t', type=str, dest='toggle_interval_rfm1',
            help='set the toggle interval for RFM1')
    parser.add_argument('-T', type=str, dest='toggle_interval_rfm2',
            help='set the toggle interval for RFM2')
    parser.add_argument('-m', type=str, dest='toggle_mask_rfm1',
            help='set the toggle mask for RFM1')
    parser.add_argument('-M', type=str, dest='toggle_mask_rfm2',
            help='set the toggle mask for RFM2')
    parser.add_argument('-r', type=str, dest='datarate_rfm1',
            help='set the datarate for RFM1')
    parser.add_argument('-R', type=str, dest='datarate_rfm2',
            help='set the datarate for RFM2')

    _sub = parser.add_subparsers(title='Commands')

    # list all devices
    subparser = _sub.add_parser('scan',
            help='Show all received sensors')
    subparser.set_defaults(func=scan)

    subparser = _sub.add_parser('info',
            help='Get configuration info')
    subparser.set_defaults(func=get_info)

    subparser = _sub.add_parser('led',
            help='Set traffic LED state')
    subparser.add_argument('led_state', type=str, choices=['on', 'off'],
            metavar="STATE", help='LED state')
    subparser.set_defaults(func=led)

    args = parser.parse_args(args)

    logging.basicConfig()
    if args.verbose:
        _LOGGER.setLevel(logging.DEBUG)

    try:
        config = SafeConfigParser()
        config.readfp(codecs.open(os.path.expanduser(
                '~/.lacrosse/known_sensors.ini'), 'r', 'UTF-8'))
    except IOError:
        config = None

    lacrosse = None
    try:
        lacrosse = pylacrosse.LaCrosse(args.device, 57600)
        lacrosse.open()
        configure(lacrosse, config, args)
        args.func(lacrosse, config, args)

    finally:
        if lacrosse is not None:
            lacrosse.close()