Tuya v2 integracja termostatów z home assistant

Czesc wszystkim.
Czy ktos update_towal tuya integracja do tuya v2?
Po update home assistance do 2021.10
Integracja nie MA opcji konfiguracja I nie moge dostosowac wartosci termostatow tuya do rzeczywistych danych z aplikacji tuya.
W starej integracji byla opcja umożliwiajaca korekcje pokazywanych temperatur o jakis wspolczynnik. Bez tego home assistant jakos mnozyl wartosc temperatur przez 2.
Ponadto teraz nie ma opcji wlacz/wylacz termostat. Moze ktos z Was wie jak sobie z tym poradzic?

Nadal czekam na poprawki
Moje klimay która nie był “kalibrowana” działa w nowej wersji bardzo dobrze .
Ogrzewanie podłogowe termostaty były kalibrowane działają złe.
Próbowałem przez drugie HA gdzie jest jeszcze stara wersja HA i tuya, kalibrować ale wszystko się rozjeżdża.
Z tego co czytałem na forach to można pobrać starą wersje Tuya i dodać do nowej wersji HA
Dodane:

1 polubienie

Dziekuje Panie Krabie. Sprobuje to zainstalowac. Przegladam też fora angielskie I niemieckie I nawet pisalem Tam prosbe o pod powiedz ale na razie brak odzewu. Jak tylko cos dostane dam znac. Pozdrawiam

Wrocilem do tuya old I termostat dzialaja jak poprzednio. Trzeba chyba poczekac na korekte integracji tuya v2. Jeszcze raz dzieki

Witam
Trochę odgrzeję kotleta ale nie znalazłem lepszego miejsca.
Jestem w trakcie przenoszenia urządzeń z chmury Tuya bezpośrednio do HA.
Sterowniki rolet i switche już przerobione na OBK. Wymagają jeszcze trochę kosmetyki ale to może poczekać. Teraz czas na termostaty - zmiana na ESPHome i powoli zaczyna to działać ale…
Tak wygląda teraz jeden z termostatów:


i teraz pytanie:
czy na etapie tworzenie termostatu w ESPHome mam szansę dodać właściwości/kategorię encji tak aby część z nich była jako diagnostyka, część jako konfiguracja?
jak np. tu:



Czy raczej muszę to robić w HA?
Może naiwne pytanie ale dopiero zaczynam.
Fragment kodu z ESP:

climate:
  - platform: tuya
    name: "Termostat"
    icon: mdi:heating-coil
    switch_datapoint: 1
    target_temperature_datapoint: 2
    current_temperature_datapoint: 3
    supports_heat: True
    supports_cool: False
    temperature_multiplier: 0.1
    active_state:
     datapoint: 5
     heating_value: 1
    visual:
     min_temperature: 10 °C
     max_temperature: 30 °C
     temperature_step: 0.1 °C

switch:
  - platform: tuya
    name: "ON/OFF"
    icon: mdi:power
    switch_datapoint: 1           
    restore_mode: ALWAYS_ON
    device_class: "switch"
  - platform: tuya
    name: "Sound"
    icon: mdi:volume-off
    switch_datapoint: 109           
    device_class: "switch"
  - platform: tuya
    name: "Out inverse"
    icon: mdi:select-inverse
    switch_datapoint: 108           
    device_class: "switch"
  - platform: tuya
    name: "Anti frost"
    icon: mdi:frost
    switch_datapoint: 103           
    device_class: "switch"

sensor:
  - platform: tuya
    name: "Temperatura"
    device_class: "temperature"
    sensor_datapoint: 3
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

select:
  - platform: "tuya"
    device_class: "configuration"
    name: "Program Mode"
    enum_datapoint: 4
    optimistic: true
    options:
      0: Manual
      1: Program
      2: Temporary program
      3: Leave home
  - platform: "tuya"
    name: "Backlight brightness"
    enum_datapoint: 106
    optimistic: false
    options:
      0: Dark
      1: Low
      2: Middle
      3: High        

  - platform: "tuya"
    name: "Sensor selection"
    enum_datapoint: 110
    options:
      0: Internal
      1: External
      2: Both

number:
- platform: "tuya"
  name: "Precision"
  number_datapoint: 101
  min_value: 0.5
  max_value: 10.0
  step: 0.5
  multiply: 10

Dzięki za wszelkie sugestie i porady
Wojtek

Tak, chodzi o entity_category

dla innych encji niż climate też jest to możliwe - te 4 typy encji, które widzę w YAMLu też mają swoje dokumentacje

jakieś przykłady wykopiowane z istniejących konfiguracji

switch:
  - platform: ble_client
    ble_client_id: lywsd02_clock
    name: "Ustaw czas"
    id: "lywsd02_ble_connection"
    restore_mode: ALWAYS_OFF # Disable the client by default, as connection is only triggered via automation
    entity_category: "config"

sensor:
  - platform: ble_rssi
    mac_address: ${ble_clock_mac}
    name: "${ble_clock_name} RSSI"
    icon: "mdi:bluetooth"
    entity_category: "diagnostic"


no akurat ten drugi kawałek kodu się nie załapał na obrazku ale są inne analogiczne

1 polubienie

Dzięki za pomoc.
Już dopisałem entity i nie tylko wygląda to teraz tak:


Pozostał jeden problem - kalendarz.
Termostat ma możliwość konfiguracji dni roboczych i zaprogramowania temperatur odrębnie dla dni wolnych i pracujących.

Dla dni pracujących jest 6 okresów czasowych z możliwością konfiguracji godziny i minuty ich trwania oraz temperatury (wcześnie rano/rano/południe/popołudnie/wieczór/noc)
Dni wolne mają 2 takie okresy czasowe.
Wszystko kryje się w tym kodzie:

Datapoint 105: raw (value: 06.00.00.E1.08.00.00.E1.0B.1E.00.E1.0E.00.00.E6.11.00.00.E6.17.1E.00.E1.07.00.00.E6.00.00.00.E6 (32))

Znalazłem soft wthermostat ale nie komunikował mi się z Tuya MCU stąd wyzwanie z ESPHome. Czy ktoś miał coś podobnego, jakieś sugestie czego szukać?

I jeszcze jak dodać odczyt kanału typu bitmask z błędami? Tymczasowo zrobiłem select ale wiem że to nie jest prawidłowe rozwiązanie dla:
“11:Fault alarm - bitmask (value: 0)”

Tak z ciekawości wrzuciłem to do czata gpt :smiley: . I oto co przeanalizował :face_with_hand_over_mouth:

Zanim zmodyfikujesz kod sterujący termostatem, wyjaśnię, jak rozgryźć i zmieniać dane zawarte w ciągu Datapoint 105, który zawiera informacje o godzinach i temperaturach dla poszczególnych okresów czasowych.


Oto szczegółowa analiza i wyjaśnienie struktury Twojego ciągu:


Ciąg danych:

mathematica

KopiujEdytuj

06.00.00.E1.08.00.00.E1.0B.1E.00.E1.0E.00.00.E6.11.00.00.E6.17.1E.00.E1.07.00.00.E6.00.00.00.E6
  • Pierwsza sekcja (dni pracujące):
    Składa się z 6 okresów czasowych. Każdy okres zawiera 4 bajty, które definiują godzinę, minutę oraz temperaturę.
  • Druga sekcja (dni wolne):
    Składa się z 2 okresów czasowych, również zawierających godziny, minuty i temperatury.

Analiza struktury danych

Każdy okres czasowy jest zapisany jako 4 bajty:

  1. Godzina (hex): Pierwszy bajt określa godzinę (w formacie 24-godzinnym, zapisanym w systemie szesnastkowym).
  2. Minuta (hex): Drugi bajt definiuje minutę.
  3. Temperatura (hex): Trzeci bajt określa temperaturę, pomnożoną przez 10 (np. 0xE1 = 225 → 22.5°C).
  4. Status/zerowy bajt: Czwarty bajt najczęściej jest zerowy (może oznaczać brak dodatkowych danych).

Przykład analizy

Sekcja dla dni pracujących:

mathematica

KopiujEdytuj

06.00.00.E1.08.00.00.E1.0B.1E.00.E1.0E.00.00.E6.11.00.00.E6.17.1E.00.E1

Podzielmy to na okresy czasowe:

  1. 06:00 - 22.5°C:
  • 06 → 6:00 (godzina)
  • 00 → 00 minut
  • E1 → 225 / 10 = 22.5°C
  • 00 → brak dodatkowych danych.
  1. 08:00 - 22.5°C:
  • 08 → 8:00
  • 00 → 00 minut
  • E1 → 22.5°C
  • 00 → brak dodatkowych danych.
  1. 11:30 - 30.0°C:
  • 0B → 11:00
  • 1E → 30 minut (1E = 30 w systemie dziesiętnym).
  • E1 → 22.5°C
  • 00 → brak dodatkowych danych.

I tak dalej dla pozostałych okresów czasowych.


Jak zmodyfikować?

  1. Zamiana godzin i minut:
  • Jeśli chcesz zmienić czas, edytuj odpowiednie bajty dla godziny (XX) i minut (YY).
  • Na przykład, aby zmienić pierwszy okres na 07:15:
    • Zmień 06.00 na 07.0F (0F = 15 w systemie dziesiętnym).
  1. Zmiana temperatury:
  • Temperaturę edytujesz w bajcie E1. Aby ustawić inną temperaturę, oblicz ją jako:
    Temperatura * 10, a następnie zamień wynik na zapis szesnastkowy.
    • Przykład: 21°C → 21 * 10 = 210D2 w hex.
  1. Zamiana dni wolnych:
  • Sekcja dla dni wolnych znajduje się po sekcji dni pracujących.
  • Analogicznie zmień godzinę, minutę i temperaturę w odpowiednich miejscach.

Przykład modyfikacji

Chcesz ustawić następujące wartości dla dni pracujących:

  • 07:15 - 21°C
  • 12:30 - 22.5°C
  • 18:00 - 20°C

W ciągu danych:

mathematica

KopiujEdytuj

07.0F.00.D2.0C.1E.00.E1.12.00.00.C8...

Jak zmodyfikować kod?

  1. Otwórz edytor w systemie Home Assistant, gdzie możesz edytować dane tego datapointa.
  2. Wprowadź zmiany w odpowiednich miejscach, zachowując strukturę danych.
  3. Zapisz zmiany i zrestartuj integrację.

Jeśli podasz, jakie dokładnie wartości chcesz ustawić, mogę rozpisać gotowy ciąg!

Bardzo dziękuję za pomoc - już wiem jak przygotować sobie cały tydzień przeliczę sobie do wersji dziesiętnej.
Ale jest jeszcze pytanie jak wysłać ten ciąg do MCU? To program, który miałem wpisany w termostat jeszcze w chmurze Tuya. Chciałbym go wysłać nawet bez modyfikacji ale czy ESP ma coś podobnego do OpenBeken czyli terminal w którym można bez kompilacji wysyłać komendy?
Pytanie jak skonfigurować ten kanał w ESP próbowałem na kilka sposobów np:

on_datapoint_update:
- platform: tuya
  sensor_datapoint: 105
  datapoint_type: raw
  name: "Program"
  set_raw_datapoint_value: (06.00.00.E1.08.00.00.E1.0B.1E.00.E1.0E.00.00.E6.11.00.00.E6.17.1E.00.E1.07.00.00.E6.00.00.00.E6 (32))
# send_raw_command: (06.00.00.E1.08.00.00.E1.0B.1E.00.E1.0E.00.00.E6.11.00.00.E6.17.1E.00.E1.07.00.00.E6.00.00.00.E6 (32))

ale już podczas weryfikacji zgłasza błędy.

Spróbuj tego :stuck_out_tongue:
W esp-home:

api:
  encryption:
    key: "podstaw swój klucz"
  services:
    - service: send_datapoint
      variables:
        datapoint: int[]
      then:
        - homeassistant.service:
            service: notify.notify
            data_template:
              message: "Received datapoint: {{ datapoint }}"

Zapisz i zainstaluj

I teraz idz do HA → Narzędzia deweloperskie -->Akcje -->znajdz usługe esphome.<nazwa_urzadzenia>_send_datapoint

i wprowadz swój datapoint np :

[6, 0, 0, 225, 8, 0, 0, 225]

Sprawdz , a nóż widelec zadziała :face_with_hand_over_mouth:

Niestety nie zadziałało próbowałem na różne sposoby całość, z nawiasami, jeden przedział czasowy.

niepowodzenie wykonania akcji esphome.termostat_3_send_datapoint. expected a list for dictionary value @ data[‘datapoint’]. Got None
lub
niepowodzenie wykonania akcji esphome.termostat_3_send_datapoint. expected int @ data[‘datapoint’][0]. Got None