NEWS
Разные вопросы по Vis
-
хм…. я ориентировался на документацию:
` > Bindings of objectsNormally most of widgets have ObjectID attribute. And this attribute can be bound with some value of object ID. But there is another option how to bind any attribute of widget to some ObjectID.
Just write into attribute {object.id} and it will be bound (not in edit mode) to this object's value. If you will use special format, you can even make some simple operations with it, e.g. multiplying or formatting. Patten has following format: `
Тогда как правильно надо делать следующее?
Допустим есть объект, в котором число вида xxxx, текущий заряд батареи в мВ.
Я планировал использовать виджет "basic stateful Image 8", и в поле ObjectID в результате небольшой математической операции получить число из диапазон а 0,1,..,5. В результате в зависимости от значения заряда батареи, отображалась нужная картинка.
PS. Очень нехватает документанции на ioBroker, хотя бы описание азов. `
Так не пойдет? http://forum.iobroker.net/viewtopic.php?f=26&t=2129 -
instalator суть по идее понял. В виджете в поле ObjectID ссылаемся на скрипт "javascript.0.Phone.battery"
Сам скрипт сделан в дравере Javascript/Coffescript Script Engine
Так?
-
instalator суть по идее понял. В виджете в поле ObjectID ссылаемся на скрипт "javascript.0.Phone.battery"
Сам скрипт сделан в дравере Javascript/Coffescript Script Engine
Так? ` ссылаемся на переменную. В ней уровень заряда
-
подскажите, как можно у виджета менять CSS-класс по значению объекта?
….
менять класс у виджета можно например так:
осталось придумать как прицепиться к ObjectID и избавиться от промежуточных кнопок….
-
подскажите, как можно у виджета менять CSS-класс по значению объекта?
….
менять класс у виджета можно например так:
осталось придумать как прицепиться к ObjectID и избавиться от промежуточных кнопок…. `
У каждого виджета есть поле class. Если в нем прописать{a:objectID1; a==1 ? 'class1':'class2'}
То получится то что ты хочешь.
-
Bluefox супер!
чем больше изучаю ioBroker, тем он мне больше нравится своей гибкостью и возможностями.
Подскажи еще пожалуйста, как можно упростить вот такую конструкцию:
[/i][/i]
-
Bluefox супер!
чем больше изучаю ioBroker, тем он мне больше нравится своей гибкостью и возможностями.
Подскажи еще пожалуйста, как можно упростить вот такую конструкцию:
Ну для начала. Можно использовать jquery. Он неплохо упрощает. `~~[code]~~[{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval": "0","gestures-offsetX":0,"gestures-offsetY":0,"class":"b-block"},"style":{"left":"481px","top":"98px"}, "widgetSet":"basic"},{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval": "0","gestures-offsetX":0,"gestures-offsetY":0,"html":" \n"},"style": {"left":"322px","top":"99px","width":"154px","height":"27px"},"widgetSet":"basic"}][/code]` Но я считаю, что это не правильный подход. Это квитирование работает только в одном виз и больше нигде.. А что делать на соседнем планшете? Надо создать объект: javasciprt.0.acknowledged и его ставить на false, как только есть что квитировать и прописывать в виз true по кнопке. Тогда информация на всех планшетах/телефонах будет синхронной и даже можно послать сообщение или произнести что нибудь. И использовать эту переменную, в поле class как {a:javasciprt.0.acknowledged;a ? '' : 'b-block'} [48_click.gif](/assets/uploads/files/48_click.gif) [/i][/i] ``` `
-
Согласен!
Зациклился на визуализации и упустил из виду, что отображаться будет на нескольких устройствах.
В общем у меня такой вышел результат:
{a:javascript.0.test.color;b:javascript.0.Signalka.acknowledged; (a=='true' && b=='true') ? 'c-red': a=='true' ? 'b-block':''}
т.е. если пришла тревога, фон определенного виджета мерцает желтым-красным
если есть квитирование, но тревога еще висит - то фон красный
-
Согласен!
Зациклился на визуализации и упустил из виду, что отображаться будет на нескольких устройствах.
В общем у меня такой вышел результат:
{a:javascript.0.test.color;b:javascript.0.Signalka.acknowledged; (a=='true' && b=='true') ? 'c-red': a=='true' ? 'b-block':''}
т.е. если пришла тревога, фон определенного виджета мерцает желтым-красным
если есть квитирование, но тревога еще висит - то фон красный `
Я себе делал так! ````
[{"tpl":"tplHqButton","data":{"visibility-cond":"==","visibility-val":1,"oid":"mqtt.0.myhome.Mother.AquaStoroj","min":"0","max":"1","iconName":"/vis/img/Icons/dashui_ico/mfd/sani_irrigation.png","btIconWidth":"63","offsetAuto":false,"leftOffset":"-10","topOffset":"-10","timeAsInterval":"true","infoLeftFontSize":"12","infoFontRightSize":"12","changeEffect":"flash","testActive":false,"usejQueryStyle":false,"waveColor":"#FFFFFF","oid-working":"","filterkey":"","visibility-oid":"mqtt.0.myhome.Mother.AquaStoroj","styleActive":"hq-button-red-active","caption":"","captionOn":"","gestures-offsetX":0,"gestures-offsetY":0},"style":{"left":"165px","top":"263px","border-radius":"50px","width":"50","height":"50","z-index":"3"},"widgetSet":"hqwidgets"}]Но только для кого оно мигать будет? у меня если что произошло в зависимости от обстоятельств либо голос, либо на телефон оповещение сразу идет.
-
звуковое оповещение тоже будет + сообщение или звонок на телефон
виджет будет отображать несколько состояний в обычном режиме на прозрачном фоне и те же состояния и цветной фон в режиме охраны, если датчик сработал. Поэтому использую поле "класс".
Можно было бы обойтись только свойством "цвет фона", но для красоты хочется добавить еще переливы фона с помощью CSS
Причем в зависимости от нескольких переменных, фон должен иметь разное цветовое состояние.
-
Пока вышел такой рабочий вариант:
!
createState('Signalka.acknowledged', false); // создаем переменную "квитирование" // Классы CSS для датчиков createState('Signalka.Sensor.10_CSS', ''); createState('Signalka.Sensor.11_CSS', ''); createState('Signalka.Sensor.12_CSS', ''); createState('Signalka.Sensor.13_CSS', ''); createState('Signalka.Sensor.14_CSS', ''); ! var mySubscription; var Sensor_Start = 10; var CountSens = 5; ! on("mysensors.0.30.1_CUSTOM.V_VAR1"/*Signalka.V_VAR1*/, function (obj) { log ('Статус сигнализации = ' + obj.state.val); if (obj.state.val == 2) { log("Режим 'Охрана' включаем подписку на события с датчиков"); //подписываемся на несколько объектов по шаблону. Срабатывать будет только если новое значение больше предыдущего mySubscription = on({id: /^mysensors\.0\.30\.1._CUSTOM\.V_VAR1$/, change: 'gt'}, function (obj) { log("Сработал датчик " + obj.id + " включить тревогу"); //var tmp = obj.state.val & 3; // отсекаем все лишнее, оставляем геркон и вибро if ((obj.state.val & 3) > 0) { log('Определяем в какой CSS писать'); var str = obj.id.substr(obj.id.indexOf("_CUSTOM")-2, 2); // парсим id датчика, чтобы определить его номер setState("javascript.0.Signalka.Sensor."+ str +"_CSS", "s-blink" , true/*ack*/); // включаем мигание фона у нужного датчика } setState("javascript.0.Signalka.acknowledged"/*acknowledged*/, true , true/*ack*/); // включить индикацию тревоги }); } else { if (unsubscribe(mySubscription)) { log('Отключаем подписку на события с датчиков'); } } }); // подписка на событие "сквитировано" on({id: 'javascript.0.Signalka.acknowledged', change: 'lt'}, function (obj) { for (i = Sensor_Start; i < Sensor_Start+CountSens; i++){ var CSS = getState("javascript.0.Signalka.Sensor."+ i +"_CSS"); var SensState = getState("mysensors.0.30." + i +"_CUSTOM.V_VAR1"); if ((CSS.val == "s-blink") && ((SensState.val & 3) === 0)) CSS.val = ''; // все тревоги с датчика ушли if ((CSS.val == "s-blink") && ((SensState.val & 3) > 0)) CSS.val = 's-red'; //тревоги еще есть setState("javascript.0.Signalka.Sensor."+ i +"_CSS", CSS.val , true/*ack*/); // сохраняем новый CSS log('Статус новый CSS ' + CSS.val + ', SensState ' + SensState.val + ', SensState & ' + (SensState.val & 3)); } }); // подписка на состояние датчиков "good" и квитирование = false on({id: /^mysensors\.0\.30\.1._CUSTOM\.V_VAR1$/, change: 'lt'}, function (obj) { var Ack = getState("javascript.0.Signalka.acknowledged"); if (Ack.val === false) { var str = obj.id.substr(obj.id.indexOf("_CUSTOM")-2, 2); // парсим id датчика, чтобы определить его номер setState("javascript.0.Signalka.Sensor."+ str +"_CSS", "" , true/*ack*/); } }); !
у виджета датчика соответсвенно класс CSS {javascript.0.Signalka.Sensor.10_CSS}в идеале надо бы добавить возможность вводить номер датчика прямо в рантайме, чтобы не требовалось лезть в редактор для перепривязки ID объекта
-
Подскажите в чём ошибаюсь
setState ('vis.0.control.command', {instance: 'FFFFFFFF', command: 'changedView', data: 'surfer8.31/Security'}); // переключится на вкладку setState ('vis.0.control.command', {instance: 'FFFFFFFF', command: 'alert ', data: 'Message; Test ;info'}); // показать уведомление
-
Подскажите в чём ошибаюсь
setState ('vis.0.control.command', {instance: 'FFFFFFFF', command: 'changedView', data: 'surfer8.31/Security'}); // переключится на вкладку setState ('vis.0.control.command', {instance: 'FFFFFFFF', command: 'alert ', data: 'Message; Test ;info'}); // показать уведомление ```` `
changedView => changeView
У тебя правда так view называется? surfer8.31/Security
'alert ' => 'alert' (лишний пробел)
setState ('vis.0.control.command', {val: {instance: 'FFFFFFFF', command: 'changeView', data: 'surfer8.31/Security'}, ack: false}); setState ('vis.0.control.command', {val: {instance: '*', command: 'alert', data: 'Message; Test ;info'}, ack: false});
-
Bluefox, да так получилось, по названию планшета /вкладка которую хочу открывать. Но вообще заработало, спасибо за помощь.
Пишу с пульта….
-
У тебя правда так view называется? surfer8.31/Security `
Вроде понял, если указать Security, перейдёт на всех устройствах где есть вкладка с таким названием -
Установил версию драйвера 0.10.9 с гит.
Заработал только после команды
iobroker upload vis
В логе ошибка появилась:
host-cubietruck 2016-09-10 10:47:44.512 error startInstance system.adapter.vis.0: TypeError: Cannot read property 'version' of undefined
-
Установил версию драйвера 0.10.9 с гит.
Заработал только после команды
iobroker upload vis
В логе ошибка появилась:
host-cubietruck 2016-09-10 10:47:44.512 error startInstance system.adapter.vis.0: TypeError: Cannot read property 'version' of undefined ```` `
Проверь правильность файлa …/node_modules/iobroker.web/io-package.json.
А какой controller?
-
Где задаётся время жизни кэша web-сервера?
Картинку обновляю в папке /vis.0/ - на клиенте видна старая версия.
-
Где задаётся время жизни кэша web-сервера?
Картинку обновляю в папке /vis.0/ - на клиенте видна старая версия. `
Там её нельзя обновлять.Нужно обновлять через вызов
> iorboker upload /path/to/file/picture.png /vis.0/main/somewhere/picture.png
-
Где задаётся время жизни кэша web-сервера?
Картинку обновляю в папке /vis.0/ - на клиенте видна старая версия. `
Там её нельзя обновлять.Нужно обновлять через вызов
> iorboker upload /path/to/file/picture.png /vis.0/main/somewhere/picture.png
`Таким образом единственный способ получать снимки с камер и сохранять их в веб-папку примерно такой? :
camera1_snap_tmp = '/tmp/cam1.jpg'; camera1_snap_web = '/vis.0/main/img/cam1.jpg'; cmd_get_snap1 = 'wget "http://192.168.2.10:8088/snapshot?username=user&userpwd=passw&strm=1" --no-use-server-timestamps -O ' + camera1_snap_tmp; exec(cmd_get_snap1, function (error, result, stderr) { if ((function () {var val = (stderr.indexOf('.jpg’ saved') + 1); if (val === 'true') return true; if (val === 'false') return false; return !!val;})()) { cmd_copy_web = '/usr/bin/iobroker upload ' + camera1_snap_tmp + ' ' + camera1_snap_web; exec (cmd_copy_web); console.log('copy image to web folder: ' + cmd_copy_web); } else { console.log('Error get image from camera'); } });