Страница 3 из 5

Re: ESP8266 MegaD api

Добавлено: Ср май 03, 2017 5:51 pm
Alexkolomna
я не специально...
с телефона так получилось)

Re: ESP8266 MegaD api

Добавлено: Ср май 03, 2017 5:57 pm
Alexkolomna
вот такая фигня... хотя вроде все правильно

Re: ESP8266 MegaD api

Добавлено: Ср май 03, 2017 8:04 pm
Jilber
Всем привет... Настроил ESP-8266 в Мажордомо с помощью добавления в базу данных файлов из этого сообщения: viewtopic.php?p=44899#p44899 К ESP подключил датчик BMP-280, в результате чего вижу данные с датчика в браузере:
1.jpg
1.jpg (11.12 КБ) 7763 просмотра
Данные привязываются в Мажордомо к свойствам, но при этом давление привязывается с префиксом "pres:":
2.jpg
2.jpg (40.51 КБ) 7763 просмотра
Подскажите как убрать этот префикс, чтобы привязывалось только числовое значение давления. Спасибо.

Re: ESP8266 MegaD api

Добавлено: Чт май 04, 2017 4:11 pm
zoz
По-хорошему это нужно в модуле учитывать.

А самый просто вариант привязать это давление к методу, который сделает из него нужный вид и запишет в нужное место
отрезать лишнее можно так: substr("pres:747.80", -6, 3);

Re: ESP8266 MegaD api

Добавлено: Чт май 04, 2017 7:04 pm
Jilber
Мне тоже пришло в голову, что в модуле что-то не так работает. Префикс температуры и влажности-то убираются. Видимо надо исправлять файл "readvalues.inc.php".
"temp:" и "hum:" в коде упоминаются, а "pres:" почему-то нет. Пробовал добавить строку: $tmp[0]=str_replace("pres:", "", $tmp[0]); Видимо надо как-то изменить ещё и конструкцию elseif ($type==3 && preg_match('/temp:([\d\.]+)\/hum:([\d\.]+)/', $states[$i], $m)) { но пока не пойму как именно

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

<?php

 $record=SQLSelectOne("SELECT * FROM megaddevices WHERE ID='".(int)$id."'");


 $url='http://'.$record['IP'].'/'.$record['PASSWORD'].'/?cmd=all';
 if ($all) {
  $stateData=$all;
 } else {
  $stateData=getURL($url, 0);
 }

 //echo $stateData;exit;

 $states=explode(';', $stateData);

 $total=count($states);
 for($i=0;$i<$total;$i++) {
  

     $prop=SQLSelectOne("SELECT * FROM megadproperties WHERE DEVICE_ID='".$record['ID']."' AND NUM='".$i."'");

     $type=(int)$prop['TYPE'];
     $mode=(int)$prop['MODE'];

     if (!$prop['ID']) {
      continue;
     }

     //echo $type.' '.$states[$i]."<br/>";
     $old_value=$prop['CURRENT_VALUE_STRING'];
     $old_value2=$prop['CURRENT_VALUE_STRING2'];

     if ($states[$i]!=='') {
      if ($type==0) {
       $tmp=explode('/', $states[$i]);
       if ($tmp[0]=='ON') {
        $prop['CURRENT_VALUE_STRING']=1;
       } else {
        $prop['CURRENT_VALUE_STRING']=0;
       }
       if (isset($tmp[1])) {
        $prop['CURRENT_VALUE_STRING2']=$tmp[1];
        $prop['COUNTER']=$tmp[1];
       }
      } elseif ($type==1) {

       if($mode==1){
        $prop['CURRENT_VALUE_STRING']=intval($states[$i]);
       } else {
         if ($states[$i]=='ON') {
          $prop['CURRENT_VALUE_STRING']=1;
         } else {
          $prop['CURRENT_VALUE_STRING']=0;
         }
       }


      } elseif ($type==3 && preg_match('/temp:([\d\.]+)\/hum:([\d\.]+)/', $states[$i], $m)) {
       $prop['CURRENT_VALUE_STRING']=$m[1];
       $prop['CURRENT_VALUE_STRING2']=$m[2];
      } else {
       $tmp=explode('/', $states[$i]);
       $tmp[0]=str_replace("temp:", "", $tmp[0]);
       $tmp[0]=str_replace("hum:", "", $tmp[0]);
       $prop['CURRENT_VALUE_STRING']=$tmp[0];
       if (isset($tmp[1])) {
        $prop['CURRENT_VALUE_STRING2']=$tmp[1];
       }
      }
     }

     $prop['UPDATED']=date('Y-m-d H:i:s');
     SQLUpdate('megadproperties', $prop);

     //echo $stateData;exit;


    if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY']) {
     if ($old_value!=$prop['CURRENT_VALUE_STRING'] || $prop['CURRENT_VALUE_STRING']!=gg($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'])) {
      setGlobal($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'], $prop['CURRENT_VALUE_STRING'], array($this->name=>'0'));
     }
    }

    if ($prop['LINKED_OBJECT'] && $prop['LINKED_METHOD'] && ($old_value!=$prop['CURRENT_VALUE_STRING'])) {
     $params=array();
     $params['TITLE']=$record['TITLE'];
     $params['VALUE']=$prop['CURRENT_VALUE_STRING'];
     $params['value']=$params['VALUE'];
     $params['port']=$i;
     $params['m']=$m; 
     callMethod($prop['LINKED_OBJECT'].'.'.$prop['LINKED_METHOD'], $params);
    }

    if ($prop['LINKED_OBJECT2'] && $prop['LINKED_PROPERTY2']) {
     if ($old_value2!=$prop['CURRENT_VALUE_STRING2'] || $prop['CURRENT_VALUE_STRING2']!=gg($prop['LINKED_OBJECT2'].'.'.$prop['LINKED_PROPERTY2'])) {
      setGlobal($prop['LINKED_OBJECT2'].'.'.$prop['LINKED_PROPERTY2'], $prop['CURRENT_VALUE_STRING2'], array($this->name=>'0'));
     }
    }

    if ($prop['LINKED_OBJECT2'] && $prop['LINKED_METHOD2'] && ($old_value2!=$prop['CURRENT_VALUE_STRING2'])) {
     $params=array();
     $params['TITLE']=$record['TITLE'];
     $params['VALUE']=$prop['CURRENT_VALUE_STRING2'];
     $params['value']=$params['VALUE'];
     $params['port']=$i;
     $params['m']=$m; 
     callMethod($prop['LINKED_OBJECT2'].'.'.$prop['LINKED_METHOD2'], $params);
    }


 }


//internal temp sensor data
$prop=SQLSelectOne("SELECT * FROM megadproperties WHERE DEVICE_ID='".$record['ID']."' AND TYPE='100'");
if ($prop['ID']) {
 $stateData=getURL('http://'.$record['IP'].'/'.$record['PASSWORD'].'/?tget=1', 0);
 $old_value=$prop['CURRENT_VALUE_STRING'];
 if ($stateData!='') {
  $prop['CURRENT_VALUE_STRING']=$stateData;
  $prop['UPDATED']=date('Y-m-d H:i:s');
  SQLUpdate('megadproperties', $prop);

    if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY']) {
     if ($old_value!=$prop['CURRENT_VALUE_STRING'] || $prop['CURRENT_VALUE_STRING']!=gg($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'])) {
      setGlobal($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'], $prop['CURRENT_VALUE_STRING'], array($this->name=>'0'));
     }
    }

 }
}



Re: ESP8266 MegaD api

Добавлено: Вс май 07, 2017 12:02 am
dilamer
zoz писал(а):Мне тоже пришло в голову, что в модуле что-то не так работает. Префикс температуры и влажности-то убираются. Видимо надо исправлять файл "readvalues.inc.php".
"temp:" и "hum:" в коде упоминаются, а "pres:" почему-то нет. Пробовал добавить строку: $tmp[0]=str_replace("pres:", "", $tmp[0]); Видимо надо как-то изменить ещё и конструкцию elseif ($type==3 && preg_match('/temp:([\d\.]+)\/hum:([\d\.]+)/', $states[$i], $m)) { но пока не пойму как именно
Такая же проблема с датчиком влажности, префикс влажности не убирается
viewtopic.php?f=5&t=2263&start=610#p52186

Re: ESP8266 MegaD api

Добавлено: Вс май 07, 2017 12:24 am
dilamer
zoz писал(а):По-хорошему это нужно в модуле учитывать.

А самый просто вариант привязать это давление к методу, который сделает из него нужный вид и запишет в нужное место
отрезать лишнее можно так: substr("pres:747.80", -6, 3);
Или
//$pres содержит строку "pres:747.80"
$pres=str_replace("pres:", "", $pres);

Re: ESP8266 MegaD api

Добавлено: Вс май 07, 2017 2:57 pm
Jilber
Удалось убрать префикс "pres:" таким образом:

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

      } elseif ($type==3 && preg_match('/temp:([\d\.]+)\/pres:([\d\.]+)/', $states[$i], $m)) {
       $prop['CURRENT_VALUE_STRING']=$m[1];
       $prop['CURRENT_VALUE_STRING2']=$m[2];
      } else {
       $tmp=explode('/', $states[$i]);
       $tmp[0]=str_replace("temp:", "", $tmp[0]);
       $tmp[1]=str_replace("pres:", "", $tmp[1]);
Почему-то у температуры префикс появляется если прописать "$tmp[1]", а у давления при "$tmp[1]" он наоборот убирается.

Re: ESP8266 MegaD api

Добавлено: Пн июн 26, 2017 7:17 pm
andrey1509
Доброго времени всем читающим эту ветку.
Не получается подключить к серверу, пробовал и добавлять как написано viewtopic.php?p=44899#p44899 и в ручную вводить данные, ни чего. Обнаруживается , но конфигурацию не читает.
У меня возник вопрос , какую маску сети ставить в ESP8266, 32-ю или 24-ю.
На форуме http://ab-log.ru/forum/viewtopic.php?f=1&t=1130 в примерах 24 маска, а viewtopic.php?p=44899#p44899 в таблице забита 32 маска. Причем я поставил 32 в ESP8266 и она у меня потерялась. Долго не мог перепрошить.

Странно но в логе Apache присутствует запись : 26/Jun/2017:19:44:34 +0300] "GET /megad.php?mdid=3&all=OFF/0;temp:0.00;OFF;OFF;OFF;temp:0.00;ON/0;NC;NC;0 HTTP/1.1" 200
Почему она не отображается во вкладке.

Re: ESP8266 MegaD api

Добавлено: Вт июл 25, 2017 8:02 pm
andrey1509
С получением в MajorDoMo, модуль отображается.
Одна проблема к P9 - ADC MegaDEps подключаю датчик газа MQ4 , на самой меге показывает , а в браузере MD не 9-й отображается как Output и показания 0. По ссылке http://www.ab-log.ru/forum/viewtopic.php?f=1&t=1130 указывается -ADC - вход АЦП (аналого-цифровой преобразователь) может принимать значение в диапазоне от 0 до 1023. Функционал Act и Net
У кого как напишите.