Nasłuch magistrali UART przez ESP

Cześć.
Mam pewien sterownik który na porcie szeregowym wypluwa dane, dane to temperatury.
Pomoglibyście ogarnąć kod dla esphome aby te temperatury wyłuskać do HA?
W przykładach widzę tylko konfigurację portu ale już odczytu nie.

“Dawno, dawno temu… w odległej galaktyce…”
Podaj jakieś konkrety, wtedy może ktoś pomoże.

1 polubienie

W końcu się za to wziąłem.
Esp odbiera mi jakieś dane. Interwały czasowe odbiorów niby się zgadzają bo nadajnik wysyła co minutę i esp tak odbiera ale już odebrane dane są bez sensu.
Nadajnik wysyła takie dane (kod z Bascom):

$baud = 19200

If Minuty_spr <> Minuty Then                                'co minute
 Disable Interrupts
  Stan_pompy = Pompa
   Send(1) = Ts                                             'przepisz wartosci temperatur i stanu sterownika do zmiennej tablicowej
    Send(2) = Tb
     Send(3) = Tzew
      Send(4) = Stan_zaworu
       Send(5) = Stan_pompy
        Send(6) = Stan_swiatla
       Suma_crc_nadajnik = Crc16(send(1) , 12)              'oblicz sume kontrolna dla tablicy
      Send(7) = Suma_crc_nadajnik                           'dodaj sume kontrolna do tablicy
     Printbin Send(1) ; 14                                  'i wyslij przez uart
    Enable Interrupts
   End If

Czyli wysyła on 14 bajtów.
Esp odbiera mi takie dane:

[08:14:26][D][uart_debug:158]: <<< "3\x004\x00\xF4\xFF\x00\x01\x00\x01\x00\xD5\xFE"

Baudrate esp ustawiony na 19200

Użyłem tego kodu dla esp:

uart:
 - id: uart_bus1
   tx_pin: 0
   rx_pin: 2
   baud_rate: 19200
   debug:
     direction: BOTH
     dummy_receiver: true
     sequence:
        - lambda: UARTDebug::log_string(direction, bytes);

Dlaczego tak się dzieje?

Co do sensu danych to trudno się wypowiedzieć.
Co do ilości też :slight_smile: Brakuje definicji “after” - w jakiś sposób odbiornik powinien się synchronizować z wysyłanymi danymi.
Nie masz czasami reszty bajtów w osobnej linii debug?
Sprawdź czy na pewno wysyłasz 14 bajtów

  • UARTDebug::log_string(kierunek, bajty) Rejestruje bajty jako wartości łańcuchowe, unikając znaków niedrukowalnych.

Być może wszystko jest OK, i należy tylko użyć innej funkcji UARTDebug::…

Zmieniłem na:

UARTDebug::log_int(direction, bytes, ',');

No i powiem że w odebranych danych już widać interesujące mnie pozycje. Dziękuję za podsunięcie pozycji.
Teraz tylko potrzebuję te wartości “wydłubać” do HA.

W ogóle nie znam ESPHome i wszystkie rady wyczytałem w dokumentacji - więc polecam. :wink:

Próbowałem różnych sposobów, pytałem nawet chatbota i nie umiem wyciągnąć wartości temperatur do encji.
Chatbot podał mi taki kod ale esphome wyświetla błąd:

sensor:
  - platform: template
    sensors:
     first_value:
       friendly_name: "KOCIOŁ"
       value_template: "{{ value.split(',')[0] | int }}"
     second_value:
       friendly_name: "ZASOBNIK C.W.U."
       value_templte: "{{ value.split(',')[1] | int }}"

Pomoże mi ktoś pobrać pierwszą i trzecią wartość z tego ciągu odebranych danych?
Dane jakie obieram:
65,0,55,0,250,255,0,1,0,1,0,1,74,52

Jeśli o czymś piszesz to to pokaż! Wszystkiego trzeba się domyślać?
Próbujesz podzielić ten łańcuch za pomocą przecinków.

65,0,55,0,250,255,0,1,0,1,0,1,74,52

ale to jest tylko przezentacja bajtów w buforze, poza tym twoja liczba to int16 zapisywana w buforze jako kolejne dwa bajy .
i tak np dla trzeciej danej Tzew = 250,255 wynik to -6

Tak więc twój bufor to baty = B0 B1 B2 B3 B4 B5 … itd i aby wyliczyć Tzew = 256*B5 + B4

Dzięki za wskazówki.

Teraz próbuję wydzielić z tego ciągu wartości temperatur aby je wrzucić do encji.
Bardzo kiepsko mi to idzie, jak na razie bez rezultatu.