ZigBee2MQTT – CC2531 sau CC2652R – in FHEM (Varianta I)

ZigBee2MQTT
ZigBee2MQTT

Daca in totorialul anterior am instalat cu succes Snifferul ZigBee2MQTT CC2531 sau ZigBee1MQTT CC2652R intr-un alt sistem smart home si anume Home Assistant, de data asta a venit momentul sa integram acest dispozitiv cu FHEM. Dar sa facem o recapitulare a hardware-ului necesar pentru a putea integra device-uri ce folosesc protocolul de comunicare ZigBee cum ar fi Ikea TRÅDFRIPhilips HUEXiaomi Aqara sau Intrerupatoare cu touch Livolo cu serverul Smart Home.

Hardware

Pe langa cele de mai sus ne trebuie un Stick CC2531, sau CC2652R. Dezvoltat de Texas Instruments, poate fi folosit cu succes in decodarea si interconectarea dispozitivelor ce folosesc protocolul ZigBee.

In mod normal acesta are nevoie de un dispozitiv pentru a scrie softul pe el, insa achizitionand din aceste surese – Sursa 1Sursa 2. Stick-ul vine cu software-ul actual gata instalat fara a fi necesara programarea lui.

Software

Avem nevoie desigur ca Raspberry PI sa ruleze FHEM, cu update-urile la zi.

Asa cum aminteam mai sus Stickul CC2531 achizitionat din sursele mentionate vine cu software-ul deja preinstalat si gata de utilizare impreuna cu serverul de Smart Home – FHEM. Daca totusi ati achizitionat un stick fara noul software, atunci avem aici instuctiunile pentru instalare, dar trebuie luat in considerare ca vom avea nevoie si de acest tool pentru a putea instala softul necesar.

Integrare Sniffer CC2531 cu FHEM

Pentru inceput stabilim o legatura SSH cu Raspberry PI unde este instalat FHEM si aducem pachetele software la zi prin:

sudo apt-get update && sudo apt-get upgrade -y

Un restart dupa instalarea noilor pachete este binevenit, dar recomandat este sa facem update sila pachetele din FHEM, scriind in linia de comanda din interfata web a FHEM comanda: update all dupa care un restart al intregului sistem este binevenit.

sudo reboot

Odata repornit sistemul refacem legatura SSH pentru ca vom avea de instalat Node.JS, MQTT Server si desigur Zigbee2MQTT.

Instalarea Node.JS

Pentru buna functionare a sistemului vom instala Node.JS minim versiunea 8.11.0. In momentul de fata avem disponibila versiunea 12.18.3

Instalarea se va face cu ajutorul comenziilor:

sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs git make g++ gcc

La finalul instalarii verificam versiunile de software instalate, in special ne intereseaza versiunea de software pentru Node.JS si al pachetului npm. Primul trebuie sa fie minim 8.11.x cel de-al doilea minim 5.x.

node --version && npm --version
Node & npm version

Instalare MQTT Server

Pentru a inlesni comunicarea de date telemetrice intre stickul ZigBee si FHEM avem nevoie de serverul de legatura MQTT. Acesta va asigura comunicarea bidirectionala intre server si dispozitivele smart home. Instalarea este foarte simpla si avem posibilitatea de a folosi serverul MQTT integrat din FHEM (vezi definitia mai jos) sau putem instala un server MQTT dedicat.

Serverul MQTT dedicat este optional pentru ca putem folosi serverul MQTT2-FHEM integrat din sistemul smart home cu definitia: define MQTT2_FHEM_Server MQTT2_SERVER 1883 global . Acesta functioneaza ca un server MQTT dedicat nefiind necesar sa mai instalam alte module.

Daca totusi dorim sa instalam serverul MQTT dedicat, iata pasii de instalare:

sudo apt-get install mosquitto mosquitto-clients libmodule-pluggable-perl build-essential

Verificam ca serviciul este activ:

sudo service mosquitto status
Service MQTT

In mod normal serverul MQTT foloseste portul 1883. Verificam daca functioneaza:

ps -auxf|grep mosquitto

si verificam portul 1183:

netstat -lnpt | grep 1883

Inastalare ZigBee2MQTT

Software-ul se afla pe github.com, de unde noi il vom instala pe Raspberry PI. Instalarea dureaza aproximativ 5-7 minute, functie de rapiditatea retelei in care se afla serverul tau.

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm install

Chiar este posibil sa apara erori, insa acestea pot fi ignorate atata vreme cat la final vom primi mesajul: found 0 vulnerabilities

La final putem restarta SBC-ul Raspberry PI si intre timp atasam Stickul CC2531 la unul dintre porturile USB ale acestuia. Indicat este sa folosim un cablu de prelungire USB pentru a evita eventualele interferente intre WI-FI-ul Raspberry PI si cel al stik-ului CC2531, avand in vedere ca ambele functioneaza pe aceeasi frecventa.

Dupa restart refacem conexiunea SSH si verificam daca stickul este recunoscut de sistem:

lsusb

Aflam si ID-ul pe care l-a alocat sistemul stick-ului CC2531:

ls -l /dev/serial/by-id/

Retinem acest ID pentru ca in etapa urmatoare va trebui sa il definim.

ID CC2531

Configuram software-ul stickului pentru a comunica cu serverul MQTT anterior instalat si pentru asta deschidem configuratia acestuia:

sudo nano /opt/zigbee2mqtt/data/configuration.yaml

Vom face urmatoarele modificari:

  # MQTT server URL
  server: 'mqtt://localhost'

########################################
# Adaugam portul de comunicare folosit de serverul MQTT si anume 1183
########################################

  # MQTT server URL
  server: 'mqtt://localhost:1883'
  client_id: 'zigbeeStick'
  include_device_information: true

# Serial settings
serial:
  # Location of CC2531 USB sniffer
  port: /dev/ttyACM0

########################################
# Adaugam calea recunoscuta de sistem asa cum am vazut-o mai sus
########################################

# Serial settings
serial:
  # Location of CC2531 USB sniffer
  port: /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B000FFB7984-if00
advanced:
  log_level: info

Atentie, fiecare stick are un alt ID.

# Home Assistant integration (MQTT discovery)
homeassistant: false

# allow new devices to join
permit_join: true

# MQTT settings
mqtt:
  # MQTT base topic for zigbee2mqtt MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL
  server: 'mqtt://localhost:1883'
  client_id: 'zigbeeStick'
  include_device_information: true
  # MQTT server authentication, uncomment if required:
  # user: my_user
  # password: my_password

# Serial settings
serial:
  # Location of CC2531 USB sniffer
  port: /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0014D9E042-if00
advanced:
  log_level: info

Iata un exemplu de fisier complet

Pentru moment setarea permit_join: true va ramane activa, aceasta putand fi schimbata, pentru siguranta, in permit_join: false dupa integrarea tuturor devicerilor pe care vrem sa le inrolam in sistem. Inchidem cu CTRL+X si confirmam cu Y.

Pornim pentru prima data manual ZigBee2MQTT, pentru a verifica buna functionare:

cd /opt/zigbee2mqtt
npm start

Daca vedem mesajul MQTT publish: topic 'zigbee2mqtt/bridge/state', payload 'online' atunci serverul functioneaza corect si trebuie configurat astfel incat sa porneasca automat la restartul sistemului. iesim cu Ctrl+C.

Editam un nou fisier de configurare:

sudo nano /etc/systemd/system/zigbee2mqtt.service

Vom adauga urmatoarele date:

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

Repornim serverul ZigBee2MQTT si verificam daca este functional:

sudo systemctl start zigbee2mqtt
systemctl status zigbee2mqtt.service
ZigBee2MQTT service

Activam scriptul pentru autostart. In decursul acestui proces vom opri si reporni serverul iar la final verificam il log-ul acestuia.

sudo systemctl stop zigbee2mqtt
sudo systemctl enable zigbee2mqtt.service
sudo systemctl start zigbee2mqtt
sudo journalctl -u zigbee2mqtt.service -f

Instalam dependintele perl astfel incat serverul MQTT sa comunice cu FHEM:

sudo cpan install Net::MQTT:Simple
sudo cpan install Net::MQTT::Constants
sudo reboot

Pe parcursul instalarii vom confirma cu yes configurarile automate ale modulelor, iar la final vom restarta sistemul. Dupa restart nu vom mai avea nevoie de conexiunea prin SSH.

Definire MQTT FHEM – pentru server dedicat

Acum ca serverul MQTT este repornit putem sa il definim in FHEM, asftfel incat sa putem aduce datele in frontend.

Deschidem interfata FHEM si definim serverul cu comada define MQTT MQTT localhost:1883

Trebuie sa avem urmatoarele statusuri, astfel incat legatura sa fie complet functionala:

  • status – opened
  • connection – active
  • state – opened

Atribuiti o camera definitiei, eventual si un grup, salvati configuratia actuala.

Pentru a crea legatura dintre MQTT si stick-ul ZigBee2MQTT ne vom folosi de modulul XiaomiDevices din FHEM. Si definitia pentru acest modul este: define xBridge XiaomiMQTTDevice bridge

Dupa definire statusul acestuia trebuie sa fie online. Atribuiti o camera, grup si salvati configuratia.

Daca folositi o versiune mai veche de FHEM, atunci acest modul se poate instala cu urmatoarele comenzi din interfata:

update add https://raw.githubusercontent.com/oskarn97/fhem-xiaomi-mqtt/master/controls_xiaomi-zb2mqtt.txt
update check xiaomi-zb2mqtt
update all xiaomi-zb2mqtt

### La final reporniti serverul FHEM cu: shutdown restart.

Dupa restart folosim din nou definitia de mai sus.

Integrare dispozitive ZigBee in FHEM

Pentru a putea adauga dispozitive noi in FHEM nu ne ramane decat sa punem becul sau telecomanda/intrerupatorul in modul de pairing in apropierea stik-ului ZigBee2MQTT. Acestea trebuiesc resetate in prealabil.

In tutorialul urmator vom integra complet sistemul smart home Ikea Tradfri, Philips HUE, Livolo sau Xiaomi Aqara.

De Iulian Susnea

Pasionat de tehnologie, gadgeturi smart home si automatizari si am pornit la drum in crearea acestui site cu tutoriale pentru cele mai importante sisteme Smart Home ale momentului din dorinta de a-i ajuta pe cei la inceput de drum.

Lasă un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *