пакет OWFS

bobeckПакет OWFS служит для коммуникации устройств 1-wire с компьютером. Я скачал самую новую версию пакета с сайта http://owfs.org и скомпилировал его из исходников. OWFS расшифровывается как One Wire File System, и при запуске данный пакет генерирует виртуальную директорию в которой находится все устройства сети 1-wire также в виде директорий.

pi@raspberrypi:/mnt# ls -l 1wire/
drwxrwxrwx    1 root     root             8 Apr 16 00:01 28.1CC484040000
drwxrwxrwx    1 root     root             8 Apr 16 00:01 81.5F9031000000
drwxr-xr-x    1 root     root             8 Apr 16 00:01 alarm
drwxr-xr-x    1 root     root             8 Apr 16 00:01 bus.0
drwxr-xr-x    1 root     root             8 Apr 16 00:01 settings
drwxrwxrwx    1 root     root             8 Apr 16 00:01 simultaneous
drwxr-xr-x    1 root     root             8 Apr 16 00:01 statistics
drwxr-xr-x    1 root     root            32 Apr 16 00:01 structure
drwxr-xr-x    1 root     root             8 Apr 16 00:01 system
drwxr-xr-x    1 root     root             8 Apr 16 00:01 uncached

Директория начинающаяся с 81. это мастер USB DS9490R, а директория начинающаяся с 28. это температурный датчик.
В зависимости от типа устройства (датчики температуры, ключи) в директориях находиться целый ряд файлов для управления устройством или считывания разных показателей.

pi@raspberrypi ~ $ ls /mnt/1wire/28.1CC484040000
address  errata    id       r_address  temperature    temperature12  templow
alias    family    locator  r_id       temperature10  temperature9   type
crc8     fasttemp  power    r_locator  temperature11  temphigh

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

pi@raspberrypi ~ $ cat /mnt/1wire/28.1CC484040000/temperature
     25.4375

А для того что бы записать какое либо значение в устройство, достаточно записать это значение в соответствующий файл.

pi@raspberrypi ~ $ echo "1" > /mnt/1wire/12.C4DF1F000000/PIO.A

Вкратце о назначениях некоторых файлов в директории (например ключа DS2406):

PIO.* — состояние встроенного транзистора.
sensed.* — логический уровень входа
Когда DS2406 работает как ключ и переключает нагрузку нужно менять свойство PIO. при изменении PIO изменяется sensed.
Когда DS2406 работает как датчик, то при замыкании контактов свойство PIO не меняется, но меняется sensed
latch.* — флажок срабатывания.
Например вы проверяете состояние датчика раз в минуту. Для вашей задачи этого достаточно. Но датчик может замкнуться между проверками. В момент проверки свойство sensed будет Выкл. Но latch скажет вам, что срабатывание было. Это средство, которое помогает отказаться в некоторых случаях от циклического опроса датчика. После проверки latched его необходимо сбросить.

Теперь о том как я всё это связал со своим софтом (который я пишу на PHP). Изначально я написал коннектор для работы с файловой системой, который писал или читал значения из файлов. Но оказывается вместе с пакетом OWFS идёт библиотека для работы через PHP. Изначально пакет OWFS нужно настроить на работу не как файловая система, а как простой сервер который висит на определённом порте (у меня 3000).

/opt/owfs/bin/owserver -uall --nozero -p 127.0.0.1:3000

Далее пишем PHP скрипт с помощью которого подключаемся к OWFS серверу и читаем или записываем значения.

   // подключение библиотеки из пакета OWFS
   include "ownet.php";
   $ow = new OWNet('tcp://localhost:3000');
   
   // читаем значение с датчика
   $value = $ow->get('/28.1CC484040000/temperature', false);
   echo $value;

   // устанавливаем значение в ключе, в канале A
   $ow->set('/12.C4DF1F000000/PIO.A', '1');

Добавить комментарий