async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) if CONF_SLEEP_DURATION in config: cg.add(var.set_sleep_duration(config[CONF_SLEEP_DURATION])) if CONF_WAKEUP_PIN in config: pin = await cg.gpio_pin_expression(config[CONF_WAKEUP_PIN]) cg.add(var.set_wakeup_pin(pin)) if CONF_WAKEUP_PIN_MODE in config: cg.add(var.set_wakeup_pin_mode(config[CONF_WAKEUP_PIN_MODE])) if CONF_RUN_DURATION in config: run_duration_config = config[CONF_RUN_DURATION] if not isinstance(run_duration_config, dict): cg.add(var.set_run_duration(config[CONF_RUN_DURATION])) else: default_run_duration = run_duration_config[CONF_DEFAULT] wakeup_cause_to_run_duration = cg.StructInitializer( WakeupCauseToRunDuration, ("default_cause", default_run_duration), ( "touch_cause", run_duration_config.get( CONF_TOUCH_WAKEUP_REASON, default_run_duration ), ), ( "gpio_cause", run_duration_config.get( CONF_GPIO_WAKEUP_REASON, default_run_duration ), ), ) cg.add(var.set_run_duration(wakeup_cause_to_run_duration)) if CONF_ESP32_EXT1_WAKEUP in config: conf = config[CONF_ESP32_EXT1_WAKEUP] mask = 0 for pin in conf[CONF_PINS]: mask |= 1 << pin[CONF_NUMBER] struct = cg.StructInitializer( Ext1Wakeup, ("mask", mask), ("wakeup_mode", conf[CONF_MODE]) ) cg.add(var.set_ext1_wakeup(struct)) if CONF_TOUCH_WAKEUP in config: cg.add(var.set_touch_wakeup(config[CONF_TOUCH_WAKEUP])) cg.add_define("USE_DEEP_SLEEP")
async def to_code(config): r = 0 if CONF_RED in config: r = int(config[CONF_RED] * 255) elif CONF_RED_INT in config: r = config[CONF_RED_INT] g = 0 if CONF_GREEN in config: g = int(config[CONF_GREEN] * 255) elif CONF_GREEN_INT in config: g = config[CONF_GREEN_INT] b = 0 if CONF_BLUE in config: b = int(config[CONF_BLUE] * 255) elif CONF_BLUE_INT in config: b = config[CONF_BLUE_INT] w = 0 if CONF_WHITE in config: w = int(config[CONF_WHITE] * 255) elif CONF_WHITE_INT in config: w = config[CONF_WHITE_INT] cg.new_variable( config[CONF_ID], cg.StructInitializer(ColorStruct, ("r", r), ("g", g), ("b", b), ("w", w)), )
def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) yield cg.register_component(var, config) for conf in config.get(CONF_PLUGS, []): state = yield cg.get_variable(conf[CONF_STATE]) current = 0 if CONF_CURRENT in conf: current = yield cg.get_variable(conf[CONF_CURRENT]) voltage = 0 if CONF_VOLTAGE in conf: voltage = yield cg.get_variable(conf[CONF_VOLTAGE]) total = 0 if CONF_TOTAL in conf: total = yield cg.get_variable(conf[CONF_TOTAL]) plug = cg.StructInitializer( Plug, ('current_sensor', current), ('voltage_sensor', voltage), ('total_sensor', total), ('state_switch', state) ) cg.add(var.add_plug(plug))
def samsung_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( SamsungData, ('data', config[CONF_DATA]), )))
async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) if CONF_SLEEP_DURATION in config: cg.add(var.set_sleep_duration(config[CONF_SLEEP_DURATION])) if CONF_WAKEUP_PIN in config: pin = await cg.gpio_pin_expression(config[CONF_WAKEUP_PIN]) cg.add(var.set_wakeup_pin(pin)) if CONF_WAKEUP_PIN_MODE in config: cg.add(var.set_wakeup_pin_mode(config[CONF_WAKEUP_PIN_MODE])) if CONF_RUN_DURATION in config: cg.add(var.set_run_duration(config[CONF_RUN_DURATION])) if CONF_ESP32_EXT1_WAKEUP in config: conf = config[CONF_ESP32_EXT1_WAKEUP] mask = 0 for pin in conf[CONF_PINS]: mask |= 1 << pin[CONF_NUMBER] struct = cg.StructInitializer( Ext1Wakeup, ("mask", mask), ("wakeup_mode", conf[CONF_MODE]) ) cg.add(var.set_ext1_wakeup(struct)) if CONF_TOUCH_WAKEUP in config: cg.add(var.set_touch_wakeup(config[CONF_TOUCH_WAKEUP])) cg.add_define("USE_DEEP_SLEEP")
def jvc_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( JVCData, ("data", config[CONF_DATA]), )))
def coolix_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( CoolixData, ("data", config[CONF_DATA]), )))
def pronto_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( ProntoData, ("data", config[CONF_DATA]), )))
async def strobe_effect_to_code(config, effect_id): var = cg.new_Pvariable(effect_id, config[CONF_NAME]) colors = [] for color in config.get(CONF_COLORS, []): colors.append( cg.StructInitializer( StrobeLightEffectColor, ( "color", LightColorValues( color.get(CONF_COLOR_MODE, ColorMode.UNKNOWN), color[CONF_STATE], color[CONF_BRIGHTNESS], color[CONF_COLOR_BRIGHTNESS], color[CONF_RED], color[CONF_GREEN], color[CONF_BLUE], color[CONF_WHITE], color.get(CONF_COLOR_TEMPERATURE, 0.0), color[CONF_COLD_WHITE], color[CONF_WARM_WHITE], ), ), ("duration", color[CONF_DURATION]), )) cg.add(var.set_colors(colors)) return var
def to_code(config): cg.variable( config[CONF_ID], cg.StructInitializer(ColorStruct, ('r', config[CONF_RED]), ('g', config[CONF_GREEN]), ('b', config[CONF_BLUE]), ('w', config[CONF_WHITE])))
def gicable_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( GiCableData, ("command", config[CONF_COMMAND]), ("repeat", config[CONF_REPEAT]), )))
def ATT_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( ATTData, ("command", config[CONF_COMMAND]), ("long_signal", config[CONF_LONG_SIGNAL]), )))
def exp_mqtt_message(config): if config is None: return cg.optional(cg.TemplateArguments(MQTTMessage)) exp = cg.StructInitializer(MQTTMessage, ('topic', config[CONF_TOPIC]), ('payload', config.get(CONF_PAYLOAD, "")), ('qos', config[CONF_QOS]), ('retain', config[CONF_RETAIN])) return exp
def rc5_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( RC5Data, ("address", config[CONF_ADDRESS]), ("command", config[CONF_COMMAND]), )))
def pioneer_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( PioneerData, ("rc_code_1", config[CONF_RC_CODE_1]), ("rc_code_2", config[CONF_RC_CODE_2]), )))
def panasonic_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( PanasonicData, ('address', config[CONF_ADDRESS]), ('command', config[CONF_COMMAND]), )))
def sony_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( SonyData, ('data', config[CONF_DATA]), ('nbits', config[CONF_NBITS]), )))
def samsung_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( SamsungData, ("data", config[CONF_DATA]), ("nbits", config[CONF_NBITS]), )))
def carrier_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( CarrierData, ('data1', config[CONF_DATA1]), ('data2', config[CONF_DATA2]), )))
def toshibaac_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( ToshibaAcData, ("rc_code_1", config[CONF_RC_CODE_1]), ("rc_code_2", config[CONF_RC_CODE_2]), )))
async def setup_binary_sensor_core_(var, config): await setup_entity(var, config) if CONF_DEVICE_CLASS in config: cg.add(var.set_device_class(config[CONF_DEVICE_CLASS])) if CONF_PUBLISH_INITIAL_STATE in config: cg.add( var.set_publish_initial_state(config[CONF_PUBLISH_INITIAL_STATE])) if CONF_INVERTED in config: cg.add(var.set_inverted(config[CONF_INVERTED])) if CONF_FILTERS in config: filters = await cg.build_registry_list(FILTER_REGISTRY, config[CONF_FILTERS]) cg.add(var.add_filters(filters)) for conf in config.get(CONF_ON_PRESS, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_RELEASE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_CLICK, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var, conf[CONF_MIN_LENGTH], conf[CONF_MAX_LENGTH]) await automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_DOUBLE_CLICK, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var, conf[CONF_MIN_LENGTH], conf[CONF_MAX_LENGTH]) await automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_MULTI_CLICK, []): timings = [] for tim in conf[CONF_TIMING]: timings.append( cg.StructInitializer( MultiClickTriggerEvent, ("state", tim[CONF_STATE]), ("min_length", tim[CONF_MIN_LENGTH]), ("max_length", tim.get(CONF_MAX_LENGTH, 4294967294)), )) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var, timings) if CONF_INVALID_COOLDOWN in conf: cg.add(trigger.set_invalid_cooldown(conf[CONF_INVALID_COOLDOWN])) await cg.register_component(trigger, conf) await automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_STATE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(bool, "x")], conf) if CONF_MQTT_ID in config: mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) await mqtt.register_mqtt_component(mqtt_, config)
def nec2_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( NEC2Data, ("address", config[CONF_ADDRESS]), ("command", config[CONF_COMMAND]), ("repeat", config[CONF_REPEAT]), )))
async def to_code(config): from PIL import ImageFont conf = config[CONF_FILE] if conf[CONF_TYPE] == TYPE_LOCAL: path = CORE.relative_config_path(conf[CONF_PATH]) elif conf[CONF_TYPE] == TYPE_GFONTS: path = _compute_gfonts_local_path(conf) try: font = ImageFont.truetype(str(path), config[CONF_SIZE]) except Exception as e: raise core.EsphomeError(f"Could not load truetype file {path}: {e}") ascent, descent = font.getmetrics() glyph_args = {} data = [] for glyph in config[CONF_GLYPHS]: mask = font.getmask(glyph, mode="1") _, (offset_x, offset_y) = font.font.getsize(glyph) width, height = mask.size width8 = ((width + 7) // 8) * 8 glyph_data = [0] * (height * width8 // 8) for y in range(height): for x in range(width): if not mask.getpixel((x, y)): continue pos = x + y * width8 glyph_data[pos // 8] |= 0x80 >> (pos % 8) glyph_args[glyph] = (len(data), offset_x, offset_y, width, height) data += glyph_data rhs = [HexInt(x) for x in data] prog_arr = cg.progmem_array(config[CONF_RAW_DATA_ID], rhs) glyph_initializer = [] for glyph in config[CONF_GLYPHS]: glyph_initializer.append( cg.StructInitializer( GlyphData, ("a_char", glyph), ( "data", cg.RawExpression( f"{str(prog_arr)} + {str(glyph_args[glyph][0])}"), ), ("offset_x", glyph_args[glyph][1]), ("offset_y", glyph_args[glyph][2]), ("width", glyph_args[glyph][3]), ("height", glyph_args[glyph][4]), )) glyphs = cg.static_const_array(config[CONF_RAW_GLYPH_ID], glyph_initializer) cg.new_Pvariable(config[CONF_ID], glyphs, len(glyph_initializer), ascent, ascent + descent)
def manual_ip(config): return cg.StructInitializer( ManualIP, ("static_ip", IPAddress(*config[CONF_STATIC_IP].args)), ("gateway", IPAddress(*config[CONF_GATEWAY].args)), ("subnet", IPAddress(*config[CONF_SUBNET].args)), ("dns1", IPAddress(*config[CONF_DNS1].args)), ("dns2", IPAddress(*config[CONF_DNS2].args)), )
def manual_ip(config): return cg.StructInitializer( ManualIP, ('static_ip', IPAddress(*config[CONF_STATIC_IP].args)), ('gateway', IPAddress(*config[CONF_GATEWAY].args)), ('subnet', IPAddress(*config[CONF_SUBNET].args)), ('dns1', IPAddress(*config[CONF_DNS1].args)), ('dns2', IPAddress(*config[CONF_DNS2].args)), )
def setup_binary_sensor_core_(var, config): cg.add(var.set_name(config[CONF_NAME])) if CONF_INTERNAL in config: cg.add(var.set_internal(CONF_INTERNAL)) if CONF_DEVICE_CLASS in config: cg.add(var.set_device_class(config[CONF_DEVICE_CLASS])) if CONF_INVERTED in config: cg.add(var.set_inverted(config[CONF_INVERTED])) if CONF_FILTERS in config: filters = yield cg.build_registry_list(FILTER_REGISTRY, config[CONF_FILTERS]) cg.add(var.add_filters(filters)) for conf in config.get(CONF_ON_PRESS, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) yield automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_RELEASE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) yield automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_CLICK, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var, conf[CONF_MIN_LENGTH], conf[CONF_MAX_LENGTH]) yield automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_DOUBLE_CLICK, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var, conf[CONF_MIN_LENGTH], conf[CONF_MAX_LENGTH]) yield automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_MULTI_CLICK, []): timings = [] for tim in conf[CONF_TIMING]: timings.append( cg.StructInitializer( MultiClickTriggerEvent, ('state', tim[CONF_STATE]), ('min_length', tim[CONF_MIN_LENGTH]), ('max_length', tim.get(CONF_MAX_LENGTH, 4294967294)), )) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var, timings) if CONF_INVALID_COOLDOWN in conf: cg.add(trigger.set_invalid_cooldown(conf[CONF_INVALID_COOLDOWN])) yield cg.register_component(trigger, conf) yield automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_STATE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) yield automation.build_automation(trigger, [(bool, 'x')], conf) if CONF_MQTT_ID in config: mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) yield mqtt.register_mqtt_component(mqtt_, config)
def magiquest_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( MagiQuestData, ("magnitude", config[CONF_MAGNITUDE]), ("wand_id", config[CONF_WAND_ID]), ) ) )
def manual_ip(config): if config is None: return None return cg.StructInitializer( ManualIP, ('static_ip', safe_ip(config[CONF_STATIC_IP])), ('gateway', safe_ip(config[CONF_GATEWAY])), ('subnet', safe_ip(config[CONF_SUBNET])), ('dns1', safe_ip(config.get(CONF_DNS1))), ('dns2', safe_ip(config.get(CONF_DNS2))), )
def manual_ip(config): if config is None: return None return cg.StructInitializer( ManualIP, ("static_ip", safe_ip(config[CONF_STATIC_IP])), ("gateway", safe_ip(config[CONF_GATEWAY])), ("subnet", safe_ip(config[CONF_SUBNET])), ("dns1", safe_ip(config.get(CONF_DNS1))), ("dns2", safe_ip(config.get(CONF_DNS2))), )
def nexa_binary_sensor(var, config): cg.add( var.set_data( cg.StructInitializer( NexaData, ("device", config[CONF_DEVICE]), ("group", config[CONF_GROUP]), ("state", config[CONF_STATE]), ("channel", config[CONF_CHANNEL]), ("level", config[CONF_LEVEL]), )))