Самый простой пример

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

Модератор: immortal

Ответить
Ferit
Сообщения: 10
Зарегистрирован: Пн дек 07, 2015 10:29 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Самый простой пример

Сообщение Ferit » Вт дек 08, 2015 5:03 pm

Доброго всем времени суток. Создаю тему человека крайне мало понимающего принцип работы MajorDoMo (PHP, БД, ООП и пр), но с большим желанием учиться. И желанием построить свою систему умного дома. Как новичок в этом деле, естественно просмотрел много тем форума и конкретно страницы куда отправляют новичков. Но многое не понятно, код очень большой и делает сразу много вещей (операций, таких как несколько реле, геркон и др). Но с кодом Arduino еще что-то понятно (хоть и далеко не все), потому что в моем арсенале есть ардуино и несколько датчиков, а в интернете много уроков для начинающих, то со сценариями и алгоритмами MajorDoMo полная непонятность.
К чему я это все. Прошу сделать хотя бы один единственный пример как зажечь и потушить светодиод на Arduino из MajorDoMo с подробным описанием создания классов и объектов (а конкретно как они взаимодействуют с ардуино). Из доступного: установленный MajorDoMo на Windows 8.1, Arduino UNO, Ethernet shield w5100, светодиод.
За это сообщение автора Ferit поблагодарил:
dimens (Вт апр 12, 2016 12:59 am)
Рейтинг: 1.16%
Anton_kulibin
Сообщения: 354
Зарегистрирован: Вт окт 09, 2012 8:05 am
Откуда: Луза Кировская обл. Россия
Благодарил (а): 20 раз
Поблагодарили: 35 раз

Re: Самый простой пример

Сообщение Anton_kulibin » Вт дек 08, 2015 7:33 pm

Для начала я бы посоветовал разобраться в ардуино раз уж у Вас есть некий набор. Вот есть простой и понятный скетч https://github.com/sochkasov/majordomo- ... rWebServer. ДАже можно без MajorDomo пробовать мигать светодиодом.
Т.е. надо включить светодиод на 5м контакте дуины вбиваем в браузере http://xx.xx.xx.xx/command?5=ON, http://xx.xx.xx.xx/command?5=OFF соответственно выключаем.
Это что касается ардуино.
С МДМ тут немного посложнее.
Linux версия. Ubuntu Server 16.04+2xArduinoMega+Eth_GW_Mysensors_10node+WeatherStation+Xiaomi
CONNECT
Sturgeon
Сообщения: 36
Зарегистрирован: Вт ноя 17, 2015 5:52 pm
Благодарил (а): 14 раз
Поблагодарили: 7 раз

Re: Самый простой пример

Сообщение Sturgeon » Вт дек 08, 2015 7:47 pm

Я примерно на таком же уровне нахожусь. Читаю сейчас учебник по PHP :) Вот видео, которое мне показалось немного полезным, хотя не совсем про ардуино https://www.youtube.com/watch?v=KwUI0k8viqA
triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск
Благодарил (а): 107 раз
Поблагодарили: 7 раз

Re: Самый простой пример

Сообщение triada13 » Вт дек 08, 2015 7:55 pm

Ferit сходите на mysensors.org
Majordomo на Orange Pi Zero.
Anton_kulibin
Сообщения: 354
Зарегистрирован: Вт окт 09, 2012 8:05 am
Откуда: Луза Кировская обл. Россия
Благодарил (а): 20 раз
Поблагодарили: 35 раз

Re: Самый простой пример

Сообщение Anton_kulibin » Вт дек 08, 2015 8:07 pm

Про интеграцию могу из простого только следующее. Самое простое что мне пришло в голову, это без использования объектов и методов.
Заходим в Панель управления - Меню управления. Создаем раздел с типом кнопка
с таким кодом

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

$cmdUrl = "http://xxx.xxx.xxx.xxx/command?5=ON"; 
getURL($cmdUrl,0);  
Эта кнопка будет включать по аналогии можно создать вторую кнопку которая будет выключать.
В серьез это можно не брать, это чисто попробовать как на страничке нажать кнопку чтобы светодиод загорелся.
Вложения
пример.png
пример.png (72.26 КБ) 7895 просмотров
За это сообщение автора Anton_kulibin поблагодарил:
serghei (Пт фев 12, 2016 6:13 pm)
Рейтинг: 1.16%
Linux версия. Ubuntu Server 16.04+2xArduinoMega+Eth_GW_Mysensors_10node+WeatherStation+Xiaomi
CONNECT
Ferit
Сообщения: 10
Зарегистрирован: Пн дек 07, 2015 10:29 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Самый простой пример

Сообщение Ferit » Вс дек 13, 2015 5:07 pm

Итак! Благодаря даже первым четырем комментаторам (большое спасибо Anton_kulibin) удалось сделать задуманное.

Как все сделано. На ардуину с Ethernet шилдом загружен скетч

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

#include <SPI.h>
#include <Ethernet.h>
 
boolean incoming = 0;
 
// Введите MAC-адрес и IP-адрес вашего контроллера
// IP-адрес должен соответствовать вашей локальной сети
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,0,3); //<<< IP-АДРЕС 
 
// Инициализация библиотеки Ethernet server
// с тем IP-адресом и портом который мы хотим использовать
// (порт 80 по умолчанию используется для HTTP):
EthernetServer server(80);
 
void setup()
{
  pinMode(2, OUTPUT);
 
  // запускаем Ethernet соединение и сервер:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}
 
void loop()
{
  // ожидание подключения клиентов
  EthernetClient client = server.available();
  if (client) {
    // Запрос HTTP заканчивается пустой строкой
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // Если будет получен символ переноса строки и
    // сама строка при этом пустая, значит
    // HTTP-запрос закончился, можно отвечать
 
    // считываем URL с символа "$" до первого пробела
        if(incoming && c == ' '){
          incoming = 0;
        }
        if(c == '$'){
          incoming = 1;
        }
 
        // Определяем что было в URL: $1 или $2
        if(incoming == 1){
          Serial.println(c);
 
          if(c == '1'){
            Serial.println("ON");
            digitalWrite(2, HIGH);
          }
          if(c == '2'){
            Serial.println("OFF");
            digitalWrite(2, LOW);
          }
 
        }
 
        if (c == '\n') {
          // началась новая строка
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // в текущей строке ещё есть символы
          currentLineIsBlank = false;
        }
      }
    }
    // даём время браузеру для получения данных
    delay(1);
    // закрываем соединение
    client.stop();
  }
}
Скетч взят из интернета.

Как видно из кода подключен светодиод на пин -2. И это уже работает на команду из браузера 192.168.0.3/$1 и светодиод загорается, $2 - светодиод потухает.

Как управлять светодиодом из MajorDoMo. Я не стал ничего придумывать, а взял уже готовый объект Switch1 из класса Relays

Изображение

В объекте Switch1 подредактировал методы turnOff и turnOn

Вставил php код

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

$cmdUrl = "http://192.168.0.3/$2"; 
getURL($cmdUrl,0);

для turnOff

И $1 для turnOn соответственно.

И это работает!

Выражаю благодарность, тем кто дал совет, и назрели два вопроса
1. Светодиод потухает или загорается не моментально. Требуется время пока появится статус "ОК"
Изображение
Как можно ускорить процесс?
2. У меня есть датчик DHT22, что нужно делать, что бы MaJorDoMo отображала текущую температуру и строила графики?

Мой вариант исполнения наверняка не бес недостатков, поэтому приму любой совет и критику.
За это сообщение автора Ferit поблагодарил:
serghei (Пт фев 12, 2016 6:13 pm)
Рейтинг: 1.16%
Ответить