Страница 3 из 7
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 9:10 am
Sergey2055
Да попутно еще вопрос почему не работает этот код
Код: Выделить всё
if ((int)$params['status']==1) {
$this->setProperty('statusText','ОТКРЫТЫ');
}
if ((int)$params['status']==0) {
$this->setProperty('statusText','ЗАКРЫТЫ');
}
точнее как не работает, когда отсылаю изменить свойство объекта с пустой страницы status изменяется и изменяется выводимая надпись, а вот когда приходит состояние с ардуины через запрос с веб переменных, свойство status изменяется все как и положено а вот надпись уже не изменяется. Что это глюк или как? Спасибо за помощь господа.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 10:56 am
nick7zmail
Посмотрел форму ответа - проще таки привести к варианту json...иначе кода много будет на "расшифровку" вашего варианта ответа. По факту это большой массив...текстовый, тут для каждого компонента массива из него нужно вытянуть название, вытянуть значение (из него самого же)...то есть по факту алгоритм - смотрим сколько символов в элементе массива, ищем в нем позицию равно, берем левые символы от равно - записываем в название, берем правые символы от равно - записываем в значение, и только потом можно будет переходить к выставлению переменных...короче сделать можно, но это будут костыли корявые...не люблю такой некрасивый код)) в случае с json - всё получится аккуратненько, и ардуина не нагружена, и расшифровывать на стороне мд ничего не надо. Тем более что доработок не много - ищите код, который формирует надпись 'P1='+<переменная из ардуины> (к примеру) и переделываете на '{"name":"P1","val":'+<та же переменная из ардуины>+'}'. Главное в начале и в конце не забыть '[' и ']' чтобы обозначить границы массива)
Но если хотите таки попробовать позаниматься этим гемором -
Код: Выделить всё
$content=getURL('http://так же забираем данные(все)', 0);
$arr = preg_split('/:/', $content);
foreach ($arr as $key => $value) {
// тут при помощи строковых функций разбираете каждый $value (он будет в формате P1=<значение>)
//и далее присваиваете свойствам при помощи sg();
}
Работа со строковыми функциями
http://php.net/manual/ru/ref.strings.php
Почему вышеприведенный код не работает (это я про предыдущее сообщение в выше)- не знаю...может глюк какой-то, вроде должно работать. Попробуйте сервер перезагрузить, мож с кэшем базы что не так.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 11:22 am
Sergey2055
Ок. перезагружу. А по поводу выбора элемента могу поправить как было у меня на html. там просто идут перечисления параметров через двоеточие типа 15:18:1:17 которые соответствуют определенному датчику или реле может так проще отфильтровать, Почему у меня сейчас так это я поправил для веб переменных.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 11:27 am
Sergey2055
nick7zmail можно поподробнее про то что вы предлагаете. что именно и как сформировать в ардуине и куда и как прописывать ваш код в MD.
А этот код я пробовал
подогнал и код и ответы ардуины все как здесь
http://majordomo.smartliving.ru/Main/DevIpPower9223 но у меня он не завелся почему то пишет ошибка переменной и все я перепробовал кучу вариантов и фильтра и разбора строки не пошел и все, почему не знаю.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 1:48 pm
nick7zmail
Sergey2055 писал(а):nick7zmail можно поподробнее про то что вы предлагаете. что именно и как сформировать в ардуине и куда и как прописывать ваш код в MD.
Можно) хотя и так вроде подробно описал. Для начала найдите в ардуино-коде тот кусок, который формирует строку
Скиньте сюда, потом решим что делать))
А в majordomo - код хоть куда. Например просто скрипт создать, или в метод того же объекта "arduino" (который, как я уже сказал, нужно будет создать) запихать.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 7:52 pm
Sergey2055
А что тут искать я написал я и поправлю. На запрос по команде дуина отвечает вот часть кода где происходит ответ
Код: Выделить всё
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println("Access-Control-Allow-Origin: *");
client.println();
client.print("Us="); //Сетевое напряжение;
client.print(mas[0]);
client.print(":");
client.print("Is="); //Ток в сети;
client.print(mas[1]);
client.print(":");
client.print("Ps="); //Потребляемая мощность;
client.print(mas[2]);
client.print(":");
client.print("Fs="); //Частота сети;
client.print(mas[3]);
Ну это сейчас так формирует для веб переменных в MD раньше было так
Код: Выделить всё
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println("Access-Control-Allow-Origin: *");
client.println();
for (int d=0; d<19; d++){
client.print(mas[d]);
client.print(":");
}
вот я и прошу помощи у знающих. в скриптах не силен. и как все энто в MD тоже не знаю пока. изучаю по возможности. До этого у меня сервер крутился на ajax, сам писал по форумам и книгам. Но асилил достиг желаемого результата а тук пока ступор.
Кстати по поводу не выводит текст по изменению статуса, перезагрузил не помогло.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 8:23 pm
nick7zmail
Sergey2055 писал(а):А что тут искать я написал я и поправлю. На запрос по команде дуина отвечает вот часть кода где
вот я и прошу помощи у знающих. в скриптах не силен. и как все энто в MD тоже не знаю пока. изучаю по возможности. До этого у меня сервер крутился на ajax, сам писал по форумам и книгам. Но асилил достиг желаемого результата а тук пока ступор.
Ну вот...берете код
Код: Выделить всё
client.print("Us="); //Сетевое напряжение;
client.print(mas[0]);
client.print(":");
меняете на
Код: Выделить всё
client.print("["); //в начале кода
client.print("{\"name\":\"P1\",\"val\":"); //Сетевое напряжение;
client.print(mas[0]);
client.print("}, ");
...
client.print("]"); //в конце кода
После того как поправите - посмотрите, формат должен быть примерно такой при открытии страницы:
Код: Выделить всё
[{"name":"T1","val":<тут значение Т1>}, {"name":"P1","val":<тут значение P1>},...]
А скрипт, который я накидал, когда про json писал - просто оставляете без изменений.
Код: Выделить всё
$content=getURL('http://<ваш адрес ардуины/команда на запрос json>', 0);
$data=json_decode($content);
foreach ($data as $key => $value) {
setGlobal('arduino.'.$value->name, $value->val);
}
Вбиваете его либо в сценарии, либо в любой метод любого объекта, и пробуете запустить. Главное, чтобы в объектах был объект "arduino". После запуска скрипта заходите в свойства объекта ардуино - и смотрите у него в свойствах - должны появится значения. Если всё появилось - настраиваете, к примеру, ежеминутный запуск этого скрипта, или как вам надо - хоть каждые 5 секунд.
PS: Возможно
Код: Выделить всё
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println("Access-Control-Allow-Origin: *");
client.println();
Придется убрать, иначе может не подцепить json строку.
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 8:44 pm
Sergey2055
немного не понятно:
Код: Выделить всё
$content=getURL('http://<ваш адрес ардуины/команда на запрос json>', 0);
$data=json_decode($content);
foreach ($data as $key => $value) {
setGlobal('arduino.'.$value->name, $value->val);
}
этот код вбиваю в свойство конкретного обекта так?
А что значит "Главное, чтобы в объектах был объект "arduino"" я так понимаю вместо name везде ардуино?
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Вт сен 13, 2016 10:33 pm
nick7zmail
Re: ПОМОГИТЕ кому не сложно ARDUINO датчики
Добавлено: Ср сен 14, 2016 8:02 am
Sergey2055
Добрый день. Пардон немного ошибся конечно не в свойства а в методы. Теперь наглядно все понял, а я думал ваш код в MD надо вбивать в метод конкретного объекта и так для каждого. Ну теперь все понятно, спасибо. Я просто не селен в таком рода программировании, изучаю по возможности. Сейчас буду пробовать. Нашел подопытную дуину.