Купил в офис детектор, который показывает уровень углекислого газа и температуру. При подключении к компьютеру можно считывать данные по 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);
Сергей Джейгало, разработчик MajorDoMo Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь! Профиль Connect -- информация, сотрудничество, услуги
Silowar писал(а):Сергей, хотел поинтересоваться по поводу этого датчика, хотим купить такой же себе в офис.
Как он показал себя в работе?
Стоит его покупать или нет?
Показал хорошо, уже несколько месяцев выполняет свою функцию -- на офисном дашборде выводит уровень:
Сергей Джейгало, разработчик MajorDoMo Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь! Профиль Connect -- информация, сотрудничество, услуги
//$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 -- информация, сотрудничество, услуги
Хотел еще уточнить по поводу запуска раз в сутки, а в этом случае не будут дублироваться выполнение сценария?
Вроде как, если поставить выполнение на раз в сутки, то получается, что каждые сутки будет запускаться еще один таймер на выполнение скрипта?
Хотел еще уточнить по поводу запуска раз в сутки, а в этом случае не будут дублироваться выполнение сценария?
Вроде как, если поставить выполнение на раз в сутки, то получается, что каждые сутки будет запускаться еще один таймер на выполнение скрипта?
Не совсем так -- таймеры с одним именем не дублируются. Запуск таймера с таким же именем отменяет другие экземпляры того же таймера, так что распараллеливания не будет.
Сергей Джейгало, разработчик MajorDoMo Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь! Профиль Connect -- информация, сотрудничество, услуги
VirBy писал(а):Отличный датчик.
Имею такой же в распоряжении.
Но не могу сообразить как это можно использовать в Вашей системе на rpi3.
Очень хотелось бы получить график.
Подскажете?
К Linux-системе я его не подключал... попробуйте поискать в интернете код для считывания данных с этого устройства под Linux. Скорее всего, кто-то уже разобрался )
Сергей Джейгало, разработчик MajorDoMo Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь! Профиль Connect -- информация, сотрудничество, услуги
sergejey писал(а):
Скорее всего, кто-то уже разобрался )
Как использовать в мд не нашёл. А искать я умею...
Пришлось взять непонятный мне скрипт на питоне(ни разу не программер) на гитхабе, который в цикле опрашивает эти данные и рисует графики rrd. Там, кстати, судя по всему ещё и нечто похожее на атмосферное давление. Но так как я хотел графики посредством мажордомо и из его интерфейса - втупую обрезал цикл в конце и заставил выплевывать в консоль только значение СО2. Ну а дальше уже через установку глобальной переменной. Хотелось бы упростить это скрипт и убрать ошмётки от rrd, но это я уже не осилил...
UPD: Разобрался и вроде выкинул все лишнее. Теперь в вывод только CO2 или t.