Main

Работа с 1-wire сетью по Ethernet

На данной странице рассмотрим пример использования устройства Ethernet Thermometer совместно с системой MajorDoMo Project .

Данное устройство, позволяет использовать цифровые датчики температуры:

  * DS18B20 (Dx датчик)

* FM75 (Tx датчика) для организации мониторинга температурных параметров и передачи данных посредством Ethernet.

Технические характеристики:

Product Information 1. Features

(1) Equipment support the standard 1-Wire agreement, support 1-Wire digital temperature sensor DS18B20(Dx sensor), temperature resolution 0.0625 degree;

support IIC digital temperature sensor FM75 (Tx sensor). But, both cannot be used at the same time.

(2). Equipment can connect up 12 Dx sensors, Or connect up 8 Tx sensors.

(3). Software support Windows series, and support real-time temperature display, log records, curve shows, MSN remote view data, E-mail alarm etc. Function

(4). Equipment support UDP, in which the TCP protocol, either as a server but also as a client. Server maximum can support five units (client) at the same time. UDP only support the client

(5). Equipment LAN module can be configured

(6). Equipment support reset function, when IP changes or forget the IP, you can long press "Preset keys” 3 s can be restored to the default value

The default LAN basic configuration

(1) device ipaddress:192.168.1.188

(2) device netmask:255.255.255.0

(3) device gateway:192.168.1.2

(4) host ipaddress:192.168.1.16

(5) connection type: tcp

(6) host port:16000

The following is cannot a configuration items:

As a TCP server, equipment listening port is 5200.

As a TCP client, equipment local port is 40000.

As UDP client, equipment local port is 30000.

2. Electronic Parameters

(1). The rated voltage: + 5 V

(2). Rated current: about 130mA

(3). Rated power: 550 mW

(4) Temperature Accuracy: Tx probe :+/-1.5degrees Celsius ;

                                         Dx probe : ±0.5degrees Celsius 

(5). 1-Wire line length: (theory) 50 m, (suggest) < 5 m

Технические характеристики устройства приведены с сайта http://www.pcsensor.com

Настройка данного устройства проста и наглядна. В комплекте поставляется программное обеспечение, с помощью которого можно изменять параметры устройства, так и организовать мониторинг в режиме Real Time

Вот несколько скринов с "родного" программного обеспечения

Программное обеспечение позволяет:

* вести мониторинг параметров режиме Реального времени

* ведение лог файла с заданной периодичностью

* сохранение полученных значений в csv файл

* работе с месенжером MSN

* работа с почтой

Подключение устройства к системе MajorDoMo Project

Рассмотрим вариант подключения данного устройства к системе MajorDoMo Project и интеграцию его в общую концепцию умного дома!

1. Создаем в системе два новых объекта

Для записи полученных с устройства значений создадим в системе два объекта в классе уже имеющихся температурных сенсоров. (Данные объекта примут все свойства родительского класса)

Примечание - создали два, объекта т.к. для примера использовались 2 температурных датчика. При добавлении нового датчика Вы должны создавать новый объект.

(пункты 2 и 3, перечисленные ниже, необходимы, если в вашей версии MajorDoMo указанные ниже файлы отсутствуют)

2. Создадим новый файл tcp1w.php следующего содержания:

<?

 // --------------------------------------------------------------------------------
  function tcp1w_getTemp($host, $port) {
   $command=chr(0xbb).chr(0x80).chr(0x00).chr(0xff);
   $res=tcp1w_command($host, $port, $command);
   $ar=array();
   if ($res[3]) {
    $total=$res[3];
    for($i=0;$i<$total;$i++) {
     $temp=round(($res[4+$i*2]*256+$res[4+$i*2+1])*0.0625, 2);
     $ar[]=$temp;
    }
    return $ar;
   } else {
    return 0;
   }
  }

  function tcp1w_command($host, $port, $command) {

   $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   if ($socket === false) {
     echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
     return 0;
   }

   $result = socket_connect($socket, $host, $port);
   if ($result === false) {
     echo "socket_connect( $socket , $host , $port) failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
     return 0;
   }

    $in=$command;
    socket_write($socket, $in, strlen($in));

    $res='';

    $res=socket_read($socket, 2048, PHP_BINARY_READ);

    if ($res) {
     $total=strlen($res);
     for($i=0;$i<$total;$i++) {
      $ar[]=ord($res[$i]);
     }
    } else {
     $ar=0;
    }

   socket_close($socket);
   return $ar;

  }


?>

3. Скопируем его в папку ./lib/hardware/

(данную папку нужно создать , если она отсутствует)

4. Настройка системы

Открываем панель управления , и находим объект "ClockChime" , метод "onNewMinute"

В конце кода дописывает следующую строку:

* runScript('update1WireTCP');

Далее, создаем новый сценарий с именем update1WireTCP, который нам понадобится, чтобы читать показания с устройства и записывать их в свойства нужных нам объектов

со следующим кодом

 include_once(ROOT.'lib/hardware/tcp1w.php');

 $host='192.168.1.188';
 $port=5200;

 $res=tcp1w_getTemp($host, $port);

 if ($res) {
  $total=count($res);
  for($i=0;$i<$total;$i++) {
   $old_temp=getGlobal('wireTemp'.$i.'.temp');
   if ($res[$i]!=$old_temp) {
    callMethod('wireTemp'.$i.'.tempChanged', array('t'=>$res[$i]));
   }
  }
  }

На этом настройка и подключение устройства к системе можно сказать закончено.

В результате мы имеем возможность получать значение температурных датчиков по Ethernet.

На скрине стрелками показаны значения полученные с представленного выше устройства и на основании полученных данных построенные графики.

With display , Built-in relay, Embedded LAN interface temperature system (1W340D)

Хотелось бы представить Вашему внимаю еще одно устройство работающее с сетью 1-Wire по Ethernet.

Отличия в данном устройстве от описанного выше:

* наличие дисплея (отображение показаний температуры) * встроенное реле

Принцип работы с данным устройством идентичен описанному выше. В дополнение хотелось бы описать примеры работы с реле и получение его состояния.

1. Включение реле.

В панели управления нужно создать новый сценарий со следующим кодом:

include_once(ROOT.'lib/hardware/tcp1w.php');
$host='192.168.1.189';
$port=5200;
$res=tcp1w_turnRelayOn($host, $port);

Данный код включает реле на устройстве с ip адресом 192.168.1.189.

2. Выключение реле.

Для выключения реле создаем новый сценарий со следующим кодом:

include_once(ROOT.'lib/hardware/tcp1w.php');
$host='192.168.1.189';
$port=5200;
$res=tcp1w_turnRelayOff($host, $port);

3. Проверка состояния реле.

Создадим еще один сценарий для получения состояния реле на устройстве

include_once(ROOT.'lib/hardware/tcp1w.php');
$host='192.168.1.189';
$port=5200;

$res=tcp1w_getRelayState($host, $port);
if ($res) {
say("Реле включено");
} else {
say("Реле выключено");
}
 
 

Обсуждение

 

sergejey: Обсуждение страницы Работа с 1-wire сетью по Ethernet

Vit: По выше указанной ссылке представлено устройство для работы с сетью 1-wire по Ethernet. Обсуждение данного устройства, его подключение к системе в данной ветке форума. P.S. Удалось раздобыть небольшой файл с описанием протокола работы с данным устройством.

sergejey: В статье добавилось описание ещё одного устройства, построенного на том же принципе, но ещё имеющего реле на борту.

Sorin: Подниму тему. Нигде не могу найти ответа на вопрос: как подключить к системе ДВЕ сети 1-wire ??? Может быть, кто-то делал? P.S. Предлагать объединить сети не нужно, это невыполнимо.

[ Обсудить на форуме ]

 

MajorDomo

Информация

Проекты

Партнёры

edit SideBar

 
 
 

 

Blix theme adapted by David Gilbert, powered by PmWiki