Własna nazwa encji a MQTT

Witam,

Kupiłem listwę ze sterowaniem zigbee, 4 gniazda + porty USB, marki LELLKI:

Ma takie encje:

{
    "linkquality": 132,
    "state_l1": "ON",
    "state_l2": "ON",
    "state_l3": "ON",
    "state_l4": "ON",
    "state_l5": "OFF"
}

Chciałbym sterować tymi encjami z kodu, ale wolałbym odwoływać się do moich nazw, a nie l1/l2 etc.

Zmieniłem więc nazwy encji tu, np. dla subwoofera:

Jednak to chyba nie pozwala dostać się softwarowo:

TOPIC="zigbee2mqtt/Strip-Power-Dark-Cave-Subwoofer/set" 
mosquitto_pub -h "$BROKER_ADDRESS" -p "$BROKER_PORT" -u "$MQTT_USER" -P "$MQTT_PASSWORD" -t "$TOPIC" -m "$PAYLOAD"

Ten kod nie działa, w logu mam:

Error 2025-06-09 08:47: Entity 'Strip-Power-Dark-Cave-Subwoofer' is unknown

Co robię źle?

Brocker MQTT jest tylko pośrednikiem, nie ma możliwości konwersji tematów.
Więc publikacja komendy w temacie

zigbee2mqtt/Strip-Power-Dark-Cave-Subwoofer/set

niczym nie skutkuje, ponieważ żadne urządzenie jego nie subskrubuje.
Musi być zgodność topic po obu stronach (urządzenia i HA).
Zigbee buduje topic według ustalonego schematu i zmiany nazewnictwa powinny być inicjowane z tej strony.

Czyli muszę uderzać w Strip-Power-Dark-Cave.
Tylko jak patrzę w log, gdy klikam myszą switcha w dashboardzie to jest wysyłany taki payload:

{"linkquality":168,"power_on_behavior":null,"state_l1":"ON","state_l2":"ON","state_l3":"OFF","state_l4":"ON","state_l5":"OFF"}

To oznacza, że chcąc przestawić jeden tylko switch muszę i tak ustawić wszystkie? Zatem najpierw powinienem odczytać stan, zmodyfikować go i wysłać pełny stan oczekiwany, dobrze kombinuję?

Jednak gdy robię próbę wyłączenia jednego gniazda (state_l3, nie widać na screenie):

To nic się nie dzieje.

To zacytowane z logów to raczej odpowiedź o statusie na skutek kliknięcia.
Odpowiedzi - co i jak wysyłać masz w

Kluczem do sukcesu jest zgodność “FRIENDLY_NAME”.
Użyj MqttExplorer - to pomoże Ci zrozumieć o co chodzi.
Narazie to robisz bez zrozumienia - tylko to co intuicja Ci podpowiada :wink:

No nie tak całkiem bez zrozumienia :slight_smile:
Jednak nazwę (Strip-Power-Dark-Cave) w poprzednim poście dałem ok, teraz mam takie ustawienia w skrypcie i działa:


TOPIC="zigbee2mqtt/Strip-Power-Dark-Cave/set"
PAYLOAD='{"state_l1": "ON"}'
[...]

Tylko właśnie szkoda, że musi być l1, ale rozumiem to ograniczenie. Potrzebna byłaby dodatkowa warstwa, która by to konwertowała.

Nie do końca czuje w czym masz problem?
Zawsze możesz ręcznie utworzyć dowolną encję mqtt (switch), z dowolną nazwą,

gdzie twój:

      name: "**Dowolna Nazwa**"
      command_topic: "zigbee2mqtt/Strip-Power-Dark-Cave/set/state_l1"
      payload_on: "ON"
      payload_off: "OFF"
     ..itd
1 Like