Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. ioBroker драйвера
    5. Взаимодействие скрипта js из админки драйвера с мейн скриптом на nodejs

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Взаимодействие скрипта js из админки драйвера с мейн скриптом на nodejs

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

      уперся лбом, мне необходимо на вебстранице админки драйвера в <option value="">загрузить список всех имеющихся COM портов , для дальнейшего выбора и открытия, список портов формирует модуль nodeserialport каким образом мне это реализовать, пока только придумал через сокеты(читай через задницу), как то сложно получается, мож попроще варианты есть?</option>

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

        В 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

        Что бы пользователь на ждал напрасно ответа.

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

          Я думаю, что будет проще, если ты выложишь это на гит и мы вместе будем редактировать или я хотя бы буду видеть, что да как. 😉

          1 Reply Last reply Reply Quote 0
          • V
            Vlad_k last edited by

            все получилось в лучшем виде…

            с гитом не дружу к сожалению, только скачать умею:D

            мож я те отправлю то что есть, или подскажи как вгрузить, аккаунт завел на гите...

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

              Установи git: https://git-for-windows.github.io/

              TortoiseGit: https://tortoisegit.org/download/

              Создай пустой проект на git и сделай clone:

              https://tortoisegit.org/docs/tortoisegit/tgit-dug.html

              1 Reply Last reply Reply Quote 0
              • V
                Vlad_k last edited by

                вроде чет получилось https://github.com/DJONvl/iobroker.mysensors

                1 Reply Last reply Reply Quote 0
                • V
                  Vlad_k last edited by

                  опять грабли вылезли, не могу заставить открываться порт с выбранным значением, в веб морде выбираю нужный, но при сохранении переменная куда пишу значение помирает при перезагрузке драйвера 😄

                  вроде победил….

                  в логе периодичесски варнинги:

                  ! 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

                  1 Reply Last reply Reply Quote 0
                  • V
                    Vlad_k last edited by

                    чет у меня 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.

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

                      git stash

                      gut pull

                      git stash pop

                      1 Reply Last reply Reply Quote 0
                      • V
                        Vlad_k last edited by

                        @Bluefox:

                        git stash

                        gut pull

                        git stash pop `
                        не помогло, склонировал в другую папку, заменил файлы на нужные , вроде ушло

                        1 Reply Last reply Reply Quote 0
                        • V
                          Vlad_k last edited by

                          2 Bluefox

                          сделал добавление юнитов в таблицу, подскажи как теперь в цикле на них завести createState и отслеживать изменения в payload
                          965___________.png
                          305_modbus-konfig.pdf

                          1 Reply Last reply Reply Quote 0
                          • V
                            Vlad_k last edited by

                            все отлично заработало, переменные создаются, но:

                            привязываю в визе виджет лампочки на переменную, на вкладке обьекты

                            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!');
                                }
                            });
                            

                            не могу перехватить изменения, не отрабатывает

                            1 Reply Last reply Reply Quote 0
                            • V
                              Vlad_k last edited by

                              ну вобщем-то у меня все готово, можно альфу тестить, только костыль убрать, не понял как получить номер запущенного драйвера

                              ! ````
                              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!');
                              }
                              });

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

                                @Vlad_k:

                                ну вобщем-то у меня все готово, можно альфу тестить, только костыль убрать, не понял как получить номер запущенного драйвера `
                                При подписывании на 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 убрать костыль
                                

                                17973_unbenannt111.png

                                1 Reply Last reply Reply Quote 0
                                • V
                                  Vlad_k last edited by

                                  @Bluefox:

                                  То есть:

                                  if ( id   == adapter.namespace + '.' + adapter.config.devices[co].name){//todo убрать костыль
                                  ```` `  
                                  

                                  отлично, спасибо, все работает…

                                  косметику в вебморде потом наведу...

                                  чтобы устанавливать модуль через npm install мне что нужно сделать? npm publish ? хочу на планшете под линухом попробовать, или проще папку скопировать?

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

                                    @Vlad_k:

                                    @Bluefox:

                                    То есть:

                                    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 не менять)

                                    1 Reply Last reply Reply Quote 0
                                    • V
                                      Vlad_k last edited by

                                      так он и так иоброкер, или ты имеешь в виду с большой буквой? чет не нашел где править, или удалить и заново создать?

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

                                        Я смотрю ты ещё не зачекинил последнее состояние.

                                        Очень хорошее начало!

                                        🙂

                                        Я бы хотел отдать на тест сообществу mysensors, но:

                                        • нет совершенно описания. Даже я могу только догадываться, что делать

                                        • работает ли путь iobroker => my sensors ?

                                        • надо бы будет все цифры в конфигураторе поменять на select со значениями.

                                        https://github.com/geek/sensors/blob/ma … /values.js

                                        • у меня цель поддержки tcp/udp. Было бы неплохо написать уровень абстракции, что бы было всё равно откуда/куда приходят/уходят данные (serial/udp/tcp)

                                        • какая библиотека используется 1.5 или 1.6 ?

                                        Вроде бы там адресация такая:
                                        ` > message-type

                                        Type	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 Reply Last reply Reply Quote 0
                                        • Bluefox
                                          Bluefox last edited by

                                          @Vlad_k:

                                          так он и так иоброкер, или ты имеешь в виду с большой буквой? чет не нашел где править, или удалить и заново создать? `
                                          48_rename.png

                                          1 Reply Last reply Reply Quote 0
                                          • V
                                            Vlad_k last edited by

                                            @Bluefox:

                                            Я смотрю ты ещё не зачекинил последнее состояние. `
                                            вроде в репу все отправил…

                                            @Bluefox:

                                            Я бы хотел отдать на тест сообществу mysensors, но:

                                            • нет совершенно описания. Даже я могу только догадываться, что делать `
                                              по английски я как та собака, все понимаю сказать не могу, но сейчас это не проблема кому надо и по русски поймет с гугль переводчиком, какая разница я переведу или люди сами, короче сделаю по русски с картинками…

                                            @Bluefox:

                                            • работает ли путь iobroker => my sensors ?

                                            • надо бы будет все цифры в конфигураторе поменять на select со значениями.

                                            https://github.com/geek/sensors/blob/ma … /values.js `
                                            про путь поподробней не понял что имеешь в ввиду, а в таблице все уже и так выводится с подписанными полями

                                            @Bluefox:

                                            • у меня цель поддержки tcp/udp. Было бы неплохо написать уровень абстракции, что бы было всё равно откуда/куда приходят/уходят данные (serial/udp/tcp)

                                            • какая библиотека используется 1.5 или 1.6 ? `
                                              библиотека 1.5, про 1.6 не слыхал еще, но они чет намутили в последних версиях теперь ноды на китайском клоне Si24R1 не видятся в сети с nRF24, по крайней мере те, что я уже наделал платы…

                                            tcp/udp для себя не рассматриваю ввиду ненавистности к проводам, но куплю платку для экспериментов, попробую разобраться че там, хотя под MQTT Ethernet Gateway

                                            в брокере и так есть адаптер
                                            @Bluefox:

                                            Вроде бы там адресация такая:
                                            ` > message-type

                                            Type	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

                                            как то раньше я этого не замечал
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            744
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            20
                                            4020
                                            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