NEWS
Взаимодействие скрипта js из админки драйвера с мейн скриптом на nodejs
-
В Sonos, например, эта проблема решена так.
По умолчанию драйвер запущен (enabled: true)
https://github.com/ioBroker/ioBroker.so … e.json#L14
и поддерживает messagebox.
https://github.com/ioBroker/ioBroker.so ... e.json#L12
Админка посылает драйверу через sendto запрос
https://github.com/ioBroker/ioBroker.so ... .html#L102
И драйвер обрабатывает его и посылает ответ.
https://github.com/ioBroker/ioBroker.so ... os.js#L142
Вот и всё. Ну ещё в админке встроена проверка, запущен ли драйвер
https://github.com/ioBroker/ioBroker.so ... x.html#L91
Что бы пользователь на ждал напрасно ответа.
-
Я думаю, что будет проще, если ты выложишь это на гит и мы вместе будем редактировать или я хотя бы буду видеть, что да как.
-
все получилось в лучшем виде…
с гитом не дружу к сожалению, только скачать умею:D
мож я те отправлю то что есть, или подскажи как вгрузить, аккаунт завел на гите...
-
Установи git: https://git-for-windows.github.io/
TortoiseGit: https://tortoisegit.org/download/
Создай пустой проект на git и сделай clone:
-
вроде чет получилось https://github.com/DJONvl/iobroker.mysensors
-
опять грабли вылезли, не могу заставить открываться порт с выбранным значением, в веб морде выбираю нужный, но при сохранении переменная куда пишу значение помирает при перезагрузке драйвера
вроде победил….
в логе периодичесски варнинги:
! host-MSW0039 2016-02-12 22:33:50 warn instance system.adapter.mysensors.0 already running with pid 5208
! mysensors-0 2016-02-12 22:33:48 info mySens 0;0;3;0;14;Gateway startup complete.
! mysensors-0 2016-02-12 22:33:48 info mySens 0;0;3;0;9;gateway started, id=0, parent=0, distance=0
! mysensors-0 2016-02-12 22:33:46 info starting. Version 0.5.0 in C:/iobroker/node_modules/iobroker.mysensors
! host-MSW0039 2016-02-12 22:33:46 info instance system.adapter.mysensors.0 started with pid 5208
! host-MSW0039 2016-02-12 22:33:43 info Restart adapter system.adapter.mysensors.0 because enabled
! host-MSW0039 2016-02-12 22:33:43 warn instance system.adapter.mysensors.0 terminated due to SIGTERM -
чет у меня git сломался, не принимает обнову
! To https://github.com/DJONvl/iobroker.mysensors.git
! ! [rejected] master -> master (fetch first)
! error: failed to push some refs to 'https://github.com/DJONvl/iobroker.mysensors
! .git'
! hint: Updates were rejected because the remote contains work that you do
! hint: not have locally. This is usually caused by another repository pushing
! hint: to the same ref. You may want to first integrate the remote changes
! hint: (e.g., 'git pull …') before pushing again.
! hint: See the 'Note about fast-forwards' in 'git push --help' for details. -
git stash
gut pull
git stash pop
-
git stash
gut pull
git stash pop `
не помогло, склонировал в другую папку, заменил файлы на нужные , вроде ушло -
2 Bluefox
сделал добавление юнитов в таблицу, подскажи как теперь в цикле на них завести createState и отслеживать изменения в payload
965___________.png
305_modbus-konfig.pdf -
все отлично заработало, переменные создаются, но:
привязываю в визе виджет лампочки на переменную, на вкладке обьекты
ID___________________Имя________Тип__________Роль___Комната__Значение
V_LIGHT_2_1_______V_LIGHT_2_1___state_________state ______________0
значение переменной меняется (только красным почему-то),
а в
adapter.on( 'stateChange', function (id, state) { // Warning, state can be null if it was deleted adapter.log.info('stateChange ' + id + ' ' + JSON.stringify(state)); adapter.log.info('blablablabla-',id); // you can use the ack flag to detect if it is status (true) or command (false) if (state && !state.ack) { adapter.log.info('ack is not set!'); } });
не могу перехватить изменения, не отрабатывает
-
ну вобщем-то у меня все готово, можно альфу тестить, только костыль убрать, не понял как получить номер запущенного драйвера
! ````
adapter.on( 'stateChange', function (id, state) {
// Warning, state can be null if it was deleted
adapter.log.info('stateChange ' + id + ' ' + JSON.stringify(state));
adapter.log.info(adapter.name);//________________выводим в порт___________________________________________ for (var co = 0; co < adapter.config.devices.length; co++) { if ( id == adapter.name+'.0.'+adapter.config.devices[co].name){//todo убрать костыль var msg_s; msg_s = adapter.config.devices[co].raw + ';' + state.val + '\n';
!
G_myPort.write(msg_s);
adapter.log.info('mesage-'+msg_s);
}
adapter.log.info(adapter.config.devices[co].name+ ';' + adapter.config.devices[co].node_id)
}adapter.log.info('ToDo-вывести в компорт для '+id+'значение-'+state.val);
! //----------------------------------------------------------------------------
// you can use the ack flag to detect if it is status (true) or command (false)
if (state && !state.ack) {
adapter.log.info('ack is not set!');
}
}); -
ну вобщем-то у меня все готово, можно альфу тестить, только костыль убрать, не понял как получить номер запущенного драйвера `
При подписывании на subscribeStates('*') тебе приходят только переменные из твоей инстанции. А так есть следующие поля:https://github.com/ioBroker/ioBroker/wi … of-adapter
adapter.namespace = adapter.name + '.' + adapter.instance = 'mysensors.0'
То есть:
if ( id == adapter.namespace + '.' + adapter.config.devices[co].name){//todo убрать костыль
-
То есть:
if ( id == adapter.namespace + '.' + adapter.config.devices[co].name){//todo убрать костыль ```` `
отлично, спасибо, все работает…
косметику в вебморде потом наведу...
чтобы устанавливать модуль через npm install мне что нужно сделать? npm publish ? хочу на планшете под линухом попробовать, или проще папку скопировать?
-
То есть:
if ( id == adapter.namespace + '.' + adapter.config.devices[co].name){//todo убрать костыль ```` `
отлично, спасибо, все работает…
косметику в вебморде потом наведу...
чтобы устанавливать модуль через npm install мне что нужно сделать? npm publish ? хочу на планшете под линухом попробовать, или проще папку скопировать? `
npm install https://github.com/DJONvl/iobroker.myse … all/master
Потом, когда драйвер будет более-менее надо будет сделать "npm publish" и его можно будет ставить через
npm install iobroker.mysensors
Можешь поменять имя репозитория на github на ioBroker.mysensors
ТОЛЬКО имя репозитория, больше ничего (package.json, io-package.json не менять)
-
так он и так иоброкер, или ты имеешь в виду с большой буквой? чет не нашел где править, или удалить и заново создать?
-
Я смотрю ты ещё не зачекинил последнее состояние.
Очень хорошее начало!
Я бы хотел отдать на тест сообществу mysensors, но:
-
нет совершенно описания. Даже я могу только догадываться, что делать
-
работает ли путь iobroker => my sensors ?
-
надо бы будет все цифры в конфигураторе поменять на select со значениями.
https://github.com/geek/sensors/blob/ma … /values.js
-
у меня цель поддержки tcp/udp. Было бы неплохо написать уровень абстракции, что бы было всё равно откуда/куда приходят/уходят данные (serial/udp/tcp)
-
какая библиотека используется 1.5 или 1.6 ?
Вроде бы там адресация такая:
` > message-typeType Value Comment presentation 0 Sent by a node when they present attached sensors. This is usually done in setup() at startup. set 1 This message is sent from or to a sensor when a sensor value should be updated req 2 Requests a variable value (usually from an actuator destined for controller). internal 3 This is a special internal message. See table below for the details stream 4 Used for OTA firmware updates ```` `
Типы сообщений stream и internal скорей всего не нужны.
А presentation/set/req надо подставлять в драйвере в зависимости от того что драйвер хочет сделать:
-
драйвер стартанулся => send presentation что бы получить список адресов
-
poll => req
-
write => set
и нет смысла вводить их в таблице..
Всё только начинается
-
-
так он и так иоброкер, или ты имеешь в виду с большой буквой? чет не нашел где править, или удалить и заново создать? `
48_rename.png -
Я смотрю ты ещё не зачекинил последнее состояние. `
вроде в репу все отправил…Я бы хотел отдать на тест сообществу mysensors, но:
- нет совершенно описания. Даже я могу только догадываться, что делать `
по английски я как та собака, все понимаю сказать не могу, но сейчас это не проблема кому надо и по русски поймет с гугль переводчиком, какая разница я переведу или люди сами, короче сделаю по русски с картинками…
-
работает ли путь iobroker => my sensors ?
-
надо бы будет все цифры в конфигураторе поменять на select со значениями.
https://github.com/geek/sensors/blob/ma … /values.js `
про путь поподробней не понял что имеешь в ввиду, а в таблице все уже и так выводится с подписанными полями-
у меня цель поддержки tcp/udp. Было бы неплохо написать уровень абстракции, что бы было всё равно откуда/куда приходят/уходят данные (serial/udp/tcp)
-
какая библиотека используется 1.5 или 1.6 ? `
библиотека 1.5, про 1.6 не слыхал еще, но они чет намутили в последних версиях теперь ноды на китайском клоне Si24R1 не видятся в сети с nRF24, по крайней мере те, что я уже наделал платы…
tcp/udp для себя не рассматриваю ввиду ненавистности к проводам, но куплю платку для экспериментов, попробую разобраться че там, хотя под MQTT Ethernet Gateway
в брокере и так есть адаптер
@Bluefox:Вроде бы там адресация такая:
` > message-typeType Value Comment presentation 0 Sent by a node when they present attached sensors. This is usually done in setup() at startup. set 1 This message is sent from or to a sensor when a sensor value should be updated req 2 Requests a variable value (usually from an actuator destined for controller). internal 3 This is a special internal message. See table below for the details stream 4 Used for OTA firmware updates ```` `
Типы сообщений stream и internal скорей всего не нужны.
А presentation/set/req надо подставлять в драйвере в зависимости от того что драйвер хочет сделать:
-
драйвер стартанулся => send presentation что бы получить список адресов
-
poll => req
-
write => set
и нет смысла вводить их в таблице..
Всё только начинается `
тут я вообще не понял логику разработчиков библиотеки, все было прекрасно пока я не доделал драйвер, накой хрен они сделали презентацию, если потом обращение к юниту в ноде, в ручную приходится прописывть для подключения,например````
1 12 presentation false S_LIGHT 1;12;0;0;3
но чтоб включить-выключить юнит надо в порт писать 1;12;0;0;2,value\nкак то раньше я этого не замечал
- нет совершенно описания. Даже я могу только догадываться, что делать `