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()
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()