nota
Esta es la versión alemana, para la versión en inglés, desplácese hacia abajo o haga clic aquí.
Ferraris Meter es un componente de escoma para crear un firmware ESP, que puede usar un microcontrolador ESP y un sensor infrarrojo para determinar la velocidad y las revoluciones del plato giratorio de un medidor de flujo de Ferraris analógico y de esto puede calcular el consumo de electricidad actual y el estado del medidor. Estos valores se pueden enviar al software de automatización del hogar, como el Asistente de inicio para su posterior procesamiento.
El software (incluida la documentación con estructuras de muestra de hardware) se proporciona sin incumplimiento y sin ninguna garantía expresa o tácita, incluida, entre otros, garantizar el acceso al mercado, la idoneidad para un propósito específico y la no infracción de los derechos de terceros. Los autores o propietarios de derechos de autor de ninguna manera son responsables de reclamos, daños u otras obligaciones, ya sea en una demanda por contrato o de responsabilidad, un acto no autorizado o de otra manera, que surge o en relación con el software o el uso u otras tiendas con el software.
Solo se requiere un microcontrolador ESP (por ejemplo, ESP8266 o ESP32, incluido el suministro de voltaje) y un sensor infrarrojo (por ejemplo, TCRT5000). Para la funcionalidad pura del medidor Ferraris, un ESP8266 es completamente suficiente como microcontrolador. Para el sensor infrarrojo, hay módulos de ruptura basados en TCRT5000 terminados con voltaje de entrada de 3.3V-5V, que también tienen una resistencia controlable (potenciómetro) para calibrar la salida digital. Estos módulos TCRT5000 tienen 4 pines-VCC y GND para la fuente de alimentación del chip del sensor, así como una salida digital D0 y una salida analógica A0.
Al colocar el sensor en la placa de cubierta del medidor de corriente Ferraris, se requiere un poco de habilidad y trabajo de precisión. El transmisor infrarrojo/receptor de la pareja del sensor debe estar alineada en el medio del milímetro preciso sobre el tocadiscos y apuntando directamente en el plato giratorio.
En principio, el componente del medidor Ferraris admite las siguientes variantes de desarrollo:
Para crear firmware de escoma, se debe crear un archivo de configuración basado en YAML. Puede usar uno de los archivos de configuración de muestra proporcionados en este repositorio como punto de partida y adaptarlos a sus necesidades.
En principio, hay dos formas de construir el firmware de escenuras:
El método que debe elegir depende de la confianza que se encuentre con ESPHOME y si prefiere trabajar con una interfaz gráfica de usuario o con la línea de comandos. Además, el rendimiento del host en el que construye el firmware podría desempeñar un papel para acelerar el proceso.
nota
No es necesario copiar este repositorio ("bifurcado") y adaptarse a la configuración de la muestra en el repositorio copiado. En su lugar, es suficiente guardar y adaptar la configuración de la muestra o quitar la configuración adaptada en su host de asistente de inicio (si la creación del firmware de Esfomo se desea utilizando el complemento del compilador de dispositivos de Esfomo).
Las siguientes secciones describen los componentes más importantes incluidos en el archivo de configuración del firmware.
El componente Ferraris es esencial y debe agregarse para usar sus sensores.
Dado que es un componente personalizado que no forma parte del escoma, debe importarse explícitamente. La forma más fácil es cargar el componente directamente de este repositorio.
external_components :
- source : github://jensrossbach/esphome-ferraris-meter
components : [ferraris] Consejo
En el ejemplo anterior, el último estado del componente se invita a la rama main del repositorio. Sin embargo, recomiendo referirse a un stand lanzado por medio de un número de versión para tener más control sobre qué soporte de software se usa y para poder reaccionar mejor a "romper los cambios". Consulte la configuración de la muestra cómo se puede hacer esto.
Se pueden configurar las siguientes configuraciones genéricas:
| opción | tipo | Necesario | estándar | Descripción |
|---|---|---|---|---|
id | IDENTIFICACIÓN | No 1 | - | Instancia del componente Ferraris |
digital_input | Alfiler | si 2 | - | Pin GPIO con el que está conectada la salida digital del módulo TCRT5000 |
analog_input | IDENTIFICACIÓN | si 2 | - | Sensor ADC que lee el pin conectado a la salida analógica del módulo TCRT5000 |
analog_threshold | Número / ID 3 | No | 50 | Umbral para la detección de una revolución a través de la entrada analógica |
off_tolerance | Número / ID 3 | No | 0 | Compensación negativa en el valor umbral analógico para el flanco que cae, consulte la sección Presionando para más detalles |
on_tolerance | Número / ID 3 | No | 0 | Compensación positiva en el valor umbral analógico para el flanco ascendente, consulte la sección Presionando para más detalles |
rotations_per_kwh | Número | No | 75 | Número de revoluciones del tocadiscos por kWh (el valor se observa en el medidor de corriente de Ferraris) |
debounce_threshold | Número / ID 3 | No | 400 | Tiempo mínimo en milisegundos entre la caída y el posterior flanco creciente para que se tenga en cuenta la revolución, consulte la sección ausente para obtener más detalles |
energy_start_value | IDENTIFICACIÓN | No | - | Componentes numéricos cuyo valor se usa en el arranque como un valor de inicio para el medidor de consumo |
1 Ciertas aplicaciones requieren la id de elemento de configuración.
2 Solo se requiere uno de los dos elementos de configuración: digital_input o analog_input , dependiendo de la variante de desarrollo de hardware.
3 Los elementos de configuración analog_threshold , off_tolerance , on_tolerance y debounce_threshold esperan un número fijo o la identificación de un componente numérico. Este último permite configurar el valor a través de la interfaz de usuario (por ejemplo, utilizando un componente de número de plantilla).
ferraris :
id : ferraris_meter
digital_input : GPIO4
rotations_per_kwh : 75
debounce_threshold : 400
energy_start_value : last_energy_valueSe requiere un componente API si el ESP se integrará en el Asistente de Inicio. En el caso de que se utilice un software alternativo de automatización del hogar, se debe agregar un componente MQTT. Sin embargo, ciertos mecanismos, como sobrescribir el soporte del medidor o la restauración de la escala del último metro después de un reinicio (ver más abajo para obtener detalles) y ya no trabajar.
A continuación se muestra un ejemplo de integración con Asistente de Inicio (y API encriptada):
api :
encryption :
key : !secret ha_api_keyY aquí hay un ejemplo de uso con un software alternativo de automatización del hogar que usa MQTT:
mqtt :
broker : 10.0.0.2
username : !secret mqtt_user
password : !secret mqtt_passwordDebe estar disponible un componente WiFi, de lo contrario, los valores del sensor no se pueden transferir fácilmente a otro dispositivo.
wifi :
ssid : !secret wifi_ssid
password : !secret wifi_passwordEl componente Ferraris tiene sensores primarios para generar los valores de consumo calculados y los sensores de diagnóstico para el modo de calibración. Todos los sensores son opcionales y se pueden dejar fuera si no son necesarios.
Se pueden configurar los siguientes sensores primarios:
| sensor | tipo | Clase | Clase estatal | Unidad | Descripción |
|---|---|---|---|---|---|
power_consumption | numérico | power | measurement | W | Consumo de energía actual |
energy_meter | numérico | energy | total_increasing | WH | Consumo de corriente total (estado de medidor de electricidad/medidor) |
Puede encontrar información detallada sobre las opciones de configuración de los elementos individuales en la documentación de los componentes del sensor de escoma.
sensor :
- platform : ferraris
power_consumption :
name : Momentanverbrauch
energy_meter :
name : Verbrauchszähler Se pueden configurar los siguientes sensores de diagnóstico:
| sensor | tipo | Descripción |
|---|---|---|
rotation_indicator | binario | Muestra si la marca en el plato giratorio está justo en frente del sensor infrarrojo (solo funciona en modo de calibración) |
Puede encontrar información detallada sobre las opciones de configuración de los elementos individuales en la documentación de los componentes del sensor binario de escoma.
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Umdrehungsindikator Para fines de diagnóstico, el componente Ferraris tiene un interruptor. Esto tiene el nombre calibration_mode y se puede usar para colocar el componente en el modo de calibración (consulte la calibración de la sección para obtener más información).
switch :
- platform : ferraris
calibration_mode :
name : KalibrierungsmodusEl componente Ferraris proporciona dos acciones para establecer la escala del medidor y establecer el contador de transición.
| acción | Descripción |
|---|---|
ferraris.set_energy_meter | Coloca el estado del medidor en el valor especificado |
| parámetro | tipo | Área | Descripción |
|---|---|---|---|
value | float | > = 0 | Valor objetivo para el estado del medidor en horarios de kilovatios (kWh) |
nota
Aunque el sensor para el estado del medidor actual tiene la unidad WH (horas de vatio) , la acción para sobrescribir el soporte del medidor usa la unidad KWH (kilovatios horas) , ya que el medidor de corriente de Ferraris analógico generalmente también muestra el medidor.
| acción | Descripción |
|---|---|
ferraris.set_rotation_counter | Coloca el contador giratorio en el valor especificado |
nota
La acción para establecer el soporte del medidor también establece el contador giratorio, ya que el componente Ferraris funciona internamente con revoluciones y no con horas de vatio o kilovatios.
| parámetro | tipo | Área | Descripción |
|---|---|---|---|
value | uint64 | > = 0 | Valor objetivo para el contador de facturación en revoluciones numéricas |
En esta sección se describen varios ejemplos de aplicación para el componente Ferraris.
En esta variante, la salida digital del sensor infrarrojo se utiliza para identificar revoluciones del plato giratorio. No se requiere la salida analógica, los otros pines deben estar conectados a los pines correspondientes del microcontrolador. Para VCC, la salida de 3.3V del ESP debe usarse y la salida digital D0 debe conectarse a un pin GPIO libre (por ejemplo, GPIO4, corresponde al pin D2 en el D1 Mini).
El siguiente diagrama de circuito de complemento muestra un ejemplo de una configuración experimental con una placa de desarrollo ESP8266 D1 D1 como microcontrolador.

Con la ayuda de un destornillador, la señal de salida digital debe calibrarse a través del potenciómetro. Los dos LED verdes en la parte posterior del sensor ayuda. El LED derecho brilla permanentemente cuando el sensor se suministra de electricidad. El LED izquierdo brilla siempre que ningún "obstáculo" haya sido reconocido y expire cuando se ha interrumpido la reflexión. Este último es la condición cuando el marcado en el plato giratorio del medidor de corriente Ferraris deambula frente al sensor. Por lo tanto, el potenciómetro debe establecerse para que el LED izquierdo todavía brille cuando la marca no está en el área de la pareja de remitente/destinatario de infrarrojos tan pronto como el marcador empuja frente a él. Esta es solo un área muy pequeña y puede ser un poco difícil encontrar esta configuración. Para obtener soporte adicional para este proceso, el modo de calibración se puede activar en el firmware del medidor Ferraris, consulte la sección de calibración para más detalles.
Consejo
Si no es posible encontrar una configuración adecuada y de funcionamiento para el potenciómetro, la salida analógica del sensor infrarrojo puede usarse alternativamente, consulte la siguiente sección.
El lado del software debe configurarse para el componente Ferraris en el archivo de configuración PIN YAML, que está conectado a la salida digital del módulo TCRT5000:
ferraris :
id : ferraris_meter
digital_input : GPIO4
# ...Ejemplo de configuración: ferraris_meter_digital.yaml
En esta variante, la salida analógica del sensor infrarrojo se usa para identificar revoluciones del plato giratorio. No se requiere la salida digital, los otros pines deben estar conectados a los pines correspondientes del microcontrolador. Para VCC, la salida de 3.3V del ESP debe usarse y la salida analógica A0 debe conectarse a un pin ADC libre (por ejemplo, GPIO17, corresponde al pin A0 en el D1 Mini).
El siguiente diagrama de circuito de complemento muestra un ejemplo de una configuración experimental con una placa de desarrollo ESP8266 D1 D1 como microcontrolador.

La calibración por medio del potenciómetro en el módulo TCRT5000 ya no es necesaria, en su lugar, el lado del software debe configurarse para la entrada analógica y, opcionalmente, los valores de compensación para una característica de histéresis (ver también la sección que depende a continuación). Aquí, también, el modo de calibración del componente Ferraris puede ayudar, consulte la sección de calibración para más detalles.
El umbral analog_threshold controla cuando la señal analógica se trata como "reconocida" (área marcada del plato giratorio) y cuando se trata como "no reconocida" (no un área marcada del plato giratorio). Si el valor del sensor ADC es mayor que el analog_input umbral, el marcado se considera reconocido, es más pequeño o el mismo, no se reconoce.

Los siguientes pasos de configuración ahora deben llevarse a cabo, por ejemplo, el lado del software:
sensor :
- platform : adc
id : adc_input
pin : GPIO17
internal : true
raw : true
samples : 10
update_interval : 50ms number :
- platform : template
id : adc_threshold
name : ADC Schwellwert
icon : mdi:speedometer-slow
entity_category : config
mode : box
optimistic : true
initial_value : 50
min_value : 0
max_value : 1000
step : 1analog_input analog_threshold componente numérico creado en 2. ferraris :
id : ferraris_meter
analog_input : adc_input
analog_threshold : adc_threshold
# ...analog_threshold si el umbral ya se conoce y ya no tiene que ser configurado/cambiado. En este caso, se puede omitir el paso 2. ferraris :
# ...
analog_threshold : 45
# ... La configuración de los valores de desplazamiento off_tolerance y on_tolerance es muy similar a la configuración de analog_threshold y, por lo tanto, no se mostró explícitamente en el ejemplo anterior.
Ejemplo de configuración: ferraris_meter_analog.yaml
También es posible leer más de un contador de corriente Ferraris con un solo microcontrolador ESP. Para hacer esto, necesita más sensores infrarrojos / módulos TCRT5000 y pines GPIO gratuitos adicionales en el microcontrolador. Como ya se describió, los módulos TCRT5000 están conectados a la fuente de voltaje del microcontrolador ESP a través de VCC y GND y las salidas D0 están conectadas a la placa ESP con un pin GPIO libre.
nota
En teoría, la variante también se puede usar con la salida analógica del sensor infrarrojo, pero los pines con capacidad ADC en los microcontroladores ESP son más limitados que los pines puramente digitales. En particular, el ESP8266, que solo tiene un ADC, no sería adecuado para soportar varios sensores infrarrojos a través de sus resultados análogos.
El siguiente diagrama de circuito de complemento muestra un ejemplo de una configuración de prueba con dos módulos TCRT5,000 conectados a un Mini ESP8266 D1.

Sin embargo, debe tenerse en cuenta que cada sensor infrarrojo adicional aumenta la carga en el microcontrolador y, especialmente a velocidades muy altas de los tocadiscos, el hardware se acerca a sus límites.
Los siguientes pasos de configuración ahora deben llevarse a cabo, por ejemplo, el lado del software:
ferraris :
- id : ferraris_meter_1
digital_input : GPIO4
# ...
- id : ferraris_meter_2
digital_input : GPIO5
# ...ferraris_id . sensor :
- platform : ferraris
ferraris_id : ferraris_meter_1
power_consumption :
name : Momentanverbrauch 1
energy_meter :
name : Verbrauchszähler 1
- platform : ferraris
ferraris_id : ferraris_meter_2
power_consumption :
name : Momentanverbrauch 2
energy_meter :
name : Verbrauchszähler 2
binary_sensor :
- platform : ferraris
ferraris_id : ferraris_meter_1
rotation_indicator :
name : Umdrehungsindikator 1
- platform : ferraris
ferraris_id : ferraris_meter_2
rotation_indicator :
name : Umdrehungsindikator 2
switch :
- platform : ferraris
ferraris_id : ferraris_meter_1
calibration_mode :
name : Kalibrierungsmodus 1
- platform : ferraris
ferraris_id : ferraris_meter_2
calibration_mode :
name : Kalibrierungsmodus 2Ejemplo de configuración: ferraris_meter_multi.yaml
Durante el posicionamiento y la alineación del sensor infrarrojo, así como el ajuste del potenciómetro o el valor del umbral analógico, tiene poco sentido medir las revoluciones del tocadiscos del medidor de corriente Ferraris y calcular el consumo, ya que los cambios en la condición del sensor no corresponden a la detección real del marking en el giro. Por lo tanto, existe la posibilidad de colocar el componente Ferraris en el modo de calibración activando el interruptor para el modo de calibración (ver Actuators). Mientras se active el modo de calibración, no se lleva a cabo un cálculo de los datos de consumo y los sensores correspondientes (ver sensores primarios) no se cambian. En cambio, el sensor de diagnóstico para la indicación giratoria (ver sensores de diagnóstico) está activo y también puede usarse para respaldar la alineación correcta. El sensor está en el on cuando la marca fue reconocida en el plato giratorio y off si no se ha reconocido ninguna marca.
Para poder usar el modo de calibración, los componentes calibration_mode y rotation_indicator deben configurarse en el archivo YAML:
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Umdrehungsindikator
switch :
- platform : ferraris
calibration_mode :
name : KalibrierungsmodusLa transición del área no marcada a la marcada y viceversa en el plato giratorio puede conducir a una rápida ("rebote") del estado de identificación del sensor, que ocurre especialmente a velocidades rotativas lentas y no puede ser suprimida por la calibración. Este hematoma conduce a mediciones falsificadas y para evitarlas, existen la siguiente configuración.
El umbral deprimente de debounce_threshold especifica el tiempo mínimo en milisegundos entre la caída y el aumento posterior del flanco. Solo si el tiempo medido está entre los dos flancos por encima del valor configurado es el sensor que se activa en cuenta. Este tipo de depresión funciona cuando se usa la señal de entrada digital y analógica del sensor infrarrojo.

Los dos valores de compensación off_tolerance y on_tolerance se pueden configurar para usar una característica de histéresis para la detección del área marcada en el plato giratorio a través de la señal analógica. Esto compensa un "temblor" de la señal analógica y, por lo tanto, minimiza un posible hematoma del estado de identificación para el área marcada en el plato giratorio. Este tipo de depresión solo funciona cuando se usa la señal de entrada analógica del sensor infrarrojo.

Con una configuración hábil de la actualización de intervalo de update_interval y el número de muestreo por actualización ( samples ) para el sensor analógico analog_input , la curva de la señal analógica se puede suavizar hasta ahora que las fluctuaciones a corto plazo se eliminan. Sin embargo, debe tenerse en cuenta que los intervalos de actualización demasiado grandes pueden conducir al hecho de que las revoluciones individuales ya no se reconocen a velocidades de giro muy altas, ya que el tiempo entre el aumento y el flanco de caída posterior es más pequeño que el intervalo de actualización establecido. Este tipo de depresión también solo funciona cuando se usa la señal de entrada analógica del sensor infrarrojo.
Para compensar el estado del medidor en el componente Ferraris con el medidor real del medidor de corriente Ferraris, el valor del sensor del medidor de consumo se puede sobrescribir explícitamente. Para este propósito, los dos ferraris.set_energy_meter y ferraris.set_rotation_counter .
Consejo
Por lo general, solo es necesario una de las dos acciones, dependiendo de si desea poner el medidor en horas de kilovatios o en número de revoluciones.
Dependiendo de si la interfaz de usuario debe manejar la configuración del nivel del medidor o automáticamente a través de automatidades y scripts, las acciones se pueden usar de diferentes maneras. A continuación se describen dos posibles ejemplos de aplicaciones, pero hay otras opciones que no se describen aquí.
Para esto, por ejemplo, se llevan a cabo los siguientes pasos de configuración (en este ejemplo para establecer el soporte del medidor como un valor de kilovatio):
number :
- platform : template
id : target_energy_value
name : Manueller Zählerstand
icon : mdi:counter
unit_of_measurement : kWh
device_class : energy
entity_category : config
mode : box
optimistic : true
min_value : 0
max_value : 1000000
step : 0.01 button :
- platform : template
name : Verbrauchszähler überschreiben
icon : mdi:download
entity_category : config
on_press :
- ferraris.set_energy_meter :
id : ferraris_meter
value : !lambda |-
float val = id(target_energy_value).state;
return (val >= 0) ? val : 0; Para esto, por ejemplo, se llevan a cabo los siguientes pasos de configuración:
ferraris.set_energy_meter ). api :
# ...
actions :
- action : set_energy_meter
variables :
target_value : float
then :
- ferraris.set_energy_meter :
id : ferraris_meter
value : !lambda |-
return (target_value >= 0)
? target_value
: 0;- id : ' 1234567890 '
alias : Zurücksetzen des Verbrauchszählers
trigger :
- platform : time
at : 00:00:00
condition :
- condition : template
value_template : ' {{ now().day == 1 }} '
action :
- action : esphome.ferraris_meter_set_energy_meter
data :
target_value : 0
mode : singlePara no reducir la vida útil de la memoria flash en el microcontrolador ESP, el componente Ferraris no guarda ningún dato de manera persistente en el flash. Como resultado, primero no puede recordar el estado del medidor sobre un reinicio del microcontrolador y el mostrador comienza a contar a 0 kWh en cada barco. Entonces, después de cada reinicio, tendría que sobrescribir manualmente la escala del medidor mediante un valor leído en el medidor de corriente Ferraris. Dado que esto no es muy amigo del usuario, existe la posibilidad de persistir el estado del último metro en el asistente de origen y transferirlo al arrancar el microcontrolador.
Para que esto funcione, los siguientes pasos de configuración deben llevarse a cabo, por ejemplo:
input_number.stromzaehler_letzter_wert ). number :
- platform : homeassistant
id : last_energy_value
entity_id : input_number.stromzaehler_letzter_wertenergy_start_value se refiere al componente número bajo 2. ferraris :
# ...
energy_start_value : last_energy_value- id : ' 1234567890 '
alias : Aktualisierung Verbrauchszähler-Cache
trigger :
- platform : state
entity_id :
- sensor.ferraris_meter_verbrauchszaehler
condition : []
action :
- action : input_number.set_value
target :
entity_id : input_number.stromzaehler_letzter_wert
data :
value : ' {{ states(trigger.entity_id) }} '
mode : singleenergy_meter en el archivo de configuración YAML, que actualiza el componente numérico en 2. Sin embargo, esto extiende el tiempo de procesamiento por revolución en el microcontrolador y puede conducir al hecho de que las rondas individuales del toque giratorio no se registran en el caso de un consumo de energía muy alto (y por lo tanto, muy altas velocidades giratorias). Por lo tanto, recomiendo la variante con la automatización en el asistente de inicio.Ferraris Meter es un componente de escoma para crear un firmware ESP que utiliza un microcontrolador ESP y un sensor infrarrojo el número de rotaciones y la velocidad de la gimnasia de un medidor de electricidad de Ferraris analógico y para calcular el consumo de electricidad actual y la lectura del medidor. El valor de tesis se puede enviar a una búsqueda de software de automatización de inicio como asistente de inicio para su posterior procesamiento.
El software (incluida la documentación con la configuración de hardware de ejemplo) se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de la mercancía, la aptitud para un propósito particular y la no infracción. En ningún caso, los autores o titulares de derechos de autor serán liquidantes por cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, derivado, de o en relación con el uso u otros tratos en el software.
En el lado del hardware, solo se solicita un microcontrolador ESP (por ejemplo, ESP8266 o ESP32, incluida la fuente de alimentación) y un sensor infrarrojo (por ejemplo, TCRT5000). Un microcontrolador ESP8266 está completamente sufrido por la funcionalidad pura del medidor Ferraris. Para el sensor infrarrojo, hay un módulo de ruptura basado en TCRT5000 preparado con voltaje de entrada de 3.3V-5V disponible, que, por lo tanto, tienen una resistencia ajustable (potenciómetro) para calibrar la salida digital del sensor. Los módulos de tesis TCRT5000 tienen 4 pines: VCC y GND para la fuente de alimentación del chip del sensor, así como una salida digital D0 y una salida analógica A0.
Colocar el sensor en la placa de cubierta del medidor de electricidad Ferraris requiere un poco de habilidad y trabajo de precisión. El par transmisor/receptor infrarrojo del sensor debe alinearse centralmente por encima del plato giratorio con precisión milimétrica y apuntar en línea recta hasta el plato giratorio.
El componente del medidor Ferraris básicamente admite las variantes de seguimiento de seguimiento:
Para construir un firmware de Esfomo, debe criar un archivo de configuración basado en YAML. Puede usar uno de los archivos de configuración de ejemplo probados en este repositorio como punto de partida y adaptarlo a sus necesidades.
En principio, hay dos formas de construir el firmware de escenuras:
El método que debe elegir depende de cuán familiarizado esté con ESPHOME y si prefiere trabajar con una interfaz gráfica de usuario o la línea de comando. Además, el rendimiento de los hosts en los que está construyendo el firmware podría desempeñar un papel en la velocidad del proceso.
nota
No es necesario desembolsar este repositorio y hacer las adaptaciones a la configuración de ejemplo directamente dentro del repositorio bifurcado. En su lugar, es suficiente guardar y adaptar la configuración de ejemplo localmente o almacenarla en su host de asistente de inicio (si desea construir el firmware de Esfomo con el complemento del compilador de dispositivos de escoma).
Las siguientes secciones describen los componentes más notables contenidos en el archivo de configuración del firmware.
El componente Ferraris es esencial y debe agregarse para usar sus sensores.
Como este es un componente personalizado que no forma parte del escoma, debe importarse explícitamente. La forma más fácil es cargar el componente directamente de este repositorio.
external_components :
- source : github://jensrossbach/esphome-ferraris-meter
components : [ferraris] Consejo
En el ejemplo anterior, se carga la versión más reciente del componente desde la rama main del repositorio. Sin embargo, recomiendo usar un número de versión para referirse a una versión lanzada para tener más control sobre qué versión de software se usa y poder reaccionar mejor a "romper los cambios". Vea la configuración de ejemplo de cómo se puede hacer esto.
Se pueden configurar los siguientes elementos de configuración genérica:
| opción | Tipo | Requerido | por defecto | Descripción |
|---|---|---|---|---|
id | IDENTIFICACIÓN | No 1 | - | Instancia de componente de Ferraris |
digital_input | Alfiler | Si 2 | - | Pin GPIO al que está conectada la salida digital de los módulos TCRT5000 |
analog_input | IDENTIFICACIÓN | Si 2 | - | Sensor ADC que lee el pin conectado a la salida analógica de los módulos TCRT5000 |
analog_threshold | Número / ID 3 | NO | 50 | Valor umbral para la detección de rotaciones a través de la entrada analógica |
off_tolerance | Número / ID 3 | NO | 0 | Compensación negativa al umbral analógico para el borde de caída, consulte la sección Desmontaje para más detalles |
on_tolerance | Número / ID 3 | NO | 0 | Compensación positiva al umbral analógico para el borde ascendente, consulte la sección Desmontaje para más detalles |
rotations_per_kwh | Número | NO | 75 | Número de rotaciones del plato giratorio a través de KWH (ese valor generalmente se observa en el medidor de electricidad de Ferraris) |
debounce_threshold | Número / ID 3 | NO | 400 | Tiempo mínimo en milisegundos que caen y la posterior borde ascendente para tener en cuenta la rotación, consulte la sección DEBOONCE para obtener más información |
energy_start_value | IDENTIFICACIÓN | NO | - | Componente numérico cuyo valor se utilizará como valor inicial para el contador de energía en el momento del arranque |
1 Algunos casos de uso requieren la id del elemento de configuración.
2 Solo se solicita uno de digital_input o analog_input , dependiendo de la variante de configuración de hardware.
3 Los elementos de configuración analog_threshold , off_tolerance , on_tolerance y debounce_threshold esperan un número estático o la ID en un componente numérico. Este último permite la configuración del valor a través de la interfaz de usuario (por ejemplo, utilizando un número de plantilla).
ferraris :
id : ferraris_meter
digital_input : GPIO4
rotations_per_kwh : 75
debounce_threshold : 400
energy_start_value : last_energy_valueSe requiere al componente API si el ESP se integrará en el Asistente de Inicio. Para el caso de que se utilizará un software alternativo de automatización del hogar, se debe agregar un componente MQTT. Sin embargo, ciertos mecanismos se buscan en sobrescribir manualmente el medidor de energía o restaurar la lectura del último metro después de un reinicio (el lago a continuación para más detalles) quiere que posiblemente ya no funcione.
Vea el siguiente ejemplo de la integración en el asistente de inicio (con API cifrada):
api :
encryption :
key : !secret ha_api_keyY a continuación para el ejemplo de uso con un software alternativo de automatización del hogar a través de MQTT:
mqtt :
broker : 10.0.0.2
username : !secret mqtt_user
password : !secret mqtt_passwordDebe estar presente un componente wifi, ya que de lo contrario los valores del sensor no se pueden transmitir fácilmente a otra computadora.
wifi :
ssid : !secret wifi_ssid
password : !secret wifi_passwordEl componente Ferraris proporciona sensores primarios para exponer los valores de consumo calculados, así como los sensores de diagnóstico para el modo de calibración. Todos los sensores son opcionales y se pueden omitir si no es necesario.
Se pueden configurar los siguientes sensores primarios:
| sensor | Tipo | Clase | Clase estatal | Unidad | Descripción |
|---|---|---|---|---|---|
power_consumption | numérico | power | measurement | W | Consumo de energía actual |
energy_meter | numérico | energy | total_increasing | WH | Consumo total de energía (lectura del medidor) |
Para obtener opciones de configuración detalladas de cada elemento, consulte la configuración del componente del sensor de escoma.
sensor :
- platform : ferraris
power_consumption :
name : Power consumption
energy_meter :
name : Meter reading Se pueden configurar los siguientes sensores de diagnóstico:
| sensor | Tipo | Descripción |
|---|---|---|
rotation_indicator | binario | Indica si la marca en el plato giratorio está frente al sensor infrarrojo (solo funciona en modo de calibración) |
Para obtener opciones de configuración detalladas de cada elemento, consulte la configuración del componente del sensor binario de Esfomo.
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Rotation indicator Para fines de diagnóstico, el componente Ferraris proporciona un interruptor con el nombre calibration_mode . Se puede utilizar para establecer el componente en la moda de calibración (consulte la calibración de la sección para obtener más información).
switch :
- platform : ferraris
calibration_mode :
name : Calibration modeEl componente Ferraris proporciona dos acciones para establecer la lectura del medidor de energía y el contador de rotación.
| Acción | Descripción |
|---|---|
ferraris.set_energy_meter | Establece la lectura del medidor de energía en el valor proporcionado |
| parámetro | Tipo | Rango | Descripción |
|---|---|---|---|
value | float | > = 0 | Valor objetivo para la lectura del medidor de energía en las horas de kilovatios (kWh) |
nota
Aunque el sensor para la lectura del medidor actual tiene la unidad WH (horas de vatios) , la acción para sobrevivir a la lectura del medidor tiene la unidad KWH (kilovatios horas) , ya que los medidores de electricidad de Ferraris analógicos generalmente muestran la lectura del medidor en esta unidad.
| Acción | Descripción |
|---|---|
ferraris.set_rotation_counter | Establece el contador de rotación al valor proporcionado |
nota
La acción para establecer la lectura del medidor de energía indirectamente, por lo que el contador de rotación como componente Ferraris funciona internamente con rotaciones y no con horas de vatio o kilovatios.
| parámetro | Tipo | Rango | Descripción |
|---|---|---|---|
value | uint64 | > = 0 | Valor objetivo para el contador de rotación en número de rotaciones |
Esta sección describe varios ejemplos de uso para el componente Ferraris.
En esta variante, la salida digital del sensor infrarrojo se usa para detectar rotaciones del plato giratorio. No se requiere la salida analógica, los otros pines deben estar conectados a los pines correspondientes del microcontrolador. La salida de 3.3V del ESP debe usarse para VCC y la salida digital D0 debe conectarse a un pin GPIO libre (por ejemplo, GPIO4, correspondiente al pin D2 en el D1 Mini).
El siguiente esquema de la placa de paneles muestra una configuración de prueba de ejemplo utilizando una placa de desarrollo ESP8266 D1 D1 como microcontrolador.

La señal de salida digital del sensor infrarrojo debe calibrarse a través del potenciómetro usando un sillón; Los dos LED verdes en la parte posterior del sensor ayudan con esto. El LED de la mano derecha se ilumina continuamente cuando el sensor se suministra con energía. El LED de la izquierda se ilumina siempre que no se haya detectado ningún "obstáculo" y salga cuando se haya interrumpido el reflejo. Este último es el estado cuando la marca en el tocadiscos del medidor de electricidad de Ferraris se mueve frente al sensor. Por lo tanto, el ajuste de la eliminación del potenciómetro para que el LED izquierdo se ilumine cuando el marcador no está en el rango del par transmisor/receptor infrarrojo y sale cuando el marcador se mueve frente a él. Esta es solo una gama muy pequeña y puede ser un poco difícil encontrar esta configuración. To Further Assist with this Process, the Calibration Mode Can Be Enabled In The Ferraris Meter Firmware, See Section Calibration for Details.
Consejo
In case you are unable to find an appropriate and working adjustment of the potentiometer, you can alternatively use the analog output of the infrared sensor, see next section.
On the software side, the pin which is connected to the digital output of the TCRT5000 module has to be configured for the Ferraris component in the YAML configuration file:
ferraris :
id : ferraris_meter
digital_input : GPIO4
# ...Example configuration file: ferraris_meter_digital.yaml
In this variant, the analog output of the infrared sensor is used to detect rotations of the turntable. The digital output is not required, the other pins must be connected to the corresponding pins of the microcontroller. The 3.3V output of the ESP should be used for VCC and the analog output A0 must be connected to a free ADC pin (eg GPIO17, corresponding to pin A0 on the D1 Mini).
The following breadboard schematic shows an example test setup using an ESP8266 D1 Mini development board as microcontroller.

A calibration using the potentiometer on the TCRT5000 module is not needed. Instead, the threshold for the analog input and optionally the offset values for a hysteresis curve must be configured on the software side (see also section Debouncing further down). Here as well, the calibration mode of the Ferraris component could be helpful, see section calibration for details.
The threshold value analog_threshold controls when the analog signal is treated as "detected" (marked area of the turntable) and when it is treated as "not detected" (unmarked area of the turntable). If the value from the ADC sensor analog_input is greater than the threshold value, the marking is considered detected; if it is smaller than or equal to the threshold value, it is considered not detected.

On the software side, for instance, the following configuration steps must now be carried out:
sensor :
- platform : adc
id : adc_input
pin : GPIO17
internal : true
raw : true
samples : 10
update_interval : 50ms number :
- platform : template
id : adc_threshold
name : ADC threshold
icon : mdi:speedometer-slow
entity_category : config
mode : box
optimistic : true
initial_value : 50
min_value : 0
max_value : 1000
step : 1analog_input refers to the ADC sensor created under 1. and the entry analog_threshold refers to the number component created under 2. ferraris :
id : ferraris_meter
analog_input : adc_input
analog_threshold : adc_threshold
# ...analog_threshold if the threshold value is already known and no longer needs to be configured/changed. In this case, step 2 can be omitted. ferraris :
# ...
analog_threshold : 45
# ... The configuration for the offset values off_tolerance and on_tolerance is very similar to the configuration of analog_threshold and therefore not explicitly shown in above example.
Example configuration file: ferraris_meter_analog.yaml
It is also possible to read more than one Ferraris electricity meter with a single ESP microcontroller. This requires multiple infrared sensors / TCRT5000 modules and additional free GPIO pins on the microcontroller. The TCRT5000 modules have to be connected to the voltage source of the ESP microcontroller via VCC and GND as described in the section Hardware Setup and the D0 outputs have to be connected to free GPIO pins on the ESP board.
nota
Theoretically, the variant with the analog output of the infrared sensor can also be used, but the ADC-capable pins on the ESP microcontrollers are stronger limited than the pure digital pins. Especially the ESP8266, which has a single ADC only, would therefore not be suitable to support multiple infrared sensors via their analog outputs.
The following breadboard schematic shows an example of an example test setup with two TCRT5000 modules connected to an ESP8266 D1 Mini.

However, bear in mind that each additional infrared sensor increases the load on the microcontroller and brings the hardware closer to its limits, especially with very high rotation speeds of the turntables.
On the software side, for instance, the following configuration steps must now be carried out:
ferraris :
- id : ferraris_meter_1
digital_input : GPIO4
# ...
- id : ferraris_meter_2
digital_input : GPIO5
# ...ferraris_id configuration entry. sensor :
- platform : ferraris
ferraris_id : ferraris_meter_1
power_consumption :
name : Power consumption 1
energy_meter :
name : Meter reading 1
- platform : ferraris
ferraris_id : ferraris_meter_2
power_consumption :
name : Power consumption 2
energy_meter :
name : Meter reading 2
binary_sensor :
- platform : ferraris
ferraris_id : ferraris_meter_1
rotation_indicator :
name : Rotation indicator 1
- platform : ferraris
ferraris_id : ferraris_meter_2
rotation_indicator :
name : Rotation indicator 2
switch :
- platform : ferraris
ferraris_id : ferraris_meter_1
calibration_mode :
name : Calibration mode 1
- platform : ferraris
ferraris_id : ferraris_meter_2
calibration_mode :
name : Calibration mode 2Example configuration file: ferraris_meter_multi.yaml
During the positioning and alignment of the infrared sensor as well as the adjustment of the potentiometer or the analog threshold, it makes little sense to measure the rotations of the Ferraris electricity meter's turntable and calculate the consumption values, as the changes in state of the sensor do not correspond to the actual detection of the mark on the turntable. It is therefore possible to set the Ferraris component to calibration mode by turning on the calibration mode switch (see Actors). As long as the calibration mode is activated, no calculation of the consumption data is performed and the corresponding sensors (see Primary Sensors) are not changed. Instead, the diagnostic sensor for the rotation indication (see Diagnostic Sensors) is active and can additionally be used to assist with correct alignment. The sensor has the on state when the marker on the turntable is detected and the off state when it is not detected.
To be able to use the calibration mode, the components calibration_mode and rotation_indicator must be configured in the YAML file:
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Rotation indicator
switch :
- platform : ferraris
calibration_mode :
name : Calibration modeThe transition from unmarked to marked area and vice versa on the turntable can lead to a rapid back and forth jump ("bouncing") in the detection state of the sensor, which occurs particularly at slow rotation speeds and cannot be completely suppressed by the calibration. This bouncing of the state leads to falsified measured values and to avoid this, the following settings can be applied.
The debounce threshold value debounce_threshold specifies the minimum time in milliseconds between falling and subsequent rising edge. The trigger from the sensor is only taken into account if the measured time between the two edges is above the configured value. This type of debouncing can be applied to both the variant using the digital as well as the analog input signal of the infrared sensor.

The two offset values off_tolerance and on_tolerance can be configured to use a hysteresis curve for the detection of the marked area on the turntable via the analog signal. This compensates the jitter of the analog signal and thus minimizes any possible bouncing of the detection status for the marked area on the turntable. This type of debouncing only works when using the analog input signal of the infrared sensor.

By carefully configuring the update interval update_interval and the number of samples per update ( samples ) for the analog sensor analog_input , the curve of the analog signal can be smoothed to such an extent that short-term fluctuations are eliminated. However, bear in mind that excessive update intervals can lead to individual rotations no longer being detected at very high rotation speeds, as the time between the rising and subsequent falling edge is then shorter than the set update interval. Also this type of debouncing only works when using the analog input signal of the infrared sensor.
To synchronize the meter reading in the Ferraris component with the actual meter reading of the Ferraris electricity meter, the value of the energy meter sensor can be explicitly overwritten. The two actions ferraris.set_energy_meter and ferraris.set_rotation_counter (see Actions) are provided for this purpose.
Consejo
Usually, you need to use only one of the two actions, depending on whether you want to set the meter reading in kilowatt hours or in number of rotations.
The actions can be used in different ways, depending on whether the energy meter reading is to be set manually via the user interface or trigger-based via automations and scripts. Two possible usage examples are described below, but there are more possibilities existing which are not described here.
For instance, the following configuration steps are carried out (in this example to overwrite the energy meter with a kilowatt hours value):
number :
- platform : template
id : target_energy_value
name : Manual meter reading
icon : mdi:counter
unit_of_measurement : kWh
device_class : energy
entity_category : config
mode : box
optimistic : true
min_value : 0
max_value : 1000000
step : 0.01 button :
- platform : template
name : Overwrite meter reading
icon : mdi:download
entity_category : config
on_press :
- ferraris.set_energy_meter :
id : ferraris_meter
value : !lambda |-
float val = id(target_energy_value).state;
return (val >= 0) ? val : 0; For instance, the following configuration steps are carried out:
ferraris.set_energy_meter is used). api :
# ...
actions :
- action : set_energy_meter
variables :
target_value : float
then :
- ferraris.set_energy_meter :
id : ferraris_meter
value : !lambda |-
return (target_value >= 0)
? target_value
: 0;- id : ' 1234567890 '
alias : Reset energy meter reading
trigger :
- platform : time
at : 00:00:00
condition :
- condition : template
value_template : ' {{ now().day == 1 }} '
action :
- action : esphome.ferraris_meter_set_energy_meter
data :
target_value : 0
mode : singleIn order not to reduce the service life of the flash memory on the ESP microcontroller, the Ferraris component does not store any data persistently in the flash. As a result, it cannot remember the meter reading after a restart of the microcontroller and the meter starts counting at 0 kWh with every boot process. Therefore, the meter reading would have to be overwritten manually with a value read from the Ferraris electricity meter after each restart. As this is not very user-friendly, there is the option of persisting the last meter reading in Home Assistant and transferring it to the microcontroller when booting.
For this to work, the following configuration steps must be carried out:
input_number.electricity_meter_last_value ). number :
- platform : homeassistant
id : last_energy_value
entity_id : input_number.electricity_meter_last_valueenergy_start_value refers to the number component created under 2. ferraris :
# ...
energy_start_value : last_energy_value- id : ' 1234567890 '
alias : Update meter reading cache
trigger :
- platform : state
entity_id :
- sensor.ferraris_meter_energy
condition : []
action :
- action : input_number.set_value
target :
entity_id : input_number.electricity_meter_last_value
data :
value : ' {{ states(trigger.entity_id) }} '
mode : singleenergy_meter in the YAML configuration file which updates the number component created under 2 directly from ESPHome. However, this leads to a longer processing time per rotation in the microcontroller and may result in individual rotations of the turntable not being detected in the event of very high power consumption (and hence, very high rotation speeds). Therefore, I recommend the variant with the automation in Home Assistant.