CCU.IO + DashUI
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Подскажите, как настроить окружение WebStorm для отладки адаптера ccu.io?
Re: CCU.IO + DashUI
Вот короткое описание отладки: http://forum.iobroker.org/viewtopic.php?f=6&t=230
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Спасибо. Заработало.Bluefox писал(а):Вот короткое описание отладки: http://forum.iobroker.org/viewtopic.php?f=6&t=230
А еще подскажите, как правильно сохранить настройки в datastore
Код: Выделить всё
var settings = require(__dirname + '/../../settings.js');
if (!settings.adapters.home32bit || !settings.adapters.home32bit.enabled) {
process.exit();
}
var home32bitSettings = settings.adapters.home32bit.settings;
home32bitSettings .ids = {par1: '1', par2:'2'};
//Save home32bitSettings ?????
-
- Сообщения: 184
- Зарегистрирован: 07 ноя 2011, 08:45
- Откуда: Ступино МО
Re: CCU.IO + DashUI
В архиве есть settings.json... Я в своей реализации (php) отказался от него, когда писал управление к Меге.
Могу объяснить. У меня несколько Мег, одна из которых ещё на 3.02 прошивке крутится. А там нет выбора модуля... Там нет датчика температуры и прочих прелестей. К тому же там нумерация портов другая.
Решение казалось бы в один запрос к Меге. В веб интерфейсе всегда присутствует строчка "(fw: x.y)" . Вот и настройки для разных мег.
Но это пол-беды.
От версии к версии, что-то меняется и добавляется.
И взяв слова Андрея, что он не будет убирать web интерфейс я написал парсер.
В итоге все до единой формы, которая может отдать Мега web интерфейсом, динамически генерируются. В базе хранится только ip и пароль.
Всегда свежие настройки, типы портов, режимы портов. (В парсере только 2 константные переменные cf=1 и pn=X, где X - количество портов, с главной странички Меги.)
Если заинтересовал, могу написать свою реализацию на js (только формы и настройки, без управления)
Могу объяснить. У меня несколько Мег, одна из которых ещё на 3.02 прошивке крутится. А там нет выбора модуля... Там нет датчика температуры и прочих прелестей. К тому же там нумерация портов другая.
Решение казалось бы в один запрос к Меге. В веб интерфейсе всегда присутствует строчка "(fw: x.y)" . Вот и настройки для разных мег.
Но это пол-беды.
От версии к версии, что-то меняется и добавляется.
И взяв слова Андрея, что он не будет убирать web интерфейс я написал парсер.
В итоге все до единой формы, которая может отдать Мега web интерфейсом, динамически генерируются. В базе хранится только ip и пароль.
Всегда свежие настройки, типы портов, режимы портов. (В парсере только 2 константные переменные cf=1 и pn=X, где X - количество портов, с главной странички Меги.)
Если заинтересовал, могу написать свою реализацию на js (только формы и настройки, без управления)
Лень — двигатель прогресса...
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Не совсем уверен, что это сообщение ответ на мой вопрос, но попробуем поддержать дискуссиюArtSamovar писал(а): В итоге все до единой формы, которая может отдать Мега web интерфейсом, динамически генерируются. В базе хранится только ip и пароль.
Всегда свежие настройки, типы портов, режимы портов. (В парсере только 2 константные переменные cf=1 и pn=X, где X - количество портов, с главной странички Меги.)
В CCU.IO каждое устройство и порт имеют свой ID и если я присвоил какому-нибудь порту идентификатор, то после перезагрузки CCU.IO этот порт должен получить тот же самый идентификатор. Поэтому мне нужно хранить список соответствий между адресом порта и его ID. Могу ли я просто взять и сам записать настройки в файл?
Код: Выделить всё
var fs = require('fs');
fs.writeFileSync(__dirname+"/datastore/adapter-home32bit.json", JSON.stringify(home32bitSettings));
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Еще подскажите, по какому адресу нужно отправит GET запрос CCU.IO , что бы он транслировался адаптеру и мог быть обработан в событии
http://localhost:8080/???????
Код: Выделить всё
ccu_socket.on('event', function (obj) {
if (!obj || !obj[0]) {
return;
}
}
Re: CCU.IO + DashUI
http://ccu.io/ru/manual.html#simpleapibzaugolnov писал(а):Еще подскажите, по какому адресу нужно отправит GET запрос CCU.IO , что бы он транслировался адаптеру и мог быть обработан в событииhttp://localhost:8080/???????Код: Выделить всё
ccu_socket.on('event', function (obj) { if (!obj || !obj[0]) { return; } }
Re: CCU.IO + DashUI
Очень интересно! Выкладывайте все!))) Желательно поподробнее описание!ArtSamovar писал(а):В архиве есть settings.json... Я в своей реализации (php) отказался от него, когда писал управление к Меге.
Могу объяснить. У меня несколько Мег, одна из которых ещё на 3.02 прошивке крутится. А там нет выбора модуля... Там нет датчика температуры и прочих прелестей. К тому же там нумерация портов другая.
Решение казалось бы в один запрос к Меге. В веб интерфейсе всегда присутствует строчка "(fw: x.y)" . Вот и настройки для разных мег.
Но это пол-беды.
От версии к версии, что-то меняется и добавляется.
И взяв слова Андрея, что он не будет убирать web интерфейс я написал парсер.
В итоге все до единой формы, которая может отдать Мега web интерфейсом, динамически генерируются. В базе хранится только ip и пароль.
Всегда свежие настройки, типы портов, режимы портов. (В парсере только 2 константные переменные cf=1 и pn=X, где X - количество портов, с главной странички Меги.)
Если заинтересовал, могу написать свою реализацию на js (только формы и настройки, без управления)
Re: CCU.IO + DashUI
http://ccu-io-host:ccu.io-port/api/set/76001/?value=10bzaugolnov писал(а):Еще подскажите, по какому адресу нужно отправит GET запрос CCU.IO , что бы он транслировался адаптеру и мог быть обработан в событииhttp://localhost:8080/???????Код: Выделить всё
ccu_socket.on('event', function (obj) { if (!obj || !obj[0]) { return; } }
Код: Выделить всё
ccu_socket.on('event', function (obj) {
if (!obj || !obj[0]) {
return;
}
var id = obj[0];
if (id == 76001) {
// Это для нас.
var val = obj[1];
var ack = obj[3];
if (ack) {
return;
}
console.log("Пришла команда для 76001 = " + val);
}
}
Re: CCU.IO + DashUI
Хм... Я тоже думаю, что ArtSamovar перепутал темы.ArtSamovar писал(а):В архиве есть settings.json... Я в своей реализации (php) отказался от него, когда писал управление к Меге.
Могу объяснить. У меня несколько Мег, одна из которых ещё на 3.02 прошивке крутится. А там нет выбора модуля... Там нет датчика температуры и прочих прелестей. К тому же там нумерация портов другая.
Решение казалось бы в один запрос к Меге. В веб интерфейсе всегда присутствует строчка "(fw: x.y)" . Вот и настройки для разных мег.
Но это пол-беды.
От версии к версии, что-то меняется и добавляется.
И взяв слова Андрея, что он не будет убирать web интерфейс я написал парсер.
В итоге все до единой формы, которая может отдать Мега web интерфейсом, динамически генерируются. В базе хранится только ip и пароль.
Всегда свежие настройки, типы портов, режимы портов. (В парсере только 2 константные переменные cf=1 и pn=X, где X - количество портов, с главной странички Меги.)
Если заинтересовал, могу написать свою реализацию на js (только формы и настройки, без управления)
Re: CCU.IO + DashUI
Ну .... можно. Но правильнее было бы записывать туда конфигурацию из странички settings.html.bzaugolnov писал(а):Не совсем уверен, что это сообщение ответ на мой вопрос, но попробуем поддержать дискуссиюArtSamovar писал(а): В итоге все до единой формы, которая может отдать Мега web интерфейсом, динамически генерируются. В базе хранится только ip и пароль.
Всегда свежие настройки, типы портов, режимы портов. (В парсере только 2 константные переменные cf=1 и pn=X, где X - количество портов, с главной странички Меги.)
В CCU.IO каждое устройство и порт имеют свой ID и если я присвоил какому-нибудь порту идентификатор, то после перезагрузки CCU.IO этот порт должен получить тот же самый идентификатор. Поэтому мне нужно хранить список соответствий между адресом порта и его ID. Могу ли я просто взять и сам записать настройки в файл?Код: Выделить всё
var fs = require('fs'); fs.writeFileSync(__dirname+"/datastore/adapter-home32bit.json", JSON.stringify(home32bitSettings));
То есть страница считывает данные с меги и сохраняет их в настройках. Но это не тривиально и, конечно, для начала, можно перезаписать данные и при помощи
Код: Выделить всё
require('fs').writeFileSync(__dirname+"/datastore/adapter-home32bit.json", JSON.stringify(home32bitSettings));
-
- Сообщения: 184
- Зарегистрирован: 07 ноя 2011, 08:45
- Откуда: Ступино МО
Re: CCU.IO + DashUI
Скорее страничку, находясь на первой, думал, что на последней... и ответил соответственноBluefox писал(а):ArtSamovar перепутал темы.
Ну и пусть будет 14 портов всегда. (Динамически будут меняться его свойства)bzaugolnov писал(а):список соответствий между адресом порта и его ID
Привязка id <=> address не должна влиять на то что умеет порт и как он вообще работает.
При инициализации, порта, вызываем фабричный метод и "собираем" порт со всеми свойствами и неважно, кнопка это или шим, вход или выход.
Во вьюшке (на экране) вызов методов, относительно свойств объекта.
(Это моё маленькое имхо. Поспешил я в эту тему, извините )
Лень — двигатель прогресса...
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Проблема в том, что у меня нет меги. У меня нечто похожее на мегу (на stm32). Там каждый порт имеет свой адрес (например RF:56.34.22.1f.a4:1). Если конечные устройства подключаются по радиоканалу или по шине CAN, их состав и доступность могут меняться. Но если я дал данному порту ID 78004, то он должен за ним остаться. Функцию преобразования RF:56.34.22.1f.a4:1 -> 78004 я придумал только в виде ассоциативного массива, который нужно где-то хранить.Bluefox писал(а): Ну .... можно. Но правильнее было бы записывать туда конфигурацию из странички settings.html.
То есть страница считывает данные с меги и сохраняет их в настройках. Но это не тривиально и, конечно, для начала, можно перезаписать данные и при помощи
На сколько я понял, эта функция призвана отправить команду на аппаратный контроллер? А что делать, когда пользователь нажал кнопку выключателя и аппаратный контроллер должен отправить команду ccu.io на изменение поля. Если для этого вызвать http://ccu-io-host:ccu.io-port/api/set/76001/?value=10, то адаптер получит событие 'event', но он не будет знать, что данные пришли от контроллера, а не от виджета или сценария и должен будет отправить команду обратно на контроллер. Или я что-то не понял?Bluefox писал(а): http://ccu-io-host:ccu.io-port/api/set/76001/?value=10
Код: Выделить всё
ccu_socket.on('event', function (obj) { if (!obj || !obj[0]) { return; } var id = obj[0]; if (id == 76001) { // Это для нас. var val = obj[1]; var ack = obj[3]; if (ack) { return; } console.log("Пришла команда для 76001 = " + val); } }
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Я в качестве шаблона взял адаптер homepilot.
При добавлении объектов используется следующий код:
И если я устанавливаю значение командой http://localhost:8080/api/set/78003/?value=560
То на запрос http://localhost:8080/api/get/78003 получаю
где есть 2 поля "Value" и "value". Это уже устаревший адаптер? Какой писался позднее всего и его лучше использовать в качестве шаблона?
Еще не очень разобрался с полями TypeName, ValueType, ValueSubType. Насколько я понял, они для внутреннего использования: пиши туда что хочешь и если надо, то используй в том же адаптере?
При добавлении объектов используется следующий код:
Код: Выделить всё
setObject(curPortID, {
Name: "home32bit."+curDeviceName+"."+curPortName,
ValueType: 16,
ValueSubType: 29,
TypeName: "HSSDP",
Value: devs[curDevice].ports[curPort].value,
Parent: curDeviceID
});
function setObject(id, obj) {
objects[id] = obj;
if (obj.Value) {
datapoints[obj.Name] = obj.Value;
}
ccu_socket.emit("setObject", id, obj);
}
То на запрос http://localhost:8080/api/get/78003 получаю
Код: Выделить всё
{
"id": "78003",
"value": 560,
"timestamp": "2014-10-10 15:23:18",
"lastchange": "2014-10-10 15:16:33",
"Name": "home32bit.RF_34_56_32_45_33.Temperature",
"ValueType": 16,
"ValueSubType": 29,
"TypeName": "HSSDP",
"Value": "2178",
"Parent": 78001,
"ValueUnit": ""
}
Еще не очень разобрался с полями TypeName, ValueType, ValueSubType. Насколько я понял, они для внутреннего использования: пиши туда что хочешь и если надо, то используй в том же адаптере?
Re: CCU.IO + DashUI
Спасибо за найденную ошибку.где есть 2 поля "Value" и "value".
Должно быть так:
Код: Выделить всё
function setObject(id, obj) {
objects[id] = obj;
if (obj.Value) {
datapoints[obj.Name] = obj.Value;
delete obj.Value;
}
ccu_socket.emit("setObject", id, obj);
}
Эти поля можно проигнорировать. Они используются для Диалога выбора переменных, но не обязательны.TypeName, ValueType, ValueSubType
Можно вообще любую переменную объявить и использовать их для своего адаптера.Насколько я понял, они для внутреннего использования: пиши туда что хочешь и если надо, то используй в том же адаптере?
Задумано было, что simpleApi предназначен для использования из браузера для сторонних программ. А если писать драйвер, то он обычно разворачивает свой веб сервер на другом порту и стороннее устройство шлёт все обновления на этот порт. Можно посмотреть, как сделан MegaD адаптер.
Код: Выделить всё
var settings = require(__dirname + '/../../settings.js');
var express = require('express');
var http = require('http');
// Process http://ccu.io:8090/megaName/?pt=6
function restApi(req, res) {
console.log("Info from " + req.connection.remoteAddress + " : " + req.url);
// process url....
}
var app;
var server;
try {
if (settings.adapters.ADAPTERNAME.settings.ioListenPort) {
app = express();
server = require('http').createServer(app);
}
if (app) {
app.get('/*', restApi);
}
if (server) {
server.listen(settings.adapters.ADAPTERNAME.settings.ioListenPort);
logger.info("adapter XXXX listening on port " + settings.adapters.ADAPTERNAME.settings.ioListenPort);
}
} catch (e) {
logger.error("adapter XXXX cannot start listening server on port " + settings.adapters.ADAPTERNAME.settings.ioListenPort + ": " + e);
}
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Спасибо за подсказки. Вроде, получилось написать адаптер.
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
В DashUI не могу подобрать устройство, даже если нажимаю "убрать фильтр по устройствам". Объекты MegaD и gismeteo появляются, а моих нет, хотя в дереве объектов и в списке значений они присутствуют.Bluefox писал(а):Эти поля можно проигнорировать. Они используются для Диалога выбора переменных, но не обязательны.TypeName, ValueType, ValueSubType
Причем, MegaD - развернутый список, а gismeteo в виде дерева. Подскажите, в чем может быть дело?
Релиз DashUI - 0.9beta121
CCU.IO - 1.0.46
Re: CCU.IO + DashUI
Можете прислать мне snapshot? Я бы посмотрел в чём дело.bzaugolnov писал(а):В DashUI не могу подобрать устройство, даже если нажимаю "убрать фильтр по устройствам". Объекты MegaD и gismeteo появляются, а моих нет, хотя в дереве объектов и в списке значений они присутствуют.Bluefox писал(а):Эти поля можно проигнорировать. Они используются для Диалога выбора переменных, но не обязательны.TypeName, ValueType, ValueSubType
Причем, MegaD - развернутый список, а gismeteo в виде дерева. Подскажите, в чем может быть дело?
Релиз DashUI - 0.9beta121
CCU.IO - 1.0.46
http://dashui.ccu.io/#manual
-
- Сообщения: 18
- Зарегистрирован: 06 дек 2012, 13:24
Re: CCU.IO + DashUI
Отправил на адрес, указанный в мануале. Заранее спасибо за помощь.Bluefox писал(а): Можете прислать мне snapshot? Я бы посмотрел в чём дело.
http://dashui.ccu.io/#manual
Re: CCU.IO + DashUI
Твои каналы выглядят вот так:
А должны быть вот так:
DPs это объект, а не массив. Я думаю если это поменять, то всё заработает
Код: Выделить всё
"78004": {
"Name": "home32bit.RF_34_56_32_45_20",
"TypeName": "CHANNEL",
"Address": "ZZZ",
"HssType": "home32bit",
"DPs": [
{
"Humidity": 78005
},
{
"Temperature": 78006
}
],
"Parent": 78000
},
Код: Выделить всё
"78004": {
"Name": "home32bit.RF_34_56_32_45_20",
"TypeName": "CHANNEL",
"Address": "ZZZ",
"HssType": "home32bit",
"DPs": {
"Humidity": 78005,
"Temperature": 78006
},
"Parent": 78000
},