observação
Esta é a versão alemã, para a versão em inglês, role para baixo ou clique aqui.
O Ferraris Meter é um componente do Esfome para criar firmware ESP, que pode usar um microcontrolador ESP e sensor infravermelho para determinar a velocidade e as revoluções da plataforma giratória de um medidor de fluxo de Ferraris analógico e, a partir disso, pode calcular o consumo de eletricidade atual e o estado do medidor. Esses valores podem ser enviados ao software de automação residencial, como assistente de casa, para processamento adicional.
O software (incluindo a documentação com estruturas de amostra de hardware) é fornecido sem inadimplência e sem garantia expressa ou tácita, incluindo, entre outros, para garantir o acesso ao mercado, a adequação a uma finalidade específica e a não violação dos direitos de terceiros. Os autores ou proprietários de direitos autorais não são de forma alguma responsáveis por reivindicações, danos ou outras obrigações, seja em um processo de contrato ou responsabilidade, um ato não autorizado ou de outra forma, que surgem de ou em conexão com o software ou uso ou outras lojas com o software.
Somente um microcontrolador ESP (por exemplo, ESP8266 ou ESP32, incluindo suprimento de tensão) e um sensor infravermelho (por exemplo, TCRT5000). Para a funcionalidade pura do medidor Ferraris, um ESP8266 é completamente suficiente como microcontrolador. Para o sensor infravermelho, existem módulos de interrupção baseados no TCRT5000 com tensão de entrada de 3,3V-5V, que também possui uma resistência controlável (potenciômetro) para calibrar a saída digital. Esses módulos TCRT5000 possuem 4 pinos-vcc e gnd para a fonte de alimentação do chip do sensor, bem como uma saída digital D0 e uma saída analógica A0.
Ao colocar o sensor na placa de cobertura do medidor de corrente da Ferraris, é necessário um pouco de habilidade e precisão. O transmissor de infravermelho/receptor do sensor deve estar alinhado no meio do milímetro preciso sobre a plataforma giratória e apontado diretamente na plataforma giratória.
Em princípio, o componente Ferraris Meter suporta as seguintes variantes de desenvolvimento:
Para criar firmware Esphome, um arquivo de configuração baseado em YAML deve ser criado. Você pode usar um dos arquivos de configuração de amostra fornecidos neste repositório como ponto de partida e adaptá -los às suas necessidades.
Em princípio, existem duas maneiras de construir o firmware do Esphome:
Qual método você deve escolher depende de como você é confiável com o Esfome e se prefere trabalhar com uma interface gráfica do usuário ou com a linha de comando. Além disso, o desempenho do host no qual você constrói o firmware pode desempenhar um papel para acelerar o processo.
observação
Não é necessário copiar este repositório ("Forken") e adaptar -se à configuração da amostra no repositório copiado. Em vez disso, é suficiente salvar e adaptar a configuração de amostra ou retirar a configuração adaptada no seu host de assistente doméstico (se a criação do firmware do Esfome for desejada usando o complemento do compilador de dispositivos Esphome).
As seções a seguir descrevem os componentes mais importantes incluídos no arquivo de configuração de firmware.
O componente Ferraris é essencial e deve ser adicionado para usar seus sensores.
Como é um componente personalizado que não faz parte do Esfome, deve ser importado explicitamente. A maneira mais fácil é carregar o componente diretamente deste repositório.
external_components :
- source : github://jensrossbach/esphome-ferraris-meter
components : [ferraris] Dica
No exemplo acima, o status mais recente do componente é convidado a partir da filial main do repositorie. No entanto, eu recomendo me referir a um suporte liberado por meio de um número de versão para ter mais controle sobre qual suporte de software é usado e para poder reagir melhor a "mudanças de interrupção". Veja a configuração de amostra como isso pode ser feito.
As seguintes configurações genéricas podem ser configuradas:
| opção | tipo | Necessário | padrão | Descrição |
|---|---|---|---|---|
id | EU IA | Nº 1 | - | Instância do componente Ferraris |
digital_input | Alfinete | Sim 2 | - | GPIO pino com o qual a saída digital do módulo TCRT5000 está conectada |
analog_input | EU IA | Sim 2 | - | Sensor ADC que lê o pino conectado à saída analógica do módulo TCRT5000 |
analog_threshold | Número / id 3 | não | 50 | Limiar para a detecção de uma revolução através da entrada analógica |
off_tolerance | Número / id 3 | não | 0 | Deslocamento negativo no valor do limiar analógico para o flanco em queda, consulte a seção deprimindo para obter detalhes |
on_tolerance | Número / id 3 | não | 0 | Deslocamento positivo no valor do limiar analógico para o flanco em ascensão, consulte a seção deprimindo para obter detalhes |
rotations_per_kwh | Número | não | 75 | Número de revoluções da plataforma giratória por kWh (o valor é observado no medidor de corrente da Ferraris) |
debounce_threshold | Número / id 3 | não | 400 | Tempo mínimo em milissegundos entre queda e subsequente flanco crescente para que a revolução seja levada em consideração, consulte a seção depreciando detalhes para obter detalhes |
energy_start_value | EU IA | não | - | Componentes numéricos cujo valor é usado na inicialização como um valor inicial para o medidor de consumo |
1 Certos aplicativos requerem o id do elemento de configuração.
2 Somente um dos dois elementos de configuração - digital_input ou analog_input - é necessário, dependendo da variante de desenvolvimento de hardware.
3 Os elementos de configuração analog_threshold , off_tolerance , on_tolerance e debounce_threshold esperam um número fixo ou o ID de um componente numérico. O último permite que o valor seja configurado através da interface do usuário (por exemplo, usando um componente de número de modelo).
ferraris :
id : ferraris_meter
digital_input : GPIO4
rotations_per_kwh : 75
debounce_threshold : 400
energy_start_value : last_energy_valueUm componente da API é necessário se o ESP for integrado ao assistente doméstico. No caso de um software alternativo de automação residencial ser usado, um componente MQTT deve ser adicionado. No entanto, certos mecanismos, como substituir o suporte do medidor ou a restauração da última escala de metros após uma reinicialização (veja abaixo os detalhes) e não funcionam mais.
Abaixo está um exemplo de integração com assistente doméstico (e API criptografada):
api :
encryption :
key : !secret ha_api_keyE aqui está um exemplo de uso com um software alternativo de automação residencial usando o MQTT:
mqtt :
broker : 10.0.0.2
username : !secret mqtt_user
password : !secret mqtt_passwordUm componente WiFi deve estar disponível, caso contrário, os valores do sensor não podem ser facilmente transferidos para outro dispositivo.
wifi :
ssid : !secret wifi_ssid
password : !secret wifi_passwordO componente Ferraris possui sensores primários para produzir os valores de consumo calculados e os sensores de diagnóstico para o modo de calibração. Todos os sensores são opcionais e podem ser deixados de fora, se não forem necessários.
Os seguintes sensores primários podem ser configurados:
| sensor | tipo | Classe de dispositivo | Classe estadual | Unidade | Descrição |
|---|---|---|---|---|---|
power_consumption | numérico | power | measurement | C | Consumo de energia atual |
energy_meter | numérico | energy | total_increasing | WH | Consumo de corrente total (estado de eletricidade/estado do medidor) |
Você pode encontrar informações detalhadas sobre as opções de configuração dos elementos individuais na documentação dos componentes do sensor do Esfome.
sensor :
- platform : ferraris
power_consumption :
name : Momentanverbrauch
energy_meter :
name : Verbrauchszähler Os seguintes sensores de diagnóstico podem ser configurados:
| sensor | tipo | Descrição |
|---|---|---|
rotation_indicator | binário | Mostra se a marcação na plataforma giratória está apenas em frente ao sensor infravermelho (funciona apenas no modo de calibração) |
Você pode encontrar informações detalhadas sobre as opções de configuração dos elementos individuais na documentação dos componentes do sensor binário do Esfome.
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Umdrehungsindikator Para fins de diagnóstico, o componente Ferraris possui um interruptor. Isso possui o nome calibration_mode e pode ser usado para colocar o componente no modo de calibração (consulte a calibração da seção para obter mais informações).
switch :
- platform : ferraris
calibration_mode :
name : KalibrierungsmodusO componente Ferraris fornece duas ações para definir a escala do medidor e definir o contador de transição.
| Ação | Descrição |
|---|---|
ferraris.set_energy_meter | Coloca o estado do medidor no valor especificado |
| parâmetro | tipo | Área | Descrição |
|---|---|---|---|
value | float | > = 0 | Valor -alvo para o estado do medidor em quilowatt horas (kWh) |
observação
Embora o sensor para o estado do medidor atual tenha a unidade WH (Horas de Watt) , a ação para substituir o suporte do medidor usa a unidade KWh (Kilowatt Hours) , uma vez que o medidor de corrente analógico das Ferraris geralmente também exibe o medidor.
| Ação | Descrição |
|---|---|
ferraris.set_rotation_counter | Coloca o contador giratório no valor especificado |
observação
A ação para definir o suporte do medidor indiretamente também define o contador rotativo, uma vez que o componente Ferraris trabalha internamente com revoluções e não com horas de watt ou quilowatt horas.
| parâmetro | tipo | Área | Descrição |
|---|---|---|---|
value | uint64 | > = 0 | Valor -alvo para o contador de rotatividade nas revoluções numéricas |
Vários exemplos de aplicação para o componente Ferraris são descritos nesta seção.
Nesta variante, a saída digital do sensor infravermelho é usada para identificar revoluções da plataforma giratória. A saída analógica não é necessária, os outros pinos devem ser conectados aos pinos correspondentes do microcontrolador. Para o VCC, a saída de 3,3V dos ESPs deve ser usada e a saída digital D0 deve ser conectada a um pino GPIO livre (por exemplo, GPIO4, corresponde ao pino D2 no mini D1).
O diagrama de circuito de plug-in a seguir mostra um exemplo de uma configuração experimental com uma placa de desenvolvimento Mini ESP8266 D1 como microcontrolador.

Com a ajuda de uma chave de fenda, o sinal de saída digital deve ser calibrado através do potenciômetro. Os dois LEDs verdes na parte de trás do sensor ajudam. O LED direito brilha permanentemente quando o sensor é fornecido com eletricidade. O LED esquerdo brilha, desde que nenhum "obstáculo" tenha sido reconhecido e expira quando a reflexão foi interrompida. Este último é a condição quando a marcação na plataforma giratória do medidor de corrente da Ferraris vaga na frente do sensor. O potenciômetro deve, portanto, ser definido para que o LED esquerdo ainda brilha quando a marcação não estiver na área do casal de remetente/destinatário infravermelho assim que o marcador empurra na frente dele. Esta é apenas uma área muito pequena e pode ser um pouco difícil encontrar essa configuração. Para obter suporte adicional para esse processo, o modo de calibração pode ser ativado no firmware do medidor Ferraris, consulte a seção de calibração para obter detalhes.
Dica
Se não for possível encontrar uma configuração adequada e funcional para o potenciômetro, a saída analógica do sensor infravermelho pode ser usada alternativamente, consulte a próxima seção.
O lado do software deve ser configurado para o componente Ferraris no arquivo de configuração PIN YAML, que está conectado à saída digital do módulo TCRT5000:
ferraris :
id : ferraris_meter
digital_input : GPIO4
# ...Exemplo Configuração: Ferraris_Meter_Digital.yaml
Nesta variante, a saída analógica do sensor infravermelho é usada para identificar revoluções da plataforma giratória. A saída digital não é necessária, os outros pinos devem ser conectados aos pinos correspondentes do microcontrolador. Para o VCC, a saída de 3,3V dos ESPs deve ser usada e a saída analógica A0 deve ser conectada a um pino ADC livre (por exemplo, GPIO17, corresponde ao pino A0 no mini D1).
O diagrama de circuito de plug-in a seguir mostra um exemplo de uma configuração experimental com uma placa de desenvolvimento Mini ESP8266 D1 como microcontrolador.

A calibração por meio do potenciômetro no módulo TCRT5000 não é mais necessária; em vez disso, o lado do software deve ser configurado para a entrada analógica e, opcionalmente, os valores de deslocamento para uma característica de histerese (consulte também a seção deprimindo abaixo). Aqui também, o modo de calibração do componente Ferraris pode ajudar, consulte a seção de calibração para obter detalhes.
O limiar analog_threshold controla quando o sinal analógico é tratado como "reconhecido" (área marcada da plataforma giratória) e quando tratada como "não reconhecida" (não marcado a área da plataforma giratória). Se o valor do sensor ADC for maior que o analog_input limite, a marcação será considerada reconhecida, é menor ou igual, ele não será reconhecido.

As seguintes etapas de configuração agora devem ser realizadas, por exemplo, o lado do 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 número criado em 2. ferraris :
id : ferraris_meter
analog_input : adc_input
analog_threshold : adc_threshold
# ...analog_threshold também pode ser especificado se o limite já for conhecido e não precisar mais ser configurado/alterado. Nesse caso, a etapa 2 pode ser omitida. ferraris :
# ...
analog_threshold : 45
# ... A configuração dos valores de deslocamento off_tolerance e on_tolerance é muito semelhante à configuração analog_threshold e, portanto, não foi mostrado explicitamente no exemplo acima.
Exemplo Configuração: Ferraris_Meter_analog.yaml
Também é possível ler mais de um contador de corrente da Ferraris com um único microcontrolador ESP. Para fazer isso, você precisa de mais sensores de infravermelho / módulos TCRT5000 e pinos GPIO gratuitos adicionais no microcontrolador. Como já descrito, os módulos TCRT5000 são conectados à fonte de tensão do microcontrolador ESP via VCC e GND e as saídas D0 estão conectadas à placa ESP com um pino GPIO gratuito.
observação
Em teoria, a variante também pode ser usada com a saída analógica do sensor infravermelho, mas os pinos compatíveis com ADC nos microcontroladores ESP são mais limitados que os pinos puramente digitais. Em particular, o ESP8266, que possui apenas um ADC, seria, portanto, inadequado para apoiar vários sensores de infravermelho por meio de suas saídas analógicas.
O diagrama de circuito de plug-in a seguir mostra um exemplo de configuração de teste com dois módulos TCRT5.000 conectados a um mini ESP8266 D1.

No entanto, deve -se ter em mente que cada sensor infravermelho adicional aumenta a carga no microcontrolador e, especialmente em velocidades muito altas das toca -discos, o hardware se aproxima de seus limites.
As seguintes etapas de configuração agora devem ser realizadas, por exemplo, o lado do 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 2Exemplo Configuração: Ferraris_Meter_Multi.yaml
Durante o posicionamento e alinhamento do sensor infravermelho, bem como o ajuste do potenciômetro ou o valor do limiar analógico, faz pouco sentido medir as revoluções da plataforma giratória do medidor de corrente da Ferraris e calcular o consumo, uma vez que as mudanças na condição do sensor não correspondem à detecção real da margem da margem da área. Portanto, existe a possibilidade de colocar o componente Ferraris no modo de calibração, ativando o comutador para o modo de calibração (consulte Atuadores). Enquanto o modo de calibração for ativado, nenhum cálculo dos dados de consumo é realizado e os sensores correspondentes (consulte os sensores primários) não serão alterados. Em vez disso, o sensor de diagnóstico para indicação rotativa (consulte Sensores de diagnóstico) está ativa e também pode ser usada para apoiar o alinhamento correto. O sensor está no on quando a marca foi reconhecida na plataforma giratória e off se nenhuma marcação foi reconhecida.
Para poder usar o modo de calibração, os componentes calibration_mode e rotation_indicator devem ser configurados no arquivo yaml:
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Umdrehungsindikator
switch :
- platform : ferraris
calibration_mode :
name : KalibrierungsmodusA transição da área não marcada para marcada e vice-versa na plataforma giratória pode levar a uma rápida frente e para trás ("saltando") do estado de identificação do sensor, que ocorre especialmente em velocidades rotativas lentas e não pode ser completamente suprimida pela calibração. Essa contusão leva a medições falsificadas e, para evitá -las, existem as seguintes configurações.
O limite deprimente de debounce_threshold especifica o tempo mínimo em milissegundos entre queda e subsequente flanco crescente. Somente se o tempo medido estiver entre os dois flancos acima do valor configurado, o sensor é acionado em conta. Esse tipo de depressão funciona ao usar o sinal de entrada digital e analógico do sensor infravermelho.

Os dois valores de deslocamento off_tolerance e on_tolerance podem ser configurados para usar uma característica de histerese para a detecção da área marcada na plataforma giratória através do sinal analógico. Isso compensa um "tremor" do sinal analógico e, portanto, minimiza uma possível contusão do estado de identificação para a área marcada na plataforma giratória. Esse tipo de depressão só funciona ao usar o sinal de entrada analógico do sensor infravermelho.

Com uma configuração hábil do intervalo de atualização update_interval e o número de amostragem por atualização ( samples ) para o sensor analógico analog_input , a curva do sinal analógico pode ser suavizada até agora que as flutuações de curto prazo são eliminadas. No entanto, deve -se ter em mente que intervalos de atualização muito grandes podem levar ao fato de que as revoluções individuais não são mais reconhecidas em velocidades de virada muito altas, pois o tempo entre o aumento e o flanco em queda subsequente é menor que o intervalo de atualização definido. Esse tipo de depressão também funciona apenas ao usar o sinal de entrada analógico do sensor infravermelho.
Para compensar o estado do medidor no componente Ferraris com o medidor real do medidor de corrente da Ferraris, o valor do sensor do medidor de consumo pode ser explicitamente substituído. Para esse fim, os dois ferraris.set_energy_meter e ferraris.set_rotation_counter .
Dica
Geralmente, apenas uma das duas ações é necessária, dependendo se você deseja colocar o medidor em quilowatt horas ou em número de revoluções.
Dependendo se a configuração do nível do medidor deve ser tratada pela interface do usuário ou automaticamente por meio de automações e scripts, as ações podem ser usadas de maneiras diferentes. Dois exemplos possíveis de aplicação são descritos abaixo, mas existem outras opções que não são descritas aqui.
Para isso, por exemplo, as seguintes etapas de configuração são realizadas (neste exemplo para definir o suporte do medidor como um valor de hora de quilowatt):
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 isso, por exemplo, são realizadas as seguintes etapas de configuração:
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 não reduzir a vida útil da memória flash no microcontrolador ESP, o componente Ferraris não economiza dados persistentemente no flash. Como resultado, ele não consegue primeiro se lembrar do estado do medidor sobre uma reinicialização do microcontrolador e o balcão começa a contar a 0 kwh em todos os barcos. Portanto, após cada reinicialização, você teria que substituir manualmente a escala do medidor por um valor lido no medidor de corrente da Ferraris. Como isso não é muito amigável, existe a possibilidade de persistir o último estado do metro no assistente doméstico e transferi -lo para ele ao inicializar o microcontrolador.
Para que isso funcione, as seguintes etapas de configuração devem ser realizadas, por exemplo:
input_number.stromzaehler_letzter_wert ). number :
- platform : homeassistant
id : last_energy_value
entity_id : input_number.stromzaehler_letzter_wertenergy_start_value refere -se ao componente número sob 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 no arquivo de configuração da YAML, que atualiza o componente numérico em 2. No entanto, isso estende o tempo de processamento por revolução no microcontrolador e pode levar ao fato de que as rodadas individuais da placa turística não são registradas no caso de consumo de energia muito alto (e, portanto, alto e, portanto, alto). Portanto, recomendo a variante com a automação no Assistente de casa.O Ferraris Meter é um componente do Esfome para criar um firmware ESP que usa um microcontrolador ESP e um sensor infravermelho o número de rotações e a velocidade da ginástica de um medidor de eletricidade da Ferraris analógico e para calcular o consumo atual de eletricidade e a leitura do medidor. O valor da tese pode ser enviado a uma pesquisa de software de automação residencial como assistente de casa para processamento adicional.
O software (incluindo a documentação com o exemplo de configuração de hardware) é fornecido "como está", sem garantia de qualquer tipo, expressa ou implícita, incluindo, entre outros, as garantias de mercadorias, adequação para uma finalidade específica e não innocramento. Em nenhum caso os autores ou detentores de direitos autorais serão fiéis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, de ou de conexão com ou de uso ou outras negociações no software.
No lado do hardware, apenas um microcontrolador ESP (por exemplo, ESP8266 ou ESP32, incluindo fonte de alimentação) e um sensor infravermelho (por exemplo, TCRT5000). Um microcontrolador ESP8266 é completamente sofado pela funcionalidade pura do medidor Ferraris. Para o sensor infravermelho, existem módulo de quebra baseado em TCRT5000 pronto com tensão de entrada de 3.3V-5V disponível, que, portanto, possui um resistor ajustável (potenciômetro) para calibrar a saída digital do sensor. Tese Os módulos TCRT5000 têm 4 pinos - VCC e GND para a fonte de alimentação do chip do sensor, bem como uma saída digital D0 e uma saída analógica A0.
Colocar o sensor na placa de cobertura do medidor de eletricidade da Ferraris requer um pouco de habilidade e trabalho de precisão. O par de transmissor/receptor infravermelho do sensor deve estar alinhado centralmente acima da plataforma giratória com precisão milimétrica e apontar em uma linha reta para a plataforma giratória.
O componente Ferraris Meter suporta basicamente as variantes de configuração a seguir:
Para criar um firmware do Esphome, você precisa criar um arquivo de configuração baseado em YAML. Você pode usar um dos arquivos de configuração de exemplo comprovado neste repositório como ponto de partida e adaptá -lo às suas necessidades.
Em princípio, existem duas maneiras de construir o firmware do Esphome:
Qual método você deve escolher depende de como você está familiarizado com o Esfome e se você prefere trabalhar com uma interface gráfica do usuário ou a linha de comando. Além disso, o desempenho dos hosts nos quais você está construindo o firmware pode desempenhar um papel em acelerar o processo.
observação
Não é necessário gastar este repositório e fazer as adaptações à configuração de exemplo diretamente dentro do repositório bifurcado. Em vez disso, é suficiente salvar e adaptar a configuração de exemplo localmente ou armazená-la no seu host de assistente doméstico (se você deseja criar o firmware Esphome com o complemento do compilador de dispositivos Esphome).
As seções a seguir descrevem os componentes mais notáveis contidos no arquivo de configuração do firmware.
O componente Ferraris é essencial e deve ser adicionado para usar seus sensores.
Como este é um componente personalizado que não faz parte do Esfome, ele deve ser importado explicitamente. A maneira mais fácil é carregar o componente diretamente deste repositório.
external_components :
- source : github://jensrossbach/esphome-ferraris-meter
components : [ferraris] Dica
No exemplo acima, a versão mais recente do componente da filial main do repositório é carregada. No entanto, recomendo o uso de um número de versão para consultar uma versão liberada para ter mais controle sobre qual versão do software é usada e poder reagir melhor a "interrupções interrompidas". Veja a configuração de exemplo de como isso pode ser feito.
Os seguintes itens de configuração genérica podem ser configurados:
| opção | Tipo | Obrigatório | padrão | Descrição |
|---|---|---|---|---|
id | EU IA | Nº 1 | - | Instância do componente Ferraris |
digital_input | Alfinete | Sim 2 | - | GPIO PIN ao qual a saída digital dos módulos TCRT5000 está conectada |
analog_input | EU IA | Sim 2 | - | Sensor ADC que lê o pino conectado à saída analógica dos módulos TCRT5000 |
analog_threshold | Número / id 3 | NÃO | 50 | Valor limite para a detecção de rotações através da entrada analógica |
off_tolerance | Número / id 3 | NÃO | 0 | Deslocamento negativo para o limiar analógico para a vantagem de queda, consulte a seção Debouncing para obter detalhes |
on_tolerance | Número / id 3 | NÃO | 0 | Deslocamento positivo para o limiar analógico para a borda ascendente, consulte a seção Debouncing para obter detalhes |
rotations_per_kwh | Número | NÃO | 75 | Número de rotações da plataforma giratória via kWh (esse valor geralmente é observado no medidor de eletricidade da Ferraris) |
debounce_threshold | Número / id 3 | NÃO | 400 | Tempo mínimo em milissegundos em queda e subsequente vantagem para levar em consideração a rotação, consulte a seção Debooncing para obter detalhes |
energy_start_value | EU IA | NÃO | - | Componente número cujo valor será usado como valor inicial para o contador de energia no tempo de inicialização |
1 Alguns casos de uso requerem o id do elemento de configuração.
2 Somente um dos digital_input ou analog_input é a solicitação, dependendo da variante de configuração de hardware.
3 Os elementos de configuração analog_threshold , off_tolerance , on_tolerance e debounce_threshold esperam um número estático ou o ID em um componente numérico. Este último permite a configuração do valor através da interface do usuário (por exemplo, usando um número de modelo).
ferraris :
id : ferraris_meter
digital_input : GPIO4
rotations_per_kwh : 75
debounce_threshold : 400
energy_start_value : last_energy_valuePara o componente da API, é necessário se o ESP for integrado ao assistente doméstico. Para o caso de um software alternativo de automação residencial ser usado, um componente MQTT deve ser adicionado. No entanto, certos mecanismos pesquisam como substituindo manualmente o medidor de energia ou restaurando a última leitura do metro após uma reinicialização (lago abaixo para obter detalhes) querem que possivelmente não funcionem mais.
Veja o exemplo abaixo para a integração no assistente doméstico (com API criptografada):
api :
encryption :
key : !secret ha_api_keyE abaixo para exemplo para uso com um software alternativo de automação doméstica via MQTT:
mqtt :
broker : 10.0.0.2
username : !secret mqtt_user
password : !secret mqtt_passwordUm componente WiFi deve estar presente, caso contrário, os valores do sensor não podem ser facilmente transmitidos para outro computador.
wifi :
ssid : !secret wifi_ssid
password : !secret wifi_passwordO componente Ferraris fornece aos sensores primários para expor os valores de consumo calculados, bem como os sensores de diagnóstico para o modo de calibração. Todos os sensores são opcionais e podem ser omitidos se não forem necessários.
Os seguintes sensores primários podem ser configurados:
| sensor | Tipo | Classe de dispositivo | Classe estadual | Unidade | Descrição |
|---|---|---|---|---|---|
power_consumption | numérico | power | measurement | C | Consumo de energia atual |
energy_meter | numérico | energy | total_increasing | WH | Consumo total de energia (leitura do medidor) |
Para opções de configuração detalhadas de cada item, consulte a configuração do componente do sensor Esphome.
sensor :
- platform : ferraris
power_consumption :
name : Power consumption
energy_meter :
name : Meter reading Os seguintes sensores de diagnóstico podem ser configurados:
| sensor | Tipo | Descrição |
|---|---|---|
rotation_indicator | binário | Indica se a marca na plataforma giratória está em frente ao sensor infravermelho (funciona apenas no modo de calibração) |
Para opções de configuração detalhadas de cada item, consulte a configuração do componente do sensor binário Esphome.
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Rotation indicator Para fins de diagnóstico, o componente Ferraris fornece uma chave com o nome calibration_mode . Ele pode ser usado para definir o componente para calibrar a moda (consulte a calibração da seção para obter mais informações).
switch :
- platform : ferraris
calibration_mode :
name : Calibration modeO componente Ferraris fornece duas ações para definir a leitura do medidor de energia e o contador de rotação.
| Ação | Descrição |
|---|---|
ferraris.set_energy_meter | Define a leitura do medidor de energia para o valor fornecido |
| parâmetro | Tipo | Faixa | Descrição |
|---|---|---|---|
value | float | > = 0 | Valor alvo para a leitura do medidor de energia em quilowatt horas (kWh) |
observação
Embora o sensor para a leitura do medidor atual tenha a unidade WH (Horas de Watt) , a ação para aumentar a leitura do medidor tem a unidade KWH (Kilowatt Hours) , pois os medidores de eletricidade analógicos da Ferraris geralmente exibem a leitura do medidor nesta unidade.
| Ação | Descrição |
|---|---|
ferraris.set_rotation_counter | Define o balcão de rotação para o valor fornecido |
observação
A ação para definir a leitura do medidor de energia indiretamente, de modo que o contador de rotação, como o componente da Ferraris, trabalha internamente com rotações e não com horas de watt ou quilowatt horas.
| parâmetro | Tipo | Faixa | Descrição |
|---|---|---|---|
value | uint64 | > = 0 | Valor alvo para o contador de rotação no número de rotações |
Esta seção descreve vários exemplos de uso para o componente Ferraris.
Nesta variante, a saída digital do sensor infravermelho é usada para detectar rotações da plataforma giratória. A saída analógica não é necessária, os outros pinos devem ser conectados aos pinos correspondentes do microcontrolador. A saída de 3.3V do ESP deve ser usada para o VCC e a saída digital D0 deve ser conectada a um pino GPIO livre (por exemplo, GPIO4, correspondente ao pino D2 no mini D1).
O esquema de placa de ensaio a seguir mostra um exemplo de configuração de teste usando uma placa de desenvolvimento Mini ESP8266 D1 como microcontrolador.

O sinal de saída digital do sensor infravermelho deve ser calibrado através do potenciômetro usando um rio de feeds; Os dois LEDs verdes na parte de trás do sensor ajudam com isso. O LED direito acende continuamente quando o sensor é fornecido com energia. O LED esquerdo acende enquanto nenhum "obstáculo" foi detectado e se apaga quando o reflexo for interrompido. Este último é o estado quando a marca no medidor de eletricidade da Ferraris se move na frente do sensor. O ajuste do potenciômetro Shedt, portanto, a beterraba, de modo que o LED à esquerda acenda quando o marcador não está no intervalo do par de transmissor/receptor infravermelho e sai quando o marcador se move na frente dele. Este é apenas um alcance muito pequeno e pode ser um pouco difícil encontrar essa configuração. To Further Assist with this Process, the Calibration Mode Can Be Enabled In The Ferraris Meter Firmware, See Section Calibration for Details.
Dica
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.
observação
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.
Dica
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.