Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Скрипт для счётчика

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Скрипт для счётчика

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

      @radon:

      Здравствуйте есть вопрос по созданию скрипта для учёта потребляемой энергии.

      Исходные данные:

      каждую секунду (или долю секунды, не важно) снимается мгновенная мощность, т.е. есть потребление и интервалы записи потребления

      Нужно:

      Просуммировать все получаемые данные.

      Попоробовал в NodeRed, т.к. все данные всё равно через него идут, не вышло, видимо он как-то потоками считает, поэтому цикл do в функции просто не работает.

      Пробовал скриптами, там не вышлоо вообще ничего, так и не понял как с ними работать, даже такой пример:

      var pp, pp2, pp3;

      pp = 'admin.0.Энергия.Мощность';

      pp2 = 10;

      pp3 = pp2 + 0;

      setState("admin.0.info.p"/p/, pp3);

      и тот не работает.

      Вопрос в том, как реализовать данный счётчик. `
      Доставка получаемых данных гарантируется? если нет то счетчик надо делать обособленно чтобы работал независимо от всех систем а просто передавал свои показания уже серверу

      1 Reply Last reply Reply Quote 0
      • R
        radon last edited by

        > Доставка получаемых данных гарантируется? если нет то счетчик надо делать обособленно чтобы работал независимо от всех систем а просто передавал свои показания уже серверу
        Данные передаются по modbus через nodered с контроллера wago, так что можно сказать что гарантируются, хотя конечно можно напрямую в codesys это запрограммировать и уже потом передавать.

        Но всё же можно это реализовать силами iobroker?

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          @radon:

          > Доставка получаемых данных гарантируется? если нет то счетчик надо делать обособленно чтобы работал независимо от всех систем а просто передавал свои показания уже серверу
          Данные передаются по modbus через nodered с контроллера wago, так что можно сказать что гарантируются, хотя конечно можно напрямую в codesys это запрограммировать и уже потом передавать.

          Но всё же можно это реализовать силами iobroker? ` данные в каком виде представленны? Это конкретные значения или импульсы?

          1 Reply Last reply Reply Quote 0
          • R
            radon last edited by

            Но всё же можно это реализовать силами iobroker?данные в каком виде представленны? Это конкретные значения или импульсы?

            В виде конкретных значений каждую секунду (в принципе время настраивается) продаются значения мощности, силы тока, напряжения и частоты в виде чисел, например 220Вт, 220в, 1а, соответственно каждую секунду эти данные обновляются. Кроме того они пишутся в базу history.

            1 Reply Last reply Reply Quote 0
            • I
              instalator last edited by

              @radon:

              Но всё же можно это реализовать силами iobroker? ` данные в каком виде представленны? Это конкретные значения или импульсы?

              В виде конкретных значений каждую секунду (в принципе время настраивается) продаются значения мощности, силы тока, напряжения и частоты в виде чисел, например 220Вт, 220в, 1а, соответственно каждую секунду эти данные обновляются. Кроме того они пишутся в базу history.

              не понятна задача.

              Зачем их суммировать? вывести среднее?

              createState('test', '');
              createState('Srednee', '');
              var summa = getState('test').val;
              var i = 0;
              on({id: 'power', change: 'any'}, function (obj) {
                  if (obj.newState.val){
                      i++;
                      summa += obj.newState.val;
                      setState ('Srednee', summa/i);
                  }
              });
              

              Можно данные взять и за прошлый период из базы данных.

              Вообщем не понятна задача

              1 Reply Last reply Reply Quote 0
              • R
                radon last edited by

                ` > Можно данные взять и за прошлый период из базы данных.

                Вообщем не понятна задача `
                Мне нужны данные которые показывает счётчик, т.е. КВт*час, у меня есть данные по мощности Вт, и времени съёма мощности, каждую секунду

                Я хочу в итоге получить то, что показывает счётчик, т.е. потреблённую энергию в КВт*часах

                идея такова:

                P=мощность Вт

                t = время c

                E =P*t потреблённая энергия энергия

                программа

                E=начальное значение энергии

                цикл. каждую секунду

                E=E+P*t - потреблённая энергия за всё время

                Теперь более понятно?

                1 Reply Last reply Reply Quote 0
                • I
                  instalator last edited by

                  @radon:

                  ` > Можно данные взять и за прошлый период из базы данных.

                  Вообщем не понятна задача `
                  Мне нужны данные которые показывает счётчик, т.е. КВт*час, у меня есть данные по мощности Вт, и времени съёма мощности, каждую секунду

                  Я хочу в итоге получить то, что показывает счётчик, т.е. потреблённую энергию в КВт*часах

                  идея такова:

                  P=мощность Вт

                  t = время c

                  E =P*t потреблённая энергия энергия

                  программа

                  E=начальное значение энергии

                  цикл. каждую секунду

                  E=E+P*t - потреблённая энергия за всё время

                  Теперь более понятно? `
                  Понятно что ничего не понятно, если сервер перезагрузить или драйвер то у тебя уже будут расхождения показаний. Считать все-таки надо в независимом устройстые, а из него уже отдавать данные в иоб. у меня счетчик правда импульсы выдает но тебе тоже нужно что-то подобное http://blog.instalator.ru/archives/140

                  1 Reply Last reply Reply Quote 0
                  • S
                    smoker_vvo last edited by

                    instalator: Подскажи как забрать данные от счетчика по MQTT, Счетчик дает импульсы, значит твой скрипт и используем. Пока буду проверять на MEga2560

                    1 Reply Last reply Reply Quote 0
                    • I
                      instalator last edited by

                      @smoker_vvo:

                      instalator: Подскажи как забрать данные от счетчика по MQTT, Счетчик дает импульсы, значит твой скрипт и используем. Пока буду проверять на MEga2560 `
                      Не совсем я тебя понимаю. Что значит как забрать? Считать данные со счетчика ардуиной например и по MQTT отдавать.

                      А какой именно мой скрипт используем?

                      Вот https://github.com/instalator/Counter_MQTT считает импульсы и отдает данные по MQTT

                      1 Reply Last reply Reply Quote 0
                      • S
                        smoker_vvo last edited by

                        что-то подобное http://blog.instalator.ru/archives/140

                        Ну вот, а говоришь не понимаешь… ссылочка что надо. Ща попробую проверить.....

                        1 Reply Last reply Reply Quote 0
                        • I
                          instalator last edited by

                          @smoker_vvo:

                          что-то подобное http://blog.instalator.ru/archives/140

                          Ну вот, а говоришь не понимаешь… ссылочка что надо. Ща попробую проверить..... `
                          Имей ввиду что там Ethernet на W5500 и библиотека под нее же.

                          1 Reply Last reply Reply Quote 0
                          • S
                            smoker_vvo last edited by

                            у меня 5100

                            1 Reply Last reply Reply Quote 0
                            • S
                              smoker_vvo last edited by

                              #include <ethernet2.h>- вот эта для 5500</ethernet2.h>

                              1 Reply Last reply Reply Quote 0
                              • S
                                smoker_vvo last edited by

                                такк… Вопрос. Как я понял ты собрал отдельный контроллер для этого, я жеж использую MEGA2560, я правильно понимаю что сигнал от счетчика надо подавать на А0 и желательно с подтяжкой 10кОм

                                1 Reply Last reply Reply Quote 0
                                • S
                                  smoker_vvo last edited by

                                  Залил код на Ардуину, в ЙоБе, записи появились, но результаты по 0…... Где грабли.....

                                  и еще, подключаю ко входу счетчик Энергомера СЕ101 3200имп.кВТ.ч.....

                                  Похоже что то не так делаю... Прошу помощщи....

                                  1 Reply Last reply Reply Quote 0
                                  • I
                                    instalator last edited by

                                    @smoker_vvo:

                                    Залил код на Ардуину, в ЙоБе, записи появились, но результаты по 0…... Где грабли.....

                                    и еще, подключаю ко входу счетчик Энергомера СЕ101 3200имп.кВТ.ч.....

                                    Похоже что то не так делаю... Прошу помощщи.... `
                                    Не могу сказать где грабли не видя кода.

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      smoker_vvo last edited by

                                      Код использовался https://github.com/instalator/Counter_MQTT от сюда, соответственно поменял IP а все остальное как было.

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        smoker_vvo last edited by

                                        для проверки использую Arduino 2560 и сетевуху 5100, там же стоит SD

                                        1 Reply Last reply Reply Quote 0
                                        • I
                                          instalator last edited by

                                          @smoker_vvo:

                                          Код использовался https://github.com/instalator/Counter_MQTT от сюда, соответственно поменял IP а все остальное как было. `
                                          Так ты изменил код то? Сконфигурирован его для входов не намур? И вообще он не для электросчётчиков.

                                          Для электросчётчиков тут https://github.com/instalator/Electro_C … /README.md

                                          1 Reply Last reply Reply Quote 0
                                          • S
                                            smoker_vvo last edited by

                                            Что то не прет компиляция….Electro_Counter2, код взят с Githuba

                                            ! Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino:6:0: warning: "PWR_CTRL" redefined
                                            ! #define PWR_CTRL A0
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:7:0: note: this is the location of the previous definition
                                            ! #define PWR_CTRL A2 //Контроль напряжения
                                            ! ^
                                            ! count:14: error: conflicting declaration 'volatile long unsigned int cnt'
                                            ! volatile unsigned long cnt = 1 ;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:34:15: note: previous declaration as 'long unsigned int cnt'
                                            ! unsigned long cnt = 0;
                                            ! ^
                                            ! count:15: error: conflicting declaration 'volatile long unsigned int prev_cnt'
                                            ! volatile unsigned long prev_cnt = 0;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:35:15: note: previous declaration as 'long unsigned int prev_cnt'
                                            ! unsigned long prev_cnt = 2;
                                            ! ^
                                            ! count:16: error: conflicting declaration 'volatile long unsigned int pwr'
                                            ! volatile unsigned long pwr = 0;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:36:15: note: previous declaration as 'long unsigned int pwr'
                                            ! unsigned long pwr = 0;
                                            ! ^
                                            ! count:17: error: conflicting declaration 'volatile long unsigned int prev_pwr'
                                            ! volatile unsigned long prev_pwr = 1;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:37:15: note: previous declaration as 'long unsigned int prev_pwr'
                                            ! unsigned long prev_pwr = 2;
                                            ! ^
                                            ! count:18: error: conflicting declaration 'long unsigned int chk'
                                            ! unsigned long chk = 0;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:44:5: note: previous declaration as 'int chk'
                                            ! int chk = 0;
                                            ! ^
                                            ! count:19: error: redefinition of 'int num'
                                            ! int num = 3200;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:40:5: note: 'int num' previously defined here
                                            ! int num = 0;
                                            ! ^
                                            ! count:21: error: redefinition of 'int amp'
                                            ! int amp = 0;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:38:5: note: 'int amp' previously defined here
                                            ! int amp = 0;
                                            ! ^
                                            ! count:22: error: redefinition of 'int prev_amp'
                                            ! int prev_amp = 0;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:39:5: note: 'int prev_amp' previously defined here
                                            ! int prev_amp = 2;
                                            ! ^
                                            ! count:23: error: redefinition of 'int bounce'
                                            ! int bounce = 1;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:42:5: note: 'int bounce' previously defined here
                                            ! int bounce = 10;
                                            ! ^
                                            ! count:31: error: redefinition of 'String cmd'
                                            ! String cmd = "";
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:50:8: note: 'String cmd' previously declared here
                                            ! String cmd = "";
                                            ! ^
                                            ! count:32: error: redefinition of 'bool strComplete'
                                            ! bool strComplete = false;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:51:6: note: 'bool strComplete' previously defined here
                                            ! bool strComplete = false;
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void setup()':
                                            ! count:35: error: redefinition of 'void setup()'
                                            ! void setup() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:67:6: note: 'void setup()' previously defined here
                                            ! void setup() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void loop()':
                                            ! count:60: error: redefinition of 'void loop()'
                                            ! void loop() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:265:6: note: 'void loop()' previously defined here
                                            ! void loop() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void serialEvent()':
                                            ! count:129: error: redefinition of 'void serialEvent()'
                                            ! void serialEvent() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:111:6: note: 'void serialEvent()' previously defined here
                                            ! void serialEvent() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void save()':
                                            ! count:139: error: redefinition of 'void save()'
                                            ! void save() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:175:6: note: 'void save()' previously defined here
                                            ! void save() {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void EEPROMWriteLong(int, long unsigned int)':
                                            ! count:150: error: redefinition of 'void EEPROMWriteLong(int, long unsigned int)'
                                            ! void EEPROMWriteLong(int p_address, unsigned long p_value) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:195:6: note: 'void EEPROMWriteLong(int, long unsigned int)' previously defined here
                                            ! void EEPROMWriteLong(int p_address, unsigned long p_value) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'long unsigned int EEPROMReadLong(int)':
                                            ! count:161: error: redefinition of 'long unsigned int EEPROMReadLong(int)'
                                            ! unsigned long EEPROMReadLong(int p_address) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:206:15: note: 'long unsigned int EEPROMReadLong(int)' previously defined here
                                            ! unsigned long EEPROMReadLong(int p_address) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void EEPROMWriteInt(int, int)':
                                            ! count:169: error: redefinition of 'void EEPROMWriteInt(int, int)'
                                            ! void EEPROMWriteInt(int p_address, int p_value) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:214:6: note: 'void EEPROMWriteInt(int, int)' previously defined here
                                            ! void EEPROMWriteInt(int p_address, int p_value) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'unsigned int EEPROMReadInt(int)':
                                            ! count:175: error: redefinition of 'unsigned int EEPROMReadInt(int)'
                                            ! unsigned int EEPROMReadInt(int p_address) {
                                            ! ^
                                            ! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:220:14: note: 'unsigned int EEPROMReadInt(int)' previously defined here
                                            ! unsigned int EEPROMReadInt(int p_address) {
                                            ! ^
                                            ! Несколько библиотек найдено для "SPI.h"
                                            ! Используется: C:\Users\5\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\SPI
                                            ! Не используется: C:\Program Files (x86)\Arduino\libraries\SPI
                                            ! Несколько библиотек найдено для "PubSubClient.h"
                                            ! Используется: C:\Users\5\Documents\Arduino\libraries\PubSubClient
                                            ! Не используется: C:\Program Files (x86)\Arduino\libraries\PubSubClient
                                            ! Несколько библиотек найдено для "EEPROM.h"
                                            ! Используется: C:\Users\5\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\EEPROM
                                            ! Не используется: C:\Program Files (x86)\Arduino\libraries\EEPROM
                                            ! exit status 1
                                            ! conflicting declaration 'volatile long unsigned int cnt'
                                            ! Этот отчёт будет иметь больше информации с
                                            ! включенной опцией Файл -> Настройки ->
                                            ! "Показать подробный вывод во время компиляции"

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            533
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            70
                                            12458
                                            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