Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Визуализация
    5. ioBroker.vis Драйвер
    6. Разные вопросы по Vis

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Разные вопросы по Vis

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      instalator last edited by

      @Haba:

      хм…. я ориентировался на документацию:
      ` > Bindings of objects

      Normally 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

      1 Reply Last reply Reply Quote 0
      • H
        Haba last edited by

        instalator суть по идее понял. В виджете в поле ObjectID ссылаемся на скрипт "javascript.0.Phone.battery"

        Сам скрипт сделан в дравере Javascript/Coffescript Script Engine

        Так?

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          @Haba:

          instalator суть по идее понял. В виджете в поле ObjectID ссылаемся на скрипт "javascript.0.Phone.battery"

          Сам скрипт сделан в дравере Javascript/Coffescript Script Engine

          Так? ` ссылаемся на переменную. В ней уровень заряда

          1 Reply Last reply Reply Quote 0
          • H
            Haba last edited by

            подскажите, как можно у виджета менять CSS-класс по значению объекта?

            ….

            менять класс у виджета можно например так:

            осталось придумать как прицепиться к ObjectID и избавиться от промежуточных кнопок….

            1 Reply Last reply Reply Quote 0
            • Bluefox
              Bluefox last edited by

              @Haba:

              подскажите, как можно у виджета менять CSS-класс по значению объекта?

              ….

              менять класс у виджета можно например так:

              осталось придумать как прицепиться к ObjectID и избавиться от промежуточных кнопок…. `
              У каждого виджета есть поле class. Если в нем прописать

              {a:objectID1; a==1 ? 'class1':'class2'}

              То получится то что ты хочешь.

              1 Reply Last reply Reply Quote 0
              • H
                Haba last edited by

                Bluefox супер!

                чем больше изучаю ioBroker, тем он мне больше нравится своей гибкостью и возможностями.

                Подскажи еще пожалуйста, как можно упростить вот такую конструкцию:

                [/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • Bluefox
                  Bluefox last edited by

                  @Haba:

                  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]
                  ``` ` 
                  1 Reply Last reply Reply Quote 0
                  • H
                    Haba last edited by

                    Согласен!

                    Зациклился на визуализации и упустил из виду, что отображаться будет на нескольких устройствах.

                    В общем у меня такой вышел результат:

                    {a:javascript.0.test.color;b:javascript.0.Signalka.acknowledged; (a=='true' && b=='true') ? 'c-red': a=='true' ? 'b-block':''}
                    

                    т.е. если пришла тревога, фон определенного виджета мерцает желтым-красным

                    если есть квитирование, но тревога еще висит - то фон красный

                    1 Reply Last reply Reply Quote 0
                    • I
                      instalator last edited by

                      @Haba:

                      Согласен!

                      Зациклился на визуализации и упустил из виду, что отображаться будет на нескольких устройствах.

                      В общем у меня такой вышел результат:

                      {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"}]

                      Но только для кого оно мигать будет? у меня если что произошло в зависимости от обстоятельств либо голос, либо на телефон оповещение сразу идет.
                      1 Reply Last reply Reply Quote 0
                      • H
                        Haba last edited by

                        звуковое оповещение тоже будет + сообщение или звонок на телефон

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

                        Можно было бы обойтись только свойством "цвет фона", но для красоты хочется добавить еще переливы фона с помощью CSS 🙂

                        Причем в зависимости от нескольких переменных, фон должен иметь разное цветовое состояние.

                        1 Reply Last reply Reply Quote 0
                        • H
                          Haba last edited by

                          Пока вышел такой рабочий вариант:

                          ! 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 объекта

                          1 Reply Last reply Reply Quote 0
                          • aurodionov
                            aurodionov last edited by

                            Подскажите в чём ошибаюсь

                                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'}); // показать уведомление
                            
                            1 Reply Last reply Reply Quote 0
                            • Bluefox
                              Bluefox last edited by

                              @aurodionov:

                              Подскажите в чём ошибаюсь

                                  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});
                              
                              1 Reply Last reply Reply Quote 0
                              • aurodionov
                                aurodionov last edited by

                                Bluefox, да так получилось, по названию планшета /вкладка которую хочу открывать. Но вообще заработало, спасибо за помощь.

                                Пишу с пульта….

                                1 Reply Last reply Reply Quote 0
                                • aurodionov
                                  aurodionov last edited by

                                  @Bluefox:

                                  У тебя правда так view называется? surfer8.31/Security `
                                  Вроде понял, если указать Security, перейдёт на всех устройствах где есть вкладка с таким названием

                                  1 Reply Last reply Reply Quote 0
                                  • E
                                    electric last edited by

                                    Установил версию драйвера 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
                                    
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • Bluefox
                                      Bluefox last edited by

                                      @electric:

                                      Установил версию драйвера 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?

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        andrey99986 last edited by

                                        Где задаётся время жизни кэша web-сервера?

                                        Картинку обновляю в папке /vis.0/ - на клиенте видна старая версия.

                                        1 Reply Last reply Reply Quote 0
                                        • Bluefox
                                          Bluefox last edited by

                                          @andrey99986:

                                          Где задаётся время жизни кэша web-сервера?

                                          Картинку обновляю в папке /vis.0/ - на клиенте видна старая версия. `
                                          Там её нельзя обновлять.

                                          Нужно обновлять через вызов

                                          > iorboker upload /path/to/file/picture.png /vis.0/main/somewhere/picture.png

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            andrey99986 last edited by

                                            @Bluefox:

                                            @andrey99986:

                                            Где задаётся время жизни кэша 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');
                                                      }
                                                    });
                                            
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            971
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            20
                                            218
                                            57508
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo