NEWS
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 -
накидал интерфейс нового драйвера,
теперь необходимо из веба пересылать сформированный 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
-
ок попробую.
чет у меня не стартует сам драйвер, содержимое пока взял из темплейта
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. -
стартовый файл должен называться ivr.js или main.js. `
так и есть, но победил ужепс заметил, стоит только на форум отписать проблемы сразу решаются сами по себе,мистика :shock:
-
Посмотри как сделан 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'); на локалке все крутится а как в клиент передать на каком айпишнике сервер крутится?
-
Посмотри как сделан 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 интересного?
-
у меня включено, видимо по наитию добавил
но прокатило и socket = io.connect(); без параметров правда все так же на локалке, а что в sysLang интересного? `
Просто io.connect будет работать только со встроенным сокетом. Если поставить внешний, то всё поломается.Но я тебе советую оформить свою gui как страницу в админ. ( как сцены) Тогда не надо хостить страницы, и настройки будут хорошо интегрированны. И сокет будет всегда работать как у тебя сейчас.
Насчет sysLang: ты же не собираешься интерфейс только на русском делать
-
Насчет sysLang: ты же не собираешься интерфейс только на русском делать `
Вообще-то собирался …Подскажи как теперь в адаптере читать то что в натив записано.
-
Насчет 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? или как в брокере достучаться до драйвера скриптов, чтоб через веб создавать редактировать?
-
ок работает,
Ну и опять в адаптере не могу подписаться на изменение состояния внешней переменной
в мейн adapter.subscribeStates('');* стоит `
Это действительно внешняя? не ivr.0.something?Тогда
adapter.subscribeForeignStates('имя');
Я не советую подписываться на ВСЕ внешние переменные. Это нагружает систему без необходимости
-
есть ли возможность выполнять скрипты через eval? `
Есть.evalResult = eval('localVar = "eval";');
или так:
var f = new Function('x', 'y', 'return x+y'); f(3, 4)
или как в брокере достучаться до драйвера скриптов, чтоб через веб создавать редактировать? `
Просто создаёшь объект 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.
Надо понять что ты хочешь.