Sterowniki TECH i protokół RS

dzień dobry

czy ktoś z szanownych tutaj zgromadzonych maczał już palce w temacie przypinania sterowników tech do czegoś swojego albo czegoś swojego do sterownika tech (protokół RS - własne rozwiązanie producenta) ?

mój scenariusz to wsawienie “swoich” czujników pokojowych albo swoich termostatów

to czego mi brakuje to sterowanie z jednego termostatu grzaniem i chłodzeniem, zalezy mi na tym, żeby nie wieszać kolejnych gadzetow w kazdym pomieszczeniu
jedno z rozwiazan to byly wlasnie taki “nic nie mające, niczym nie swiecace” czujniki temperatury zamaskowane na tyle na ile to mozliwe
drugie to cos jak nspanel: czujnik + wyswietlacz(dotykowy) pozwalajacy zmienic ustawienie temperatury

protokol RS - bo juz mam urzadzenie grzewcze z protokolem RS
swoje - bo chlodzenie nie umie gadac po protokole RS tylko w czyms swoim
pospinac jedno i drugie chce w HA

Tak, wystarczy użyć lupki, można też wpisać w wyszukiwarce forum tag tech.

P.S.
Nie ma czegoś takiego jak “protokół RS”.

1 polubienie

OK

mi by się nie chciało pisać takiego truizmu ale każdy robi co lubi

(1) tylko dlatego, że to jedna z niezbyt wielu społeczności gdzie jest szansa na to, że ktoś dłubał w podobnym temacie (2) i dlatego, że przeszukałem wszystko co tutaj jest zadałem pytanie w takiej formie. Wszystko co daje się znaleźć jest minimalnie związane z tematem ale nie jest odpowiedzią na moje pytanie

co do protokołu RS i tego czy istnieje czy nie :slight_smile:
ja sprawdziłem i wiem co pisze, mam wrażenie ze piszesz w oparciu o coś co Ci sie tylko wydaje, pewności nie masz

tak czy inaczej - podtrzymuje moje pytanie
tak, tak - wiem jest integracja dla emoduł i jakoś do sterowników tech to sięga ale to nie jest to co chciałbym osiagnac

Standard (nawet nie wspomniałeś jaki to RS) RS232 czy RS485 definiuje warstwę sprzętową połączenia, ale niekoniecznie protokół komunikacyjny z niej korzystający.
Często korzysta się z protokołu modbus, ale można użyć innych, w tym wymyślić sobie jakiś własny i z niego korzystać… (a jak znam życie to Tech używa czegoś niestandardowego).

Protokół RS-232 (ciekawostka - wcale nie musi być wykorzystywany na warstwie sprzętowej portu szeregowego RS-232) to de facto protokół dalekopisu (telexu), więc raczej średnio do wykorzystania.

Podejrzewam, że jesteś pionierem w kwestii swojego pomysłu, więc dużo roboty Cię czeka, pewnie autorzy integracji Tech (komponentu niestandardowego) poświęcili już swój czas na inżynierię wsteczną, więc na twoim miejscu zacząłbym od czytania również zamkniętych issues w tym właśnie projekcie (bo akurat ten producent nie jest pomocny).

PS Tak w kwestii wyszukiwania, niestety miażdżąca większość nowych użytkowników tego nie robi, więc miło, że jesteś wyjątkiem.

OK

Juz wiem gdzie zrobiłem błąd a nawet dwa: nie wskazałem precyzyjnie o jakim protokole RS mowa, załozylem po cichu ze jak Tech i RS to bedzie oczywiste
no i nie zaznaczyłem jak bardzo istotne jest dla mnie lokalne sterowanie tą całą konfiguracją. Zdeycowanie nie może sie to odbywać “przez internet”
Z internetu chętnie rzuce na całośc okiem ale to juz z poziomu HA, sama osługa sygnałów z czujników, sterowanie ma odbyć sie lokalnie.

Wiem, że jest 232, 485 i jeszcze pare innych, w systemy komunikacji przemysłowej jestem umoczony kilka solidnych lat :slight_smile:
Co do dużo roboty - względna kwestia, robie dla siebie, mam czas i troche srodkow. Zrodlo ciepla kilka lat zostanie ze mna, wiem ze moge sterowac nim w dosyc ordynarny sposob: wlacz/wylacz ale nie osiagne w ten sposob tego co chce.
Co do komponentu do tech - ta integracja robione jest “przez internet”, esluga emodul do ktorej komponent integracyjny logujesz. Calkiem nie tak widze lokalne sterowanie

Co do samego protokolu

Regulatory pokojowe z komunikacją RS - TECH Sterowniki.

i nastepny obrazek gdzie widac ze “ten” RS to nie jest ten RS ktory sie pierwszy nasuwa na mysl

@szopen - tak czy inaczej ciesze sie, że zwróciłeś na ten post uwagę, nie ukrywam: liczyłem na Ciebie
przeglądam to forum od dłuższego czasu, widze co robisz, widze co piszesz

czapka z głowy!

1 polubienie

Prace nad rozszyfrowaniem sławetnego “protokołu RS” od TECHSterowniki trwają od 2013r i zmienienia się on nieco, zależnie od regulatorów/sprzętu.

Miłej lektury:
https://www.elektroda.pl/rtvforum/topic2689981.html

Temat wciąż żywy, a w nim link do tego projektu, będącego jednym z owoców pracy inżynierii wstecznej na elektrodzie:

A w tym poście opis dla zbudowanej bramki odbiorczej pod ESPHome:
https://www.elektroda.pl/rtvforum/topic2689981-300.html#20391043

uart:
  id: uart_bus
  tx_pin: 5
  rx_pin: 3
  baud_rate: 9600
  debug:
    direction: BOTH
    dummy_receiver: true
    #after:
      #delimiter:
    sequence:
      - lambda: |-
          UARTDebug::log_hex(direction, bytes, ' ');  //Still log the data
          if (bytes.size()==100) {
            if(bytes[0]==0x02 && bytes[3]==0xF4) {
              if(bytes[15]==0x50){
                id(State).publish_state("Podtrzymanie");}
              if(bytes[15]==0x02){
                id(State).publish_state("Praca");}
              if(bytes[15]==0x82 || bytes[15]==0x52){
                id(State).publish_state("Nadzór");}
              if(bytes[15]==0x09){
                id(State).publish_state("Alarm: Temp. nie rośnie");}
              if(bytes[15]==0x0E){
                id(State).publish_state("Alarm: Czujnik CO uszkodzony");}
              if(bytes[15]==0x0A){
                id(State).publish_state("Alarm: Czujnik podajnika uszkodzony");}
              if(bytes[15]==0x27){
                id(State).publish_state("Alarm: Czujnik podłogi uszkodzony");}
              if(bytes[15]==0x29){
                id(State).publish_state("Alarm: Czujnik zaworu uszkodzony");}
              //Tryb pomp
              if(bytes[39]==0x00){
                id(Pumpmode).publish_state("Ogrzewanie domu");}
              if(bytes[39]==0x02){
                id(Pumpmode).publish_state("Pompy równoległe");}
              if(bytes[39]==0x03){
                id(Pumpmode).publish_state("Tryb letni");}
              if(bytes[39]==0x04){
                id(Pumpmode).publish_state("Priorytet bojlera");}
              //Pompa CO
              if(bytes[51]==0x00){
                id(COpumpState).publish_state("Wył");}
              if(bytes[51]==0x01){
                id(COpumpState).publish_state("Wł");}
              //Pompa CWU
              if(bytes[55]==0x00){
                id(CWUpumpState).publish_state("Wył");}
              if(bytes[55]==0x01){
                id(CWUpumpState).publish_state("Wł");}
              //Podajnik
              if(bytes[59]==0x00){
                id(PODstate).publish_state("Wył");}
              if(bytes[59]==0x01){
                id(PODstate).publish_state("Wł");}
              float COtemp = ((bytes[19] | (bytes[18] << 8) ) / 10.0);
              id(tempCO).publish_state(COtemp);
              float setCOtemp = ((bytes[23] | (bytes[22] << 8) ) / 1.0);
              id(setCO).publish_state(setCOtemp);
              float setCWUtemp = ((bytes[31] | (bytes[30] << 8) ) / 1.0);
              id(setCWU).publish_state(setCWUtemp);
              float CWUtemp = ((bytes[27] | (bytes[26] << 8) ) / 10.0);
              id(tempCWU).publish_state(CWUtemp);
              float PODtemp = ((bytes[71] | (bytes[70] << 8) ) / 10.0);
              id(tempPOD).publish_state(PODtemp);
              float COmax = (bytes[6] / 1.0);
              id(maxCO).publish_state(COmax);
              float COmin = (bytes[7] / 1.0);
              id(minCO).publish_state(COmin);
              float CWUmax = (bytes[10] / 1.0);
              id(maxCWU).publish_state(CWUmax);
              float CWUmin = (bytes[11] / 1.0);
              id(minCWU).publish_state(CWUmin);
              float ventP = (bytes[67] / 1.0);
              id(vent_power).publish_state(ventP);
              //ESP_LOGV("temperatura CO", "  temp: %X",  bytes[64]);
              //ESP_LOGV("temperatura CO", "  temp: %X",  bytes[65]);
              //ESP_LOGV("temperatura CO", "  temp: %f",  (bytes[19] | (bytes[18] << 8) ) / 10.0);
            }
          }
       

text_sensor:
  - platform: template
    name: "Pompa CO"
    id: "COpumpState"
    icon: "mdi:pump"
  - platform: template
    name: "Pompa CWU"
    id: "CWUpumpState"
    icon: "mdi:pump"
  - platform: template
    name: "Podajnik"
    id: "PODstate"
    icon: "mdi:filter-cog"
  - platform: template
    name: "Tryb pracy"
    id: "Pumpmode"
    icon: "mdi:cog"
  - platform: template
    name: "Stan sterownika"
    id: "State"
    icon: "mdi:cog"


sensor:
  - platform: template
    name: "Temperatura CO"
    id: tempCO
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
    device_class: "temperature"
  - platform: template
    name: "Temperatura CWU"
    id: tempCWU
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
    device_class: "temperature"
  - platform: template
    name: "Temperatura podajnika"
    id: tempPOD
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
    device_class: "temperature"
  - platform: template
    name: "Temp. max CO"
    id: "maxCO"
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
  - platform: template
    name: "Temp. min CO"
    id: minCO
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
  - platform: template
    name: "Temp. max CWU"
    id: maxCWU
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
  - platform: template
    name: "Temp. min CWU"
    id: minCWU
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
  - platform: template
    name: "Moc nawiewu"
    id: vent_power
    icon: "mdi:fan"
    unit_of_measurement: "%"
  - platform: template
    name: "Zadana temp. CO"
    id: setCO
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
  - platform: template
    name: "Zadana temp. CWU"
    id: setCWU
    icon: "mdi:coolant-temperature"
    unit_of_measurement: "°C"
  # - platform: ultrasonic
  #   trigger_pin: 2
  #   echo_pin: 15
  #   update_interval: 1800s
  #   id: zasobnik_sensor
  #   name: "Napełnienie zasobnika piec"

button:
  - platform: template
    name: "Tryb letni"
    on_press:
      - uart.write: [0x02, 0x26, 0xFF, 0xF4, 0x02, 0x45, 0x00, 0x03, 0x02, 0x18, 0x37, 0x17]
  - platform: template
    name: "Tryb pomp równoległych"
    on_press:
      - uart.write: [0x02, 0x26, 0xFF, 0xF4, 0x02, 0x45, 0x00, 0x02, 0x02, 0x18, 0x26, 0x9E]
3 polubienia

Cześć. Mi się udało zrozumieć dużą część protokołu który leci po RS485 między regulatorami pokojowymi, a listwami sterującymi (nazywają go Tech SBUS).

Skrypt, który znajdziesz w tym repozytorium umie odczytywać z szyny RS bieżące i zadane temperatury, wilgotność polecenie grzania strefy… Zresztą - wszystko jest tam opisane.

1 polubienie