Zigbee2MQTT e Node-RED com IKEA

As minhas desculpas por ser muito básico, mas estou com um enorme problema, para mim.
Desde ontem o Zigbee2MQTT actualizou para a versão 2 e isso fez com que os meus 32 interruptores do IKEA deixassem de funcionar.
Eu uso os interruptores através do Node-RED para ligarem luzes da Tuya ou de outras marcas através de um passo intermédio de MQTT.
Tudo tem funcionado bem há uns anos, mas desde ontem, tudo morreu, tirando duas lâmpadas do IKEA que também estão em Zigbee.
Já procurei soluções nos vários fóruns onde encontrei milhares de explicações, pois há muitos utilizadores na mesma situação que eu, mas as explicações são demasiado técnicas de conversas entre programadores, que em nada ajuda quem tem conhecimentos básicos.
Apenas os génios da informática estão a conseguir solucionar a situação.
Por esse motivo venho solicitar ajuda porque não consigo entender ou encontrar a solução.
Obrigado desde já pela vossa disponibilidade e ajuda.

Boas.
pelo que percebo a ti o zigbee2mqtt está a funcionar só as automações em node red é que deixaram de funcionar ? Tenho visto muita gente com o problema de o z2m não arancar mesmo por não terem lido/percebido as breaking changes.

Não percebi isso do “passo intermédio de MQTT”. Usas os nodes mqtt no node red para fazer as automações? Podes mostrar como tens as automações que agoram não funcionam ?

1 Curtiu

No meu caso, que uso o dongle da sonoff, só fui a configurações do zigbee2mqtt e uma linha abaixo do endereço usb coloquei o seguinte, adapter: zstack.

1 Curtiu

Este update do Z2M deu “água pelas barbas”…

Eu com o dongle da sonoff ZBDongle-E não funcionou de todo com a v 2.0.0-2 é que funcionou.

No entanto, tive que fazer uma limpeza no ficheiro /homeassistant/zigbee2mqtt/configuration.yaml que tinha muita tralha. Ficou assim:

homeassistant:
  enabled: true
  base_topic: zigbee2mqtt
  force_disable_retain: false
  include_device_information: false
  keepalive: 60
  maximum_packet_size: 1048576
  reject_unauthorized: true
  server: mqtt://xxx.xxx.xxx.xxx:1883
  user: mqttuser
  version: 4
mqtt:
  server: mqtt://xxx.xxx.xxx.xxx:1883
  user: mqttuser
  password: xxxxxxxxxxxx
  base_topic: zigbee2mqtt
  keepalive: 60
  reject_unauthorized: true
  version: 4
serial:
  port: /dev/ttyACM0
  adapter: ember
  rtscts: false
  baudrate: 115200
frontend:
  enabled: true
  port: 8099
device_options: {}
devices:
.................................

Depois do update, tive também que ir ao interface web do Z2M, “roda dentada” > settings > MQTT e reescrever a password e Submeter.
No separador HomeAssistant verificar se está Enable e Submeter.
Depois disto, fiz restart ao Z2M (no botão vermelho em Tools) e já ficou a funcionar.

1 Curtiu

Obrigado Ricardo,
É exactamente isso.
O zigbee2mqtt está a funcionar bem e tenho todos os devices a aparecer no mapa e a responderem.
No node red é que os interruptores do IKEA deixaram de funcionar, excepto 2 que comandam lampadas do IKEA.

Não sei como colocar só os nodes, por isso coloco o código, deste que funciona.

[
    {
        "id": "e661bd09edf39f2c",
        "type": "mqtt out",
        "z": "dd03271087cc52af",
        "name": "Light IKEA 01",
        "topic": "zigbee2mqtt/Generic Dimmable Light IKEA 01/set",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "eca6af44.5297b",
        "x": 700,
        "y": 940,
        "wires": []
    },
    {
        "id": "5b3be5ae528e42e8",
        "type": "mqtt in",
        "z": "dd03271087cc52af",
        "name": "switch 01",
        "topic": "zigbee2mqtt/IKEA switch 01",
        "qos": "2",
        "datatype": "json",
        "broker": "eca6af44.5297b",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 80,
        "y": 940,
        "wires": [
            [
                "35f317525a529ef2"
            ]
        ]
    },
    {
        "id": "35f317525a529ef2",
        "type": "function",
        "z": "dd03271087cc52af",
        "name": "Dimmer",
        "func": "/*\n    This function currently works with IKEA models:\n        E1743 TRADFRI On/Off Switch\n        E1810 TRADFRI Remote\n\n\n    msg.payload.action:\n    \n        From E1743 TRADFRI On/Off Switch\n            on\n            off\n            brightness_move_down\n            brightness_move_up\n            brightness_stop\n        \n        From E1810 TRADFRI Remote    \n            toggle (there is no on/off)\n            brightness_up_click\n            brightness_up_hold\n            brightness_up_release\n            brightness_down_click\n            brightness_down_hold\n            brightness_down_release\n\n\n*/\n\nvar step = 16;      // change in brightness for each step.\nvar loopLimit = 30; // max number of loops. Safety in case we don't get a brightness_stop action.\n\nvar brightness = context.get(\"brightness\") || 128;\nvar repeating  = context.get(\"repeating\") || 0;\nvar out = null;       // output #1, to zigbee2mqtt\nvar outLoop = null; // output #2, to a delay, and back to the input.\n\n\nfunction setBrightness(dir) {\n    if(dir > 0) {\n        brightness += step;\n    } else {\n        brightness -= step;\n    }\n    if(brightness <= 2) {brightness = 2;}  // 1 and 0 are off\n    if(brightness >=255) {brightness = 255;}\n    out = {\"payload\": {\"state\": \"on\", \"brightness\": brightness}};\n}\n\nif(msg.payload.action == \"on\") {\n    out = {\"payload\": {\"state\": \"on\"}};\n} else if(msg.payload.action == \"off\") {\n    out = {\"payload\": {\"state\": \"off\"}};\n} else if(msg.payload.action == \"toggle\") {\n    out = {\"payload\": {\"state\": \"toggle\"}};\n\n} else if(msg.payload.action == \"brightness_up_click\") {\n    setBrightness(+1);\n} else if(msg.payload.action == \"brightness_down_click\") {\n    setBrightness(-1);\n\n} else if(msg.payload.action == \"brightness_move_up\" ||\n        msg.payload.action == \"brightness_up_hold\" ||\n        (msg.payload.action == \"brightness_up_rep\" && repeating) ) {\n    setBrightness(+1);\n    outLoop = {\"payload\": {\"action\": \"brightness_up_rep\"}};\n    repeating++;\n} else if(msg.payload.action == \"brightness_move_down\" ||\n        msg.payload.action == \"brightness_down_hold\" ||\n        (msg.payload.action == \"brightness_down_rep\" && repeating) ) {\n    setBrightness(-1);\n    outLoop = {\"payload\": {\"action\": \"brightness_down_rep\"}};\n    repeating++;\n    \n} else if(msg.payload.action == \"brightness_stop\" ||\n        msg.payload.action == \"brightness_up_release\" ||\n        msg.payload.action == \"brightness_down_release\" ||\n        repeating > loopLimit) {\n    repeating = 0;\n\n}\n\ncontext.set(\"brightness\", brightness);\ncontext.set(\"repeating\", repeating);\nnode.status({text:brightness});\n\nreturn [out, outLoop];\n",
        "outputs": 2,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 440,
        "y": 940,
        "wires": [
            [
                "e661bd09edf39f2c"
            ],
            [
                "435f8d57cec39f3f"
            ]
        ]
    },
    {
        "id": "435f8d57cec39f3f",
        "type": "delay",
        "z": "dd03271087cc52af",
        "name": "",
        "pauseType": "delay",
        "timeout": "250",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "outputs": 1,
        "x": 430,
        "y": 1000,
        "wires": [
            [
                "35f317525a529ef2"
            ]
        ]
    },
    {
        "id": "eca6af44.5297b",
        "type": "mqtt-broker",
        "name": "MQTT",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "5",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    }
]

Depois os que deixaram de funcionar:

[
    {
        "id": "bf1d2b2ebad93f37",
        "type": "api-call-service",
        "z": "dd03271087cc52af",
        "name": "Bancada OFF",
        "server": "d22d5bec.97b5d8",
        "version": 7,
        "debugenabled": false,
        "action": "switch.turn_off",
        "floorId": [],
        "areaId": [],
        "deviceId": [
            "8579fb3281baca3954aa42857efed5d5"
        ],
        "entityId": [],
        "labelId": [],
        "data": "",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": false,
        "domain": "switch",
        "service": "turn_off",
        "x": 520,
        "y": 1400,
        "wires": [
            []
        ]
    },
    {
        "id": "e3c617b903402b5a",
        "type": "api-call-service",
        "z": "dd03271087cc52af",
        "name": "Bancada ON",
        "server": "d22d5bec.97b5d8",
        "version": 7,
        "debugenabled": false,
        "action": "switch.turn_on",
        "floorId": [],
        "areaId": [],
        "deviceId": [
            "8579fb3281baca3954aa42857efed5d5"
        ],
        "entityId": [],
        "labelId": [],
        "data": "",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": false,
        "domain": "switch",
        "service": "turn_on",
        "x": 510,
        "y": 1360,
        "wires": [
            []
        ]
    },
    {
        "id": "36909836e33edfc3",
        "type": "switch",
        "z": "dd03271087cc52af",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "on",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "off",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 310,
        "y": 1380,
        "wires": [
            [
                "e3c617b903402b5a"
            ],
            [
                "bf1d2b2ebad93f37"
            ]
        ]
    },
    {
        "id": "395bf3412623a126",
        "type": "server-state-changed",
        "z": "dd03271087cc52af",
        "name": "Bancada",
        "server": "d22d5bec.97b5d8",
        "version": 6,
        "outputs": 1,
        "exposeAsEntityConfig": "",
        "entities": {
            "entity": [
                "sensor.bancada_action"
            ],
            "substring": [],
            "regex": []
        },
        "outputInitially": false,
        "stateType": "str",
        "ifState": "",
        "ifStateType": "str",
        "ifStateOperator": "is",
        "outputOnlyOnStateChange": true,
        "for": 0,
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 80,
        "y": 1380,
        "wires": [
            [
                "36909836e33edfc3"
            ]
        ]
    },
    {
        "id": "d22d5bec.97b5d8",
        "type": "server",
        "name": "Home Assistant",
        "version": 5,
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": "30",
        "areaSelector": "friendlyName",
        "deviceSelector": "friendlyName",
        "entitySelector": "friendlyName",
        "statusSeparator": "at: ",
        "statusYear": "hidden",
        "statusMonth": "short",
        "statusDay": "numeric",
        "statusHourCycle": "h23",
        "statusTimeFormat": "h:m",
        "enableGlobalContextStore": true
    }
]

Eu uso o coordenador da Zigbee 3.0 USB Dongle Plus

Eu, entretanto, voltei à versao 1.42.0, para poder estar com tudo a funcionar.

A configuração do /homeassistant/zigbee2mqtt/configuration.yaml

devices:
  - devices.yaml
groups:
  - groups.yaml
homeassistant:
  enabled: true
  legacy_action_sensor: true
mqtt:
  base_topic: zigbee2mqtt
  user: addons
  password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  server: mqtt://core-mosquitto:1883
serial:
  port: /dev/ttyUSB0
advanced:
  log_level: warning
  pan_id: 6754
  channel: 20
  network_key:
    - 1
    - 3
    - 5
    - 7
    - 9
    - 11
    - 13
    - 15
    - 0
    - 2
    - 4
    - 6
    - 8
    - 10
    - 12
    - 13
  transmit_power: 20
device_options: {}
blocklist: []
passlist: []
queue: {}
frontend:
  enabled: true
  port: 8099
availability:
  enabled: false
version: 4

As minhas desculpas pela extensão da resposta.

Grato, desde já, pela sua amável resposta e ajuda.

Obrigado António Coutinho,

Com esta sua solução todos os interruptores voltaram à vida!

De inicio só os da segunda geração, depois verifiquei que os da primeira geração tinham de ser mudados de estado para “IKEA TRÅDFRI On/Off switch Action” e a mensagem de “brightness_up” para “brightness_move_up”.

Tudo ficou a funcionar correctatente.

Muito grato pela sua ajuda

Obrigado pela sua sugestão.

Aproveitei e também fiz uma limpeza.

Grato pela sua amabilidade

Quero agradecer pelo vosso apoio, que de uma forma simples e totalmente compreensível, por uma pessoa com poucos conhecimentos, explicaram, e deram uma solução para o meu grande problema.

Passei um fim de semana inteiro às voltas a ler fóruns e não cheguei a conclusão alguma devido à enorme complexidade das respostas e soluções apresentadas.

Fico eternamente grato pela vossa preciosa ajuda.

Votos de um Bom Ano Novo com estabilidade e sucesso.

Obrigado


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade