Jak wyciągnąć parametr z topica mqtt?

Witam wszystkich
Niestety poległem przy poniższym problemie
Mam topic “B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult” w którym są poniższe wartości:

{"CurrentWorkParametersIZZIResult":true ,"Values":[1,300,19.9,310,310,200,200,0,0,0,14,0,0,0,0,24,80,80,25,100,80,100,20,70,30,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,16.2,17.1,19.9,22.6,0.1,0.0,0.0,0.0,2280,60,54,52,22,0,3,2,0,0,0,0,255,255,0,1,1,1,42,38,0,300,300,0,0,0,0,2,16,30,119,0,0,0,0,0,0,0,5,0,55,53,30,55,100,2,439253795,12744]}

Jak wyciągnąć pierwszą wartość (czyli 1), zamienić ją na “on” i podstawić do state_topic: ? Dodam tylko, że wartość ta zmienia się na 0 przy “off”

Z góry dzięki za pomoc

Zbudować sensor MQTT

Tego nie rozumiem, co to znaczy podstawić?
Zbudowany sensor będzie miał wartość w HA jaką mu zdefiniujesz.

No nie zrozumieliśmy się :slight_smile:
Chodzi mi o to, że nie potrafię wyciągnąć pierwszego parametru z powyższego topica (jest pierwszą pozycją o wartości 1). Jest to mi potrzebne do określenia stanu urządzenia - 1 odpowiada stanowi “ON” natomiast 0 to “OFF”. No i jak to podstawić do mojej integracji wentylatora. W tej chwili początek wygląda tak:

  - fan:
       object_id: reqnet_wentylator
       name: "Wentylator"
       state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
       value_template: >-

No i co dalej ?

Wybacz ale w szablonach nie czuję się na siłach aby konkretnie pomagać. Natomiast co do tego co zaproponowałem - w sekcji z przykładami dla MQTT Sensor masz podane kody YAML dla stworzenia sensora. Robisz to w sekcji MQTT konfiguracji HA. Tak utworzony sensor będzie miał stan ON/OFF w HA. Taki sensor możesz wykorzystywać gdzie tylko chcesz.
Do przetestowania:

mqtt:
  sensor:
    - object_id: reqnet_wentylator
      name: "Wentylator"
      state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
      value_template: >
        {{ 'on' if value_json.Values[0] == 1 else 'off' }}
      unique_id: "reqnet_wentylator_sensor"

Jeśli się mylę, to niech poprawi mnie ktoś kto potrafi używać szablonów, ale za parsowanie pierwszej wartości z ładunku json komunikatu MQTT odpowada zapis value_json.Values[0], jak byś chciał podstawić drugą wartość, to zamieniasz 0 na 1.

No niestety stan pokazuje na unknown.
Co prawda po wciśnięciu ikonki wentylatora zmienia się na on lub off. Ale to i tak nie odpowiada faktycznemu stanowi urządzenia.
Pomijam fakt że powinno być: “state_value_template: >”
Nie mam ustawionego “command_topic:” - może to wpływa na stan “state” ?
W każdym bądź razie dzięki za podsunięcie “value_json.Values[0]” - bo to wydaje się dobrym tropem

Nie wiem czy używasz, ale polecam gorąco zawsze przy tworzeniu konfiguracji z użyciem MQTT:

Głównie dlatego, że przy tworzeniu czujników itp z mqtt znaczenia ma największe topici skuteczny odczyt ładunku, a ten program bardzo ułatwia debugowanie.

Oczywiście, że używam.
Gdyby to był sensor to poradziłbym już sobie po Twojej podpowiedzi.
Jeszcze raz dzięki :slight_smile:
Doszedłem już, że trzecia wartość to temperatura nawiewu
No ale ja “walczę” z wentylatorem…
Ktoś może miał do czynienia z podobnym problemem?

Odtworzyłem w narzędziach deweloperskich twój przypadek i mam rozwiązanie.

Kluczowa informacja to ta, że masz ładunek w postaci surowej tablicy JSON bez obiektu klucza (np. {“Values”: […]}) To powoduje, że w Home Assistant value_json.Values nie zadziała , ponieważ nie ma pola Values . Cała wiadomość to jest od razu lista. Podając value_json[0] określamy, który parametr z listy ma być zaczytywany.
Działający kod:

mqtt:
  sensor:
    - object_id: reqnet_wentylator
      name: "Wentylator"
      state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
      value_template: "{{ 'on' if value_json[0] == 1 else 'off' }}"
      unique_id: "reqnet_wentylator_sensor"

Niestety nie działa.
Jak stworzyłem encję temperatury nawiewu w tej postaci:

  - sensor:
      - object_id: reqnet_temperatura_nawiewu
        name: "Temperatura nawiewu"
        state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
        unit_of_measurement: "°C"
        device_class: temperature
        value_template: "{{ value_json.Values[2] }}"

to pokazywała prawidłową temperaturę
jak zmieniłem na

value_template: "{{ value_json[2] }}"

to już było “unknown”

Więc zakładam, że analogicznie nie zadziałało w przypadku wentylatora

      state_value_template: >
        {{ 'on' if value_json.Values[0] == 1 else 'off' }}

To jest dobry trop ale dlaczego nie pokazuje faktycznego stanu?

Dlatego, że chyba nie przeczytałeś co jest rozwiązaniem, co jest kluczowe.
value_json.Values vs value_json[0]
A może masz błąd w YAML… cóż u mnie działa.

Sprawdzone.

mqtt:
  - sensor:
      - object_id: reqnet_wentylator
        name: "Wentylator"
        state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
        value_template: "{{ 'on' if value_json[0] == 1 else 'off' }}"
        unique_id: "reqnet_wentylator_sensor"

  - sensor:
      - object_id: reqnet_temperatura_nawiewu
        name: "Temperatura nawiewu"
        state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
        unit_of_measurement: "°C"
        device_class: temperature
        value_template: "{{ value_json[2] }}"
        unique_id: "reqnet_temperatura_nawiewu"

Hmm no sam nie wiem.
Może u Ciebie działa bo zrobiłeś sensor a nie fan ?
U mnie cały kod wygląda tak:

  - fan:
       object_id: reqnet_wentylator
       name: Wentylator
       state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
       state_value_template: "{{ 'on' if value_json[0] == 1 else 'off' }}"
       command_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
       preset_mode_command_topic: "B4:8A:0A:C6:FB:DE/ManualModeIZZI"
       preset_mode_command_template: >
        {%- if value == 'Bieg1' %}{"gear": 1}
        {%- elif value == 'Bieg2' %}{"gear": 2}
        {%- elif value == 'Bieg3' %}{"gear": 3}
        {%- endif -%}
       preset_modes:
        -  "Bieg1"
        -  "Bieg2"
        -  "Bieg3"
       preset_mode_state_topic: "B4:8A:0A:C6:FB:DE/CurrentGearIZZI"
       preset_mode_value_template: >
        {%- if value == '1' %}Bieg1
        {%- elif value == '2' %}Bieg2
        {%- elif value == '3' %}Bieg3
        {%- endif -%}
       qos: 0 

Wiem, że command_topic jest taki sam jak state_topic, ale póki co nie potrzebuje włączania i wyłączania wentylatora za pomocą tej encji .
Wybór biegów i ich stan działa. Fajnie jakby jeszcze działał stan samego wentylatora.

Jeżeli zmieniłeś kod, przeładowałeś MQTT
Screenshot - 28.09.2025 , 20_05_50 to fizycznie stan musi się zmienić na urządzeniu, inaczej będzie “unknown”.

Do takich zadań polecam mqttbox z MS Store

No raczej, MQTT fan to odzielny byt w HA, tak jak sensor, binary sensor itd. A sama integracja przez MQTT to tylko ich źródło danych, dla ich prezentacji i działania jako encje.

Poczytałem dokumentację dla fan i chyba mamy to:

mqtt:
  - sensor:
      - object_id: reqnet_temperatura_nawiewu
        name: "Temperatura nawiewu"
        state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
        unit_of_measurement: "°C"
        device_class: temperature
        value_template: "{{ value_json[2] }}"
        unique_id: "reqnet_temperatura_nawiewu"
  - fan:
      - name: "fan"
        command_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
        state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
        state_value_template: "{{ 'ON' if value_json[0] == 1 else 'OFF' }}"
        unique_id: "reqnet_fan_nawiewu"
        payload_on: "ON"
        payload_off: "OFF"

Trochę nie miałem czasu zająć się tematem, ale dzisiaj usiadłem i oto efekt:

Poniżej kod encji:

mqtt:
  - fan:
     - object_id: reqnet_wentylator
       name: Wentylator
       state_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
       state_value_template: "{{ 'ON' if value_json.Values[0] == 1 else 'OFF' }}"
       command_topic: "B4:8A:0A:C6:FB:DE/CurrentWorkParametersIZZIResult"
       payload_on: "ON"
       payload_off: "OFF"
       preset_mode_command_topic: "B4:8A:0A:C6:FB:DE/ManualModeIZZI"
       preset_mode_command_template: >
        {%- if value == 'Bieg1' %}{"gear": 1}
        {%- elif value == 'Bieg2' %}{"gear": 2}
        {%- elif value == 'Bieg3' %}{"gear": 3}
        {%- endif -%}
       preset_modes:
        -  "Bieg1"
        -  "Bieg2"
        -  "Bieg3"
       preset_mode_state_topic: "B4:8A:0A:C6:FB:DE/CurrentGearIZZI"
       preset_mode_value_template: >
        {%- if value == '1' %}Bieg1
        {%- elif value == '2' %}Bieg2
        {%- elif value == '3' %}Bieg3
        {%- endif -%}
       qos: 0

Może komuś się przydać :slight_smile: (drobna uwaga - póki co nie działa włączanie/wyłączanie, ale to akurat mi nie przeszkadza…)
Wielkie dzięki Cezary.K za pomoc :+1:

2 polubienia