Zamel LEM-30 i ESPHome

Witajcie.
Chcę zintegrować licznik jak w temacie przez ESPHome. Producent licznika wymaga podłączenia zasilania 12-27V do zacisków urządzenia liczącego.


Tu nie jestem pewien jak podłączyć do tego układu płytkę ESP (Wemos D1 mini). Tak jak poniżej?

Obawiam się, że w ten sposób usmażę Wemosa. Czy zatem podłączyć tylko minus od LEMa do GPIO, czy jeszcze inaczej?

Podejrzewam, że ten układ będzie działać również przy 3.3V i zwyczajnym pullupie nawet na bazie wbudowanego w ESP - zwykle to jest wyjście tranzystorowe w układzie otwartego kolektora lub otwartego drenu.

Też tak podejrzewam, ale nie czuję tematu z otwartym kolektorem.
Czy poniższy schemat jest poprawny dla ponizszego przypadku?

[EDIT]
Chyba jednak tak powinno to wyglądać


Prawda?

W danych katalogowych stoi, że wyjście SO jest typu OC.
Podłączasz S0- > GND; SO+ > GPIO i włączasz wew, pullup.

1 Like

Działa pięknie.
Podziękował.

[EDIT]
Hardwere’owo działa pięknie ale z softem - jak zwykle - są problemy. Już się ucieszyłem (rano), że ładnie zaczął liczyć od zera, ale znów ześwirował.
Mój kod:

sensor:
  - platform: pulse_meter
    name: 'Jakaś moc'
    id: sensor_pulse_meter # Optional ID, necessary if you want to calculate the total daily energy
    unit_of_measurement: 'W'
    device_class: power
    state_class: measurement
    accuracy_decimals: 0
    pin:
      number: GPIO12
      mode:
        input: true
        pullup: true    
    filters:
      - multiply: 60 
      - throttle_average: 10s
      - filter_out: NaN
    total:
      name: "Electricity Total"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      accuracy_decimals: 3
      filters:
        - multiply: 0.001  # (1/10000 pulses per kWh)
        # - average_throttle: 10s
        # - filter_out: NaN
        
  - platform: total_daily_energy
    name: 'Total Daily Energy'
    id: sensor_total_daily_energy
    power_id: sensor_pulse_meter
    unit_of_measurement: 'kWh'
    state_class: total_increasing
    device_class: energy
    accuracy_decimals: 3
    filters:
      # Multiplication factor from W to kW is 0.001
      - multiply: 0.001


Mój log - w sensie wartości wyfrunęły w kosmos:

[22:39:04][D][sensor:093]: 'Electricity Total': Sending state 0.43900 kWh with 3 decimals of accuracy
[22:39:07][D][sensor:093]: 'Jakaś moc': Sending state 83.69735 W with 0 decimals of accuracy
[22:39:07][D][sensor:093]: 'Total Daily Energy': Sending state 160.92059 kWh with 3 decimals of accuracy
[22:39:12][D][api:102]: Accepted 192.168.1.107
[22:39:12][D][api.connection:1121]: ESPHome Logs 2023.12.9 (192.168.1.107): Connected successfully
[22:39:13][D][time:044]: Synchronized time: 2024-02-13 22:39:12
[22:39:47][D][sensor:093]: 'Electricity Total': Sending state 0.44000 kWh with 3 decimals of accuracy
[22:39:47][D][sensor:093]: 'Jakaś moc': Sending state 83.91648 W with 0 decimals of accuracy
[22:39:47][D][sensor:093]: 'Total Daily Energy': Sending state 160.92152 kWh with 3 decimals of accuracy
[22:40:30][D][sensor:093]: 'Electricity Total': Sending state 0.44100 kWh with 3 decimals of accuracy
[22:40:37][D][sensor:093]: 'Jakaś moc': Sending state 84.15659 W with 0 decimals of accuracy
[22:40:37][D][sensor:093]: 'Total Daily Energy': Sending state 160.92270 kWh with 3 decimals of accuracy
[22:41:13][D][sensor:093]: 'Electricity Total': Sending state 0.44200 kWh with 3 decimals of accuracy
[22:41:17][D][sensor:093]: 'Jakaś moc': Sending state 83.83859 W with 0 decimals of accuracy
[22:41:17][D][sensor:093]: 'Total Daily Energy': Sending state 160.92363 kWh with 3 decimals of accuracy

Ki czort?

Nie powinno to być czasami zrobione na platformie pulse_couter ?

 - platform: total_daily_energy

w.g. dokumentacji liczy z mocy a nie z energii… więc chyba jest nieodpowiedni w tym zastosowaniu.

@osromocon
Pokaż wykresy wszystkich 3 sensorów w tej samej skali czasu od momentu gdy było dobrze

Korzystałem z tego przykładu:
https://esphome.io/cookbook/power_meter

@szopen jak zwykle miał nosa. Coś jest na rzeczy z mocą “chwilową”:

Te piki to całe “stada impulsów” - stany nieustalone lub po prostu silne zakłócenia.
Jeśli na podstawie czasu zdarzeń wiesz co to może być, to sprawa do rozwiązania w jedną chwilę - eliminujesz przyczynę i po wszystkim.

Jeśli nie to w Historii dodaj sobie przede wszystkim encję mocy do analizy na wykresie i “dojedź” wykresami do tych punktów gdzie masz piki (bo wszystkie wyglądają podejrzanie, ale najbardziej najwyższy) no i dobierz skalę czasu aby to było widać ile trwało to zdarzenie - zrób SS w takim zbliżeniu.

Nie mam pojęcia jaka może być przyczyna, ale chyba dzisiaj to wychwyciłem gołym okiem (tak mi się zdaje że widziałem dwa mrugnięcie światełka na licznika raz za razem).
W historii pokazuję wykres mocy - u góry. To nie ten? Poniżej zbliżenie:


Widzę, że ta “nieprawidłowa” moc trwa przez okres czasu między dwoma impulsami.

To ten, skoro pik powstał w zerowym czasie, to może być błędem obliczeniowym wynikłym np. z błędu synchronizacji czasu, bo jakieś 45000 impulsów w 40sekund jest skrajnie mało prawdopodobne.
edit - tu coś źle policzyłem! przelicz ile impulsów by spowodowało wskazanie 45 kW na oko to by było jakieś 500 impulsów w te 40 sekund, ale sprawdź! czyli by jednak wystarczył przydźwięk sieci przez koło 10 sekund by nabić taki wynik…

Gdyby źródłem był typowy przydźwięk sieci, to spodziewałbym się 50 imp/sek. lub maks.100 imp/sek. a skoro stała licznika to 1 imp/Wh to by trzeba było policzyć jakiej częstotliwości impulsów się spodziewasz przy maksymalnym obciążeniu tego obwodu i po prostu wszelkie wyższe wyniki można wtedy odfiltrować na bezczelnego (tj. bez znalezienia faktycznej przyczyny).

Zasadniczo do YAMLa proponuję dorzucić jakiekolwiek sensory diagnostyczne wtedy zobaczysz czy się coś dziwnego nie działo z samym ESP w czasie zbliżonym do anomalii

binary_sensor:
  - platform: status
    name: "${friendly_name} Node Status"
    id: system_status

sensor:
  - platform: uptime
    name: "${friendly_name} Uptime"
    entity_category: diagnostic
  - platform: wifi_signal
    name: "${friendly_name} sygnał WiFi"
    update_interval: 60s
    entity_category: diagnostic
# 2 niżej tylko ESP32
  - platform: internal_temperature
    name: "${friendly_name} Internal Temperature"
    accuracy_decimals: 1
    entity_category: diagnostic
  - platform: esp32_hall
    name: "${friendly_name} sensor Hall'a"
    update_interval: 60s

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "${friendly_name} IP Address"
# pozostałe informacyjnie
    scan_results:
      name: "${friendly_name} Latest Scan Results"
    ssid:
      name: "${friendly_name} Connected SSID"
    bssid:
      name: "${friendly_name} Connected BSSID"
    mac_address:
      name: "${friendly_name} Mac Wifi Address"

platformę czasu zalecam skonfigurować niezależnie od HA (jeśli sprzęt ESP ma dostęp do internetu)

time:
  - platform: sntp
    timezone: Europe/Warsaw
    servers:
      - 0.pl.pool.ntp.org
      - 1.pl.pool.ntp.org
      - 2.pl.pool.ntp.org
    id: sntp_time

No chyba 45697 impulsów.

Wg mnie, w ciągu tych 42 sekund nie było żadnych impulsów - tak pokazuje wykres (albo - ja go tak interpretuję). Impulsy - moim zdaniem - są tu:
Pierwszy:
obraz
Drugi:
obraz

Oczywiście, poczynię kroki o których pisałeś i zamelduję zwrotnie o skutkach.

P.S.
Coś zaczynam wątpić w tego Zamela.

Może jest jakiś problem sprzętowy. Proponuje podnieść napięcie sygnału do zalecanego w instrukcji na zaciskach SO i użycie konwertera poziomów w postaci np transoptora dla ESP.

To też jest jakiś trop. Tu ktoś pisał, że dokładał tranzystor bo mu licznik nie liczył wszystkich impulsów. Ja nie mam tranzystora pnp i dlatego miałem nadzieję, że uda się bez niego. Transoptora mam, ale to znowu nieco komplikuje układ.
[Dodano po 6min]
No no no. Robi się ciekawie. Teraz raportuje moc od 160-320 W dla urzadzenia, które pobiera ich 85.

Możliwe, jednak mało prawdopodobne by wyjście OC mogło mieć problem z działaniem przy 3V3, jakkolwiek użyłbym prawdziwego pullupu zamiast wbudowanego w ESP - schemat producenta przewiduje mocny pullup rzędu 0.5-1k nawet dla znacznie wyższych (koło 10x) napięć zasilania, więc bez strachu dla 3V3 można użyć choćby i 100R.

Szczerze jednak podejrzewam, że to kwestia problemu z ESP, a nie napięcia na obwodzie kolektora.

Wykres nie pokazuje żadnych impulsów (nigdzie), tylko wartości raportowane przez sensor jakiejś integracji… aby je widzieć musiałbyś stworzyć osobny sensor typu powiedzmy counter (a tego chyba ta integracja nie przewiduje), de facto można użyć równolegle 2 GPIO w trybie wejścia i jednego mocnego pullupu i na każdym z nich zorganizować sobie inną integrację na czas testów.

Musisz rozróżniać moc i energię to zupełnie inne jednostki fizyczne i co innego one przedstawiają.
Stała licznika to 1000imp./kWh czyli 1imp./Wh
słownie jeden impuls na watogodzinę

w skrócie (zamiast konkretnych obliczeń szacowanie)
jeśli podepniesz na stałe obciążenie 1W to w godzinę wygeneruje to jeden impuls, ALE
aby było wygodnie liczyć 1h=3600s

więc jeśli podepniesz na stałe obciążenie 3600W to w godzinę wygeneruje to 3600impulsów, a wtedy w sekundę masz 1 impuls, a w 40sekund 40 impulsów.
Resztę policz sam.

skoro 3.6kW to 1 imp./s to ile imp./s musi być dla… 45MW → 45 000kW
(dopiero teraz zauważyłem, że tam nie było przecinka przed 3 ostatnimi zerami na wykresie :grin: )

Nie bądź taki tajemniczy i napisz co to, no i podepnij tam grzejnik/czajnik, cokolwiek co ma cos fi = 1

Twój problem jest dokładnie odwrotny - ESP liczy impulsy, których teoretycznie być nie powinno.

Możesz go użyć, ale “organoleptycznie” zweryfikować działanie wyjścia OC możesz znacznie prościej - używając diody LED i rezystora (one w ogóle mogą być w gałęzi pullupu, tylko jeśli użyjesz LED, to 3V3 będzie zbyt niskim napięciem, ale 5V powinno być OK dla czerwonej LED - UWAGA inne kolory mają wyższe spadki napięcia i będzie trzeba dobrać inne napięcie)
https://www.digikey.pl/pl/resources/conversion-calculators/conversion-calculator-led-series-resistor
na tym schemacie czerwona LED jest jednocześnie zabezpieczeniem wejścia GPIO przez zbyt wysokim napięciem (jakim by było 5V bez tej diody) sugeruję rezystor 100 omów, każdy impuls powinien dać w efekcie wyraźne mignięcie LED

nikt nie skomentował tamtego rysunku, ale w ten sposób to można co najwyżej puścić z dymem wyjście impulsowe w liczniku

Podpięty jest TV, żeby nie tworzyć sztucznych obciążeń (no i grzejnik czy czajnik ma moc >1KW, a te piki - wcześniej - zdarzały się dość rzadko). Teraz - skoro już mam 320W to coś więcej musi się dziać. Po powrocie podłączę normalny rezystor (i diodę) i zobaczymy.

myślałem, że wbudowana dioda jest spięta z wyjściem OC, wszak jeśli nadal będzie raportował 320W to już wychwycę miganie czętsze niż co 42s.

Wbudowana w licznik dioda jest wysterowywana z tego samego źródła co wyjście OC, ale oczywiście nie jest podpięta bezpośrednio do wyjścia OC, tylko w zupełnie innym miejscu (bo jej warunki pracy muszą być niezależne od tego co sobie użytkownik wepnie w wyjście OC).

Ba możesz też sobie zbudować dodatkową “diodę statusu” podążającą z tym co ESP dostaje na wejściu (ale tu bym użył oddzielne GPIO jako wejście osobnej integracji), wtedy byś widział czy wszystkie te LEDy migają w tym samym momencie, i czy któraś nie miga bez powodu.

Zauważ, że gdy częstotliwość migania przekroczy kilka Hz, to już tego nie ogarniesz organoleptycznie, bo nikt nie jest w stanie tak szybko liczyć.

Hmm 300W jest normalne dla 43calowej plazmy wyświetlającej jasny obraz, podobnie dla starszych generacji OLED, natomiast w mniej lub bardziej zwykłych LCD (jak by się nie nazywały - choćby QLED :smiley: raczej 100W dla rozmiaru w okolicach 50 cali jest górną granicą), warto zwrócić uwagę, że średnia moc pobierana przez tv w danej technologii wykonania jest proporcjonalna do kwadratu jego przekątnej, więc 100cali będzie pobierał 4x więcej energii od 50 cali, przy tej samej technologii i zbliżonych ustawieniach na samo świecenie ekranem, które de facto jest głównym miejscem poboru energii w tv, bo cała reszta to kilka-kilkanaście W.

Mam równolegle podpiętego gosunda 111, który wskazuje ca. 85W

Czyli stawiam na LCD koło 50 cali, ale chyba jakąś tabliczkę znamionową ma?

75"
Ze strony producenta:

Na wykresie poniżej dodałem encję gosunda: