Ключевое ?лово

vk

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Софт:обсуждение программного обеспечения для умного дома

ТЕМА: Термостат

Термостат 17 Дек 2016 21:16 #16419

  • Freemen
  • Freemen аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Сообщений: 20
  • Репутация: 0
Абсолютно согласен что не просто. Придумать кусок кода я не могу :blush:. Я даже не знаю каким инструментарием Вы пользуетесь. У меня только предположение что это Lua. С Lua к сожалению я только в общих чертах знаком. Тем более как Вы построили планировщик я не знаю. Как хранятся временные точки запуска действий, заданий и т.д. какая между ними связь и как они обрабатываются я абсолютно не имею представления. Способы (алгоритмы) решения "потерь действий" планировщиком можно придумать не один. Но почему то мне кажется что ни в коем случае нельзя рассматривать как Вы выразились диапазон, иначе действительно могут возникнуть трудности с 00.
Очень надеюсь что все таки тема надежного планировщика не канет в лету :whistle: . Ведь это вещь очень нужная.
Администратор запретил публиковать записи гостям.

Термостат 17 Дек 2016 21:21 #16420

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
Прошивка написана на Си, никаких недоязыков типо LUA тут не используется.

Достаточно описать идею на своих переменных как в конструкторе кода.
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.

Термостат 02 Июнь 2017 17:08 #18875

  • ubuser
  • ubuser аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 59
  • Спасибо получено: 1
  • Репутация: 0
ubuser пишет:
Окончательная версия вот:
//собирая в конструкторе выбирать : Количество настроек - 2 настройки. Глобальные переменные - 2 . В Des code option модуля вводить настройки значений температуры умноженными на 10 !!!
int32_t fpkt0 = 210; // значение термостата на старте (21 градус)
int32_t fpkt1 = 5; // значение гистерезиса на старте (0,5 градусов)
int32_t flag = 0; // параметр изменения состояния

void ICACHE_FLASH_ATTR
startfunc(){
digitalWrite(12,0); //установка состояния выхода 12 esp8266 на старте
        valdes[0] = sensors_param.cfgdes[0];
        valdes[1] = sensors_param.cfgdes[1];
}
void ICACHE_FLASH_ATTR
timerfunc(uint32_t  timersrc){

if (sensors_param.cfgdes[0] != fpkt0){ valdes[0] = sensors_param.cfgdes[0];} else {
if (sensors_param.cfgdes[0] !=valdes[0]){ flag = 1; // проверка наличия изменений
 sensors_param.cfgdes[0] = valdes[0];}  //значения термостата по мктт (значения температуры умножены на 10)
}
fpkt0=sensors_param.cfgdes[0];
if (sensors_param.cfgdes[1] != fpkt1){ valdes[1] = sensors_param.cfgdes[1];} else { sensors_param.cfgdes[1] = valdes[1];}  //значения гистерезиса по мктт (значения температуры умножены на 10)
     
fpkt1=sensors_param.cfgdes[1];

if (flag == 1) {SAVEOPT;
flag = 0;
}        
          
if(data1wire[0]< (fpkt0 - fpkt1) ) digitalWrite(12,1); //нижняя граница термостата , включение гпио - значение уставки минус гестерезис
    
if(data1wire[0]> fpkt0 ) digitalWrite(12,0); //верхняя граница термостата , выключение гпио - значение уставки
 
}
void webfunc(char *pbuf) {
    
//отбражаем на главной состояние гпио
        if(digitalRead(12)!=0) {
        os_sprintf(HTTPBUFF," термостат -  <b><font color=\"green\"> ON </font></b>," );
            } else {
                os_sprintf(HTTPBUFF," термостат -  <b><font color=\"red\">OFF </font></b>," );
                }
os_sprintf(HTTPBUFF," целевая <b>%s</b> ,", fltostr(valdes[0]));

os_sprintf(HTTPBUFF," гистерезис <b>%s</b> ", fltostr(valdes[1]));

}

Сохраняет настройки после перезагрузки модуля.
Чтобы код работал на последних версиях прошивки, надо вначале сделать так:
int32_t fpkt0 = 0; // значение термостата
int32_t fpkt1 = 0; // значение гистерезиса
Иначе после перезагрузки возможны глюки с обнулением значений термостата и гистерезиса.
Текущая версия:
//собирая в конструкторе выбирать : Количество настроек - 2 настройки. Глобальные переменные - 2 . В Des code option модуля вводить настройки значений температуры умноженными на 10 !!!
int32_t fpkt0 = 0; // значение термостата 
int32_t fpkt1 = 0; // значение гистерезиса 
int32_t flag = 0; // параметр изменения состояния

void ICACHE_FLASH_ATTR
startfunc(){
digitalWrite(12,0); //установка состояния выхода 12 esp8266 на старте
        valdes[0] = sensors_param.cfgdes[0];
        valdes[1] = sensors_param.cfgdes[1];
}
void ICACHE_FLASH_ATTR
timerfunc(uint32_t  timersrc){

if (sensors_param.cfgdes[0] != fpkt0){ valdes[0] = sensors_param.cfgdes[0];} else {
if (sensors_param.cfgdes[0] !=valdes[0]){ flag = 1; // проверка наличия изменений
 sensors_param.cfgdes[0] = valdes[0];}  //значения термостата по мктт (значения температуры умножены на 10)
}
fpkt0=sensors_param.cfgdes[0];
if (sensors_param.cfgdes[1] != fpkt1){ valdes[1] = sensors_param.cfgdes[1];} else { sensors_param.cfgdes[1] = valdes[1];}  //значения гистерезиса по мктт (значения температуры умножены на 10)
     
fpkt1=sensors_param.cfgdes[1];

if (flag == 1) {SAVEOPT;
flag = 0;
}        
          
if(data1wire[0]< (fpkt0 - fpkt1) ) digitalWrite(12,1); //нижняя граница термостата , включение гпио - значение уставки минус гестерезис
    
if(data1wire[0]> fpkt0 ) digitalWrite(12,0); //верхняя граница термостата , выключение гпио - значение уставки
 
}
void webfunc(char *pbuf) {
    
//отбражаем на главной состояние гпио
        if(digitalRead(12)!=0) {
        os_sprintf(HTTPBUFF," термостат -  <b><font color=\"green\"> ON </font></b>," );
            } else {
                os_sprintf(HTTPBUFF," термостат -  <b><font color=\"red\">OFF </font></b>," );
                }
os_sprintf(HTTPBUFF," целевая <b>%s</b> ,", fltostr(valdes[0]));

os_sprintf(HTTPBUFF," гистерезис <b>%s</b> ", fltostr(valdes[1]));

}
Администратор запретил публиковать записи гостям.

Термостат 03 Июнь 2017 01:48 #18878

  • Dmitry77
  • Dmitry77 аватар
  • Не в сети
  • Давно я тут
  • Сообщений: 89
  • Спасибо получено: 39
  • Репутация: 11
Почитал,похихикал....Я это fpkt прилепил в качестве шутки,надеюсь кто-нибудь заменит это на нормальное название переменной.По опыту помощи людям с конструктором кода пришел к выводу,что чем больше универсальности в термостате,тем сложнее с ним разобраться,чтобы настроить его под себя.Тем более ,что через время приходит система к каким-то стабильным настройкам и он может легко упроститься до базового,от Максима.Для того чтобы термостат поддерживал диапазон от и до, вне зависимости от времени включения, в прошивке нужно снять галочку умный термостат в шестеренке.С умной галкой условие выглядит если время ==... то...,без галочки если время >=....то. Соответственно если время переходит на следующий день ,то там нужно настроить продолжения условия.
D77
Последнее редактирование: 03 Июнь 2017 01:58 от Dmitry77. Причина: Глюки сайта
Администратор запретил публиковать записи гостям.

Термостат 03 Июнь 2017 03:03 #18879

  • Dmitry77
  • Dmitry77 аватар
  • Не в сети
  • Давно я тут
  • Сообщений: 89
  • Спасибо получено: 39
  • Репутация: 11
попробуйте так
//собирая в конструкторе выбирать : Количество настроек - 2 настройки. Глобальные переменные - 2 . В Des code option модуля вводить настройки значений температуры умноженными на 10 !!!
int32_t znTer,znGis; // значение термостата, значение гистерезиса 
bool flag = 0; // параметр изменения состояния
void ICACHE_FLASH_ATTR
startfunc()
{
    digitalWrite(12,0); //установка состояния выхода 12 esp8266 на старте
    znTer = valdes[0] = sensors_param.cfgdes[0];
    znGis = valdes[1] = sensors_param.cfgdes[1];
}
void ICACHE_FLASH_ATTR
timerfunc(uint32_t  timersrc)
{
    if (sensors_param.cfgdes[0] != znTer)
	{ 
        valdes[0] = sensors_param.cfgdes[0];
	} 
	else 
	{
        if (sensors_param.cfgdes[0] !=valdes[0])
		{ 
	        flag = 1; // проверка наличия изменений
            sensors_param.cfgdes[0] = valdes[0];
	    }  //значения термостата по мктт (значения температуры умножены на 10)
    }
    znTer=sensors_param.cfgdes[0];
    if (sensors_param.cfgdes[1] != znGis)
	{ 
        valdes[1] = sensors_param.cfgdes[1];
	} 
	else 
	{ 
        sensors_param.cfgdes[1] = valdes[1];
	}  //значения гистерезиса по мктт (значения температуры умножены на 10)
    znGis=sensors_param.cfgdes[1];
    if (flag) 
	{
		SAVEOPT;
        flag = 0;
    }        
    if(data1wire[0]< (znTer - znGis) ) 
		digitalWrite(12,1); //нижняя граница термостата , включение гпио - значение уставки минус гестерезис
    if(data1wire[0]> znTer ) 
		digitalWrite(12,0); //верхняя граница термостата , выключение гпио - значение уставки
}
void webfunc(char *pbuf) 
{
    //отбражаем на главной состояние гпио
    if(digitalRead(12)!=0) 
	{
        os_sprintf(HTTPBUFF," термостат -  <b><font color=\"green\"> ON </font></b>," );
    } 
	else 
	{
        os_sprintf(HTTPBUFF," термостат -  <b><font color=\"red\">OFF </font></b>," );
    }
    os_sprintf(HTTPBUFF+os_strlen(HTTPBUFF)," целевая <b>%s</b> ,", fltostr(valdes[0]));
    os_sprintf(HTTPBUFF+os_strlen(HTTPBUFF)," гистерезис <b>%s</b> ", fltostr(valdes[1]));
}
D77
Администратор запретил публиковать записи гостям.

Термостат 03 Июнь 2017 03:08 #18880

  • Dmitry77
  • Dmitry77 аватар
  • Не в сети
  • Давно я тут
  • Сообщений: 89
  • Спасибо получено: 39
  • Репутация: 11
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Вот так тоже должно работать,но что-то Макс поломал в кк и тернарнарая операция работает только на условие==верно,при выключении термостата строка термостат исчезает
D77
Последнее редактирование: 03 Июнь 2017 03:10 от Dmitry77. Причина: )))
Администратор запретил публиковать записи гостям.
Модераторы: FlyRouter, Dolfik
Время создания страницы: 0.149 секунд

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.