NEWS
Rgraph
-
А подскажите, как в виджет LiveChart из RGraph загружать данные при загрузке страницы ioBroker.vis? У меня получается, что если я прописываю ObjectID - все работает, график отображается, но после обновления страницы или заходе с другого устройства все графики пропадают.
Да и вообще - если у любого виджета прописать ObjectID, насколько я понимаю статус обновится только в случае попадания каких-то данных, а если отправка данных осуществляется с большими периодами - виджеты будут показывать 0? Как это можно обойти?
Спасибо!
-
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": [ [] ] } ]
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden