Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Скрипт счетчика

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Скрипт счетчика

Scheduled Pinned Locked Moved ioBroker скрипты
13 Posts 3 Posters 3.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    Pooh
    wrote on last edited by
    #1

    Попытался вникнуть в настройки http://www.iobroker.net/docu/?page_id=3550&lang=de счетчика. Знаний немецкого явно не хватает, гугл преподносит чушь какую-то…

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

    спасибо!

    сейчас счетчик электричества аппаратно сделан так: импульсный выход счетчика заведен на Mega2561. скрипт набросал такой:

    createState('PowerMeter_count_summ',0);
    createState('PowerMeter_count_day',0);
    createState('PowerMeter_count_night',0);
    createState('PowerMeter_KWH_summ',0);
    createState('PowerMeter_KWH_DAY',0);
    createState('PowerMeter_KWH_NIGHT',0);
    createState('PowerMeter_WATT_current',0);
    
    var watt = null;
    var lastValue = null;
    var newBlink = null;
    var lastBlink = (new Date().getTime());
    var interval = null;
    var powerPulseFactor = 2000;
    var ppwh = powerPulseFactor / 1000;
    
    on("megadd.0.p35_P35_counter", function (obj) {
        if (compareTime("07:00", "23:00", "between")) {
            // initialisation
            if (lastValue === null) {
            lastValue = obj.state.val;
            return;
            }
    
            // Megadd have been restarted
            if (lastValue > obj.state.val) {
            setState('PowerMeter_count_day', getState('PowerMeter_count_day').val + obj.state.val, true);
            } else if (obj.state.val != lastValue) {
            setState('PowerMeter_count_day', getState('PowerMeter_count_day').val + (obj.state.val - lastValue), true);
            } else {
            return;
            }
    
        } else {
            // initialisation
            if (lastValue === null) {
            lastValue = obj.state.val;
            return;
            }
    
            // Megadd have been restarted
            if (lastValue > obj.state.val) {
            setState('PowerMeter_count_night', getState('PowerMeter_count_night').val + obj.state.val, true);
            } else if (obj.state.val != lastValue) {
            setState('PowerMeter_count_night', getState('PowerMeter_count_night').val + (obj.state.val - lastValue), true);
            } else {
            return;
            }
    
        }
    
        setTimeout(function() {
            setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
        }, 15);   //без этой задержки берется предыдущее значение!
        lastValue = obj.state.val;
    
        setState('PowerMeter_KWH_summ', (getState('PowerMeter_count_summ').val / powerPulseFactor), true);
        setState('PowerMeter_KWH_DAY', (getState('PowerMeter_count_day').val / powerPulseFactor), true);
        setState('PowerMeter_KWH_NIGHT', (getState('PowerMeter_count_night').val / powerPulseFactor), true);
    
        newBlink = (new Date().getTime());
        interval = newBlink - lastBlink;
    
        watt = (3600000 / interval) / ppwh;
        setState('PowerMeter_WATT_current', Math.round(watt), true);
    
        lastBlink = newBlink;
    
    });
    
    

    плз, покритикуйке мой говнокод, посоветуйте как его оптимизировать…

    https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
    https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
    https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
    https://www.timestope.com/freepooh - witness code: freepooh

    1 Reply Last reply
    0
    • P Offline
      P Offline
      Pooh
      wrote on last edited by
      #2

      Мой код настолько ужасен, что не хочется его комментировать?

      Или он настолько хорош, что нечего добавить?

      Меня смущает введение задержки, вот этот кусок:

      setTimeout(function() {
              setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
      }, 15);   //без этой задержки берется предыдущее значение!
      
      

      может быть можно изящнее сделать?

      еще не нравится расчет временного интервала между импульсами и подсчет "мгновенного" потребления:

          newBlink = (new Date().getTime());
          interval = newBlink - lastBlink;
          watt = (3600000 / interval) / ppwh;
          setState('PowerMeter_WATT_current', Math.round(watt), true);
          lastBlink = newBlink;
      
      

      https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
      https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
      https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
      https://www.timestope.com/freepooh - witness code: freepooh

      1 Reply Last reply
      0
      • I Offline
        I Offline
        instalator
        wrote on last edited by
        #3

        @Pooh:

        Мой код настолько ужасен, что не хочется его комментировать?

        Или он настолько хорош, что нечего добавить?

        Меня смущает введение задержки, вот этот кусок:

        setTimeout(function() {
                setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
        }, 15);   //без этой задержки берется предыдущее значение!
         
        

        может быть можно изящнее сделать?

        еще не нравится расчет временного интервала между импульсами и подсчет "мгновенного" потребления:

            newBlink = (new Date().getTime());
            interval = newBlink - lastBlink;
            watt = (3600000 / interval) / ppwh;
            setState('PowerMeter_WATT_current', Math.round(watt), true);
            lastBlink = newBlink;
        
        ```` `  
        

        Это игрушки

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Reply Last reply
        0
        • P Offline
          P Offline
          Pooh
          wrote on last edited by
          #4

          @instalator:

          ..Это игрушки `
          Вся наша жизнь - игра…

          но хотелось бы услышать конкретную критику и советы по скрипту (железо определено, дополнительную ардуину чисто на счетчики ставить не планирую)

          https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
          https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
          https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
          https://www.timestope.com/freepooh - witness code: freepooh

          1 Reply Last reply
          0
          • I Offline
            I Offline
            instalator
            wrote on last edited by
            #5

            @Pooh:

            Мой код настолько ужасен, что не хочется его комментировать?

            Или он настолько хорош, что нечего добавить?

            Меня смущает введение задержки, вот этот кусок:

            setTimeout(function() {
                    setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
            }, 15);   //без этой задержки берется предыдущее значение!
             
            

            может быть можно изящнее сделать?

            еще не нравится расчет временного интервала между импульсами и подсчет "мгновенного" потребления:

                newBlink = (new Date().getTime());
                interval = newBlink - lastBlink;
                watt = (3600000 / interval) / ppwh;
                setState('PowerMeter_WATT_current', Math.round(watt), true);
                lastBlink = newBlink;
            
            ```` `  можно изящнее, вместо задержки подписаться на изменение
            

            PowerMeter_count_day и PowerMeter_count_night. А чем интервал не нравится?

            Высокий уровень Децибел вреден для здоровья!

            http://blog.instalator.ru/

            1 Reply Last reply
            0
            • P Offline
              P Offline
              Pooh
              wrote on last edited by
              #6

              @instalator:

              можно изящнее, вместо задержки подписаться на изменение

              PowerMeter_count_day и PowerMeter_count_night. `
              спасибо, попробую
              @instalator:

              А чем интервал не нравится? `
              для электросчетчика пойдет ибо он всегда тикает, для водяных счетчиков надо что-то другое, т.к. в основном они "молчат" и "мгновенное" потребление превращается в "последнее измеренное"

              https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
              https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
              https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
              https://www.timestope.com/freepooh - witness code: freepooh

              1 Reply Last reply
              0
              • I Offline
                I Offline
                instalator
                wrote on last edited by
                #7

                @Pooh:

                @instalator:

                можно изящнее, вместо задержки подписаться на изменение

                PowerMeter_count_day и PowerMeter_count_night. `
                спасибо, попробую
                @instalator:

                А чем интервал не нравится? для электросчетчика пойдет ибо он всегда тикает, для водяных счетчиков надо что-то другое, т.к. в основном они "молчат" и "мгновенное" потребление превращается в "последнее измеренное" так а как для воды рассчитать мгновенное если один импульс это 10 литров в среднем? Да и нужно ли оно для воды.

                Высокий уровень Децибел вреден для здоровья!

                http://blog.instalator.ru/

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  Pooh
                  wrote on last edited by
                  #8

                  первое что приходит - просто по расписанию запускать тот кусок с интервалом и проверять счетчик, если не изменился - обнулять "мгновенное потребление"

                  https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                  https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                  https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                  https://www.timestope.com/freepooh - witness code: freepooh

                  1 Reply Last reply
                  0
                  • I Offline
                    I Offline
                    instalator
                    wrote on last edited by
                    #9

                    @Pooh:

                    первое что приходит - просто по расписанию запускать тот кусок с интервалом и проверять счетчик, если не изменился - обнулять "мгновенное потребление" `
                    А проще по-моему просто ловить изменение счётчика (импульс) это и будет означать что вот вот утек стакан воды

                    Высокий уровень Децибел вреден для здоровья!

                    http://blog.instalator.ru/

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      Pooh
                      wrote on last edited by
                      #10

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

                      https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                      https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                      https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                      https://www.timestope.com/freepooh - witness code: freepooh

                      1 Reply Last reply
                      0
                      • I Offline
                        I Offline
                        instalator
                        wrote on last edited by
                        #11

                        @Pooh:

                        а как зафиксировать, что кран закрыли и импульсов в ближайшее время не предвидится? `
                        Рассчитать максимальное время между импульсами при минимальном потоке воды и через это время обнулять значение якобы мгновенного расхода. Либо делить его на это время

                        Высокий уровень Децибел вреден для здоровья!

                        http://blog.instalator.ru/

                        1 Reply Last reply
                        0
                        • R Offline
                          R Offline
                          radon
                          wrote on last edited by
                          #12

                          Счётчик воды работает конечно импульсно, но! У него контакт замыкается каждые 10 литров, при этом если вы в это время воду прекратили расходовать, он будет замкнут и постоянно включён!

                          Так как у меня контроллер Wago и, по сути, вся логика на нём, то счётчики воды реализованы через Функциональный блок 'инкрементный счетчик' (CTU), а уже от него передаются в ioBroker/

                          1 Reply Last reply
                          0
                          • P Offline
                            P Offline
                            Pooh
                            wrote on last edited by
                            #13

                            @radon:

                            ..он будет замкнут и постоянно включён!.. `
                            ну и что, я-то подписываюсь на изменение значения счетчика, на не состояние порта..

                            https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                            https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                            https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                            https://www.timestope.com/freepooh - witness code: freepooh

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            676

                            Online

                            32.7k

                            Users

                            82.3k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Home
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe