USB PC thermometer

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: USB PC thermometer

Сообщение Amarok »

Скрипт:

Код: Выделить всё

<?php

// набор данных который нужно прочесть:
//2,26,00,2013-10-01 06:47:20

$dataPath  = "v:\TEMPerUSB"; // Директория с данными 
$separator = ",";                          // Разделитель данных в файле

// бежим по директории
if ($handle = opendir($dataPath))          
{
   // Читаем файлы
   while (false !== ($entry = readdir($handle))) 
   {
      // путь к файлу
      $filePath = $dataPath . "/" . $entry;
      // если файл есть и является обычным файлом а не директорией то читаем содержимое
      if (file_exists($filePath) && is_file($filePath)) 
      {
         echo "Файл: " . $filePath . "<br />"; // для отладки выводим название файла в браузер.
         // открываем файл на чтение
         $file = @fopen($filePath, "r"); 
         // читаем файл до канца построчно
         while (!feof($file))
         {
            // читаем строку 
            $currentLine = fgets($file);
            echo $currentLine . "<br />";
            // разбиваем строку на переменные с данными
            list($DataNumber, $TempInteger, $TempRatio, $TempDate) = explode($separator, $currentLine);
            // склеиваем целую и дробную часть температуры 
            $Temp = $TempInteger . "." . $TempRatio;
            // удаляем лишние пробелы в начале и в конце
            $Date = trim($TempDate);
            //Выводим данные в браузер    
            echo "№: " . $DataNumber . " Температура: " . $Temp . " Дата снятия показаний: " . $Date . "<br />";
            echo "<br />";
         } 
         //закрываем файл
         fclose($file);
       }
       
       echo "<br />";
    }
    // закрываем директорию
    closedir($handle);
        setGlobal('AmarokLair.Temperature',$Temp);

}
else
{
    echo "Немогу открыть директорию";
}

?>
работает но, выдает ошибку

Код: Выделить всё

Fatal error: Call to undefined function setGlobal() in D:\_majordomo\htdocs\lt.php on line 47
Странно(((((
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: USB PC thermometer

Сообщение Amarok »

Строчка №47 и есть setGlobal('AmarokLair.Temperature',$Temp);
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: USB PC thermometer

Сообщение Amarok »

BlackWarrior писал(а):Строчка №47 и есть setGlobal('AmarokLair.Temperature',$Temp);
В переменную AmarokLair.Temperature, судя по X-Ray, вписывается точка(
Моя Алиска живёт на Proxmox в Debian 12
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am

Re: USB PC thermometer

Сообщение dmw »

Вам же Сергей сказал что оформить код нужно в виде отдельного сценария. SetGlobal() это встроенная функция MD.
Вы выполняете его отдельным php, чтобы из него передать переменную в MD нужно выпольнять http get:
http://smartliving.ru/Main/ProgramminIntegration
Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: USB PC thermometer

Сообщение Amarok »

Так я его в виде сценария и оформил. После этого в переменную AmarokLair.Temperature, судя по X-Ray, вписывается точка
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: USB PC thermometer

Сообщение Amarok »

Создал сценарий:

Код: Выделить всё

// набор данных который нужно прочесть:
//2,26,00,2013-10-01 06:47:20

$dataPath  = "v:\TEMPerUSB"; // Директория с данными 
$separator = ",";                          // Разделитель данных в файле
$file      = "";                           // имя файла

// бежим по директории
if ($handle = opendir($dataPath))          
{
   // Читаем файлы
   while (false !== ($entry = readdir($handle))) 
   {
      // путь к файлу
      $filePath = $dataPath . "/" . $entry;
      // если файл есть и является обычным файлом а не директорией то читаем содержимое
      if (file_exists($filePath) && is_file($filePath)) 
      {
         $file = $filePath; // файл.
       }
    }

    // закрываем директорию
    closedir($handle);

    // открываем файл на чтение
    $file = @fopen($file, "r"); 
    // читаем файл до конца построчно
    while (!feof($file))
    {
       // читаем строку 
       $currentLine = fgets($file);
       // разбиваем строку на переменные с данными
       list($DataNumber, $TempInteger, $TempRatio, $TempDate) = explode($separator, $currentLine);
       // склеиваем целую и дробную часть температуры 
       $Temp = $TempInteger . "." . $TempRatio;
       // удаляем лишние пробелы в начале и в конце
       $Date = trim($TempDate);
    } 
    //закрываем файл
    fclose($file);
    setGlobal('AmarokLair.Temperature',$Temp);
}
else
{
    echo "Немогу открыть директорию";
}
Выполняю его и в переменной AmarokLair.Temperature оказывается просто точка:
Изображение
Странная фигня(((
Моя Алиска живёт на Proxmox в Debian 12
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am

Re: USB PC thermometer

Сообщение dmw »

А если пробелы убрать?
$Temp = $TempInteger.".".$TempRatio;
И эти переменные точно не пустые?
Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: USB PC thermometer

Сообщение Amarok »

dmw писал(а):А если пробелы убрать?
$Temp = $TempInteger.".".$TempRatio;
И эти переменные точно не пустые?
Хм... Пустые...
Взял первый пример кода из темы, завернул в скрипт. Вызываю его (Запуск по ссылке: http://127.0.0.1:80/objects/?script=USBThermometer)
Смотрю лог и вижу температуру:

Код: Выделить всё

Файл: v:\TEMPerUSB/2013-10-7 15h2m54s.txt
2,23,13,2013-10-07 15:02:54 
№: 2 Температура: 23.13 Дата снятия показаний: 2013-10-07 15:02:54
Ура?! Неее. Переменная AmarokLair.Temperature содержит точку. :o
Моя Алиска живёт на Proxmox в Debian 12
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am

Re: USB PC thermometer

Сообщение dmw »

Походу в конце файла стоит возврат каретки или пустая строка, при этом
while (!feof($file)) не увидит что был достигнут конец файла и следовательно
$currentLine = fgets($file); - попытается прочесть эту строчку и вернет пустые данные.
Попробуйте добавить проверку на корректность переменной $currentLine после чтения строки из файла.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: USB PC thermometer

Сообщение sergejey »

если по-быстрому, то надо строчку
$Temp = $TempInteger . "." . $TempRatio;
заменить на
if ($TempDate) {
$Temp = $TempInteger . "." . $TempRatio;
}
это исключит сохранение пустых значений

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить