Мы не понимаем друг друга. Я в браузере АМС просто нажимаю на кнопку. А вот как то же самое сделать в МД я не знаю. Но копать надо в сторону как в цитате.Я пробовал. Вообще-то логику работы можно проследить по коду, но перевожу на простой человеческий язык.
Код этого модуля кочует из версии в версию и берёт своё начало ещё с тех времён, когда АМС-а вообще не было. Работа ключа зависит от переменной goLight, которая раньше выставлялась посылками
rele4=0 или rele4=1
из MajorDoMo. Мной (по причине того, что я вообще забыл, как MajorDoMo выглядит) и серее всего никем не используется, но вы можете подключить электронный ключ и в любом месте скетча управлять им, изменяя состояние переменной goLight.
Arduino+EthernetW5100+MDM
Модератор: immortal
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Arduino+EthernetW5100+MDM
В главной ветке АМС проскочила инфа про модуль "ключ" . Я его завел на первой кнопке. работает очень шустро, типа твоих 4 релюшек.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Arduino+EthernetW5100+MDM
Блин...кнопка в браузере отправляет на какую-то ссылку, я у тя и прошу эту ссылку....serghei писал(а): Мы не понимаем друг друга. Я в браузере АМС просто нажимаю на кнопку. А вот как то же самое сделать в МД я не знаю. Но копать надо в сторону как в цитате.
А из мд чтобы переключить пользуемся
Код: Выделить всё
getUrl('Тут эта самая ссылка');
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 7
- Зарегистрирован: Ср сен 14, 2016 12:39 pm
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Re: Arduino+EthernetW5100+MDM
В общем разобрался! Выкладываю скетч:
Что происходит на МДМ. Создаем кнопку(в моем случае лампочка), создаем методы turnOn и turnOff. В них соответственно прописываем
$this->setProperty("status",0);
$cmdUrl = "http://192.168.0.73:80/command?1,1"; //включение (первая единица - это номер выключателя, вторая единица - вкл)
//соответственно выключение будет 1,0
getURL($cmdUrl,0);
Собственно и все. Остается ещё добавить на ардуино проверку состояния из МДМ т.к после внезапного выключения света - состояние на ардуино сбросится, а это негативно может сказаться на комфорте.. Над этим я ещё подумаю, как сделаю - отпишу сюда же...
СпойлерПоказать
#include <Ethernet.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
// MAC-адрес нашего устройства
byte mac[] = { 0x00, 0x2A, 0xF6, 0x12, 0x68, 0xFC };
// ip-адрес устройства
byte ip[] = { 192, 168, 0, 73 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 0, 243 }; // измените на свой
Adafruit_BMP085 bmp;
int cycle_counter=0;
int releState=0;
int relePin = 6;
int old_pressure1=0;
int press1=0;
int incomingInt = 0;
int current_temp1=0;
int old_temperature1=0;
String url = "";
int maxLength=25;
String commandReceived;
String parametersReceived;
int MDcommand;
unsigned long MDparameter;
char buf[80];
EthernetServer server(80);
EthernetClient rclient; // 80-порт.
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect(rserver,80)) {
Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.0.243");
rclient.println();
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(115200);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
pinMode(relePin, OUTPUT);
}
void loop()
{
int valid_sensor=0;
delay(100); // задержка в 0.1 сек.
cycle_counter++;
if (cycle_counter>600) {
cycle_counter=0;
}
// TEMP SENSOR 1
float current_temp1=0;
Serial.println("Temper");
current_temp1=bmp.readTemperature(); // получаем температуру
Serial.println(current_temp1);
if ((old_temperature1!=(int)current_temp1)) {
int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorRoom&op=m&m=tempChanged&t=%02d.%02d HTTP/1.0", (int)current_temp1, abs(temp1));
sendHTTPRequest();
}
old_temperature1=(int)current_temp1;
//--------------------------------------------
//----------------------------------------------
float current_press1=0;
Serial.println("Press");
current_press1=(bmp.readPressure())/133.1; // получаем температуру
Serial.println(current_press1);
if ((old_pressure1!=(int)current_press1)) {
//int press1 = (current_press1 - (int)current_press1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=pressRoom&op=m&m=pressChanged&t=%03d HTTP/1.0", (int)current_press1);
sendHTTPRequest();
}
old_pressure1=(int)current_press1;
delay(2000);
//------------------
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (url.length() < maxLength) {
url+=(c);
}
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
Serial.print("HTTP request: ");
Serial.println(url);
if (url.indexOf("?")>=0) {
int PosB=url.indexOf("?")+1;
int PosE=url.indexOf("HTTP");
if (url.indexOf(",")>=0) {
// command has parameters
int PosP=url.indexOf(",");
commandReceived=url.substring(PosB,PosP);
parametersReceived=url.substring(PosP+1,PosE-1);
} else {
// command does not have parameters
commandReceived=url.substring(PosB,PosE-1);
parametersReceived="";
}
MDcommand = commandReceived.toInt();
MDparameter = parametersReceived.toInt();
}
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><head><title>Arduino</title></head><body>");
client.println("</body><html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}// end if (client.available())
} //END while (client.connected())
// give the web browser time to receive the data
delay(1);
// close the connection:
url = "";
client.stop();
Serial.println("client disconnected");
//Обработка команд
if (MDcommand == 1) {//Включить свет в холле 1=вкл, 0-выкл
//int stat = MDparameter; //в моём случае не нужно
digitalWrite(6, HIGH);
}
else
if (MDcommand==0) {
//int stat = MDparameter;
digitalWrite(6, LOW);
}
}
}
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
// MAC-адрес нашего устройства
byte mac[] = { 0x00, 0x2A, 0xF6, 0x12, 0x68, 0xFC };
// ip-адрес устройства
byte ip[] = { 192, 168, 0, 73 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 0, 243 }; // измените на свой
Adafruit_BMP085 bmp;
int cycle_counter=0;
int releState=0;
int relePin = 6;
int old_pressure1=0;
int press1=0;
int incomingInt = 0;
int current_temp1=0;
int old_temperature1=0;
String url = "";
int maxLength=25;
String commandReceived;
String parametersReceived;
int MDcommand;
unsigned long MDparameter;
char buf[80];
EthernetServer server(80);
EthernetClient rclient; // 80-порт.
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect(rserver,80)) {
Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.0.243");
rclient.println();
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(115200);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
pinMode(relePin, OUTPUT);
}
void loop()
{
int valid_sensor=0;
delay(100); // задержка в 0.1 сек.
cycle_counter++;
if (cycle_counter>600) {
cycle_counter=0;
}
// TEMP SENSOR 1
float current_temp1=0;
Serial.println("Temper");
current_temp1=bmp.readTemperature(); // получаем температуру
Serial.println(current_temp1);
if ((old_temperature1!=(int)current_temp1)) {
int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorRoom&op=m&m=tempChanged&t=%02d.%02d HTTP/1.0", (int)current_temp1, abs(temp1));
sendHTTPRequest();
}
old_temperature1=(int)current_temp1;
//--------------------------------------------
//----------------------------------------------
float current_press1=0;
Serial.println("Press");
current_press1=(bmp.readPressure())/133.1; // получаем температуру
Serial.println(current_press1);
if ((old_pressure1!=(int)current_press1)) {
//int press1 = (current_press1 - (int)current_press1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=pressRoom&op=m&m=pressChanged&t=%03d HTTP/1.0", (int)current_press1);
sendHTTPRequest();
}
old_pressure1=(int)current_press1;
delay(2000);
//------------------
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (url.length() < maxLength) {
url+=(c);
}
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
Serial.print("HTTP request: ");
Serial.println(url);
if (url.indexOf("?")>=0) {
int PosB=url.indexOf("?")+1;
int PosE=url.indexOf("HTTP");
if (url.indexOf(",")>=0) {
// command has parameters
int PosP=url.indexOf(",");
commandReceived=url.substring(PosB,PosP);
parametersReceived=url.substring(PosP+1,PosE-1);
} else {
// command does not have parameters
commandReceived=url.substring(PosB,PosE-1);
parametersReceived="";
}
MDcommand = commandReceived.toInt();
MDparameter = parametersReceived.toInt();
}
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><head><title>Arduino</title></head><body>");
client.println("</body><html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}// end if (client.available())
} //END while (client.connected())
// give the web browser time to receive the data
delay(1);
// close the connection:
url = "";
client.stop();
Serial.println("client disconnected");
//Обработка команд
if (MDcommand == 1) {//Включить свет в холле 1=вкл, 0-выкл
//int stat = MDparameter; //в моём случае не нужно
digitalWrite(6, HIGH);
}
else
if (MDcommand==0) {
//int stat = MDparameter;
digitalWrite(6, LOW);
}
}
}
Что происходит на МДМ. Создаем кнопку(в моем случае лампочка), создаем методы turnOn и turnOff. В них соответственно прописываем
$this->setProperty("status",0);
$cmdUrl = "http://192.168.0.73:80/command?1,1"; //включение (первая единица - это номер выключателя, вторая единица - вкл)
//соответственно выключение будет 1,0
getURL($cmdUrl,0);
Собственно и все. Остается ещё добавить на ардуино проверку состояния из МДМ т.к после внезапного выключения света - состояние на ардуино сбросится, а это негативно может сказаться на комфорте.. Над этим я ещё подумаю, как сделаю - отпишу сюда же...
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Arduino+EthernetW5100+MDM
Я вот эту команду и требовал)) http://192.168.0.73:80/command?1,1
Ток вопрос - почему команда на включение, а статус ставим 0?))
Ток вопрос - почему команда на включение, а статус ставим 0?))
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 7
- Зарегистрирован: Ср сен 14, 2016 12:39 pm
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Re: Arduino+EthernetW5100+MDM
nick7zmail писал(а):Я вот эту команду и требовал)) http://192.168.0.73:80/command?1,1
Ток вопрос - почему команда на включение, а статус ставим 0?))
Опечатка! В статусе на включение стоит 1, конечно.
-
- Сообщения: 397
- Зарегистрирован: Вт май 31, 2016 6:56 pm
- Откуда: Россия Карелия Петрозаводск
- Благодарил (а): 96 раз
- Поблагодарили: 57 раз
Re: Arduino+EthernetW5100+MDM
У вас в коде
Можно взглянуть на реализацию метода tempChanged ?
Код: Выделить всё
sprintf(buf, "GET /objects/?object=sensorRoom&op=m&m=tempChanged&t=%02d.%02d HTTP/1.0", (int)current_temp1, abs(temp1));
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
-
- Сообщения: 7
- Зарегистрирован: Ср сен 14, 2016 12:39 pm
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Re: Arduino+EthernetW5100+MDM
//$params['t']VladPTZ писал(а):У вас в кодеМожно взглянуть на реализацию метода tempChanged ?Код: Выделить всё
sprintf(buf, "GET /objects/?object=sensorRoom&op=m&m=tempChanged&t=%02d.%02d HTTP/1.0", (int)current_temp1, abs(temp1));
$old_temp=$this->getProperty('temp');
$t=round($params['t'],1);
$this->setProperty('temp',$t);
if ($t>$old_temp) {
$d=1;
} elseif ($t<$old_temp) {
$d=-1;
} else {
$d=0;
}
$this->setProperty('direction',$d);
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time()));
-
- Сообщения: 34
- Зарегистрирован: Пн авг 22, 2016 9:41 am
- Благодарил (а): 15 раз
- Поблагодарили: 2 раза
Re: Arduino+EthernetW5100+MDM
Подскажите а как получать данные в МД от этой связки в мотод вроде добавляю но данные не меняются