ioBroker Forum


Nutzungsbedingungen |Datenschutzrichtlinie
Cloud |Dokumentation
Aktuelle Zeit: 22.02.2018, 12:00

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Скрипт счетчика
BeitragVerfasst: 27.06.2017, 20:09 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
Попытался вникнуть в настройки этого счетчика. Знаний немецкого явно не хватает, гугл преподносит чушь какую-то...
просьба владеющим немецким перевести этот (возможно я ошибся со скиптом, тогда другой универсальный) на русский
спасибо!

сейчас счетчик электричества аппаратно сделан так: импульсный выход счетчика заведен на Mega2561. скрипт набросал такой:
Code:
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;
   
});


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

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 28.06.2017, 14:36 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
Мой код настолько ужасен, что не хочется его комментировать?
Или он настолько хорош, что нечего добавить?
Меня смущает введение задержки, вот этот кусок:
Code:
setTimeout(function() {
        setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
}, 15);   //без этой задержки берется предыдущее значение!
 

может быть можно изящнее сделать?
еще не нравится расчет временного интервала между импульсами и подсчет "мгновенного" потребления:
Code:
    newBlink = (new Date().getTime());
    interval = newBlink - lastBlink;
    watt = (3600000 / interval) / ppwh;
    setState('PowerMeter_WATT_current', Math.round(watt), true);
    lastBlink = newBlink;

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 28.06.2017, 15:05 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Pooh hat geschrieben:
Мой код настолько ужасен, что не хочется его комментировать?
Или он настолько хорош, что нечего добавить?
Меня смущает введение задержки, вот этот кусок:
Code:
setTimeout(function() {
        setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
}, 15);   //без этой задержки берется предыдущее значение!
 

может быть можно изящнее сделать?
еще не нравится расчет временного интервала между импульсами и подсчет "мгновенного" потребления:
Code:
    newBlink = (new Date().getTime());
    interval = newBlink - lastBlink;
    watt = (3600000 / interval) / ppwh;
    setState('PowerMeter_WATT_current', Math.round(watt), true);
    lastBlink = newBlink;

Это игрушки

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


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 28.06.2017, 15:35 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
instalator hat geschrieben:
..Это игрушки

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

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 28.06.2017, 18:12 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Pooh hat geschrieben:
Мой код настолько ужасен, что не хочется его комментировать?
Или он настолько хорош, что нечего добавить?
Меня смущает введение задержки, вот этот кусок:
Code:
setTimeout(function() {
        setState('PowerMeter_count_summ', ((getState('PowerMeter_count_day').val) + (getState('PowerMeter_count_night').val)), true);
}, 15);   //без этой задержки берется предыдущее значение!
 

может быть можно изящнее сделать?
еще не нравится расчет временного интервала между импульсами и подсчет "мгновенного" потребления:
Code:
    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. А чем интервал не нравится?

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


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 29.06.2017, 08:51 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
instalator hat geschrieben:
можно изящнее, вместо задержки подписаться на изменение
PowerMeter_count_day и PowerMeter_count_night.

спасибо, попробую
instalator hat geschrieben:
А чем интервал не нравится?

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

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 29.06.2017, 09:01 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Pooh hat geschrieben:
instalator hat geschrieben:
можно изящнее, вместо задержки подписаться на изменение
PowerMeter_count_day и PowerMeter_count_night.

спасибо, попробую
instalator hat geschrieben:
А чем интервал не нравится?

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

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


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 29.06.2017, 09:05 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
первое что приходит - просто по расписанию запускать тот кусок с интервалом и проверять счетчик, если не изменился - обнулять "мгновенное потребление"

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 29.06.2017, 09:21 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Pooh hat geschrieben:
первое что приходит - просто по расписанию запускать тот кусок с интервалом и проверять счетчик, если не изменился - обнулять "мгновенное потребление"

А проще по-моему просто ловить изменение счётчика (импульс) это и будет означать что вот вот утек стакан воды

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


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 29.06.2017, 10:44 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
а как зафиксировать, что кран закрыли и импульсов в ближайшее время не предвидится?

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 29.06.2017, 10:49 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Pooh hat geschrieben:
а как зафиксировать, что кран закрыли и импульсов в ближайшее время не предвидится?

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

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


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 26.07.2017, 21:10 
Offline
starter

Registriert: 21.11.2016, 14:58
Beiträge: 22
Hat sich bedankt: 1 Mal
Счётчик воды работает конечно импульсно, но! У него контакт замыкается каждые 10 литров, при этом если вы в это время воду прекратили расходовать, он будет замкнут и постоянно включён!

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


Nach oben
   
 Betreff des Beitrags: Re: Скрипт счетчика
BeitragVerfasst: 27.07.2017, 09:44 
Offline
professional

Registriert: 11.05.2017, 05:15
Beiträge: 122
Wohnort: Самара
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal
radon hat geschrieben:
..он будет замкнут и постоянно включён!..

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

_________________
DE: Rabatte auf einkäufe im Internet; RU: Скидки на покупки в интернете; EN: Discounts for purchases on the Internet
Делаем BITCOIN
NODEJS: 6.11.0
IOBROKER: 1.7.6


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu Forum:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de