1. датчик температуры-влажности Датчик температуры и влажности Noolite PT111:

2. USB-приёмник Адаптер для компьютера RX2164 (приёмник, приём команд с пультов nooLite)

Соответственно, софт под приёмник на компьютере ну и MajorDoMo, само собой.
"Спариваем" датчик с программой на какую-нибудь ячейку, чтобы программа приёмника начала получать показания:
Добавляем вызов внешнего приложения на комадну Send_Temp_Humi=21
В настройках команды запуска ставим:
c:\_majordomo\htdocs\obj.bat
Дополнительные аргументы:
script:nooTempHum sensor:Sensor01
Обязательно ставим галочку "Использовать принятые данные как аргумент"

Далее, создаём в системе два объекта humSensor01 и tempSensor01 -- у меня это объекты разных классов с методами humChanged и tempChanged соответственно и свойствами humidity и temp так же соответственно.
Для примера вот код метода tempChanged:
Код: Выделить всё
//$params['t']
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time()));
$this->setProperty("alive",1);
if (!isset($params['t'])) {
return;
}
$old_temp=$this->getProperty('temp');
$t=round($params['t'],1);
if ($t>110) return;
$this->setProperty('temp',$t);
if ($params['uptime']) {
$this->setProperty('uptime',$params['uptime']);
}
Для передачи данных в эти объекты создаём скрипт под названием nooTempHum (именно его "дёргает" приложение приёмника при получении данных от датчика).
Вот код скрипта:
Код: Выделить всё
$sensor=$params['sensor'];
if (!$sensor) return 0;
$hum=(int)str_replace('-','',$params['other_params'][6]);
if ($hum>0 && $hum<=100) {
callMethod('hum'.$sensor.'.humChanged',array('h'=>$hum));
}
//$temp=((int)str_replace('-','',$params['other_params'][4]))/10;
$b1 =(int)str_replace('-','',$params['other_params'][4]);
$b2 =(int)str_replace('-','',$params['other_params'][5]);
$y_temp=256*($b2 & 15)+$b1;
if (($b2 & 8) != 0 ) { // отритцательное значение температуры
$y_temp=4096-$y_temp;
$temp = -1*($y_temp)/10;
} else { // положительное значение температуры
$temp = $y_temp/10;
}
if ($temp>-30 && $temp<=100) {
callMethod('temp'.$sensor.'.tempChanged',array('t'=>$temp));
}