Jak połączyć w kodzie grupe czujników dallas z czujnikiem wilgotności?

Witam.
Mam problem w kodzie w którym chciałem mieć sensory z 4 czujników dallas i jeden sensor z czujnika wilgotności gleby. Do tego pory miałem to na osobnych płytkach. Udało mi się już nawet dojść do momentu w którym nie wywala błedu i poszedł kod na płytke… jednak był tylko odczyt wilgotności.
Dla Was pewnie to jest pikuś ale ja zrobiłem dotąd kilka banalnych rzeczy i to na osobnych płytkach i nie potrafie ogarnac połączenia tego w całość bez błędów

sensor:
- platform: adc
  pin: GPIO33
  name: "wilgotnosc gleby"
  attenuation: auto
  unit_of_measurement: "%"
  update_interval: 10s
  filters:
  - median:    # median over the last 7
      window_size: 7
      send_every:  4
      send_first_at: 1
  - calibrate_linear:  #setting the vo
      - 3.13 -> 0.00
      - 2.40 -> 100.00
    #limit the value to 0 and 100%
  - lambda: |-
     if (x < 0) return 0;
     else if (x > 100) return 100;
     else return (x);

dallas:
  - pin: GPIO14
sensor:
      - platform: dallas
        address: 0x6d030997943f4028
        name: "1"
      - platform: dallas
        address: 0xd80305979433e728
        name: "2"
      - platform: dallas
        address: 0xa0030794970ed728
        name: "3"
      - platform: dallas
        address: 0xf2030594976bd728
        name: "4"

Jeszcze jakby ktoś mógł podpowiedzieć jak dodac do HA esp32 które zostało usunięte i jak w urządzeniu esp32 działającym zmienić punkt dostępowy (hasło pozostaje bez zmian) ?? czytam na esphome i nie widze nic co by mnie naprowadziło.

Zrestartować HA, zostanie ponownie auto-wykryte jeśli jest w tym samym fizycznym segmencie sieci LAN.
Lub dodaj w integracji ręcznie podając IP jeśli jest w innym oraz najlepiej zrób rezerwację adresu używając DHCP + ARP na routerze (przydział w ten sposób jest rozsądnym posunięciem również jeśli cały LAN masz w 1 segmencie fizycznym) lub skonfiguruj statyczne IP w urządzeniu ESPHome tj. w YAML).

Oczywiście jeśli korzystasz z szyfrowanego API to przy dodawaniu podajesz klucz (jest w YAMLu w sekcji api:), kreator pierwszego dodawania podaje go z automatu, natomiast w przypadku kolejnego dodawania musisz robić to świadomie.

Reszta jutro, bo nie ogarnę poprawek w Twoim poście z telefonu.


Komentarz - wstawki […] są zastępnikiem kodu który pominąłem dla podkreślenia czytelności tego co istotne, oczywiście ten jakiś-tam kod ma być i to z prawidłowymi wcięciami, a wstawki […] są do likwidacji.

cd.
W całym YAMLu każda sekcja może wystąpić tylko raz, w tym powyżej masz zdublowaną sekcję sensor (nie ważne, że zawiera sensory z rożnych integracji, ma być tylko jedna)

sensor:
- platform: adc
  pin: GPIO33
[...]
dallas:
  - pin: GPIO14
sensor:
      - platform: dallas
[...]

Oprócz tego wcięcia masz złe (w platforrmie adc raczej były dobre - skoro działało, a w dallasie chyba dowaliłeś spacji aby tylko kompilacja nie sypnęła błędami) w pewnym stopniu interpreter YAMLa jest odporny na delikatne błędy składniowe, ale zasadniczo najlepiej stosować taką głębokość wcięć, jaką przewiduje dokumentacja (nie umiem wytłumaczyć składni YAMLa, ale ilość spacji jest tam kluczowym składnikiem) .
Więc finalnie ma to być jakoś tak

dallas:
  - pin: GPIO14

# powyżej celowo zostawiłem pustą linię by wizualnie wyróżnić oddzielną sekcję
# a poniżej masz tylko jedną sekcję sensor
sensor:
  - platform: adc
    pin: GPIO33
[...]
  - platform: dallas
    address: 0x6d030997943f4028
    name: "1"
[...]

Ponadto ja sugeruję by zachować sobie jakiś porządek w YAMLu np. na początku zostawiając sekcje związanie z działaniem samego ESP/sieci itd. (to co jest w minimalnym zestawie z kreatora + wszelkie tematy pokrewne)
potem np. deklaracje integracji (zwykle powiązane też z “pinologią”) a no końcu sekcje przełączników, przycisków, sensorów, sensorów binarnych itp.


No tu to sprawa jest trochę bardziej skomplikowana, więc metoda jaką wybierzesz zależy od warunków, można przeflaszować z nowym SSID i zanieść urządzenie w miejsce docelowe, ale najprościej dodać listę sieci do których ma się łączyć

możesz nawet dodać dodatkowe dane uwierzytelniania do secrets.yaml, wtedy nie musisz podawać jawnie, jeśli 2x to samo hasło to wystarczy taka konstrukcja bliska domyślnej:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_password
  - ssid: !secret wifi_ssid_innego_ap
    password: !secret wifi_password

to oczywiście po dodaniu wpisu w secrets.yaml
wifi_ssid_innego_ap: jakis_tam_ssid

Dzieki. No właśnie w kodzie nie potrafiłem dojść do ładu z tym żeby mi sie nie dublowało i stad wywalało ciągle błedy…
We wtorek bede miał możliwość to zajme sie tematem podpięcia fizycznie czujników i zobaczymy co to przyniesie. Nie wyrzuciło błędów i pięknie poszło… ale czy w związku z brakiem podpiętych czujników (adresy mam prawidłowe i sprawdzone) może nie utworzyć encji do nich? jest tylko sama encja czujnika wilgotności…
Kod poszedł na płytke taki jak niżej:

dallas:
  - pin: GPIO14

# powyżej celowo zostawiłem pustą linię by wizualnie wyróżnić oddzielną sekcję
# a poniżej masz tylko jedną sekcję sensor
sensor:
  - platform: adc
    pin: GPIO33
    name: "wilgotnosc gleby"
    attenuation: auto
    unit_of_measurement: "%"
    update_interval: 10s
    filters:
    - median:    # median over the last 7
        window_size: 7
        send_every:  4
        send_first_at: 1
    - calibrate_linear:  #setting the vo
        - 3.13 -> 0.00
        - 2.40 -> 100.00
    #limit the value to 0 and 100%
    - lambda: |-
        if (x < 0) return 0;
        else if (x > 100) return 100;
        else return (x);




  - platform: dallas
    address: 0x6d030997943f4028
    name: "11"
  - platform: dallas
    address: 0xd80305979433e728
    name: "22"
  - platform: dallas
    address: 0xa0030794970ed728
    name: "33"
  - platform: dallas
    address: 0xf2030594976bd728
    name: "44"

Czy mając adresy czujnikow dallas i wprowadzając je poprawnie do kodu to w HA powstaną encje pomimo nie wykrycia czujników (beda np niedostępne) czy już na etapie wgrywania kodu sprawdzi ze ich podpietych fizycznie brak i nie utworzy encji? Przeważnie w HA kod mozna stworzyć “na sucho” i najwyzej encja bedzie niedostępna. W przypadku esphome jest tak samo?
Niby w logach jest o nich wspomnianie ale encji brak…

[00:15:05][E][dallas.sensor:112]: Requesting conversion failed
[00:15:05][D][sensor:110]: '11': Sending state nan °C with 1 decimals of accuracy
[00:15:05][D][sensor:110]: '22': Sending state nan °C with 1 decimals of accuracy
[00:15:05][D][sensor:110]: '33': Sending state nan °C with 1 decimals of accuracy
[00:15:05][D][sensor:110]: '44': Sending state nan °C with 1 decimals of accuracy
[00:15:08][D][sensor:110]: 'wilgotnosc gleby': Sending state 33.72463 % with 2 decimals of accuracy

Może cos jeszcze schrzaniłem?  

Nie wiem, tego nigdy tak nie testowałem, a nie mam czasu na zabawę w fizyczny eksperyment (musiałbym najpierw znaleźć jakiegoś dallasa, żeby podpiąć, bo nie używam), proponuję dodać kod w postaci zakomentowanej (płotki # wstaw na początku każdej takiej linii) a jak będziesz już miał te czujniki to sobie odkomentujesz i puścisz OTA.

Wrzuciłem te twoje czujniki do wsadu w RPi pico W
pustedallasy_2023-05-01_00-23

OK dzieki za pomoc! dużo mi pomogłeś i nakierowałeś.
Miłej majówki! :beers:

CytatWrzuciłem te twoje czujniki do wsadu w RPi pico W

U Ciebie powstały encje normalnie… U mnie w kodzie powyżej nie powstały, czyli wychodzi na to, że z kodem jeszcze cos nie gra :expressionless:

Nie używaj tabulatorów tylko zwykłe spacje (jak wkleiłem ten twój kod to był z tym jakiś wałek)

sensor:
  - platform: dallas
    address: 0x6d030997943f4028
    name: "1"
  - platform: dallas
    address: 0xd80305979433e728
    name: "2"
  - platform: dallas
    address: 0xa0030794970ed728
    name: "3"
  - platform: dallas
    address: 0xf2030594976bd728
    name: "4"
  - platform: internal_temperature
    name: "Internal RPi pico W Temperature"
    accuracy_decimals: 1
  - platform: wifi_signal
    name: "RPi Pico W sygnał WiFi"
    update_interval: 60s
  - platform: uptime
    name: "RPi Pico W Uptime"
    filters:
      - lambda: return x / 3600;
    unit_of_measurement: "h"

Powyższe działa i co weselsze na module ESP32 też powinno.
Oczywiście mam też sekcję definiującą magistralę dallasów (tylko nie wklejałem).

CytatNie używaj tabulatorów tylko zwykłe spacje

Tego nie wiedziałem i wygodnictwo wzięło góre… jak się okaże ze to tab sprawia psikusy to może rozwiąże się jeszcze kilka innych moich problemów :wink:

Ale mimo to nie gwarantuję, że ESPHome zachowuje się identycznie na esp32 jak na rpipicow.
PS
przy filtrach w tym analogowym czujniku masz po 2 spacje za mało (za płytkie wcięcia - sprawdzaj takie rzeczy z dokumentacją).

W logach z uruchomienia powinieneś mieć coś takiego - to tak a’propos tych dallasów, jak widać przeskanował magistralę i nic na niej nie znalazł

[00:47:29][C][dallas.sensor:075]: DallasComponent:
[00:47:29][C][dallas.sensor:076]:   Pin: GPIO14
[00:47:29][C][dallas.sensor:077]:   Update Interval: 60.0s
[00:47:29][W][dallas.sensor:080]:   Found no sensors!
[00:47:29][C][dallas.sensor:089]:   Device '1'
[00:47:29][C][dallas.sensor:089]:     Device Class: 'temperature'
[00:47:29][C][dallas.sensor:089]:     State Class: 'measurement'
[00:47:29][C][dallas.sensor:089]:     Unit of Measurement: '°C'
[00:47:29][C][dallas.sensor:089]:     Accuracy Decimals: 1
[00:47:29][C][dallas.sensor:097]:     Address: 0x6d030997943f4028
[00:47:29][C][dallas.sensor:098]:     Resolution: 12
[00:47:29][C][dallas.sensor:089]:   Device '2'
[00:47:29][C][dallas.sensor:089]:     Device Class: 'temperature'
[00:47:29][C][dallas.sensor:089]:     State Class: 'measurement'
[00:47:29][C][dallas.sensor:089]:     Unit of Measurement: '°C'
[00:47:29][C][dallas.sensor:089]:     Accuracy Decimals: 1
[00:47:29][C][dallas.sensor:097]:     Address: 0xd80305979433e728
[00:47:29][C][dallas.sensor:098]:     Resolution: 12
[00:47:29][C][dallas.sensor:089]:   Device '3'
[00:47:29][C][dallas.sensor:089]:     Device Class: 'temperature'
[00:47:29][C][dallas.sensor:089]:     State Class: 'measurement'
[00:47:29][C][dallas.sensor:089]:     Unit of Measurement: '°C'
[00:47:29][C][dallas.sensor:089]:     Accuracy Decimals: 1
[00:47:29][C][dallas.sensor:097]:     Address: 0xa0030794970ed728
[00:47:29][C][dallas.sensor:098]:     Resolution: 12
[00:47:29][C][dallas.sensor:089]:   Device '4'
[00:47:29][C][dallas.sensor:089]:     Device Class: 'temperature'
[00:47:29][C][dallas.sensor:089]:     State Class: 'measurement'
[00:47:29][C][dallas.sensor:089]:     Unit of Measurement: '°C'
[00:47:29][C][dallas.sensor:089]:     Accuracy Decimals: 1
[00:47:29][C][dallas.sensor:097]:     Address: 0xf2030594976bd728
[00:47:29][C][dallas.sensor:098]:     Resolution: 12