ESP8266 MegaD api

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

Модератор: immortal

Alexkolomna
Сообщения: 27
Зарегистрирован: Вт дек 01, 2015 1:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0
Контактная информация:

Re: ESP8266 MegaD api

Сообщение Alexkolomna » Ср май 03, 2017 5:51 pm

я не специально...
с телефона так получилось)
Alexkolomna
Сообщения: 27
Зарегистрирован: Вт дек 01, 2015 1:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0
Контактная информация:

Re: ESP8266 MegaD api

Сообщение Alexkolomna » Ср май 03, 2017 5:57 pm

вот такая фигня... хотя вроде все правильно
Вложения
screenshot4.png
screenshot4.png (84.49 КБ) 7740 просмотров
screenshot3.png
screenshot3.png (130.67 КБ) 7740 просмотров
screenshot2.png
screenshot2.png (122.96 КБ) 7740 просмотров
screenshot1.png
screenshot1.png (127.17 КБ) 7740 просмотров
Jilber
Сообщения: 682
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 111 раз
Поблагодарили: 107 раз

Re: ESP8266 MegaD api

Сообщение Jilber » Ср май 03, 2017 8:04 pm

Всем привет... Настроил ESP-8266 в Мажордомо с помощью добавления в базу данных файлов из этого сообщения: viewtopic.php?p=44899#p44899 К ESP подключил датчик BMP-280, в результате чего вижу данные с датчика в браузере:
1.jpg
1.jpg (11.12 КБ) 7732 просмотра
Данные привязываются в Мажордомо к свойствам, но при этом давление привязывается с префиксом "pres:":
2.jpg
2.jpg (40.51 КБ) 7732 просмотра
Подскажите как убрать этот префикс, чтобы привязывалось только числовое значение давления. Спасибо.
zoz
Сообщения: 74
Зарегистрирован: Чт авг 11, 2016 1:19 am
Откуда: Киев
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: ESP8266 MegaD api

Сообщение zoz » Чт май 04, 2017 4:11 pm

По-хорошему это нужно в модуле учитывать.

А самый просто вариант привязать это давление к методу, который сделает из него нужный вид и запишет в нужное место
отрезать лишнее можно так: substr("pres:747.80", -6, 3);
Домик Алисы - Orange Pi PC, DietPi | +BroadlinkRM+esp8266(espEasy)+zigbee(sonoff,Aqara)
Jilber
Сообщения: 682
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 111 раз
Поблагодарили: 107 раз

Re: ESP8266 MegaD api

Сообщение Jilber » Чт май 04, 2017 7:04 pm

Мне тоже пришло в голову, что в модуле что-то не так работает. Префикс температуры и влажности-то убираются. Видимо надо исправлять файл "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'));
     }
    }

 }
}


dilamer
Сообщения: 3
Зарегистрирован: Сб апр 15, 2017 7:17 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: ESP8266 MegaD api

Сообщение dilamer » Вс май 07, 2017 12:02 am

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
dilamer
Сообщения: 3
Зарегистрирован: Сб апр 15, 2017 7:17 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: ESP8266 MegaD api

Сообщение dilamer » Вс май 07, 2017 12:24 am

zoz писал(а):По-хорошему это нужно в модуле учитывать.

А самый просто вариант привязать это давление к методу, который сделает из него нужный вид и запишет в нужное место
отрезать лишнее можно так: substr("pres:747.80", -6, 3);
Или
//$pres содержит строку "pres:747.80"
$pres=str_replace("pres:", "", $pres);
Jilber
Сообщения: 682
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 111 раз
Поблагодарили: 107 раз

Re: ESP8266 MegaD api

Сообщение Jilber » Вс май 07, 2017 2:57 pm

Удалось убрать префикс "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]" он наоборот убирается.
andrey1509
Сообщения: 87
Зарегистрирован: Ср ноя 09, 2016 10:21 am
Откуда: Липецкая обл.
Благодарил (а): 22 раза
Поблагодарили: 2 раза

Re: ESP8266 MegaD api

Сообщение andrey1509 » Пн июн 26, 2017 7:17 pm

Доброго времени всем читающим эту ветку.
Не получается подключить к серверу, пробовал и добавлять как написано 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
Почему она не отображается во вкладке.
Debian Linux 7,Linux 3.2.0-4-686-pae on i686
Intel(R) Celeron(R) CPU 1.70GHz, 1 cores
andrey1509
Сообщения: 87
Зарегистрирован: Ср ноя 09, 2016 10:21 am
Откуда: Липецкая обл.
Благодарил (а): 22 раза
Поблагодарили: 2 раза

Re: ESP8266 MegaD api

Сообщение andrey1509 » Вт июл 25, 2017 8:02 pm

С получением в 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
У кого как напишите.
Debian Linux 7,Linux 3.2.0-4-686-pae on i686
Intel(R) Celeron(R) CPU 1.70GHz, 1 cores
Ответить