NEWS
Rgraph
-
А подскажите, как в виджет LiveChart из RGraph загружать данные при загрузке страницы ioBroker.vis? У меня получается, что если я прописываю ObjectID - все работает, график отображается, но после обновления страницы или заходе с другого устройства все графики пропадают.
Да и вообще - если у любого виджета прописать ObjectID, насколько я понимаю статус обновится только в случае попадания каких-то данных, а если отправка данных осуществляется с большими периодами - виджеты будут показывать 0? Как это можно обойти?
Спасибо!
-
LiveChart не умеет такое. Для этого нужно использовать iobroker.flot.
-
LiveChart не умеет такое. Для этого нужно использовать iobroker.flot. `
А я правильно понимаю, что эта штука работает отдельно от ioBroker.vis? Можно ли как html эти графики затащить в vis? Хотя с другой стороны как обновлять данные…
Есть ли вообще у ioBroker.vis возможность отображать исторические данные? Или как-то запоминать состояние виджета, без повторной отправки на него данных. То есть, к примеру, если взять просто on/off выключатель изменить его состояние и обновить страничку и чтобы выключатель остался как был.
-
LiveChart не умеет такое. Для этого нужно использовать iobroker.flot. `
А я правильно понимаю, что эта штука работает отдельно от ioBroker.vis? Можно ли как html эти графики затащить в vis? Хотя с другой стороны как обновлять данные…
Есть ли вообще у ioBroker.vis возможность отображать исторические данные? Или как-то запоминать состояние виджета, без повторной отправки на него данных. То есть, к примеру, если взять просто on/off выключатель изменить его состояние и обновить страничку и чтобы выключатель остался как был. `
А сейчас разве не так?) -
А сейчас разве не так?) `
Ну из предыдущей темы с вопросом по апгрейду вы, наверное, уже поняли, что я использую node-red-vis (ioBroker.vis в связке с node-red). Пока у меня получается, что изменение состояния кнопки на ON из ioBroker.vis приводит к отправке команды устройству, здесь все хорошо. Но если обновить страничку в ioBroker.vis то в интерфейсе кнопка станет OFF тогда как реально на устройстве она в состоянии ON. Так что нет - не совсем сейчас так. Может я что и неправильно делаю конечно, но поэтому и спросил.
Я уже увидел, что в момент обновления страницы от ioBroker.vis в node-red прилетают три события, одно из которых vis.control.data с именем обновленной страницы. Поэтому пока идея иметь простенькую табличку в БД (хоть в sqlite с которой все работает из коробки и ставить дополнительные сервисы не надо) которая бы содержала список устройств на странице и по событию от vis node-red выплевывал бы эти данные в vis или вообще node-red отправлял бы команду устройствам опубликовать свой статус (тем более, что в устройствах данный функционал уже есть).
Может конечно я горожу слишком сложные схемы и здесь надо ставить полноценный ioBroker, но пока не хотелось бы отказываться от node-red, потому что в нем уже много чего реализовано.
-
А сейчас разве не так?) `
Ну из предыдущей темы с вопросом по апгрейду вы, наверное, уже поняли, что я использую node-red-vis (ioBroker.vis в связке с node-red). Пока у меня получается, что изменение состояния кнопки на ON из ioBroker.vis приводит к отправке команды устройству, здесь все хорошо. Но если обновить страничку в ioBroker.vis то в интерфейсе кнопка станет OFF тогда как реально на устройстве она в состоянии ON. Так что нет - не совсем сейчас так. Может я что и неправильно делаю конечно, но поэтому и спросил.
Я уже увидел, что в момент обновления страницы от ioBroker.vis в node-red прилетают три события, одно из которых vis.control.data с именем обновленной страницы. Поэтому пока идея иметь простенькую табличку в БД (хоть в sqlite с которой все работает из коробки и ставить дополнительные сервисы не надо) которая бы содержала список устройств на странице и по событию от vis node-red выплевывал бы эти данные в vis или вообще node-red отправлял бы команду устройствам опубликовать свой статус (тем более, что в устройствах данный функционал уже есть).
Может конечно я горожу слишком сложные схемы и здесь надо ставить полноценный ioBroker, но пока не хотелось бы отказываться от node-red, потому что в нем уже много чего реализовано. `
я в iobroker от node-red отказался вообще, Поставь iobroker, добавь свои mqtt устройства и потом будешь плеваться в сторону node-red)
-
А сейчас разве не так?) `
Ну из предыдущей темы с вопросом по апгрейду вы, наверное, уже поняли, что я использую node-red-vis (ioBroker.vis в связке с node-red). Пока у меня получается, что изменение состояния кнопки на ON из ioBroker.vis приводит к отправке команды устройству, здесь все хорошо. Но если обновить страничку в ioBroker.vis то в интерфейсе кнопка станет OFF тогда как реально на устройстве она в состоянии ON. Так что нет - не совсем сейчас так. Может я что и неправильно делаю конечно, но поэтому и спросил.
Я уже увидел, что в момент обновления страницы от ioBroker.vis в node-red прилетают три события, одно из которых vis.control.data с именем обновленной страницы. Поэтому пока идея иметь простенькую табличку в БД (хоть в sqlite с которой все работает из коробки и ставить дополнительные сервисы не надо) которая бы содержала список устройств на странице и по событию от vis node-red выплевывал бы эти данные в vis или вообще node-red отправлял бы команду устройствам опубликовать свой статус (тем более, что в устройствах данный функционал уже есть).
Может конечно я горожу слишком сложные схемы и здесь надо ставить полноценный ioBroker, но пока не хотелось бы отказываться от node-red, потому что в нем уже много чего реализовано. `
Люди уже решили эту проблему.https://github.com/GermanBluefox/node-red-vis/issues/6
Дело в том, что от node-red отказваться не надо. node-red интегрирован в ioBroker. Отличие только то, что добавляются node для обмена данными с ioBroker.
-
Люди уже решили эту проблему.
Интересная идея хранить данные в общем контексте node-red, хотя по сути мелкая базёнка сделает тоже самое только данные будут храниться на диске, а не в памяти. Примерно в тако ключе я и думал - мысли сходятся :). Спасибо за наводку!
Дело в том, что от node-red отказваться не надо. node-red интегрирован в ioBroker. Отличие только то, что добавляются node для обмена данными с ioBroker. `
Да, это я понимаю. А где можно почитать про потребление ресурсов ioBroker? Сейчас у меня на сервере где стоит node-red со всеми моими модулями/скриптами/нодами + ioBroker.vis занято меньше 256МБ памяти (и это включая саму ОС). Здесь возникает пара вариантов - иметь "облачные" виртуалки с серверной частью, либо docker, либо микрокомпьютер.
В любом случае спасибо за вашу работу! ioBroker со всеми его модулями/драйверами, это как глоток воздуха среди засилия проприетарщины и тяжелых java-приложений или непонятных монолитных поделок на коленке
-
Люди уже решили эту проблему.
Еще раз хочу выразить огромное спасибо! Идея из ссылки выше воплотилась у меня в универсальный КЭШиратор данных (по ссылке надо описывать каждый топик, я сделал так, что кэшируются все топики, начинающиеся на "myhome/tele/", куда все мои устройства отправляют данные). Если интересно, то код и картинка ниже.
Чтобы не ломать форум - код Node-Red прогнал через beautify'er.
[ { "id": "346b51f3.cb94ae", "type": "mqtt-broker", "broker": "localhost", "port": "1883", "clientid": "" }, { "id": "ed457908.12ba88", "type": "vis in", "language": "en", "x": 412, "y": 203, "z": "9aff093a.6500f8", "wires": [ [ "4a594456.b5a6bc" ] ] }, { "id": "4a594456.b5a6bc", "type": "function", "name": "Check for page refresh", "func": "if (msg.topic === \"vis.control.data\") {\n msg.payload = [];\n for (var state in context.global.states)\n msg.payload.push({ topic: state, data: context.global.states[state] });\n\n return msg;\n}\nelse {\n return null;\n}", "outputs": 1, "noerr": 0, "x": 588, "y": 202, "z": "9aff093a.6500f8", "wires": [ [ "5fffe5c0.a0001c" ] ] }, { "id": "5fffe5c0.a0001c", "type": "splitter", "name": "Iterate on states", "property": "payload", "x": 806, "y": 202, "z": "9aff093a.6500f8", "wires": [ [ "be39c3b6.41c64" ] ] }, { "id": "6169e126.9e962", "type": "function", "name": "Save State", "func": "context.global.states = context.global.states || [];\ncontext.global.states[msg.topic] = msg.payload;\n\nreturn msg;", "outputs": 1, "noerr": 0, "x": 220, "y": 204, "z": "9aff093a.6500f8", "wires": [ [ "ed457908.12ba88" ] ] }, { "id": "be39c3b6.41c64", "type": "function", "name": "Post cached states", "func": "msg.topic = msg.payload.topic;\nmsg.payload = msg.payload.data;\ndelete msg.payload_unsplit;\n\nreturn msg;", "outputs": 1, "noerr": 0, "x": 600, "y": 312, "z": "9aff093a.6500f8", "wires": [ [ "ed457908.12ba88" ] ] }, { "id": "5f03e43c.a0fc1c", "type": "mqtt in", "name": "Telemetry Data", "topic": "myhome/tele/#", "broker": "346b51f3.cb94ae", "x": 135, "y": 65, "z": "9aff093a.6500f8", "wires": [ [ "6169e126.9e962" ] ] }, { "id": "de8d6942.217298", "type": "inject", "name": "Go", "topic": "", "payload": "", "payloadType": "none", "repeat": "", "crontab": "", "once": false, "x": 218, "y": 416, "z": "9aff093a.6500f8", "wires": [ [ "4221520e.bddeac" ] ] }, { "id": "4221520e.bddeac", "type": "function", "name": "Dump states cache to console", "func": "for (var state in context.global.states)\n console.log(\"state '\" + state + \"' = '\" + context.global.states[state] + \"'\");\n\nreturn null;", "outputs": 1, "noerr": 0, "x": 470, "y": 417, "z": "9aff093a.6500f8", "wires": [ [] ] } ]