ESPHome problem z odczytami ds18b20

Cześć
Podłączyłem pod duży zbiornik CWU 300L trzy czujniki DS18b20.
Czujniki podpięte pod ESP8266 D1 wemos przez rezystor podciagający 4,7kohm z nowszym firmware.
Wszystko niby działa ok ale co kilkanaście odczytów wartość temperatury nieznany.
Niby w niczym to nie przeszkadza, ale jednak trochę drażni. Pomyślałem, że może są jakieś zakłócenia zbiera z przewodów itp dlatego podłączyłem na testy jeden czujnik pod inne gpio i też rezystor 4,7k i tam to samo. Przewody krótkie, bo ok 2 mb.

  1. Czy ktoś podpowie mi co może być przyczyną, lub co mogę zrobić aby ha nie zmieniał odczytanej temp jeżeli jest wartość nieznany - może jakiś filtr czy cos takiego?.

  2. Czy ktoś podpowie mi co musiałbym dopisać do tego kodu aby po przekroczeniu temp czujnika Bojler2 powyżej 75sC wystetował mi gpio04 ?
    Mam zrobioną automatyzacje w NR, ale potrzebuje zabezpieczenie w obrębie tej płytki, aby rozłączyło mi grzałki w razie przekroczenia 75SC na Bojler2.
    Chce to zrobic najprościej przekracza 75sC zał gpio04

esphome:
  name: cwu-termostat
  friendly_name: CWU Termostat

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "/WxcuXBhXwudTCCvo9gsO9Hlhch77ugIxTaiBD3EDVg="

ota:
  - platform: esphome
    password: "49c29e3c059c9079ec494047c24e0027"

wifi:
  ssid: siec
  password: haslo

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Cwu-Termostat Hotspot"
    password: "mxGni0M3MO2q"  #a

  manual_ip:
    static_ip: 192.168.33.51
    gateway: 192.168.33.1
    subnet: 255.255.255.0


one_wire:
  - platform: gpio
    pin: GPIO12 #D6
    id: bus_onewire_a

  - platform: gpio
    pin: GPIO13 #D7
    id: bus_onewire_b

sensor:
  - platform: dallas_temp
    one_wire_id: bus_onewire_a
    address: 0x4b00000038c5c228
    id: Bojler1
    name: Bojler1
    update_interval: 10s
    filters:  # te dwie sekcje zwiększają temperature odczytywaną o 5 sC
    - offset: 7.0

  - platform: dallas_temp
    one_wire_id: bus_onewire_a 
    address: 0x3300000038f3b928
    id: Bojler2
    name: Bojler2
    update_interval: 10s

  - platform: dallas_temp
    one_wire_id: bus_onewire_a 
    address: 0x53000000386ab628
    id: Bojler3
    name: Bojler3
    update_interval: 10s

  - platform: dallas_temp
    one_wire_id: bus_onewire_b 
    address: 0xc600000067fd8228
    id: Bojler_mniejszy
    name: Bojler_mniejszy
    update_interval: 10s


switch:
  - platform: gpio
    name: przekaznik_CWU_1
    id: przekaznik_CWU_1
    pin: 
      number: GPIO5
      #obraca stan przekaznika
      inverted: true
      mode:
        output: true 
  - platform: gpio
    name: przekaznik_CWU_2
    id: przekaznik_CWU_2
    pin: 
      number: GPIO4
      #obraca stan przekaznika
      inverted: true
      mode:
        output: true

#sterowanie przekaznikiem ssr D8
  - platform: gpio
    name: przekaznik_ssr_1
    id: przekaznik_ssr_1
    pin: 
      number: GPIO15 #D8
      #obraca stan przekaznika
      #inverted: true
      mode:
        output: true 

#sterowanie przekaznikiem ssr D5
  - platform: gpio
    name: przekaznik_ssr_2
    id: przekaznik_ssr_2
    pin: 
      number: GPIO14
      #obraca stan przekaznika
      #inverted: true
      mode:
        output: true 




binary_sensor:
  - platform: gpio
    pin: 
      number: GPIO2
      inverted: True # Opcjonalne: odwrócenie stanu, jeśli logiczne 0 daje odczyt wysokiego stanu
    name: "Czujnik_binarny_bojler"


web_server:
 port: 80


captive_portal:
    


.

Spróbuj może częstotliwość odpytywania poprawi sytuację>

  • update_interval (Optional, Time): The interval that the sensors should be checked. Defaults to 60 seconds.

jeżeli temperatura spadnie poniżej 72’C załączy grzałkę

  - platform: dallas_temp
    one_wire_id: bus_onewire_a 
    address: 0x3300000038f3b928
    id: Bojler2
    name: Bojler2
#    update_interval: 10s
    on_value_range:
      - below: 72.0
        then:
          - switch.turn_on: przekaznik_ssr_1
          - switch.turn_on: przekaznik_ssr_2
          - logger.log: "Temperatura CWU<72C"

można tu dodać warunek

      - above: 75.0      
        then:
            - switch.turn_off: przekaznik_ssr_1
            - switch.turn_off: przekaznik_ssr_2

przy tym rozwiązaniu istnieje ryzyko jeżeli temperatura przekroczy 75.0’C w tym czasie esp nie będzie działać grzałka nie zostanie wyłączona.
Lepszym rozwiązaniem jest

interval:
  - interval: 60s
    then:
      - if:
          condition:
            sensor.in_range:
              id: Solar_1
              above: 75
          then:
            - switch.turn_off: przekaznik_ssr_1
            - switch.turn_off: przekaznik_ssr_2

co 60 sekund będzie sprawdzać temperaturę w zbiorniku , jeżeli temp będzie większa od 75 'C wyłączy bojler

  1. będe testował
  2. Działa
    Bardzo dziękuje za pomoc.

W tej kwesti polecam skorzystać z alternatywnego komponentu dla czujników Dallas GitHub - nrandell/dallasng
Miałem identyczny problem - 5 czujników DS18B20 podpiętych na jednej magistrali 1-wire. Też co któryś odczyt pojawiały się wartości nieznany. Również sądziłem że to kwestia zakłóceń na magistrali, jednak ekranowanie nie za wiele pomogło. Dopiero zmiana na komponent dallasng wyeliminowała ten problem. Aby skorzystać z tego komponentu musisz dodać komponent niestandardowy dallasng oraz zmienić definicje sensorów.
Dla ułatwienia podaję moją konfigurację komponentu i jednego z czujników

external_components:
    - source: github://nrandell/dallasng
dallasng:
  - pin: GPIO13
sensor:
  - platform: dallasng
    address: 0xd13c3ef648f4ee28
    name: "Temperatura CWU"
    unit_of_measurement: "°C"
    device_class: "temperature"
    accuracy_decimals: 1
    id: Tcwu 
    filters:
      - heartbeat: 60s
1 polubienie

najlepszym zabezpieczeniem jest zabezpieczenie sprzętowe, zawsze pewne, że zadziała, typu jakiś termostat przekaźnikowy, gdyż w przypadku jakiejkolwiek awarii może nie zadziałać Twój programowy rozłącznik. Miałem podobnie jak Ty, jednak z racji bezpieczeństwa zmieniłem na taki, co by się nie działo przy 80 stopniach rozłącza i załącza się dopiero jak temperatura spadnie do 75 stopni

1 polubienie

@cinek :
jakiego termostatu / elementu użyles do tego sprzetowego zabezpieczenia

mam dokladnie taki sam temat na tapecie:
ESP32 + SSR-y + DS18B20 pilnujacy temperatury

wszystko dziala jak dzialac powinno ale zostaje to male ale (“powieszony” ESP32, powieszony HA, brak komunikacji itd)
warto zeby nad wszystkim wisial jakis najprostszy z prostych automat ktory juz w skrajnej sytuacji (np 80 stopni) odetnie zasilanie grzałkom

On ma styki nc/no lecz pod nie bezpośrednio nie mam podłączonych grzałek, bo chyba nie wytrzyma, podpiąłem miedzy nim a grzałkami stycznik, a Ty mozesz sobie w ten szereg z regulatorem do wysterowania stycznika wpiąć swoje esp z przekaźnikem nc/no. Ja mam u siebie wpięty sonoff powrd320d z wyświetlaczem i widzę dzieki temu ile grzałka pobiera mocy

Tez zmagam sie z podobnym problemem.
Jeśli jest zasilany z 3.3V to rozważ rezystor 2k ohm lub mniejszy
Jesli 5V to 3.3kohm badz mniejszy

uzywam takich filtrow, odczyt co 3-5 sekund

filters:
       - filter_out: nan
       - filter_out: 85
       - median:
          window_size: 10
          send_every: 10
          send_first_at: 3

w kotlowni mam 3m - 4m przewod i na koncu zrobilem mala plytke z rezystorem i kilkoma 3 pinowymi koncowkami, do nich mam wpiete kilkanascie czujnikow ze srednio 2m kablami. Ostatnio dolozylem dodatkowy rezystor i narazie nie ma bledow odczytu.
Zasilane jest z 5v przez level converter

cześć
a podpowiesz mi gdzie ten kod mam wklepać aby filtrować niepożądane odczyty temperatur?. Próbuje wkleić go do kodu w ESPHome Builder i mam błąd

Korzystaj z dokumentacji

druga ramka Note - tam się dowiesz gdzie umieścić filtry i jak wyglądają wcięcia w YAML

Bardzo dziekuje za nakierowanie.
Poprawiłem działa odczyty bez błędów pozdrawiam

1 polubienie