Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. аппаратные средства
  4. Железо
  5. Интеграция Arduino по сети Ethernet в ioBroker через адаптер simple-api

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    670

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Интеграция Arduino по сети Ethernet в ioBroker через адаптер simple-api

Geplant Angeheftet Gesperrt Verschoben Железо
12 Beiträge 4 Kommentatoren 4.6k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • E Offline
    E Offline
    electric69
    schrieb am zuletzt editiert von
    #3

    @instalator:

    Но зачем если есть mqtt? В чем преимущество? `
    У меня возникли проблемы с отправкой большого объема данных в короткое время, ардуина начинала отваливаться и при этом данные терялись. При этом система очень динамична и потерянные данные уже через пару секунд могли оказаться не актуальными.

    Во-вторых, MQTT подразумевает постоянное соединение, HTTP - отправил и забыл…

    В третьих, у меня нет навыков/знаний чтобы искать глюки и разбираться в коде библиотек для ардуины и адаптера MQTT для ioBroker. HTTP в этом плане гораздо проще))

    ИМХО.

    Плюс к тому, не хотел бы чтобы пользователи смотрели на эту реализацию как "почему не MQTT?" - лучше как "О_о, нормальная альтернатива, запасной вариант, надо потренироваться и т.д."

    1 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #4

      @electric69:

      @instalator:

      Но зачем если есть mqtt? В чем преимущество? `
      У меня возникли проблемы с отправкой большого объема данных в короткое время, ардуина начинала отваливаться и при этом данные терялись. При этом система очень динамична и потерянные данные уже через пару секунд могли оказаться не актуальными.

      Во-вторых, MQTT подразумевает постоянное соединение, HTTP - отправил и забыл…

      В третьих, у меня нет навыков/знаний чтобы искать глюки и разбираться в коде библиотек для ардуины и адаптера MQTT для ioBroker. HTTP в этом плане гораздо проще))

      ИМХО.

      Плюс к тому, не хотел бы чтобы пользователи смотрели на эту реализацию как "почему не MQTT?" - лучше как "О_о, нормальная альтернатива, запасной вариант, надо потренироваться и т.д." `
      Если мне память не изменяет в протоколе MQTT есть уровень важности (QoS). Надо почитать про MQTT, у меня небыло такой цели поэтому не заморачивался.

      BlueFox драйвер MQTT поддерживает QoS?

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • rw6miuR Offline
        rw6miuR Offline
        rw6miu
        schrieb am zuletzt editiert von
        #5

        Доброго времени суток. Судя по дате последнего сообщения эта тема никого не заинтересовала. Ну а мне хотелось-бы разобраться как осуществить предложенное в первом сообщении.

        В общем есть сабж http://majordomo.smartliving.ru/forum/v … 53f1cd99ba

        Работает без нареканий уже давно и необходимости на что то менять не вижу. Никакого mqtt в нем нет, обычные get запросы http.

        В мажордоме это работало хорошо. Но пришло время перехода на ioBroker. Так вот немного поковырявшись я научился ним управлять.

        Но как организовать обратную связь от устройства пока не пойму. Чувствую что надо через адаптер simple-api но как именно это сделать не соображу. Может кто подскажет какой скрипт нужен. Апи устройства прилагаю ниже.

        ! Протокол взаимодействия по HTTP
        ! Получение состояния реле
        ! HTTP-GET запрос вида
        ! http://megalight/state?c=get&n=1
        ! n - ID нужного реле (обязательный)
        ! Ответ: text/plain в виде
        ! 1;255
        ! где первое число - состояние (1 - вкл), второе - значение диммера
        ! Установка состояния реле
        ! HTTP-GET запрос вида
        ! http://megalight/state?c=set&n=1&o=1&v=200&t=30000
        ! http://megalight/state?c=set&n=1&i=10
        ! n - ID нужного реле (обязательный)
        ! o - состояние (1 - вкл, 0 - выкл)
        ! v - значение диммера (0-255)
        ! i - инкремент/декремент значения диммера (-255 по 255)
        ! t - таймаут в миллисекундах
        ! Ответ: пусто
        ! Получение состояния кнопки
        ! HTTP-GET запрос вида
        ! http://megalight/state?c=button&n=1
        ! n - ID нужной кнопки/выключателя (обязательный)
        ! Ответ: text/plain в виде
        ! 1
        ! состояние (1 - нажата, 0 - не нажата)

        ps. Я тут уточнил. Девайс сам отправляет get на сервер при изменении состояния выходов. Так вот как мне послушать этот ответ и сопоставить с моей переменной?

        Сейчас управление работает на вот таком скрипте:

        var url = 'http://192.168.0.89';
        var request = require('request');
        var options = {
                	url: ''
                };
        on({id: 'javascript.0.test', change: 'any'}, function (obj) {
            if(obj.newState.val === 0){
        	options.url = url+'/state?c=set&n=7&o=1';
            } else {
            	options.url = url+'/state?c=set&n=7&o=0';
            }
            request(options, function (error, response, body) {
                log('Ответ' + body);
            });
        });
        
        

        И такой скрипт проверял тоже работает:

        on({id: 'javascript.0.Arduino1.DO', change: 'any'}, function (obj) {
            if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '0'){
                request ('http://192.168.0.89/state?c=set&n=7&o=0');
            }
            if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '1'){
                request ('http://192.168.0.89/state?c=set&n=7&o=1');
            }
        });
        

        Чувствую что в эти скрипты надо что-то добавить, но вот что?

        Если что-то хочешь, бери и делай! Сомневаться некогда.

        1 Antwort Letzte Antwort
        0
        • rw6miuR Offline
          rw6miuR Offline
          rw6miu
          schrieb am zuletzt editiert von
          #6

          Добрый день. Апну темку. Вдруг поможет. Я сам пока не справился.

          Если что-то хочешь, бери и делай! Сомневаться некогда.

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            Pooh
            schrieb am zuletzt editiert von
            #7

            мегалайт нужно перешивать, ибо у simpleAPIдругой формат команд

            либо поднимать сервер на скрипте

            https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
            https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
            https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
            https://www.timestope.com/freepooh - witness code: freepooh

            1 Antwort Letzte Antwort
            0
            • rw6miuR Offline
              rw6miuR Offline
              rw6miu
              schrieb am zuletzt editiert von
              #8

              Ух ну тут я совсем не программист.

              То есть Вы хотите сказать что без кардинальных вмешательств не получится полноценно подружить железку с сервером?

              Или это можно сделать как то по другому?

              Если что-то хочешь, бери и делай! Сомневаться некогда.

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                Pooh
                schrieb am zuletzt editiert von
                #9

                Чисто скриптом делать

                как-то так:

                var http = require('http');
                var server = http.createServer().listen(8091); // на каком порту слушаем?
                
                server.on('request', function (req, res) {
                    res.writeHead(200);
                    if (req.method == 'POST') { // или GET?
                        var body = '';
                    }
                
                    req.on('data', function (data) {
                        body += data;
                        console.log(body);
                    });
                
                    req.on('end', function () {
                
                    });
                
                });
                
                

                …и парсить полученную переменную

                вопрос чисто программерский

                https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                https://www.timestope.com/freepooh - witness code: freepooh

                1 Antwort Letzte Antwort
                0
                • rw6miuR Offline
                  rw6miuR Offline
                  rw6miu
                  schrieb am zuletzt editiert von rw6miu
                  #10

                  @Pooh:

                  Чисто скриптом делать

                  как-то так: `
                  Спасибо за пинок в нужном направлении.

                  Итого инструкция получилась такая:

                  • 1. В скетче MegaLight указываем порт по которому контроллер будет отправлять запросы на сервер.
                  В итоге он слушает команды на стандартном 80-м порту а отправляет на том который укажем. 
                  
                  • 2. Создаём папку в модуле JavaScript с понятным именем (например MegaLight1).
                  • 3. В этой папке создаём скрипт для каждого канала реле. Обозвать можно как угодно чтоб понятно было к какому каналу он имеет отношение.
                  createState('MegaLight1.lightcenter', '');
                  on({id: 'javascript.0.MegaLight1.lightcenter', change: 'any'}, function (obj) {
                      if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '0'){
                          request ('http://192.168.120.25/state?c=set&n=3&o=0');
                      }
                      if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '1'){
                          request ('http://192.168.120.25/state?c=set&n=3&o=1');
                      }
                  });
                  
                  • 4. Там же создаём ещё один скрипт для получения обратной связи от контроллера.
                  var http = require('http');
                  var server = http.createServer().listen(8083); // на каком порту слушаем?
                  server.on('request', function(req, res) {
                       res.writeHead(200);
                       var getback = req.url;
                       var vars = getback.split("&"); 
                          for (var i=0;i<vars.length;i++) { 
                             var pair = vars[i].split("="); 
                          }
                          if (vars[4] == 'on=1') {
                              var state = 1;
                               } else {
                              var state = 0;
                               }
                       if (vars[3] == 'id=1') {
                           setState ('javascript.0.MegaLight1.braright', state);
                         } else if (vars[3] == 'id=2') {
                           setState ('javascript.0.MegaLight1.braleft', state);
                         } else if (vars[3] == 'id=3') {
                           setState ('javascript.0.MegaLight1.lightcenter', state);
                         } else if (vars[3] == 'id=4') {
                           setState ('javascript.0.MegaLight1.lightdop', state);
                         }
                  log('Канал ' + vars[3] + ' Состояние-' +state)        
                  });
                  

                  Если что-то хочешь, бери и делай! Сомневаться некогда.

                  P 1 Antwort Letzte Antwort
                  0
                  • rw6miuR rw6miu

                    @Pooh:

                    Чисто скриптом делать

                    как-то так: `
                    Спасибо за пинок в нужном направлении.

                    Итого инструкция получилась такая:

                    • 1. В скетче MegaLight указываем порт по которому контроллер будет отправлять запросы на сервер.
                    В итоге он слушает команды на стандартном 80-м порту а отправляет на том который укажем. 
                    
                    • 2. Создаём папку в модуле JavaScript с понятным именем (например MegaLight1).
                    • 3. В этой папке создаём скрипт для каждого канала реле. Обозвать можно как угодно чтоб понятно было к какому каналу он имеет отношение.
                    createState('MegaLight1.lightcenter', '');
                    on({id: 'javascript.0.MegaLight1.lightcenter', change: 'any'}, function (obj) {
                        if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '0'){
                            request ('http://192.168.120.25/state?c=set&n=3&o=0');
                        }
                        if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '1'){
                            request ('http://192.168.120.25/state?c=set&n=3&o=1');
                        }
                    });
                    
                    • 4. Там же создаём ещё один скрипт для получения обратной связи от контроллера.
                    var http = require('http');
                    var server = http.createServer().listen(8083); // на каком порту слушаем?
                    server.on('request', function(req, res) {
                         res.writeHead(200);
                         var getback = req.url;
                         var vars = getback.split("&"); 
                            for (var i=0;i<vars.length;i++) { 
                               var pair = vars[i].split("="); 
                            }
                            if (vars[4] == 'on=1') {
                                var state = 1;
                                 } else {
                                var state = 0;
                                 }
                         if (vars[3] == 'id=1') {
                             setState ('javascript.0.MegaLight1.braright', state);
                           } else if (vars[3] == 'id=2') {
                             setState ('javascript.0.MegaLight1.braleft', state);
                           } else if (vars[3] == 'id=3') {
                             setState ('javascript.0.MegaLight1.lightcenter', state);
                           } else if (vars[3] == 'id=4') {
                             setState ('javascript.0.MegaLight1.lightdop', state);
                           }
                    log('Канал ' + vars[3] + ' Состояние-' +state)        
                    });
                    
                    P Offline
                    P Offline
                    Pooh
                    schrieb am zuletzt editiert von
                    #11

                    Участник @rw6miu написал в Интеграция Arduino по сети Ethernet в ioBroker через адаптер simple-api:

                    • 3. В этой папке создаём скрипт для каждого канала реле.
                    • 4. Там же создаём ещё один скрипт

                    Можно все реле/каналы и сервера в одном скрипте описать...

                    https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                    https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                    https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                    https://www.timestope.com/freepooh - witness code: freepooh

                    rw6miuR 1 Antwort Letzte Antwort
                    0
                    • P Pooh

                      Участник @rw6miu написал в Интеграция Arduino по сети Ethernet в ioBroker через адаптер simple-api:

                      • 3. В этой папке создаём скрипт для каждого канала реле.
                      • 4. Там же создаём ещё один скрипт

                      Можно все реле/каналы и сервера в одном скрипте описать...

                      rw6miuR Offline
                      rw6miuR Offline
                      rw6miu
                      schrieb am zuletzt editiert von
                      #12

                      Участник @Pooh написал
                      Можно все реле/каналы и сервера в одном скрипте описать...

                      Можно конечно, но тогда чуток сложнее отлаживать и отслеживать работу скриптов. Исчезает возможность оперативно отключать их.
                      У меня сейчас другая проблема вылезла. Старая система благополучно умерла и была полностью переустановлена без возможности восстановления всего включая скрипты. Сейчас собираю обратно всё по крупицам. В итоге раньше у меня работали эти скрипты а теперь первый из них не работает. Причём если я из строки

                      if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '0'){
                      

                      выкидываю упоминание о web драйвере и оставляю

                      if(obj.newState.val == '0'){
                      

                      то скрипт начинает работать но происходит какая-то обратная связь со вторым скриптом и из за этого хаотичное включение и выключение света с очень быстрой скоростью.
                      Не пойму в чём проблема. Может в каких то настройках драйвера web.0. Раньше ведь всё работало.

                      Если что-то хочешь, бери и делай! Сомневаться некогда.

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      556

                      Online

                      32.7k

                      Benutzer

                      82.6k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe