Iobroker.socketio



  • запускаю пример в conn.js вываливается ошибка

    Uncaught TypeError: callback is not a function

    // callback(err, data)

    getStates: function (IDs, callback) {

    if (this._type === 'local') {

    return callback(null, []);[/color]

    } else {

    if (typeof IDs == 'function') {

    callback = IDs;

    IDs = null;

    }

    есть еще какие нибудь примерчики



  • Добавь строчку перед вызовом servConn.init({

    window.socketUrl = 'http://localhost:8084';
    

    Вечером поправлю



  • есть контакт, данные посыпались 😄



  • накидал интерфейс нового драйвера,

    теперь необходимо из веба пересылать сформированный json в драйвер, и на стороне сервера его обрабатывать, а также где-то хранить, как это через сокеты организовать?
    965_interf.png



  • @Vlad_k:

    накидал интерфейс нового драйвера,

    теперь необходимо из веба пересылать сформированный json в драйвер, и на стороне сервера его обрабатывать, а также где-то хранить, как это через сокеты организовать? `
    Для этих целей есть sendTo.

    socket.emit('sendTo', 'send', {myObject: true, myData: 1});

    Что бы хранить, посмотри iobroker.template.

    Вообще страница напрямую может модифицировать настройки и драйвер перезапустится сам, как только объект настроек будет изменён.

    Можно узнать, что ты пишешь?



  • что то наподобие Interactive Voice Response системы, но более расширенной,голосовое меню с выполнением заранее заготовленных сценариев…

    хз... что получится но пока в командировке есть свободное время, решил попробовать реализовать. идею давно вынашиваю но концепцию до конца не продумал, так что может у кого будут какие идеи - отписывайте ...



  • Посмотри как сделан text2command.

    Там окно настроек напрямую пишет данные в конфиг. Тебе надо также.

    Просто

    socket.emit('getObject', 'system.adapter.ivr.0', function (err, obj) {
         obj.native = {твои настройки};
         socket.emit('setObject', obj._id, obj);
    });
    
    

    А в драйвере native автоматом занесётся в adapter.config переменную.



  • ок попробую.

    чет у меня не стартует сам драйвер, содержимое пока взял из темплейта

    BEST 2016-09-16 20:00:02.996 error host.BEST instance system.adapter.ivr.0 terminated with code 10 (Cannot find start file of adapter)

    BEST 2016-09-16 20:00:02.182 info host.BEST instance system.adapter.ivr.0 started with pid 656



  • @Vlad_k:

    ок попробую.

    чет у меня не стартует сам драйвер, содержимое пока взял из темплейта

    BEST 2016-09-16 20:00:02.996 error host.BEST instance system.adapter.ivr.0 terminated with code 10 (Cannot find start file of adapter)

    BEST 2016-09-16 20:00:02.182 info host.BEST instance system.adapter.ivr.0 started with pid 656 `
    стартовый файл должен называться ivr.js или main.js.



  • @Bluefox:

    стартовый файл должен называться ivr.js или main.js. `
    так и есть, но победил уже 😄 😄 😄

    пс заметил, стоит только на форум отписать проблемы сразу решаются сами по себе,мистика :shock:



  • @Bluefox:

    Посмотри как сделан text2command.

    Там окно настроек напрямую пишет данные в конфиг. Тебе надо также.

    Просто

    socket.emit('getObject', 'system.adapter.ivr.0', function (err, obj) {
         obj.native = {твои настройки};
         socket.emit('setObject', obj._id, obj);
    });
    
    

    А в драйвере native автоматом занесётся в adapter.config переменную. `
    все получилось, один вопрос :

    socket = io.connect('http://localhost:8084'); на локалке все крутится а как в клиент передать на каком айпишнике сервер крутится?



  • @Vlad_k:

    @Bluefox:

    Посмотри как сделан text2command.

    Там окно настроек напрямую пишет данные в конфиг. Тебе надо также.

    Просто

    socket.emit('getObject', 'system.adapter.ivr.0', function (err, obj) {
         obj.native = {твои настройки};
         socket.emit('setObject', obj._id, obj);
    });
    
    

    А в драйвере native автоматом занесётся в adapter.config переменную. `
    все получилось, один вопрос :

    socket = io.connect('http://localhost:8084'); на локалке все крутится а как в клиент передать на каком айпишнике сервер крутится? `
    Если включить в *.html вот эту строчку

    как здесь

    https://github.com/ioBroker/ioBroker.mo … x.html#L59

    То там всегда передаётся информация о сокете:

    var socketUrl = ":8084"; var socketSession = ""; sysLang = "en"; socketForceWebSockets = false;
    

    Тебя интересуют только socketUrl и socketSession

    Которые надо использовать вот так:

    servConn.init({
            name:          'irv.0',  // optional - default 'vis.0'
            connLink:      socketUrl,  // optional URL of the socket.io adapter
            socketSession: socketSession // optional - used by authentication
        }, {
    

    Кстати sysLang тоже может быть тебе интересен. 😉



  • у меня включено, видимо по наитию добавил

    но прокатило и socket = io.connect(); без параметров правда все так же на локалке, а что в sysLang интересного?



  • @Vlad_k:

    у меня включено, видимо по наитию добавил

    но прокатило и socket = io.connect(); без параметров правда все так же на локалке, а что в sysLang интересного? `
    Просто io.connect будет работать только со встроенным сокетом. Если поставить внешний, то всё поломается.

    Но я тебе советую оформить свою gui как страницу в админ. ( как сцены) Тогда не надо хостить страницы, и настройки будут хорошо интегрированны. И сокет будет всегда работать как у тебя сейчас.

    Насчет sysLang: ты же не собираешься интерфейс только на русском делать 😄



  • @Bluefox:

    Насчет sysLang: ты же не собираешься интерфейс только на русском делать 😄 `
    Вообще-то собирался 😄

    Подскажи как теперь в адаптере читать то что в натив записано.



  • @Vlad_k:

    @Bluefox:

    Насчет sysLang: ты же не собираешься интерфейс только на русском делать 😄 `
    Вообще-то собирался 😄

    Подскажи как теперь в адаптере читать то что в натив записано. `
    все native настройки находятся в переменной

    adapter.config

    Она уже для тебя считана и заполнена. Но на неё можно ссылаться только после вызова ready.



  • ок работает,

    Ну и опять в адаптере не могу подписаться на изменение состояния внешней переменной

    ! ````
    // is called if a subscribed state changes
    adapter.on('stateChange', function (id, state) {

    if (state && !state.ack && state.val) {
    
    adapter.log.info('stateChange ' + id + ' ' + JSON.stringify(state));			
    
    }
    
    // Warning, state can be null if it was deleted
    

    ! // you can use the ack flag to detect if it is status (true) or command (false)
    if (state && !state.ack) {
    adapter.log.info('ack is not set!');
    }
    });

    
    в мейн ****adapter.subscribeStates('*');**** стоит


  • есть ли возможность выполнять скрипты через eval? или как в брокере достучаться до драйвера скриптов, чтоб через веб создавать редактировать?



  • @Vlad_k:

    ок работает,

    Ну и опять в адаптере не могу подписаться на изменение состояния внешней переменной

    в мейн adapter.subscribeStates('');* стоит `
    Это действительно внешняя? не ivr.0.something?

    Тогда

    adapter.subscribeForeignStates('имя');
    

    Я не советую подписываться на ВСЕ внешние переменные. Это нагружает систему без необходимости



  • @Vlad_k:

    есть ли возможность выполнять скрипты через eval? `
    Есть.

    evalResult = eval('localVar = "eval";');
    

    или так:

    var f = new Function('x', 'y', 'return x+y');
    f(3, 4)
    

    @Vlad_k:

    или как в брокере достучаться до драйвера скриптов, чтоб через веб создавать редактировать? `
    Просто создаёшь объект script.js.ivr.My_script

    {
      "common": {
        "name": "My script",
        "engineType": "Javascript/js",
        "source": "console.log('test');",
        "engine": "system.adapter.javascript.0",
        "enabled": true
      },
      "native": {},
      "_id": "script.js.ChartTest",
      "type": "script"
    }
    
    

    И он появляется в списке. Можем договорится, что бы я добавил свойство readOnly и тогда их нельзя будет изменять.

    Или visible: false.

    Надо понять что ты хочешь.


Log in to reply
 

Suggested Topics

  • 3
  • 20
  • 106
  • 1
  • 88
  • 2
  • 14
  • 12

590
Online

21.8k
Users

26.6k
Topics

325.2k
Posts