Подключение исполнительных устройств, датчиков, контроллеров.
Модератор: immortal
-
sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
-
Благодарил (а):
75 раз
-
Поблагодарили:
1559 раз
-
Контактная информация:
Сообщение
sergejey » Вт фев 09, 2016 6:15 pm
https://geektimes.ru/company/medgadgets/blog/249750/
Купил в офис детектор, который показывает уровень углекислого газа и температуру. При подключении к компьютеру можно считывать данные по USB с помощью приложения. Написал небольшой сценарий (
co2level), который раз в минуту берёт последнее показание из лога программы и сохраняет в систему. В общем интересный прибор, в будущем на основе показаний планирую принудительно запускать вытяжку, а пока система просто напоминает о необходимости проветривания.
Код: Выделить всё
$path='c:/app/co2/'.date('Y/m/d').'.CSV'; //путь к логу (программа у меня в c:\app\co2\)
if (file_exists($path)) {
$data=LoadFile($path);
$lines=explode("\n",$data);
$latest=$lines[count($lines)-2];
$tmp=explode(',',$latest);
if ($tmp[2]>0) {
echo " Temp: ".$tmp[2];
callMethod('TempSensor03.tempChanged',array('t'=>$tmp[2]));
}
if ($tmp[1]>0) {
echo " CO2: ".$tmp[1];
callMethod('co2.co2Changed',array('c'=>$tmp[1]));
}
echo "<br/>".$latest;
} else {
echo "File $path not found";
}
setTimeout("co2",'runScript("co2level");',30);
- За это сообщение автора sergejey поблагодарил:
- Albert (Вс апр 29, 2018 10:10 am)
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
Silowar
- Сообщения: 85
- Зарегистрирован: Пт фев 06, 2015 10:19 am
-
Благодарил (а):
16 раз
-
Поблагодарили:
9 раз
Сообщение
Silowar » Чт авг 18, 2016 5:53 pm
Сергей, хотел поинтересоваться по поводу этого датчика, хотим купить такой же себе в офис.
Как он показал себя в работе?
Стоит его покупать или нет?
-
sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
-
Благодарил (а):
75 раз
-
Поблагодарили:
1559 раз
-
Контактная информация:
Сообщение
sergejey » Пт авг 19, 2016 11:37 am
Silowar писал(а):Сергей, хотел поинтересоваться по поводу этого датчика, хотим купить такой же себе в офис.
Как он показал себя в работе?
Стоит его покупать или нет?
Показал хорошо, уже несколько месяцев выполняет свою функцию -- на офисном дашборде выводит уровень:
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
Silowar
- Сообщения: 85
- Зарегистрирован: Пт фев 06, 2015 10:19 am
-
Благодарил (а):
16 раз
-
Поблагодарили:
9 раз
Сообщение
Silowar » Пт авг 19, 2016 4:18 pm
Сергей,
Сегодня купил такой датчик в офис.
Хотел спросить, А как выглядит у Вас метод co2Changed?
И еще я не понял как правильно запустить сценарий.
Меня смутила вот эта строчка в конце сценария:
setTimeout("co2",'runScript("co2level");',30)
-
sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
-
Благодарил (а):
75 раз
-
Поблагодарили:
1559 раз
-
Контактная информация:
Сообщение
sergejey » Вт авг 23, 2016 1:26 pm
Silowar писал(а):Сергей,
Сегодня купил такой датчик в офис.
Хотел спросить, А как выглядит у Вас метод co2Changed?
Код: Выделить всё
//$params['c']
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time()));
$this->setProperty("alive",1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=30*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);
if (!isset($params['c'])) {
return;
}
$old_temp=$this->getProperty('co2');
$t=round($params['c'],1);
$this->setProperty('co2',$t);
if ($params['uptime']) {
$this->setProperty('uptime',$params['uptime']);
}
if ($t>$old_temp) {
$d=1;
} elseif ($t<$old_temp) {
$d=-1;
} else {
$d=0;
}
$this->setProperty('direction',$d);
$linked_room=$this->getProperty("LinkedRoom");
if ($linked_room) {
setGlobal($linked_room.'.CO2',$t);
}
И еще я не понял как правильно запустить сценарий.
Меня смутила вот эта строчка в конце сценария:
setTimeout("co2",'runScript("co2level");',30)
поставьте его на периодическую запись раз в сутки, а эта строчка как раз для того, чтобы сценарий сам себя запускал через 30 секунд.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
Silowar
- Сообщения: 85
- Зарегистрирован: Пт фев 06, 2015 10:19 am
-
Благодарил (а):
16 раз
-
Поблагодарили:
9 раз
Сообщение
Silowar » Вт авг 23, 2016 5:20 pm
Сергей, спасибо.
Хотел еще уточнить по поводу запуска раз в сутки, а в этом случае не будут дублироваться выполнение сценария?
Вроде как, если поставить выполнение на раз в сутки, то получается, что каждые сутки будет запускаться еще один таймер на выполнение скрипта?
-
sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
-
Благодарил (а):
75 раз
-
Поблагодарили:
1559 раз
-
Контактная информация:
Сообщение
sergejey » Ср авг 24, 2016 2:49 pm
Silowar писал(а):Сергей, спасибо.
Хотел еще уточнить по поводу запуска раз в сутки, а в этом случае не будут дублироваться выполнение сценария?
Вроде как, если поставить выполнение на раз в сутки, то получается, что каждые сутки будет запускаться еще один таймер на выполнение скрипта?
Не совсем так -- таймеры с одним именем не дублируются. Запуск таймера с таким же именем отменяет другие экземпляры того же таймера, так что распараллеливания не будет.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
VirBy
- Сообщения: 14
- Зарегистрирован: Вт мар 28, 2017 10:53 am
-
Благодарил (а):
3 раза
-
Поблагодарили:
0
Сообщение
VirBy » Ср мар 29, 2017 1:05 am
Отличный датчик.
Имею такой же в распоряжении.
Но не могу сообразить как это можно использовать в Вашей системе на rpi3.
Очень хотелось бы получить график.
Подскажете?
-
sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
-
Благодарил (а):
75 раз
-
Поблагодарили:
1559 раз
-
Контактная информация:
Сообщение
sergejey » Ср мар 29, 2017 9:41 am
VirBy писал(а):Отличный датчик.
Имею такой же в распоряжении.
Но не могу сообразить как это можно использовать в Вашей системе на rpi3.
Очень хотелось бы получить график.
Подскажете?
К Linux-системе я его не подключал... попробуйте поискать в интернете код для считывания данных с этого устройства под Linux. Скорее всего, кто-то уже разобрался )
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
VirBy
- Сообщения: 14
- Зарегистрирован: Вт мар 28, 2017 10:53 am
-
Благодарил (а):
3 раза
-
Поблагодарили:
0
Сообщение
VirBy » Сб апр 01, 2017 10:53 am
sergejey писал(а):
Скорее всего, кто-то уже разобрался )
Как использовать в мд не нашёл. А искать я умею...
Пришлось взять непонятный мне скрипт на питоне(ни разу не программер) на гитхабе, который в цикле опрашивает эти данные и рисует графики rrd. Там, кстати, судя по всему ещё и нечто похожее на атмосферное давление. Но так как я хотел графики посредством мажордомо и из его интерфейса - втупую обрезал цикл в конце и заставил выплевывать в консоль только значение СО2. Ну а дальше уже через установку глобальной переменной. Хотелось бы упростить это скрипт и убрать ошмётки от rrd, но это я уже не осилил...
UPD: Разобрался и вроде выкинул все лишнее. Теперь в вывод только CO2 или t.