Sonoff - интерпретация данных

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

Модератор: immortal

Ответить
eeciv
Сообщения: 26
Зарегистрирован: Вт май 16, 2017 9:45 pm
Благодарил (а): 0
Поблагодарили: 0

Sonoff - интерпретация данных

Сообщение eeciv » Вт июн 20, 2017 12:07 pm

Имеется sonoff basic с прошивкой https://github.com/arendst/Sonoff-Tasmota/wiki
к нему подключен датчик DHT22, к мажордомо подключен как mqtt устройство и топик с данными датчика имеет вид:{"Time":"2017-06-20T11:52:04", "DHT22":{"Temperature":25.3, "Humidity":38.2}}
Как мне на информере получить не всю это красоту а только значения температуры и влажности?
Использовать JASON PATH у меня не получилось..
TransMatrix
Сообщения: 186
Зарегистрирован: Вс май 28, 2017 9:24 am
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Re: Sonoff - интерпретация данных

Сообщение TransMatrix » Ср июн 21, 2017 7:40 pm

Слегка через задницу: возможно можно проще.

Создаём переменную у класса Relay->Sensor - привязываем к ней нашу MQTT запись.
У переменной задаём метод-обработчик

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

$sensors=explode(",",$this->getProperty("Sensor"));
$vr = explode(":",$sensors[1]);
$temperature = $vr[2];
$vr = explode(":",$sensors[2]);
$humi = explode("}",$vr[1]);

$this->setProperty('temp', $temperature);
$this->setProperty('humi', $humi[0]);
UPD: Знакомый помог:

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

$str = $this->getProperty("Sensor");
$sensors=json_decode($str, true);
$temperature = $sensors['DHT11']['Temperature'];
$humi = $sensors['DHT11']['Humidity'];

$this->setProperty('temp', $temperature);
$this->setProperty('humi', $humi);
 
eeciv
Сообщения: 26
Зарегистрирован: Вт май 16, 2017 9:45 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Sonoff - интерпретация данных

Сообщение eeciv » Чт июн 22, 2017 1:28 pm

Не очень понятно :(
Я создал подкласс Sensor в классe Relay. В этом подклассе создал новое свойство sensor( для отображения данных), привязал к mqtt.
Создал в сцене информер, а куда вставлять этот код?
TransMatrix
Сообщения: 186
Зарегистрирован: Вс май 28, 2017 9:24 am
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Re: Sonoff - интерпретация данных

Сообщение TransMatrix » Чт июн 22, 2017 7:41 pm

Ну, я от релейного класса шёл потому, что тупо дополнительные фишки для СонОффа вводил...

Смотри, открываешь вкладку СВОЙСТВА, но именно основного класса, а не потомка. Там ты создал свойство Sensor.
Создаёшь МЕТОД SensorGet - у этого метода в код вставляешь код приведённый.
У СВОЙСТВА Sensor есть "Запускать метод при изменении (не обязательно):" - там выбираешь тот самый метод SensorGet.
И не забываем в свойства добавить переменные для температуры и влажности.

Теперь для этого класса создаём ОБЪЕКТ, к свойству Sensor которого привязывается соответствующая MQTT запись.
andrusha7778
Сообщения: 85
Зарегистрирован: Сб авг 12, 2017 11:03 am
Благодарил (а): 15 раз
Поблагодарили: 3 раза

Re: Sonoff - интерпретация данных

Сообщение andrusha7778 » Пт мар 09, 2018 8:37 pm

Приветствую. Подскажите плиз, правильно ли?
Класс SDevices, дочерний SSensors у него STempSensors
У SSensors свойство SSonofftasmotaTempSensors - Дополнительное свойство для получения температуры с SonOff с прошивкой Tasmota
У этого свойства запускать метод при изменении SonofftasmotaSensorGet
Сам метод:

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

$str = $this->getProperty("SSonofftasmotaTempSensors");
$sensors=json_decode($str, true);
$temperature = $sensors['DS18B20']['Temperature'];
$humi = $sensors['DHT11']['Humidity'];

$this->setProperty('temp', $temperature);
$this->setProperty('humi', $humi);
$this->setProperty('value', $temperature);
Объект SensorTasmota-01 в классе STempSensors
У этого объекта есть свойство SensorTasmota-01.SSonofftasmotaTempSensors но оно принимает значение {"Time":"2018-03-09T09:34:10","DS18B20":{"Temperature":25.4},"TempUnit":"C"}
Это вроде как понятно и правильно работает.
Дальше есть у этого объекта свойство SensorTasmota-01.temp оно принимает правильное значение 25.4
Но дело в том, что если я создаю простое устройство, указываю ему связь с этим объектом то получаю вывод %SensorTasmota-01.value%°C
То есть ему нужно свойство .value, оно меняется но в "панели" все равно показано вот так: %SensorTasmota-01.value
Как это можно исправить, подскажите пожалуйста?
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Sonoff - интерпретация данных

Сообщение Logrus » Сб мар 10, 2018 4:28 am

SensorTasmota-01 в названии об!екта тире убрать
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
andrusha7778
Сообщения: 85
Зарегистрирован: Сб авг 12, 2017 11:03 am
Благодарил (а): 15 раз
Поблагодарили: 3 раза

Re: Sonoff - интерпретация данных

Сообщение andrusha7778 » Сб мар 10, 2018 10:00 am

Огромное спасибо! Все заработало!
andrusha7778
Сообщения: 85
Зарегистрирован: Сб авг 12, 2017 11:03 am
Благодарил (а): 15 раз
Поблагодарили: 3 раза

Re: Sonoff - интерпретация данных

Сообщение andrusha7778 » Пн мар 26, 2018 9:30 pm

еще один возник вопрос. Сейчас с SonOff получаю данные с 2ух датчиков температуры.
Нарисовал метод под это, все работает, но есть еще одна необходимость - со 2ого датчика температуры отправлять данные на отдельный заведенный в MJ сенсор (объект Sensor_temp04 класса STempSensors).
Подскажите, как это можно реализовать?
То есть мне надо в какой-то момент свойство объекта $Sensor_temp04 ->value поставить равное $Thermostat02->temp2
Но в методе это присваивание почему-то не работает :-(
Может быть потому что SThermostats и STempSensors это разные классы?
Я добавил код в метод для объекта Thermostat02
sg('Sensor_temp04.value',$this->temp2);
Но почему то не работает :-(
Sensor_temp04.value не устанавливается. А вот так работает
sg('Sensor_temp04.value',gg('Thermostat02.temp2'));
Ответить