Skip to content

Bridge from Yandex Smart Home to MQTT

License

Notifications You must be signed in to change notification settings

dlipatov/yandex2mqtt

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

yandex2mqtt

ΠœΠΎΡΡ‚ ΠΈΠ· ЯндСкс Π£Π” Π² MQTT Π½Π° Node.js

Π€ΠΎΡ€ΠΊ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π° Π₯Π°Π±Ρ€Π΅ ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρƒ.

Π’Π°ΠΆΠ½ΠΎ

Π’Π΅, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ (ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΊΠ°ΠΌΠΈ), ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ измСнились настройки устройств (Π±Π»ΠΎΠΊ devices Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ).

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈ влаТности с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² (Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Π΄Π²Π΅Ρ€Π΅ΠΉ ΠΈ двиТСния ΠΏΠΎΠΊΠ° Π² Π±Π΅Ρ‚Π°-тСстС), ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ свСта (Π²ΠΊΠ»./Π²Ρ‹ΠΊΠ». Π΄Ρ€ΡƒΠ³ΠΈΡ… устройств ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ).

ΠŸΡ€ΠΎΡ‡ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ громкости, ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π²ΡƒΠΊΠ°), ΠΏΠΎΠΈΠ΄Π΅Π΅, Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ChangeLog

16.05.2021

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… событий.

13.05.2021

Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° API ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояний устройств.

31.03.2021

Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€Π΅ΠΆΠΊΠ° раздСлСния доступа ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊ устройствам.

Release

ΠŸΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π° ΠΈ, мСстами, внСсСны Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² (устройств devices.types.sensor)

ВрСбования

  • "Π‘Π΅Π»Ρ‹ΠΉ" IP адрСс ΠΈ Π΄ΠΎΠΌΠ΅Π½. Если Π½Π΅Ρ‚ своСго Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ IP адрСса ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Dynamic DNS сСрвисами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, noip.com).
  • SSL сСртификат (самоподписанный сСртификат Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚). Для получСния сСртификата ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ https://letsencrypt.org.

Установка

Настройка рСпозитория Node JS

curl -sL https://deb.nodesource.com/setup_10.x | bash -

Устанавка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

apt-get install -y nodejs git make g++ gcc build-essential

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² y2m с git

git clone https://github.com/lasthead0/yandex2mqtt.git /opt/yandex2mqtt

Установка ΠΏΡ€Π°Π² Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ

chown -R root:root /opt/yandex2mqtt

Установка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ nodejs

cd /opt/yandex2mqtt
npm install

Запуск моста (выполняСтся послС настройки)

npm start

Настройка yandex2mqtt

ВсС основныС настройки моста ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ» config.js. ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ.

mv config.orig.js config.js

Π€Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

module.exports = {
  notification: [
    {
      ...
    },
    ...
  ]
  mqtt: {
    ...
  },

  https: {
    ...
  },

  clients: [
    {
      ...
    },
    ...
  ],

  users: [
    {
      ...
    },
    ...
  ],

  devices: [
    {
      ...
    },
    ...
  ]
}
Π‘Π»ΠΎΠΊ настройки mqtt ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π’Π°ΡˆΠ΅Π³ΠΎ MQTT сСрвСра

mqtt: {
    host: 'localhost',
    port: 1883,
    user: 'user',
    password: 'password',
},
Π‘Π»ΠΎΠΊ настройки https сСрвСра

Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ мост, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡƒΡ‚ΠΈ ΠΊ сСртификату ssl.

https: {
  privateKey: '/etc/letsencrypt/live/your.domain.ru/privkey.pem',
  certificate: '/etc/letsencrypt/live/your.domain.ru/fullchain.pem',
  port: 4433
},
Π‘Π»ΠΎΠΊ настройки ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π΄Π°Π»Π΅Π΅ ΠΎΠ½ΠΈ понадобятся для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π£Π” Yandex.

clients: [
    {
        id: '1',
        name: 'Yandex',
        clientId: 'client',
        clientSecret: 'secret',
        isTrusted: false,
    },
],
Π‘Π»ΠΎΠΊ настройки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ
users: [
    {
        id: '1',
        username: 'admin',
        password: 'admin',
        name: 'Administrator',
    },
    {
        id: '2',
        username: 'user1',
        password: 'user1',
        name: 'User',
    },
],
Π‘Π»ΠΎΠΊ настройки устройств
devices: [
    {
        id: 'haw-002-switch',
        name: 'Π‘Π²Π΅Ρ‚ Π² ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Π΅',
        room: 'ΠšΠΎΡ€ΠΈΠ΄ΠΎΡ€',
        type: 'devices.types.light',
        allowedUsers: ['2'],
        mqtt: [
            {
                instance: 'on',
                set: '/yandex/controls/light_HaW_002/on',
                state: '/yandex/controls/light_HaW_002/on/state',
            },
        ],
        capabilities: [
            {
                type: 'devices.capabilities.on_off',
                retrievable: true,
            },
        ],
    },

    {
        id: 'lvr-003-switch',
        name: 'Основной свСт',
        room: 'Гостиная',
        type: 'devices.types.light',
        allowedUsers: ['2'],
        mqtt: [
            {
                instance: 'on',
                set: '/yandex/controls/light_LvR_003/on',
                state: '/yandex/controls/light_LvR_003/on/state',
            },
        ],
        valueMapping: [
            {
                type: 'on_off',
                mapping: [[false, true], [0, 1]], // [yandex, mqtt]
            },
        ],
        capabilities: [
            {
                type: 'devices.capabilities.on_off',
                retrievable: true,
            },
        ],
    },

    {
        id: 'lvr-001-weather',
        name: 'Π’ гостиной',
        room: 'Гостиная',
        type: 'devices.types.sensor',
        allowedUsers: ['2'],
        mqtt: [
            {
                instance: 'temperature',
                state: '/yandex/sensors/LvR_001_Weather/temperature',
            },
            {
                instance: 'humidity',
                state: '/yandex/sensors/LvR_001_Weather/humidity',
            },
        ],
        properties: [
            {
                type: 'devices.properties.float',
                retrievable: true,
                parameters: {
                    instance: 'temperature',
                    unit: 'unit.temperature.celsius',
                },
            },
            {
                type: 'devices.properties.float',
                retrievable: true,
                parameters: {
                    instance: 'humidity',
                    unit: 'unit.percent',
                },
            },
        ],
    },

    {
        id: 'plug-001-flower',
        name: 'Π ΠΎΠ·Π΅Ρ‚ΠΊΠ° для Ρ†Π²Π΅Ρ‚ΠΊΠ°',
        room: 'Гостиная',
        type: 'devices.types.socket',
        allowedUsers: ['2'],
        mqtt: [
            {
                instance: 'on',
                set: '/yandex/controls/socket_LvR_002/on',
                state: '/yandex/controls/socket_LvR_002/on/state',
            },
            {
                instance: 'power',
                state: '/yandex/controls/socket_LvR_002/power',
            },
        ],
        capabilities: [
            {
                type: 'devices.capabilities.on_off',
                retrievable: true,
            },
        ],
        properties: [
            {
                type: 'devices.properties.float',
                retrievable: true,
                parameters: {
                    instance: 'power',
                    unit: 'unit.watt',
                },
            },
        ],
    },
    {
        id: 'haw-001-motion',
        name: 'Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅',
        room: 'ΠšΠΎΡ€ΠΈΠ΄ΠΎΡ€',
        type: 'devices.types.sensor',
        allowedUsers: ['2'],
        mqtt: [
            {
                instance: 'motion',
                state: '/yandex/sensors/HaW_001_Motion/motion',
            },
        ],
        valueMapping: [
            {
                type: 'event',
                mapping: [['not_detected', 'detected'], ['false', 'true']], // [yandex, mqtt]
            },
        ],
        properties: [
            {
                type: 'devices.properties.event',
                retrievable: true,
                reportable: true,
                parameters: {
                    instance: 'motion',
                    events: [{
                        value: 'detected'
                    },
                    {
                        value: 'not_detected'
                    }]
                },
            },
        ],
    },
    /* --- end */
],

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ id Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ "Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅" Π½ΠΎΠ²Ρ‹Ρ… устройств Π½Π° "старыС", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² Π½Π°Π²Ρ‹ΠΊ.

Π’ случаС отсутсвия id Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ автоматичСски ΠΏΠΎ индСксу Π² массивС.

Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояний устройств

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π£Π” ЯндСкс прСдоставляСт сСрвис ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояний устройств. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния устройства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ влаТности) yandex2mqtt Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запрос с Π½ΠΎΠ²Ρ‹ΠΌ состояниСм.

Π’ настройках прСдусмотрСн Π±Π»ΠΎΠΊ notification.

notification: [
    {
        skill_id: '6fca0a54-a505-4420-b774-f01da95e5c31',
        oauth_token: 'AQA11AAPv-V2BAT7o_ps6gEtrtNNjlE2ENYt96w',
        user_id: '2'
    },
]

Если ΠΊ yandex2mqtt "ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ" нСсколько Π½Π°Π²Ρ‹ΠΊΠΎΠ² Π£Π”, Ρ‚ΠΎ Π² массивС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ настройки для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°Π²Ρ‹ΠΊΠ° Π£Π”, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ увСдомлСния.

skill_id (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°Π²Ρ‹ΠΊΠ°, присвоСнный ΠΏΡ€ΠΈ создании) ΠΈ oauth_token (Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Π½Π°Π²Ρ‹ΠΊΠ°) ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояний устройств, Π° user_id - id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ yandex2mqtt.

Π’Π°ΠΆΠ½ΠΎ. УвСдомлСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π½ΠΈΠΈ mqtt Ρ‚ΠΎΠΏΠΈΠΊΠ° хранящСго состояниС устройства. БоотвСтствСнно, Ссли для устройства Π½Π΅ Π·Π°Π΄Π°Π½ Ρ‚ΠΎΠΏΠΈΠΊ state, Ρ‚ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ для устройтва ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ для устройств (allowedUsers)

Π’ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ), для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ доступно устройство.

Π’ ΠΎΠΏΡ†ΠΈΠΈ allowedUsers указыватся массив (строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) id. Если данная опция Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°, Ρ‚ΠΎ для Π½Π΅Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ['1'];

Mapping Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π‘Π»ΠΎΠΊ valueMapping позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ yandex api ΠΈ MQTT. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΡƒΠΌΠ΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° devices.capabilities.on_off ΠΈ devices.capabilities.toggle.

НапримСр, Ссли Π² Π£Π” состояниС Π²Π»ΡŽΡ‡Π΅Π½ΠΎ/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ соотвСтствуСт значСниям 1/0, Ρ‚ΠΎ Π’Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚.ΠΊ. Π² Π½Π°Π²Ρ‹ΠΊΠ°Ρ… Yandex значСния true/false.

valueMapping: [
    {
        type: 'on_off',
        mapping: [[false, true], [0, 1]], // [yandex, mqtt]
    },
],

Π’ mapping указываСтся миссив массивов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ массив - значСния Π² yandex, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - Π² MQTT.

ДокумСнтация ЯндСкс

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π΄Π²Π΅ "стратСгии" логирования: сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² Ρ„Π°ΠΉΠ» log/error.log (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ запуска --log-error) ΠΈ всСх сообщСний Π² консоль (--log-info). Для запуска y2m с Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ запуска Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ запуска Π² Ρ„Π°ΠΉΠ»Π΅ настройки слуТба (Ρ€Π°Π·Π΄Π΅Π» Π½ΠΈΠΆΠ΅) ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ· консоли.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ слуТбы

Π’ ΠΏΠ°ΠΏΠΊΠ΅ /etc/systemd/system/ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» yandex2mqtt.service со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТанСм:

[Unit]
Description=yandex2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/node app.js --log-error
WorkingDirectory=/opt/yandex2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ слуТбы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

systemctl enable yandex2mqtt.service

Для управлСния слуТбой ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

service yandex2mqtt start
service yandex2mqtt stop
service yandex2mqtt restart

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π°Π²Ρ‹ΠΊΠ° (Π² ЯндСкс Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ)

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² ЯндСкс Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ => Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ => Π£ΠΌΠ½Ρ‹ΠΉ Π΄ΠΎΠΌ

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ настройки

  • НазваниС Π›ΡŽΠ±ΠΎΠ΅
  • Backend Endpoint URL ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ https://your.domain.ru:port/provider
  • Π’ΠΈΠΏ доступа ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅

  • Подзаголовок Π›ΡŽΠ±ΠΎΠΉ тСкст
  • Имя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π’Π°ΡˆΠ΅ имя
  • ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π²Ρ‹ΠΊ НСт
  • ОписаниС Π›ΡŽΠ±ΠΎΠΉ тСкст
  • Иконка Бвоя ΠΈΠΊΠΎΠ½ΠΊΠ°

Бвязка Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ²

  • Авторизация Кнопка "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ"

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ связки Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ²

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прилоТСния Π€Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ clients.clientId
  • Π‘Π΅ΠΊΡ€Π΅Ρ‚ прилоТСния Π€Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ clients.clientSecret
  • URL Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ https://your.domain.ru:port/dialog/authorize
  • URL для получСния Ρ‚ΠΎΠΊΠ΅Π½Π° https://your.domain.ru:port/oauth/token
  • URL для обновлСния Ρ‚ΠΎΠΊΠ΅Π½Π° https://your.domain.ru:port/oauth/token

БохраняСм Π½Π°Π²Ρ‹ΠΊ. Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊΠΎΠΌ (Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊ) ΠΈΠ»ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ (ΠΊΠ½ΠΎΠΏΠΊΠ° "ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ").

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ВСстированиС (Π΄Π°Π»Π΅Π΅ ΠΊΠ½ΠΎΠΏΠΊΠ° +(плюс)) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠŸΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ ЯндСксу наш мост, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (Π±Π»ΠΎΠΊ users). ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список устройств.

Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ "особСнности повСдСния" ioBroker (iob)

НС ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ Π½Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠΏΠΈΠΊΠΈ MQTT

Если случаСтся Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ Алиса ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ Π½Π΅ сообщаСт ΠΎΠ± ошибкС, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ‚ΠΎΠΏΠΈΠΊ Π½Π΅ мСняСт своСго значСния ΠΈΠ»ΠΈ, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ стСйта (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° iob) MQTT Ρ‚ΠΎΠΏΠΈΠΊ Π½Π΅ публикуСтся (Алиса Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния, Π° сообщаСт староС) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ mqtt.

Аналогичная ситуация ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Ссли Π² качСствС Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ iob созданный Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаСт Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ mqtt Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ "Π·Π½Π°Ρ‚ΡŒ", Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся Ρ‚ΠΎΠΏΠΈΠΊΠΎΠΌ mqtt. Для исправлСния этой ошибки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ iob: Π·Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ RAW (EXPERTS ONLY) Π² json Π² ΠΏΠΎΠ»Π΅ native Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ topic. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

"native": {
  "topic": "/yandex/controls/light_BdR_002/state"
}

About

Bridge from Yandex Smart Home to MQTT

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 82.4%
  • CSS 14.6%
  • EJS 3.0%