catatan
Ini adalah versi Jerman, untuk versi bahasa Inggris, gulir ke bawah atau klik di sini.
Ferraris Meter adalah komponen esphome untuk membuat firmware ESP, yang dapat menggunakan mikrokontroler ESP dan sensor inframerah untuk menentukan kecepatan dan revolusi turntable dari meter aliran ferraris analog dan dari ini dapat menghitung konsumsi listrik saat ini dan keadaan meter. Nilai -nilai ini kemudian dapat dikirim ke perangkat lunak otomatisasi rumah seperti asisten rumah untuk diproses lebih lanjut.
Perangkat lunak (termasuk dokumentasi dengan struktur sampel perangkat keras) disediakan tanpa default dan tanpa garansi ekspres atau diam-diam, termasuk, tetapi tidak terbatas untuk menjamin akses pasar, kesesuaian untuk tujuan tertentu dan non-pelanggaran hak pihak ketiga. Penulis atau pemilik hak cipta sama sekali tidak bertanggung jawab atas klaim, kerusakan atau kewajiban lain, baik dalam kontrak atau gugatan kewajiban, tindakan yang tidak sah atau sebaliknya, yang muncul dari atau sehubungan dengan perangkat lunak atau penggunaan atau toko lain dengan perangkat lunak.
Hanya mikrokontroler ESP (mis. ESP8266 atau ESP32, termasuk pasokan tegangan) dan sensor inframerah (mis. TCRT5000) diperlukan. Untuk fungsi murni meter Ferraris, ESP8266 sepenuhnya cukup sebagai mikrokontroler. Untuk sensor inframerah, ada modul breakout berbasis TCRT5000 selesai dengan tegangan input 3.3V-5V, yang juga memiliki resistensi yang dapat dikendalikan (potensiometer) untuk mengkalibrasi output digital. Modul TCRT5000 ini memiliki 4 pin-VCC dan GND untuk catu daya chip sensor serta output digital D0 dan output analog A0.
Saat menempatkan sensor pada pelat penutup meter saat ini Ferraris, diperlukan sedikit keterampilan dan pekerjaan presisi. Pemancar/penerima inframerah dari sensor harus disejajarkan di tengah milimeter yang tepat di atas meja putar dan menunjuk lurus pada meja putar.
Pada prinsipnya, komponen meter Ferraris mendukung varian pengembangan berikut:
Untuk membuat firmware esphome, file konfigurasi berbasis YAML harus dibuat. Anda dapat menggunakan salah satu file konfigurasi sampel yang disediakan dalam repositori ini sebagai titik awal dan menyesuaikannya dengan kebutuhan Anda.
Pada prinsipnya, ada dua cara untuk membangun firmware esphome:
Metode mana yang harus Anda pilih tergantung pada bagaimana kepercayaan Anda dengan Esphome dan apakah Anda lebih suka bekerja dengan antarmuka pengguna grafis atau dengan baris perintah. Selain itu, kinerja host tempat Anda membangun firmware dapat memainkan peran untuk mempercepat proses.
catatan
Tidak perlu menyalin repositori ini ("Forken") dan untuk beradaptasi dengan konfigurasi sampel di repositori yang disalin. Sebaliknya, cukup untuk menyimpan dan mengadaptasi konfigurasi sampel atau melepas konfigurasi yang diadaptasi pada host asisten rumah Anda (jika pembuatan firmware esphome diinginkan menggunakan add-on kompiler kompiler perangkat esphome).
Bagian berikut menjelaskan komponen paling penting yang termasuk dalam file konfigurasi firmware.
Komponen Ferraris sangat penting dan harus ditambahkan untuk menggunakan sensor Anda.
Karena ini adalah komponen khusus yang bukan bagian dari esphome, itu harus diimpor secara eksplisit. Cara termudah adalah memuat komponen langsung dari repositori ini.
external_components :
- source : github://jensrossbach/esphome-ferraris-meter
components : [ferraris] Tip
Dalam contoh di atas, status komponen terbaru diundang dari cabang main repositori. Namun, saya sarankan merujuk pada dudukan yang dirilis dengan menggunakan nomor versi untuk memiliki lebih banyak kontrol atas dudukan perangkat lunak mana yang digunakan dan agar dapat bereaksi lebih baik terhadap "perubahan perubahan". Lihat Konfigurasi Sampel Bagaimana Ini Dapat Dilakukan.
Pengaturan generik berikut dapat dikonfigurasi:
| pilihan | jenis | Diperlukan | standar | Keterangan |
|---|---|---|---|---|
id | PENGENAL | No 1 | - | Contoh komponen ferraris |
digital_input | Pin | Ya 2 | - | Pin GPIO dengan mana output digital dari modul TCRT5000 terhubung |
analog_input | PENGENAL | Ya 2 | - | Sensor ADC yang membaca pin yang terhubung ke output analog dari modul TCRT5000 |
analog_threshold | Nomor / ID 3 | TIDAK | 50 | Ambang batas untuk mendeteksi revolusi melalui input analog |
off_tolerance | Nomor / ID 3 | TIDAK | 0 | Offset negatif pada nilai ambang analog untuk sayap yang jatuh, lihat bagian yang menyedihkan untuk detailnya |
on_tolerance | Nomor / ID 3 | TIDAK | 0 | Offset positif pada nilai ambang analog untuk sayap naik, lihat bagian yang menyedihkan untuk detailnya |
rotations_per_kwh | Nomor | TIDAK | 75 | Jumlah revolusi turntable per kWh (nilainya dicatat pada meter saat ini Ferraris) |
debounce_threshold | Nomor / ID 3 | TIDAK | 400 | Waktu minimal dalam milidetik antara jatuh dan sisi yang meningkat berikutnya sehingga revolusi diperhitungkan, lihat bagian yang mendepolling untuk detailnya |
energy_start_value | PENGENAL | TIDAK | - | Komponen nomor yang nilainya digunakan dalam booting sebagai nilai awal untuk meteran konsumsi |
1 Aplikasi tertentu memerlukan id elemen konfigurasi.
2 Hanya satu dari dua elemen konfigurasi - digital_input atau analog_input - diperlukan, tergantung pada varian pengembangan perangkat keras.
3 Elemen Konfigurasi analog_threshold , off_tolerance , on_tolerance dan debounce_threshold baik mengharapkan nomor tetap atau ID komponen angka. Yang terakhir memungkinkan nilai yang akan dikonfigurasi melalui antarmuka pengguna (mis. Dengan menggunakan komponen nomor template).
ferraris :
id : ferraris_meter
digital_input : GPIO4
rotations_per_kwh : 75
debounce_threshold : 400
energy_start_value : last_energy_valueKomponen API diperlukan jika ESP akan diintegrasikan ke dalam asisten rumah. Jika perangkat lunak otomatisasi rumah alternatif akan digunakan, komponen MQTT harus ditambahkan sebagai gantinya. Namun, mekanisme tertentu seperti menimpa dudukan meter atau pemulihan skala meter terakhir setelah restart (lihat di bawah untuk detail) dan tidak lagi berfungsi.
Di bawah ini adalah contoh integrasi dengan asisten rumah (dan API terenkripsi):
api :
encryption :
key : !secret ha_api_keyDan berikut adalah contoh penggunaan dengan perangkat lunak otomatisasi rumah alternatif menggunakan MQTT:
mqtt :
broker : 10.0.0.2
username : !secret mqtt_user
password : !secret mqtt_passwordKomponen WiFi harus tersedia, jika tidak, nilai sensor tidak dapat dengan mudah ditransfer ke perangkat lain.
wifi :
ssid : !secret wifi_ssid
password : !secret wifi_passwordKomponen Ferraris memiliki sensor primer untuk menampilkan nilai konsumsi yang dihitung dan sensor diagnostik untuk mode kalibrasi. Semua sensor bersifat opsional dan dapat ditinggalkan jika tidak diperlukan.
Sensor primer berikut dapat dikonfigurasi:
| sensor | jenis | Kelas perangkat | Kelas negara | Satuan | Keterangan |
|---|---|---|---|---|---|
power_consumption | numerik | power | measurement | W | Konsumsi Daya Saat Ini |
energy_meter | numerik | energy | total_increasing | Wh | Total konsumsi arus (status meter listrik/meter) |
Anda dapat menemukan informasi terperinci tentang opsi konfigurasi elemen individual dalam dokumentasi komponen sensor esphome.
sensor :
- platform : ferraris
power_consumption :
name : Momentanverbrauch
energy_meter :
name : Verbrauchszähler Sensor diagnostik berikut dapat dikonfigurasi:
| sensor | jenis | Keterangan |
|---|---|---|
rotation_indicator | biner | Menunjukkan apakah tanda pada meja putar tepat di depan sensor inframerah (hanya berfungsi dalam mode kalibrasi) |
Anda dapat menemukan informasi terperinci tentang opsi konfigurasi elemen individu dalam dokumentasi komponen sensor biner esphome.
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Umdrehungsindikator Untuk tujuan diagnostik, komponen Ferraris memiliki sakelar. Ini memiliki nama calibration_mode dan dapat digunakan untuk memasukkan komponen ke dalam mode kalibrasi (lihat bagian kalibrasi untuk informasi lebih lanjut).
switch :
- platform : ferraris
calibration_mode :
name : KalibrierungsmodusKomponen Ferraris memberikan dua tindakan untuk mengatur skala meter dan mengatur penghitung transisi.
| tindakan | Keterangan |
|---|---|
ferraris.set_energy_meter | Menempatkan status meter pada nilai yang ditentukan |
| parameter | jenis | Daerah | Keterangan |
|---|---|---|---|
value | float | > = 0 | Nilai target untuk keadaan meter dalam kilowatt jam (kWh) |
catatan
Meskipun sensor untuk keadaan meter saat ini memiliki unit WH (jam watt) , tindakan untuk menimpa dudukan meter menggunakan unit kWh (jam kilowatt) , karena meter analog Ferraris saat ini biasanya juga menampilkan meter.
| tindakan | Keterangan |
|---|---|
ferraris.set_rotation_counter | Menempatkan konter putar pada nilai yang ditentukan |
catatan
Tindakan untuk mengatur dudukan meter secara tidak langsung juga menetapkan penghitung putaran, karena komponen Ferraris bekerja secara internal dengan revolusi dan tidak dengan jam kerja atau kilowatt jam.
| parameter | jenis | Daerah | Keterangan |
|---|---|---|---|
value | uint64 | > = 0 | Nilai target untuk penghitung turnover dalam revolusi angka |
Berbagai contoh aplikasi untuk komponen Ferraris dijelaskan di bagian ini.
Dalam varian ini, output digital dari sensor inframerah digunakan untuk mengidentifikasi revolusi meja putar. Output analog tidak diperlukan, pin lain harus dihubungkan ke pin mikrokontroler yang sesuai. Untuk VCC, output 3.3V dari ESPS harus digunakan dan output digital D0 harus terhubung ke pin GPIO gratis (mis. GPIO4, sesuai dengan pin D2 pada D1 Mini).
Diagram sirkuit plug-in berikut menunjukkan contoh pengaturan eksperimental dengan papan pengembangan mini ESP8266 D1 sebagai mikrokontroler.

Dengan bantuan obeng, sinyal output digital kemudian harus dikalibrasi melalui potensiometer. Dua LED hijau di belakang sensor membantu. LED kanan bersinar secara permanen ketika sensor dipasok dengan listrik. LED kiri bersinar selama tidak ada "hambatan" telah diakui dan berakhir ketika refleksi telah terganggu. Yang terakhir adalah kondisi ketika penandaan pada turntable Ferraris Meter Wanders saat ini di depan sensor. Oleh karena itu potensiometer harus diatur sehingga LED kiri masih bersinar ketika tanda tidak ada di area pasangan pengirim/penerima inframerah segera setelah penanda mendorong di depannya. Ini hanya area yang sangat kecil dan bisa sedikit sulit untuk menemukan pengaturan ini. Untuk dukungan tambahan untuk proses ini, mode kalibrasi dapat diaktifkan di firmware meter Ferraris, lihat bagian kalibrasi untuk detailnya.
Tip
Jika tidak mungkin untuk menemukan pengaturan yang cocok dan berfungsi untuk potensiometer, output analog dari sensor inframerah dapat digunakan secara alternatif, lihat bagian selanjutnya.
Sisi perangkat lunak harus dikonfigurasi untuk komponen Ferraris di file konfigurasi PIN YAML, yang terhubung ke output digital dari modul TCRT5000:
ferraris :
id : ferraris_meter
digital_input : GPIO4
# ...Contoh konfigurasi: ferraris_meter_digital.yaml
Dalam varian ini, output analog dari sensor inframerah digunakan untuk mengidentifikasi revolusi turntable. Output digital tidak diperlukan, pin lain harus dihubungkan ke pin mikrokontroler yang sesuai. Untuk VCC, output 3.3V dari ESPS harus digunakan dan output analog A0 harus dihubungkan ke pin ADC gratis (mis. GPIO17, sesuai dengan pin A0 pada D1 Mini).
Diagram sirkuit plug-in berikut menunjukkan contoh pengaturan eksperimental dengan papan pengembangan mini ESP8266 D1 sebagai mikrokontroler.

Kalibrasi dengan menggunakan potensiometer pada modul TCRT5000 tidak lagi diperlukan, alih -alih sisi perangkat lunak harus dikonfigurasi untuk input analog dan secara opsional nilai offset untuk karakteristik histeresis (lihat juga bagian yang menekan di bawah). Di sini juga, mode kalibrasi komponen Ferraris dapat membantu, lihat bagian kalibrasi untuk detailnya.
Ambang batas analog_threshold mengontrol ketika sinyal analog diperlakukan sebagai "diakui" (area yang ditandai dari meja putar) dan ketika diperlakukan sebagai "tidak dikenali" (tidak ditandai area turntable). Jika nilai sensor ADC lebih besar dari analog_input ambang batas, penandaan dianggap diakui, lebih kecil atau sama, tidak dikenali.

Langkah -langkah konfigurasi berikut sekarang harus dilakukan, misalnya, sisi perangkat lunak:
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 komponen angka yang dibuat di bawah 2. ferraris :
id : ferraris_meter
analog_input : adc_input
analog_threshold : adc_threshold
# ...analog_threshold juga dapat ditentukan jika ambang batas sudah diketahui dan tidak lagi harus dikonfigurasi/diubah. Dalam hal ini, Langkah 2 dapat dihilangkan. ferraris :
# ...
analog_threshold : 45
# ... Konfigurasi nilai offset off_tolerance dan on_tolerance sangat mirip dengan mengonfigurasi analog_threshold dan karenanya tidak secara eksplisit ditampilkan dalam contoh di atas.
Contoh konfigurasi: ferraris_meter_analog.yaml
Dimungkinkan juga untuk membaca lebih dari satu penghitung saat ini Ferraris dengan mikrokontroler ESP tunggal. Untuk melakukan ini, Anda memerlukan modul sensor inframerah lebih lanjut / TCRT5000 dan pin GPIO gratis tambahan pada mikrokontroler. Seperti yang telah dijelaskan, modul TCRT5000 terhubung ke sumber tegangan mikrokontroler ESP melalui VCC dan GND dan output D0 masing -masing terhubung ke papan ESP dengan pin GPIO gratis.
catatan
Secara teori, varian juga dapat digunakan dengan output analog dari sensor inframerah, tetapi pin berkemampuan ADC pada mikrokontroler ESP lebih terbatas daripada pin digital murni. Secara khusus, ESP8266, yang hanya memiliki satu ADC, karena itu tidak cocok untuk mendukung beberapa sensor inframerah melalui output analog mereka.
Diagram sirkuit plug-in berikut menunjukkan contoh pengaturan uji dengan dua modul TCRT5.000 yang terhubung ke Mini ESP8266 D1.

Namun, harus diingat bahwa setiap sensor inframerah tambahan meningkatkan beban pada mikrokontroler dan, terutama pada kecepatan turntable yang sangat tinggi, perangkat keras menempatkan lebih dekat ke batasnya.
Langkah -langkah konfigurasi berikut sekarang harus dilakukan, misalnya, sisi perangkat lunak:
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 2Contoh konfigurasi: ferraris_meter_multi.yaml
Selama penentuan posisi dan penyelarasan sensor inframerah serta penyesuaian potensiometer atau nilai ambang analog, tidak masuk akal untuk mengukur revolusi turntable dari meter saat ini Ferraris dan untuk menghitung konsumsi, karena perubahan dalam kondisi sensor tidak sesuai dengan deteksi aktual dari tanda pada belokan. Oleh karena itu, ada kemungkinan untuk memasukkan komponen Ferraris ke dalam mode kalibrasi dengan menyalakan sakelar untuk mode kalibrasi (lihat aktuator). Selama mode kalibrasi diaktifkan, tidak ada perhitungan data konsumsi yang dilakukan dan sensor yang sesuai (lihat sensor primer) tidak diubah. Sebaliknya, sensor diagnostik untuk indikasi berputar (lihat sensor diagnostik) aktif dan juga dapat digunakan untuk mendukung penyelarasan yang benar. Sensor berada dalam on ketika tanda diakui di meja putar dan off jika tidak ada tanda yang diakui.
Agar dapat menggunakan mode kalibrasi, komponen calibration_mode dan rotation_indicator harus dikonfigurasi dalam file YAML:
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Umdrehungsindikator
switch :
- platform : ferraris
calibration_mode :
name : KalibrierungsmodusTransisi dari area yang tidak ditandai ke yang ditandai dan sebaliknya pada meja putar dapat menyebabkan bolak-balik cepat ("memantul") dari keadaan identifikasi sensor, yang terjadi terutama pada kecepatan putar lambat dan tidak dapat sepenuhnya ditekan oleh kalibrasi. Memar ini mengarah pada pengukuran pemalsuan dan untuk menghindarinya, ada pengaturan berikut.
Ambang tertekan debounce_threshold menentukan waktu minimum dalam milidetik antara jatuh dan sisi peningkatan berikutnya. Hanya jika waktu yang diukur adalah antara dua sisi di atas nilai yang dikonfigurasi adalah sensor yang dipicu. Jenis depresi ini berfungsi saat menggunakan sinyal input digital dan analog dari sensor inframerah.

Dua nilai offset off_tolerance dan on_tolerance dapat dikonfigurasi untuk menggunakan karakteristik histeresis untuk mendeteksi area yang ditandai pada turntable melalui sinyal analog. Ini mengkompensasi "gemetar" dari sinyal analog dan dengan demikian meminimalkan kemungkinan memar dari keadaan identifikasi untuk area yang ditandai pada meja putar. Jenis depresi ini hanya berfungsi saat menggunakan sinyal input analog dari sensor inframerah.

Dengan konfigurasi cerdas dari Interval Update update_interval dan jumlah pengambilan sampel per pembaruan ( samples ) untuk analog analog_input analog, kurva sinyal analog dapat dihaluskan sejauh ini sehingga fluktuasi jangka pendek dieliminasi. Namun, harus diingat bahwa interval pembaruan yang terlalu besar dapat mengarah pada fakta bahwa revolusi individu tidak lagi diakui pada kecepatan belokan yang sangat tinggi, karena waktu antara meningkat dan sisi jatuh berikutnya lebih kecil dari interval pembaruan yang ditetapkan. Jenis depresi ini juga hanya berfungsi saat menggunakan sinyal input analog dari sensor inframerah.
Untuk mengimbangi keadaan meter dalam komponen Ferraris dengan meter aktual dari meter saat ini Ferraris, nilai sensor meter konsumsi dapat secara eksplisit ditimpa. Untuk tujuan ini, dua ferraris.set_energy_meter dan ferraris.set_rotation_counter .
Tip
Biasanya hanya satu dari dua tindakan yang diperlukan, tergantung pada apakah Anda ingin meletakkan meter dalam kilowatt jam atau dalam jumlah revolusi.
Bergantung pada apakah pengaturan level meter harus ditangani oleh antarmuka pengguna atau secara otomatis melalui otomatisasi dan skrip, tindakan dapat digunakan dengan cara yang berbeda. Dua contoh aplikasi yang mungkin dijelaskan di bawah ini, tetapi ada opsi lain yang tidak dijelaskan di sini.
Untuk ini, misalnya, langkah -langkah konfigurasi berikut dilakukan (dalam contoh ini untuk mengatur dudukan meter sebagai nilai jam kilowatt):
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; Untuk ini, misalnya, langkah -langkah konfigurasi berikut dilakukan:
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 : singleAgar tidak mengurangi umur memori flash pada mikrokontroler ESP, komponen Ferraris tidak menyimpan data apa pun secara terus -menerus dalam flash. Akibatnya, pertama -tama tidak dapat mengingat keadaan meter di atas restart mikrokontroler dan konter mulai menghitung pada 0 kWh di setiap kapal. Jadi setelah setiap restart, Anda harus secara manual menimpa skala meter dengan nilai yang dibaca pada meter saat ini Ferraris. Karena ini tidak terlalu ramah pengguna, ada kemungkinan untuk bertahan dalam keadaan meter terakhir di asisten rumah dan mentransfernya ke sana saat mem -boot mikrokontroler.
Agar ini berfungsi, langkah -langkah konfigurasi berikut harus dilakukan, misalnya:
input_number.stromzaehler_letzter_wert ). number :
- platform : homeassistant
id : last_energy_value
entity_id : input_number.stromzaehler_letzter_wertenergy_start_value mengacu pada komponen angka di bawah 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 dalam file konfigurasi YAML juga dapat dibuat, yang memperbarui komponen angka di bawah 2. Namun, ini memperpanjang waktu pemrosesan per revolusi dalam mikrokontroler dan dapat mengarah pada fakta bahwa putaran masing -masing turntable tidak dicatat dalam kasus konsumsi daya yang sangat tinggi (dan karenanya kecepatan putaran yang sangat tinggi). Oleh karena itu, saya merekomendasikan varian dengan otomatisasi di asisten rumah.Ferraris Meter adalah komponen esphome untuk membuat firmware ESP yang menggunakan mikrokontroler ESP dan sensor inframerah jumlah rotasi dan kecepatan senam dari meter listrik ferraris analog dan untuk menghitung konsumsi listrik saat ini dan pembacaan meter. Nilai tesis kemudian dapat dikirim ke pencarian perangkat lunak otomatisasi rumah sebagai asisten rumah untuk pemrosesan lebih lanjut.
Perangkat lunak (termasuk dokumentasi dengan contoh pengaturan perangkat keras) disediakan "apa adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan Merchavity, kebugaran untuk tujuan tertentu dan non -infringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak boleh diliputi klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan atau penggunaan atau transaksi lain dalam perangkat lunak.
Di sisi perangkat keras, hanya mikrokontroler ESP (misalnya ESP8266 atau ESP32, termasuk catu daya) dan sensor inframerah (misalnya TCRT5000) diminta. Mikrokontroler ESP8266 benar -benar digugat untuk fungsionalitas murni meter Ferraris. Untuk sensor inframerah, ada modul breakout berbasis TCRT5000 siap pakai dengan tegangan input 3.3V-5V yang tersedia, yang karenanya memiliki resistor yang dapat disesuaikan (potensiometer) untuk mengkalibrasi output digital sensor. Tesis TCRT5000 Modul memiliki 4 pin - VCC dan GND untuk catu daya chip sensor serta output digital D0 dan output analog A0.
Menempatkan sensor pada pelat penutup meter listrik Ferraris membutuhkan sedikit keterampilan dan pekerjaan presisi. Pasangan pemancar/penerima inframerah dari sensor harus disejajarkan secara terpusat di atas meja putar dengan presisi milimeter dan titik dalam garis lurus ke meja putar.
Komponen meter Ferraris pada dasarnya mendukung varian pengaturan ikuti:
Untuk membangun firmware esphome, Anda harus membuat file konfigurasi berbasis YAML. Anda dapat menggunakan salah satu contoh file konfigurasi yang dibuktikan dalam repositori ini sebagai titik awal dan menyesuaikannya dengan kebutuhan Anda.
Pada prinsipnya, ada dua cara untuk membangun firmware esphome:
Metode apa yang harus Anda pilih tergantung pada seberapa akrab Anda dengan esphome dan apakah Anda lebih suka bekerja dengan antarmuka pengguna grafis atau baris perintah. Selain itu, kinerja host tempat Anda membangun firmware dapat memainkan peran dalam mempercepat proses.
catatan
Tidak perlu untuk membayar repositori ini dan melakukan adaptasi ke konfigurasi contoh langsung di dalam repositori bercabang. Sebaliknya, cukup untuk menyimpan dan mengadaptasi contoh konfigurasi secara lokal atau menyimpannya di host asisten rumah Anda (jika Anda ingin membangun firmware esphome dengan add-on kompiler kompiler perangkat esphome).
Bagian berikut menjelaskan komponen paling terkenal yang terkandung dalam file konfigurasi firmware.
Komponen Ferraris sangat penting dan harus ditambahkan untuk menggunakan sensornya.
Karena ini adalah komponen khusus yang bukan bagian dari esphome, itu harus diimpor secara eksplisit. Cara termudah adalah memuat komponen langsung dari repositori ini.
external_components :
- source : github://jensrossbach/esphome-ferraris-meter
components : [ferraris] Tip
Dalam contoh di atas, versi terbaru dari komponen dari cabang main repositori dimuat. Namun, saya sarankan menggunakan nomor versi untuk merujuk ke versi yang dirilis untuk memiliki kontrol lebih besar atas versi perangkat lunak mana yang digunakan dan untuk dapat bereaksi lebih baik terhadap "perubahan perubahan". Lihat Contoh Konfigurasi untuk Bagaimana Ini Dapat Dilakukan.
Item konfigurasi generik berikut dapat dikonfigurasi:
| pilihan | Jenis | Diperlukan | bawaan | Keterangan |
|---|---|---|---|---|
id | PENGENAL | No 1 | - | Instance komponen Ferraris |
digital_input | Pin | Ya 2 | - | PIN GPIO tempat output digital modul TCRT5000 terhubung |
analog_input | PENGENAL | Ya 2 | - | Sensor ADC yang membacakan pin yang terhubung ke output analog dari modul TCRT5000 |
analog_threshold | Nomor / ID 3 | TIDAK | 50 | Nilai ambang batas untuk deteksi rotasi melalui input analog |
off_tolerance | Nomor / ID 3 | TIDAK | 0 | Offset negatif ke ambang analog untuk tepi jatuh, lihat bagian debouncing untuk detailnya |
on_tolerance | Nomor / ID 3 | TIDAK | 0 | Offset positif ke ambang analog untuk tepi naik, lihat bagian debouncing untuk detailnya |
rotations_per_kwh | Nomor | TIDAK | 75 | Jumlah rotasi turntable melalui kWh (nilai itu biasanya dicatat pada meter listrik Ferraris) |
debounce_threshold | Nomor / ID 3 | TIDAK | 400 | Waktu minimum dalam milidetik jatuh dan tepi naik berikutnya untuk memperhitungkan rotasi, lihat bagian debooncing untuk detailnya |
energy_start_value | PENGENAL | TIDAK | - | Komponen angka yang nilainya akan digunakan sebagai nilai awal untuk penghitung energi pada waktu boot |
1 Beberapa kasus penggunaan memerlukan id elemen konfigurasi.
2 Hanya satu dari digital_input atau analog_input yang diminta, tergantung pada varian pengaturan perangkat keras.
3 Elemen Konfigurasi analog_threshold , off_tolerance , on_tolerance dan debounce_threshold mengharapkan nomor statis atau ID pada komponen angka. Yang terakhir memungkinkan konfigurasi nilai melalui antarmuka pengguna (misalnya, dengan menggunakan nomor templat).
ferraris :
id : ferraris_meter
digital_input : GPIO4
rotations_per_kwh : 75
debounce_threshold : 400
energy_start_value : last_energy_valueKomponen API diperlukan jika ESP akan diintegrasikan ke dalam asisten rumah. Untuk kasus bahwa perangkat lunak otomatisasi rumah alternatif harus digunakan, komponen MQTT harus ditambahkan sebagai gantinya. Namun, mekanisme tertentu mencari secara manual menimpa meteran energi atau memulihkan pembacaan meter terakhir setelah restart (danau di bawah untuk detail) ingin yang mungkin tidak lagi berfungsi.
Lihat contoh di bawah ini untuk integrasi ke asisten rumah (dengan API terenkripsi):
api :
encryption :
key : !secret ha_api_keyDan di bawah ini untuk digunakan untuk penggunaan dengan perangkat lunak otomatisasi rumah alternatif melalui MQTT:
mqtt :
broker : 10.0.0.2
username : !secret mqtt_user
password : !secret mqtt_passwordKomponen WiFi harus ada, karena jika tidak, nilai sensor tidak dapat dengan mudah ditransmisikan ke komputer lain.
wifi :
ssid : !secret wifi_ssid
password : !secret wifi_passwordKomponen Ferraris menyediakan sensor primer untuk mengekspos nilai konsumto yang dihitung serta sensor diagnostik untuk mode kalibrasi. Semua sensor opsional dan dapat dihilangkan jika tidak diperlukan.
Sensor primer berikut dapat dikonfigurasi:
| sensor | Jenis | Kelas perangkat | Kelas negara | Satuan | Keterangan |
|---|---|---|---|---|---|
power_consumption | numerik | power | measurement | W | Konsumsi Daya Saat Ini |
energy_meter | numerik | energy | total_increasing | Wh | Konsumsi energi total (pembacaan meter) |
Untuk opsi konfigurasi terperinci dari setiap item, silakan merujuk ke konfigurasi komponen sensor esphome.
sensor :
- platform : ferraris
power_consumption :
name : Power consumption
energy_meter :
name : Meter reading Sensor diagnostik berikut dapat dikonfigurasi:
| sensor | Jenis | Keterangan |
|---|---|---|
rotation_indicator | biner | Menunjukkan jika tanda pada meja putar berada di depan sensor inframerah (hanya berfungsi dalam mode kalibrasi) |
Untuk opsi konfigurasi terperinci dari setiap item, silakan merujuk ke Konfigurasi Komponen Sensor Biner Esphome.
binary_sensor :
- platform : ferraris
rotation_indicator :
name : Rotation indicator Untuk tujuan diagnostik, komponen Ferraris menyediakan sakelar dengan nama calibration_mode . Ini dapat digunakan untuk mengatur komponen ke mode kalibrasi (lihat bagian kalibrasi untuk informasi lebih lanjut).
switch :
- platform : ferraris
calibration_mode :
name : Calibration modeKomponen Ferraris memberikan dua tindakan untuk mengatur pembacaan meter energi dan penghitung rotasi.
| Tindakan | Keterangan |
|---|---|
ferraris.set_energy_meter | Menetapkan pembacaan meter energi ke nilai yang disediakan |
| parameter | Jenis | Jangkauan | Keterangan |
|---|---|---|---|
value | float | > = 0 | Nilai target untuk pembacaan meter energi dalam kilowatt jam (kWh) |
catatan
Meskipun sensor untuk pembacaan meter saat ini memiliki unit WH (Watt Hours) , tindakan untuk overwandring pembacaan meter memiliki unit kWh (kilowatt jam) , karena meter listrik analog Ferraris biasanya sehingga menampilkan pembacaan meter di unit ini.
| Tindakan | Keterangan |
|---|---|
ferraris.set_rotation_counter | Menetapkan penghitung rotasi ke nilai yang disediakan |
catatan
Tindakan untuk mengatur pembacaan meter energi secara tidak langsung sehingga penghitung rotasi sebagai komponen Ferraris secara internal berfungsi dengan rotasi dan tidak dengan jam watt atau jam kilowatt.
| parameter | Jenis | Jangkauan | Keterangan |
|---|---|---|---|
value | uint64 | > = 0 | Nilai target untuk penghitung rotasi dalam jumlah rotasi |
Bagian ini menjelaskan berbagai contoh penggunaan untuk komponen Ferraris.
Dalam varian ini, output digital dari sensor inframerah digunakan untuk mendeteksi rotasi meja putar. Output analog tidak diperlukan, pin lain harus dihubungkan ke pin mikrokontroler yang sesuai. Output 3.3V dari ESP harus digunakan untuk VCC dan output digital D0 harus terhubung ke pin GPIO gratis (misalnya GPIO4, sesuai dengan pin D2 pada D1 Mini).
Skema papan tempat memotong roti berikut menunjukkan contoh pengaturan tes menggunakan papan pengembangan mini ESP8266 D1 sebagai mikrokontroler.

Sinyal output digital dari sensor inframerah harus dikalibrasi melalui potensiometer menggunakan panduan; Dua LED hijau di belakang sensor membantu dengan ini. LED tangan kanan menyala terus menerus ketika sensor dipasok dengan daya. LED sebelah kiri menyala selama tidak ada "hambatan" yang terdeteksi dan keluar ketika refleksi telah terganggu. Yang terakhir adalah keadaan ketika tanda pada turntable meter listrik Ferraris bergerak di depan sensor. Penyesuaian potensiometer gudang karena itu sehingga LED kiri hanya menyala ketika penanda tidak dalam kisaran pasangan pemancar/penerima inframerah dan keluar saat penanda bergerak di depannya. Ini hanya rentang yang sangat kecil dan bisa sedikit sulit untuk menemukan pengaturan ini. To Further Assist with this Process, the Calibration Mode Can Be Enabled In The Ferraris Meter Firmware, See Section Calibration for Details.
Tip
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.
catatan
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.
Tip
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.