Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Результаты опроса: Если роутер прошит и настроен под Arduino, Вы купили бы его
Да 53 31.36%
Нет 24 14.20%
Куплю и сам настрою 92 54.44%
Голосовавшие: 169. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.10.2012, 22:59   #1
Sirocco
Senior Member
 
Регистрация: 12.10.2012
Адрес: Moscow-Voronezg
Сообщений: 272
Вес репутации: 0
Sirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant future
По умолчанию Вопрос по web программированию

Здравствуйте!
Введение:
Есть ардуино, есть изернет модуль. Управляю различными вещами. Управление построено так: На адрес изернет модуля ардуины http://192.168.1.7 шлю GET запрос с содержанием Bra=1, или Bra=0. Другими словами вбиваю в адресной строке браузера http://192.168.1.7/?Bra=1 и жму интер, бра загораются, если http://192.168.1.7/?Bra=0 - потушатся.
Есть сервер, поднят на роутере, поддерживается php. Хочу все странички с кнопками управления разместить на нём.
Вопрос:
Как сделать кнопку, или ссылку, чтобы нажав на неё улетел GET запрос (возможно и POST прокатит) на ардуино, но страница не перезагружалась. А ещё лучше, чтобы если нажать "обновить страницу, F5" то она бы просто обновилась без сообщения браузера "на странице используется введённая вами информация, обновление страници приведёт к повторной отсылке данных.... и т.д."
Пока сделал так:
PHP код:
<?php
include('simple_html_dom.php');
$html file_get_html('http://192.168.1.7');

if(isset(
$_POST['execute'])){
        
        
$sURI 'http://192.168.1.7/?'.$_POST['comand'];
        
file_get_contents($sURI);
        
header("Location: {$_SERVER['PHP_SELF']}");
}

$cont .= '<form method="POST">';
$cont .= '<input type="hidden" name="comand" value="Bra=1">';
$cont .= '<input type="submit" name="execute" value="Бра       ON">';
$cont .= '</form>';
$cont .= '<form method="POST">';
$cont .= '<input type="hidden" name="comand" value="Bra=0">';
$cont .= '<input type="submit" name="execute" value="Бра OFF">';
$cont .= '</form>';

echo 
$cont;

?>
Но это не то. Страница перезагружается, и заканчивает перезагрузку только тогда, когда ардуино отработает команду, а это бывает по долгу.
Наверняка в своих проектах этот вопрос как-то решали, подскажите выход, пожалста.
P.S. извините, что не в профильный форум, но в других не помогли. Не смогли понять зачем это всё надо.
Sirocco вне форума   Ответить с цитированием
Старый 12.10.2012, 23:32   #2
michael_s
Member
 
Регистрация: 28.09.2012
Сообщений: 52
Вес репутации: 0
michael_s is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Sirocco Посмотреть сообщение
Здравствуйте!
Введение:
Есть ардуино, есть изернет модуль. Управляю различными вещами. Управление построено так: На адрес изернет модуля ардуины http://192.168.1.7 шлю GET запрос с содержанием Bra=1, или Bra=0. Другими словами вбиваю в адресной строке браузера http://192.168.1.7/?Bra=1 и жму интер, бра загораются, если http://192.168.1.7/?Bra=0 - потушатся.
Есть сервер, поднят на роутере, поддерживается php. Хочу все странички с кнопками управления разместить на нём.
Вопрос:
Как сделать кнопку, или ссылку, чтобы нажав на неё улетел GET запрос (возможно и POST прокатит) на ардуино, но страница не перезагружалась. А ещё лучше, чтобы если нажать "обновить страницу, F5" то она бы просто обновилась без сообщения браузера "на странице используется введённая вами информация, обновление страници приведёт к повторной отсылке данных.... и т.д."
Пока сделал так:
PHP код:
<?php
include('simple_html_dom.php');
$html file_get_html('http://192.168.1.7');

if(isset(
$_POST['execute'])){
        
        
$sURI 'http://192.168.1.7/?'.$_POST['comand'];
        
file_get_contents($sURI);
        
header("Location: {$_SERVER['PHP_SELF']}");
}

$cont .= '<form method="POST">';
$cont .= '<input type="hidden" name="comand" value="Bra=1">';
$cont .= '<input type="submit" name="execute" value="Бра       ON">';
$cont .= '</form>';
$cont .= '<form method="POST">';
$cont .= '<input type="hidden" name="comand" value="Bra=0">';
$cont .= '<input type="submit" name="execute" value="Бра OFF">';
$cont .= '</form>';

echo 
$cont;

?>
Но это не то. Страница перезагружается, и заканчивает перезагрузку только тогда, когда ардуино отработает команду, а это бывает по долгу.
Наверняка в своих проектах этот вопрос как-то решали, подскажите выход, пожалста.
P.S. извините, что не в профильный форум, но в других не помогли. Не смогли понять зачем это всё надо.
Вам нужно пользоваь ajax.
Проще всего пользовать ajax из Jquery , почитайте тут http://codething.ru/ajax.php

Если не разберетесь , пишите , помогу.
michael_s вне форума   Ответить с цитированием
Старый 13.10.2012, 03:04   #3
Sirocco
Senior Member
 
Регистрация: 12.10.2012
Адрес: Moscow-Voronezg
Сообщений: 272
Вес репутации: 0
Sirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant future
По умолчанию Вопрос по web программированию

Цитата:
Сообщение от michael_s Посмотреть сообщение
Вам нужно пользоваь ajax.
Проще всего пользовать ajax из Jquery , почитайте тут http://codething.ru/ajax.php

Если не разберетесь , пишите , помогу.
Спасибо! Отличная ссылка! Не то, чтобы разобрался, что к чему, но работать заставил как нужно, наконец-то!
Вот так работает, но, чувствую, этот код можно оптимизировать ещё очень-очень не слабо. Был-бы рад, если подскажет кто.
PHP код:
<body>  
    <
form id="braON">  
    <
p align="center">  <input type="submit" value="100%">  </p>  
    </
form>
    
    <
form id="Night"
        <
p align="center"><input type="submit" value="25%"></p
    </
form
    
    <
form id="braOFF"
        <
p align="center"><input type="submit" value="Off"></p
    </
form>  
     
    <
script>  
        $(
document).ready(function(){          
            $(
'#braON').submit(function(){  
                $.
ajax({  
                    
type"POST",  
                    
url"http://192.168.1.7/?Bra=1",                      
                });  
                return 
false;  
            });              
        });  

        $(
document).ready(function(){          
            $(
'#Night').submit(function(){  
                $.
ajax({  
                    
type"POST",  
                    
url"http://192.168.1.7/?Night=1",                      
                });  
                return 
false;  
            });              
        }); 
        
        $(
document).ready(function(){          
            $(
'#braOFF').submit(function(){  
                $.
ajax({  
                    
type"POST",  
                    
url"http://192.168.1.7/?Bra=0",                       
                });  
                return 
false;  
            });              
        });
        
    
</script>  
      
</body> 
Тут три кнопки, отсылают команду на контроллер, а тот включает LED ленту на 100%, 10% или выкл.
Sirocco вне форума   Ответить с цитированием
Старый 13.10.2012, 21:36   #4
michael_s
Member
 
Регистрация: 28.09.2012
Сообщений: 52
Вес репутации: 0
michael_s is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Sirocco Посмотреть сообщение
Спасибо! Отличная ссылка! Не то, чтобы разобрался, что к чему, но работать заставил как нужно, наконец-то!
Вот так работает, но, чувствую, этот код можно оптимизировать ещё очень-очень не слабо. Был-бы рад, если подскажет кто.
PHP код:
<body>  
    <
form id="braON">  
    <
p align="center">  <input type="submit" value="100%">  </p>  
    </
form>
    
    <
form id="Night"
        <
p align="center"><input type="submit" value="25%"></p
    </
form
    
    <
form id="braOFF"
        <
p align="center"><input type="submit" value="Off"></p
    </
form>  
     
    <
script>  
        $(
document).ready(function(){          
            $(
'#braON').submit(function(){  
                $.
ajax({  
                    
type"POST",  
                    
url"http://192.168.1.7/?Bra=1",                      
                });  
                return 
false;  
            });              
        });  

        $(
document).ready(function(){          
            $(
'#Night').submit(function(){  
                $.
ajax({  
                    
type"POST",  
                    
url"http://192.168.1.7/?Night=1",                      
                });  
                return 
false;  
            });              
        }); 
        
        $(
document).ready(function(){          
            $(
'#braOFF').submit(function(){  
                $.
ajax({  
                    
type"POST",  
                    
url"http://192.168.1.7/?Bra=0",                       
                });  
                return 
false;  
            });              
        });
        
    
</script>  
      
</body> 
Тут три кнопки, отсылают команду на контроллер, а тот включает LED ленту на 100%, 10% или выкл.
Вот быстренько сделал для вас примерчик http://jsfiddle.net/tvsU3/1/
Не обязательно кстати делать кнопкой , можно ссылку или что угодно.

$(document).ready(function(){
достаточно один раз было написать и внутри уже все привязки делать . Это делается для того чтоб JS не пытался запуститься пока не построилось все дерево DOM.

Последний раз редактировалось michael_s; 13.10.2012 в 21:42.
michael_s вне форума   Ответить с цитированием
Старый 14.10.2012, 01:46   #5
Sirocco
Senior Member
 
Регистрация: 12.10.2012
Адрес: Moscow-Voronezg
Сообщений: 272
Вес репутации: 0
Sirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant future
Lightbulb Вопрос по web программированию

Цитата:
Сообщение от michael_s Посмотреть сообщение
Вот быстренько сделал для вас примерчик http://jsfiddle.net/tvsU3/1/
Спасибо!!!
Сделал так:
PHP код:
<script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){
    $(
'.braON').click(function(){  
    $.
ajax({  
            
type"POST",  
            
url"http://192.168.1.7/?Bra=1",                      
        });  
        return 
false;
    });              

    $(
'.Night').click(function(){  
    $.
ajax({  
            
type"POST",  
            
url"http://192.168.1.7/?Night=1",                      
        });  
        return 
false;
    }); 

    $(
'.braOFF').click(function(){  
    $.
ajax({  
            
type"POST",  
            
url"http://192.168.1.7/?Bra=0",                      
        });  
        return 
false;
    }); 

});
//]]>  

</script>
</head>
<body>
<button class="braON">100%</a> 
<button class="Night">10%</a> 
<button class="braOFF">OFF</a> 
</body> 
Теперь попробую заменить кнопки на что-то более симпатичное.
Но! Обнаружилась проблема! (Или фитча) Этот код не работает удалённо. Если я в локалке, то работает без проблем, если захожу из вне, то просто не срабатывает. Что может быть?
Sirocco вне форума   Ответить с цитированием
Старый 14.10.2012, 12:53   #6
michael_s
Member
 
Регистрация: 28.09.2012
Сообщений: 52
Вес репутации: 0
michael_s is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Sirocco Посмотреть сообщение
Спасибо!!!
Сделал так:
PHP код:
<script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){
    $(
'.braON').click(function(){  
    $.
ajax({  
            
type"POST",  
            
url"http://192.168.1.7/?Bra=1",                      
        });  
        return 
false;
    });              

    $(
'.Night').click(function(){  
    $.
ajax({  
            
type"POST",  
            
url"http://192.168.1.7/?Night=1",                      
        });  
        return 
false;
    }); 

    $(
'.braOFF').click(function(){  
    $.
ajax({  
            
type"POST",  
            
url"http://192.168.1.7/?Bra=0",                      
        });  
        return 
false;
    }); 

});
//]]>  

</script>
</head>
<body>
<button class="braON">100%</a> 
<button class="Night">10%</a> 
<button class="braOFF">OFF</a> 
</body> 
Теперь попробую заменить кнопки на что-то более симпатичное.
Но! Обнаружилась проблема! (Или фитча) Этот код не работает удалённо. Если я в локалке, то работает без проблем, если захожу из вне, то просто не срабатывает. Что может быть?
Попробуйте такой код.
Код:
<script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){
	$('.btnaction').click(function(){  
	value = $(this).attr('act');
	$.ajax({  
			type: "POST",  
			url: "http://192.168.1.7/?"+value,                      
		});  
		return false;
	});              

	

});//]]>  

</script>
</head>
<body>
<button class="btnaction" act="Bra=1">100%</a> 
<button class="btnaction" act="Night=1">10%</a> 
<button class="btnaction" act="Bra=0">OFF</a> 
</body>
А извне у вас не работает по понятным причинам ajax же работает со стороны клиента , соответственно тот кто запускает скрипт из интернета пытается сделать ajax запрос на 192.168 ... а его естественно не существует
michael_s вне форума   Ответить с цитированием
Старый 14.10.2012, 21:24   #7
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

Цитата:
Хм... хороший вопрос. Оказалось не монтируется только FAT32. Ext2 цепляется нормально. Что же еще надо для FAT? kmod-fs-vfat установил
Он тебе писал что не хватает аргументов.

mount -t vfat -o codepage=866,iocharset=utf8 /dev/sda1 /mnt

http://ru.wikipedia.org/wiki/Mount

А зачем вапще нужен фат???

Последний раз редактировалось stD; 14.10.2012 в 21:31.
stD вне форума   Ответить с цитированием
Старый 15.10.2012, 00:25   #8
Sirocco
Senior Member
 
Регистрация: 12.10.2012
Адрес: Moscow-Voronezg
Сообщений: 272
Вес репутации: 0
Sirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant futureSirocco has a brilliant future
По умолчанию

Цитата:
Сообщение от michael_s Посмотреть сообщение
А извне у вас не работает по понятным причинам ajax же работает со стороны клиента , соответственно тот кто запускает скрипт из интернета пытается сделать ajax запрос на 192.168 ... а его естественно не существует
С Вашим кодом гораздо оптимизированнее ))) Спасибо.
А касаемо ссылок - это плохо. Можно как-то вызывать php странички, с примерно таким кодом:?
PHP код:
<?PHP
header
("Location:http://192.168.1.7/?Bra=1");
?>
Ну чтобы сервером обрабатывалось, а не клиентом, чтоб клиент как бы не знал того адреса и команды. А то глобальные ссылки ставить как-то совсем не красиво. Прописать вместо адреса php страничку с данным кодом не прокатывает.

P.S. Метод отправлять так запрос плох... Вместе с этими кнопками передаётся видеопоток, и эти пост запросы, если из интернета отправлять, не доходят в 99%. То есть кнопки редко срабатывают. Если видео отключить, то почти всегда срабатывает. Какие есть выходы.
P.P.S. если кто зает как мне помочь, то можно продолжить тему на каком-нибудь профильном форуме.

Последний раз редактировалось Sirocco; 15.10.2012 в 10:04.
Sirocco вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 11 (пользователей: 0 , гостей: 11)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 03:10. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика