#1 2018-06-22 00:04:17

Nesamodelkin
Участник
Зарегистрирован: 2018-06-21
Сообщений: 5

Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Вечер добрый.
У меня такая проблема. Хочу по условию  таймера  с  участием мега 2560 и 5100, по истечению времени, что  всё это работало,  ну в крайнем случае с запущенного сервера при открытом браузере. Есть инфо, дайте ссылки посмотреть как там выполнено

#2 2018-06-22 09:03:40

LynX
Участник
Зарегистрирован: 2018-04-19
Сообщений: 71

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Без программы на компе запустить exe никак. С программой - не понятно зачем нужна Ардуина (таймер можно в программе задать).

Ссылку в браузере можно... без программы на компе, но с открытой вкладкой в браузере.

Предлагаю третий вариант: делай эмулятор usb клавиатуры на Arduino, запустить программу просто: нажимаем Windows+R mspaint.exe Enter

#3 2018-06-22 09:14:18

Nesamodelkin
Участник
Зарегистрирован: 2018-06-21
Сообщений: 5

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Ссылку в браузере можно... без программы на компе, но с открытой вкладкой в браузере.
Этот вариант  для начала, подошёл бы,  Я только осваиваю, второй не потяну пока.
Вот у меня есть переход по ссылке с вэб, как его доработать

<br>
<a href='http://www.speedtest.net/ru' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:2px;  border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>speedtest.net<a>

Он находится  в Index на CD

#4 2018-06-24 05:45:21

LynX
Участник
Зарегистрирован: 2018-04-19
Сообщений: 71

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Для начала надо сделать веб страницу на Вашей arduino с 5100, первое в гугле: http://webstm32.sytes.net/web_1.htm

Потом сделать хитрую веб страничку которая бы заставляла браузер проверять пора ли открывать ссылку, на js например, по таймеру. https://learn.javascript.ru/settimeout-setinterval

Создать на сервере еще одну страничку которая будет проверяться по этому таймеру и в зависимости данных на второй странице - открывать ссылку лучше запускать скрипт со второй страницы, а там он будет или пустым, или "открыть ссылку".

#5 2018-06-24 08:38:38

Nesamodelkin
Участник
Зарегистрирован: 2018-06-21
Сообщений: 5

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

которая бы заставляла браузер проверять пора ли открывать ссылку, на js например, по таймеру
Вы  наверно не так поняли мне не надо чтоб браузер что то проверял, у меня уже  есть 2 таймера на миллис они отрабатывают , и должны отдавать команду на выполнение функции (), но у меня есть и клиент и Index  файл,  и я запутался  немного, вот  2 отрывка кода которые работают пока без желаемого индекс можно открыть  в браузере для наглядности.

 EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (req_index < (REQ_BUF_SZ - 1)) {
          HTTP_req[req_index] = c; 
          req_index++;
        }
        if (c == '\n' && currentLineIsBlank) {
          if (StrContains(HTTP_req, "GET /")) {
            if (StrContains(HTTP_req, "/ ")
                || StrContains(HTTP_req, "/index.htm")) {
              sendHtmlFile(client, "index.htm");
            } else if (StrContains(HTTP_req, "/favicon.ico")) {
              sendFile(client, "favicon.ico");
            } else if (StrContains(HTTP_req, "/input_1.png")) {
              sendFile(client, "input_1.png");
            } else if (StrContains(HTTP_req, "/input_2.png")) {
              sendFile(client, "input_2.png");
            } else if (StrContains(HTTP_req, "/input_3.png")) {
              sendFile(client, "input_3.png");
              } else if (StrContains(HTTP_req, "/input_4.png")) {
              sendFile(client, "input_4.png");
              } else if (StrContains(HTTP_req, "/input_5.png")) {
              sendFile(client, "input_5.png");
               } else if (StrContains(HTTP_req, "/input_6.png")) {
              sendFile(client, "input_6.png");
            } else if (StrContains(HTTP_req, "/my.css")) {
              sendFile(client, "my.css");
            } else if (StrContains(HTTP_req, "ajax_input")) {
              sendBaseAnswer(client);              
          int val_input_1 = analogRead(input_1);            // Для перевода 1024  в %  значение =
          val_input_1 = map(val_input_1, 0, 1023, 0, 100);
          int val_input_2 = analogRead(input_2);
          val_input_2 = map(val_input_2, 0, 1023, 0, 100);                                     
          int chk;
          chk = irrecv.decode(&results); 
/*
///////////////////////  
int digital_input_1 = digitalRead(???); 
int digital_input_2 = digitalRead(???);                                

client.print (digital_input_1);
client.print(":");
client.print (digital_input_2);
client.print(":");
/////////////////////// 
*/                                
            client.print (val_input_1);
            client.print(":");
            client.print (val_input_2);
            client.print(":");
            client.print (results.value, HEX);
///////////////////////           
            client.print(":");
            client.print(time_hrs_1);
            client.print("h . ");
            printDigits(client, time_min_1);
            client.print("m . ");
            printDigits(client, time_sec_1);
            client.print("s");
///////////////////////
            client.print(":");
            client.print(time_hrs_2);
            client.print("h . ");
            printDigits(client, time_min_2);
            client.print("m . ");
            printDigits(client, time_sec_2);
            client.print("s");
///////////////////////
            client.print(":");
            client.print(time_hrs_3);
            client.print("h . ");
            printDigits(client, time_min_3);
            client.print("m . ");
            printDigits(client, time_sec_3);
            client.print("s");
//////////////////////
            client.print(":"); 
            client.print((digitalRead(6)) ? "1" : "0");
            client.print(":");
            client.print((digitalRead(7)) ? "1" : "0");
            client.print(":");
            client.print((digitalRead(8)) ? "1" : "0");
            client.print(":");
            client.print((digitalRead(5)) ? "1" : "0"); 
//////////////////////            
          } else if (StrContains(HTTP_req, "setpin?")) {
        if (StrContains(HTTP_req, "pin=1")) {
            digitalWrite(6, HIGH);
            digitalWrite(7, LOW);
            digitalWrite(5, LOW);
            digitalWrite(alarm_Out, LOW); /////
          } else if (StrContains(HTTP_req, "pin=2")) {
            digitalWrite(7, HIGH);
            digitalWrite(6, LOW);
            digitalWrite(5, LOW);
            digitalWrite(alarm_Out, LOW); ////
          } else if (StrContains(HTTP_req, "pin=3")) {
             pin3 = !pin3;
             digitalWrite(8, pin3);
          } else if (StrContains(HTTP_req, "pin=4")) {
            digitalWrite(5, HIGH);
            digitalWrite(7, LOW);
            digitalWrite(6, LOW);          
            digitalWrite(alarm_Out, LOW); /////
           }
              sendBaseAnswer(client);
            }
          }
          req_index = 0;
          StrClear(HTTP_req, REQ_BUF_SZ);
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}
//************************************************

bool sendHtmlFile(EthernetClient client, char *fileName) {
  webFile = SD.open(fileName);
  sendBaseAnswer(client);
  return sendFile(client, webFile);
}
bool sendFile(EthernetClient client, char *fileName) {
  webFile = SD.open(fileName);
  sendHttpOkAnswer(client);
  client.println();
  return sendFile(client, webFile);
}
bool sendFile(EthernetClient client, File &webFile) {
  if (webFile) {
    while (webFile.available())
      client.write(webFile.read()); 
    webFile.close();
    return 1;
  }
  return 0;
}
//////////////////////////////////////////////////////////////////////

void sendBaseAnswer(EthernetClient client) {
  sendHttpOkAnswer(client);
  client.println(F("Content-Type: text/html"));
  client.println(F("Connection: close"));
  client.println();
}

void sendHttpOkAnswer(EthernetClient client) {
  client.println(F("HTTP/1.1 200 OK"));
}


void StrClear(char *str, char length) {
  for (int i = 0; i < length; i++) {
    str[i] = 0;
  }
}

char StrContains(char *str, char *sfind) {
  char found = 0;
  char index = 0;
  char len;
  len = strlen(str);
  if (strlen(sfind) > len) {
    return 0;
  }
  while (index < len) {
    if (str[index] == sfind[found]) {
      found++;
      if (strlen(sfind) == found) {
        return 1;
      }
    }
    else {
      found = 0;
    }
    index++;
  }
  return 0;
}

и

<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=UTF-8'>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<title>web server 5100</title>
<link type="text/css" rel="StyleSheet" href="/my.css" />
<script>

function GetFlameState() {
nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status == 200) {
if (this.responseText != null) {
var arrayOfStrings = this.responseText.split(":");

document.getElementById("sensor-1_txt").innerHTML = arrayOfStrings[0];
document.getElementById("sensor-2_txt").innerHTML = arrayOfStrings[1];
document.getElementById("sensor-3_txt").innerHTML = arrayOfStrings[2];
document.getElementById("sensor-4_txt").innerHTML = arrayOfStrings[3];
document.getElementById("sensor-5_txt").innerHTML = arrayOfStrings[4];
document.getElementById("sensor-6_txt").innerHTML = arrayOfStrings[5];
for(var i = 1 ; i < 8 ; i++)
if(arrayOfStrings[5+i] == "1")
document.getElementById("led_"+i).setAttribute("class","button_enabled");
else
document.getElementById("led_"+i).setAttribute("class","button_disabled");
      }
    }
  }
}
request.open("GET", "ajax_input" + nocache, true);
request.send(null);
setTimeout('GetFlameState()', 1000);
}

function onClick(pin){
var request = new XMLHttpRequest();
request.open("GET", "\setpin?pin=" + pin , false);
request.send(null);
}
</script>
</head>
<body onload="GetFlameState()">
</table>
<center>
<div class="form">
<h2>Web Server router switch 5100</h2>
<hr noshade size="6px" color="gray">
<h3>Download activity & Code IR </h3>	
<table align="center">
<td valign="center">1</td>
<td><img src='input_1.png' /></td>
<td valign="center">level </td>
<td><span id="sensor-1_txt">00</span>%</td>
<td> &nbsp &nbsp </td>
<td><img src='input_3.png' /></td>
<td valign="center">code</td>
<td><span id="sensor-3_txt">---------</span></td>
<td> &nbsp &nbsp </td>
<td valign="center">2</td>
<td><img src='input_2.png' /></td>
<td valign="center">level </td>
<td><span id="sensor-2_txt">00</span>%</td>
<td> &nbsp &nbsp </td>
</table>
<center>
<hr noshade size="1px" color="gray">
<h3>Router Power 12v</h3>
<button type="button" id="led_3" class="button_disabled" onClick="onClick(3)">Light</button>
<button type="button" id="led_4" class="button_disabled" onClick="onClick(4)">&nbsp Router Power OFF (Standby)&nbsp </button>
<button type="button" id="led_5" class="button_disabled" onClick="onClick(5)">Re_Start </button>
<br>
<br>
<td>
<td valign="center">1</td>
<td><img src='input_5.png' /></td>
<td valign="center">&nbsp</td>
<td><span id="sensor-5_txt">0h : 00m : 00s</span></td>
<td> &nbsp &nbsp &nbsp </td>
<td><span id="sensor-4_txt">0h : 00m : 00s</span></td>
<td><img src='input_4.png' /></td>
<td valign="center">&nbsp</td>
<td valign="center">2</td>
<br>
<br>
<button type="button" id="led_1" class="button_disabled" onClick="onClick(1)">Router # 1</button>
<input type="checkbox" name="led_1" value="0" /><a>
<a> &nbsp &nbsp  Loading is complete  &nbsp &nbsp <a>
<input type="checkbox" name="led_2" value="0" /><a>
<button type="button" id="led_2" class="button_disabled" onClick="onClick(2)">Router # 2</button>
<br>
<hr noshade size="1px" color="gray">
<a href='http://megalink.free/login?dst=http://megalink.free&amp;username=T-54%3AE6%3AFC%3ADD%3A30%3A35' style='display: inline-block; width: 195px; height:25px; margin-top:5px; margin-bottom:15px;  border-radius:5px; -moz-border-radius:5px; background-color:rgb(171, 211, 220); \'>Вход без логина/пароля 1<a>
<a> &nbsp &nbsp <a>
<a href='http://megalink.free/login?dst=http://megalink.free&amp;username=T-F8%3AD1%3A11%3A25%3AAA%3AB8' style='display: inline-block; width: 195px; height:25px; margin-top:5px; margin-bottom:15px;  border-radius:5px; -moz-border-radius:5px; background-color:rgb(171, 211, 220); \'>Вход без логина/пароля 2<a>

<br>
<a href='http://www.speedtest.net/ru' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:2px;  border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>speedtest.net<a>
<a href='rezerv' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:5px;  border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>rezerv<a>
<a href='https://www.youtube.com/' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:5px;  border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>youtube.com<a>
<br>
<hr noshade size="1px" color="gray">
<td valign="center">Общее время подключения&nbsp</td>
<td><img src='input_6.png' /></td>
<td valign="center">&nbsp</td>
<td><span id="sensor-6_txt">&nbsp 0h : 00m : 00s</span></td>
<hr noshade size="6px" color="gray">
</center>
</div>
</Body>
</html>

Редактировался Nesamodelkin (2018-06-24 08:43:42)

#6 2018-06-26 18:38:30

LynX
Участник
Зарегистрирован: 2018-04-19
Сообщений: 71

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

HTTP сервер ни с того ни с сего не может отправить клиенту данные. Клиент должен их запросить.

Ну... в принципе можете не закрывая </body></html> и соединение отдавать медленно по пробелу (который в html ничего не значит), а по событию таймера отправить <script>setTimeout("location.href = 'index.php';",2000);</script></doby></html> ,где 2000 - задержка от перехода на страницу index.php в миллисекундах. Открыть новую вкладку нельзя, потому что сработает защита от всплывающих окон.

Ваш вопрос больше по веб фронтенду, тут мало кто таким занимается.

#7 2018-07-13 17:12:53

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 95

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Nesamodelkin пишет:

Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

1. Срабатывает "условие" на Arduino.
2. К Arduino подключён через усилитель или просто через ограничивающий резистор ИК-светодиод, который излучает сигнал с нужной командой.
3. На компьютере установлена плата ТВ-тюнера с функцией запуска настраиваемых приложений по команде с ИК-пульта, которая запускает батник или любой другой скрипт. Подойдёт любой девайс для управления компьютером по ИК.
4. Батник/скрипт творит любое чудо на компьютере.

#8 2018-07-13 17:19:45

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 95

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Вариант №2:
На компьютере запущен HTTP сервер Apache, Arduino по условию дёргает через GET на нём определённый адрес типа http://192.168.0.2/a/, можно даже параметры передать. В папке "a" сидит index.*, который на самом деле не статичный файл, а выполняемый скрипт или простейший CGI-модуль, который сделает всё, что нужно. Я на Delphi давным-давно так делал, правда под Windows дело было.

#9 2018-07-13 18:49:27

Nesamodelkin
Участник
Зарегистрирован: 2018-06-21
Сообщений: 5

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Не ужели всё так сложно... Ну есть же время  и погоду когда надо вызывать, на почту что то отправлять, ну хорошо там библиотеки задействованы, согласен.. Но мне всего то надо дёрнуть страницу, пусть хоть эту https://forum.arduino.ua/post.php?tid=1603, не получая и ни передавая ей ничего просто перезагрузить, не ужели без скриптов и промежуточных батников не обойтись

#10 2018-07-13 19:17:34

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,383

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Nesamodelkin пишет:

Не ужели всё так сложно...

И да, и нет. Скрипт для периодической перезагрузки страницы браузера или получения данных с сервера вещь не сложная. Hо реализовать это можно только при помощи JS, на стороне браузера. В простейшем виде это десяток строк. Погуглите в интернете и вы обязательно найдете примеры.

Редактировался Вячеслав Азаров (2018-07-13 19:25:59)

#11 2018-07-13 19:27:10

Nesamodelkin
Участник
Зарегистрирован: 2018-06-21
Сообщений: 5

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

А можно как то переделать библиотеку парсинга погоды, там и  условия уже есть и таймер то же, только ссылки поменять на нужные мне, куда запрос отсылать.  речь идёт пока не об УНО + 5100,  а  о 8266

#12 2018-07-13 19:33:05

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,383

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Nesamodelkin пишет:

А можно как то переделать библиотеку парсинга погоды, там и  условия уже есть и таймер то же, только ссылки поменять на нужные мне, куда запрос отсылать.  речь идёт пока не об УНО + 5100,  а  о 8266

Что, откуда и куда вы хотите передавать? Не совсем понятно. Объясните подробнее, тогда вам смогут помочь.

#13 2018-07-13 20:41:58

LynX
Участник
Зарегистрирован: 2018-04-19
Сообщений: 71

Re: Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?

Да потому что все задом-наперед делаете. Маленький файл на ардуине пусть изменяется, а js его периодически запрашивает (ajax). А после опроса по условию location.reload(); Три строчки кода.

Иначе это не практическое задание, а академическое. Т.е. если нужно именно чтобы ардуина отправляла комманду, а на комп нельзя поставить демона, то бессмыслнное и беспощадное задание. Слушайте порт / ssh. Нет... нужен браузер... Какое задание такое и решение, похоже на "нужно ехать, но не на машине, не на мотоцикле, не на велосипеде, а на канализационном люке, к машине его привязывать нельзя, отверстие в нем делать нельзя, и вообще никакие внешние силы нельзя..."

Можно попробовать Opera Unite со встронным вебсервером, только я боюсь он там сильно кастрированный, или любой другой старый браузер, с узявимостью позволяющей запускать шелл код. Браузеры разрабатываются специально так чтобы ничего они не могли запустить. Кроме вручную скачанных файлов и ручного их запуска и с предупреждением и проверкой его антивирусом.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела