Работа из скрипта со свойствами объектов

Вопросы и информация о скриптах для ioBroker
Antworten
Ho Hum
starter
Beiträge: 37
Registriert: 09.05.2016, 13:13

Работа из скрипта со свойствами объектов

Beitrag von Ho Hum » 05.11.2016, 20:25

Прошу совета, может быть кто-нибудь уже делал подобное.
Я разделяю слои физических и логических устройств, связывая их между собой в отдельном скрипте.
В результате получаю удобную структуру на логическом уровне и дальше работаю только с логическими устройствами. В случае изменения чего-либо редактирую только связку, в вся основная логика, которая может быть во многих скриптах, остается неизменной.
Вот пример:
Bild[/url]
Теперь собственно вопрос:
Как логичнее и удобнее всего связать выключатель с соответствующими лампами (их может быть как одна, так и несколько). Логичнее всего, на мой взгляд, в объекте выключателя добавить свойство, в которое прописать имена объектов - ламп, которыми он управляет. Система позволяет добавить такое свойство, но из скрипта вытащить его значения у меня не получается...
Можно в global сделать массив и описать ссылки на управляющие и управляемые объекты в нем, но мне кажется, что это некрасиво и громоздко.
Что подскажет коллективный разум?

Benutzeravatar
Bluefox
Site Admin
Beiträge: 7911
Registriert: 13.07.2014, 14:42
Kontaktdaten:

Re: Работа из скрипта со свойствами объектов

Beitrag von Bluefox » 06.11.2016, 12:31

Ho Hum hat geschrieben:Прошу совета, может быть кто-нибудь уже делал подобное.
Я разделяю слои физических и логических устройств, связывая их между собой в отдельном скрипте.
В результате получаю удобную структуру на логическом уровне и дальше работаю только с логическими устройствами. В случае изменения чего-либо редактирую только связку, в вся основная логика, которая может быть во многих скриптах, остается неизменной.
Вот пример:
Bild[/url]
Теперь собственно вопрос:
Как логичнее и удобнее всего связать выключатель с соответствующими лампами (их может быть как одна, так и несколько). Логичнее всего, на мой взгляд, в объекте выключателя добавить свойство, в которое прописать имена объектов - ламп, которыми он управляет. Система позволяет добавить такое свойство, но из скрипта вытащить его значения у меня не получается...
Можно в global сделать массив и описать ссылки на управляющие и управляемые объекты в нем, но мне кажется, что это некрасиво и громоздко.
Что подскажет коллективный разум?
Ты можешь посмотреть данные объекта, так:

Code: Alles auswählen

console.log(JSON.stringify(getObject('Home.0.Lights.FirstFloor.L-20').native));
И даже заносить туда свои значения. Параметр объекта native создан как раз для того, что бы там хранить специфичные данные.
Советую сделать так:

Code: Alles auswählen

extendObject('Home.0.Lights.FirstFloor.L-20', {native: {binds: ['myRealID']}});

И потом

Code: Alles auswählen

on('Home.0.Lights.FirstFloor.L-20', function (obj) {
    var myObj = getObject('Home.0.Lights.FirstFloor.L-20');
    if (myObj && myObj.native && myObj.native.binds) {
        if (typeof myObj.native.binds === 'object') {
            for (var b = 0; b < myObj.native.binds.length; b++) {
                setState(myObj.native.binds[b], obj.state.val);
            }
        } else {
            setState(myObj.native.binds, obj.state.val);
        }
    }
});
P.S. очень интересный подход. ;)

Ho Hum
starter
Beiträge: 37
Registriert: 09.05.2016, 13:13

Re: Работа из скрипта со свойствами объектов

Beitrag von Ho Hum » 06.11.2016, 13:39

Спасибо, попробую.
Надеюсь, слова про интересный подход сказаны в прямом, а не переносном смысле :)

Benutzeravatar
Bluefox
Site Admin
Beiträge: 7911
Registriert: 13.07.2014, 14:42
Kontaktdaten:

Re: Работа из скрипта со свойствами объектов

Beitrag von Bluefox » 06.11.2016, 13:59

Ho Hum hat geschrieben:Спасибо, попробую.
Надеюсь, слова про интересный подход сказаны в прямом, а не переносном смысле :)
В прямом.
Я бы даже изменил:

Code: Alles auswählen

on(/^Home\./, function (obj) {
    if (obj && obj.native && obj.native.binds) {
        if (typeof obj.native.binds === 'object') {
            for (var b = 0; b < obj.native.binds.length; b++) {
                setState(obj.native.binds[b], obj.state.val);
            }
        } else {
            setState(obj.native.binds, obj.state.val);
        }
    }
});

Haus
professional
Beiträge: 529
Registriert: 12.05.2015, 16:49
Wohnort: Lithuania, Vilnius

Re: Работа из скрипта со свойствами объектов

Beitrag von Haus » 04.07.2017, 10:50

Ho Hum hat geschrieben:Прошу совета, может быть кто-нибудь уже делал подобное.
Я разделяю слои физических и логических устройств, связывая их между собой в отдельном скрипте.
В результате получаю удобную структуру на логическом уровне и дальше работаю только с логическими устройствами. В случае изменения чего-либо редактирую только связку, в вся основная логика, которая может быть во многих скриптах, остается неизменной.
Вот пример:
Bild[/url]
Теперь собственно вопрос:
Как логичнее и удобнее всего связать выключатель с соответствующими лампами (их может быть как одна, так и несколько). Логичнее всего, на мой взгляд, в объекте выключателя добавить свойство, в которое прописать имена объектов - ламп, которыми он управляет. Система позволяет добавить такое свойство, но из скрипта вытащить его значения у меня не получается...
Можно в global сделать массив и описать ссылки на управляющие и управляемые объекты в нем, но мне кажется, что это некрасиво и громоздко.
Что подскажет коллективный разум?
http://forum.iobroker.net/viewtopic.php?f=16&t=7113
js-controller: 1.2.3 / node.js: v4.8.7 / npm: 2.15.11
admin: 3.2.0
javascript: 3.6.4
web: 2.1.9 vis: 1.1.2
cloud: 2.4.6

Server: DELL FX170 / linux: Debian 8.8 Jessie
Adapter: MegaD-2561, Mega-ESP, Wrapper(Home)

andrey99986
professional
Beiträge: 198
Registriert: 24.08.2016, 11:12

Re: Работа из скрипта со свойствами объектов

Beitrag von andrey99986 » 30.09.2017, 19:42

Значение сейчас true :

Code: Alles auswählen

var obj1=JSON.stringify(getObject('megad.0.p0').common.custom["sql.0"].enabled);
Как его поменять на false?

Antworten