ПОМОГИТЕ кому не сложно ARDUINO датчики

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 13, 2016 9:10 am

Да попутно еще вопрос почему не работает этот код

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

if ((int)$params['status']==1) {
 $this->setProperty('statusText','ОТКРЫТЫ');
}

if ((int)$params['status']==0) {
 $this->setProperty('statusText','ЗАКРЫТЫ');
}
точнее как не работает, когда отсылаю изменить свойство объекта с пустой страницы status изменяется и изменяется выводимая надпись, а вот когда приходит состояние с ардуины через запрос с веб переменных, свойство status изменяется все как и положено а вот надпись уже не изменяется. Что это глюк или как? Спасибо за помощь господа.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Вт сен 13, 2016 10:56 am

Посмотрел форму ответа - проще таки привести к варианту 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


Почему вышеприведенный код не работает (это я про предыдущее сообщение в выше)- не знаю...может глюк какой-то, вроде должно работать. Попробуйте сервер перезагрузить, мож с кэшем базы что не так.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 13, 2016 11:22 am

Ок. перезагружу. А по поводу выбора элемента могу поправить как было у меня на html. там просто идут перечисления параметров через двоеточие типа 15:18:1:17 которые соответствуют определенному датчику или реле может так проще отфильтровать, Почему у меня сейчас так это я поправил для веб переменных.
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 13, 2016 11:27 am

nick7zmail можно поподробнее про то что вы предлагаете. что именно и как сформировать в ардуине и куда и как прописывать ваш код в MD.

А этот код я пробовал
подогнал и код и ответы ардуины все как здесь http://majordomo.smartliving.ru/Main/DevIpPower9223 но у меня он не завелся почему то пишет ошибка переменной и все я перепробовал кучу вариантов и фильтра и разбора строки не пошел и все, почему не знаю.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Вт сен 13, 2016 1:48 pm

Sergey2055 писал(а):nick7zmail можно поподробнее про то что вы предлагаете. что именно и как сформировать в ардуине и куда и как прописывать ваш код в MD.
Можно) хотя и так вроде подробно описал. Для начала найдите в ардуино-коде тот кусок, который формирует строку

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

Us=203:Is=1:Ps=160:Fs=50....и тд
Скиньте сюда, потом решим что делать))

А в majordomo - код хоть куда. Например просто скрипт создать, или в метод того же объекта "arduino" (который, как я уже сказал, нужно будет создать) запихать.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 13, 2016 7:52 pm

А что тут искать я написал я и поправлю. На запрос по команде дуина отвечает вот часть кода где происходит ответ

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

 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, сам писал по форумам и книгам. Но асилил достиг желаемого результата а тук пока ступор.
Кстати по поводу не выводит текст по изменению статуса, перезагрузил не помогло.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Вт сен 13, 2016 8:23 pm

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 строку.
За это сообщение автора nick7zmail поблагодарил:
Sergey2055 (Ср сен 14, 2016 8:03 am)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 13, 2016 8:44 pm

немного не понятно:

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

$content=getURL('http://<ваш адрес ардуины/команда на запрос json>', 0);
$data=json_decode($content);
foreach ($data as $key => $value) {
    setGlobal('arduino.'.$value->name, $value->val);
}
 
этот код вбиваю в свойство конкретного обекта так?
А что значит "Главное, чтобы в объектах был объект "arduino"" я так понимаю вместо name везде ардуино?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Вт сен 13, 2016 10:33 pm

Sergey2055 писал(а): этот код вбиваю в свойство конкретного обекта так?
А что значит "Главное, чтобы в объектах был объект "arduino"" я так понимаю вместо name везде ардуино?
Не в свойство а в метод. Начните со сценария. Скрины во вложении...не знаю, как еще объяснить))
Скрины
СпойлерПоказать
1.jpg
1.jpg (77.7 КБ) 6642 просмотра
2.jpg
2.jpg (27.77 КБ) 6642 просмотра
3.jpg
3.jpg (86.34 КБ) 6642 просмотра
4.jpg
4.jpg (79.54 КБ) 6642 просмотра
5.jpg
5.jpg (55.48 КБ) 6642 просмотра
6.jpg
6.jpg (114.89 КБ) 6642 просмотра
7.jpg
7.jpg (123.11 КБ) 6642 просмотра
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Ср сен 14, 2016 8:02 am

Добрый день. Пардон немного ошибся конечно не в свойства а в методы. Теперь наглядно все понял, а я думал ваш код в MD надо вбивать в метод конкретного объекта и так для каждого. Ну теперь все понятно, спасибо. Я просто не селен в таком рода программировании, изучаю по возможности. Сейчас буду пробовать. Нашел подопытную дуину.
Ответить