LABA 120 - самодельный Веб сервер на телефоне под Андроид
проект для мит апп инвентор 2
Вот оно и случилось, этот энтузиаст
-Juan Antonio Villalpando KIO4.COM сделал компонент для апп инвертор,
"MIt App Inventor 2"
если быть точным, или аналогичной среды Thunkable
Эти обе среды на данный момент работают одинаково
отличия только в графическом оформлении, проект из одной среды
запросто открывается в другой
- Группа этого проекта Вконтакте
- Коментарии
- Открывающее Бла-Бла-Бла
- Описание
- Скачать проект для мит апп инвентор 2
c помощью этого чуда можно легко реализовать веб сервер на андроид девайсе.
Конечно имеются легкие недостатки, но в целом для организации
удаленной обработки данных достаточно. Хотя бы программная реализация
всего сайта
Вид на экране телефона
Вид В браузере на мониторе компа
Для примера выводить будем информацию о состоянии
батареи устройства и параметры сотовой сети
как то код оператора ID сотовой вышки и номер позиции сотовой ячейки
так как апп инвертор "MIt App Inventor 2" напрямую не поддерживает
эти операции в проекте используются расширения от сторонних разработчиков
App Inventor Thunkable Extensions
com.KIO4_SimpleWebServer.aix
com.puravidaapps.TaifunTM.aix
com.puravidaapps.TaifunBattery.aix
ни чего секретного, они бесплатны и легко скачиваются
компонент веб сервера SimpleWebServer.aix прост как
ситцевые трусы, может транслировать в сеть сайт из файла расположенного
на флешке, или из текстовой переменной.
мне не удалось прикрутить картинку тегом
< img src="/ws.png" > ни так <img src="/sdcard/ws.png" >
и таблицу стилей
< link rel='stylesheet' type="text/css" href='/user.css' >
хотя стили можно задать непосредственно в тегах сайта
а вот с картинками - печалька (на самом деле проблема давно решена **)
<a href='/sdcard/ws.png'> Скачать ws.png </a>
<a href='/sdcard/main.htm'> На главную </a>
так же не удалась попытка, перейти на другую страницу, и скачать по ссылке файл
ну да ладно, и без картинок тема достаточно грандиозная
Наверно для многих не секрет что на телефонах имеется
несколько сетевых устройств. Это сама сотовая сеть
и WiFi. Если сотовая сеть находится в мировой паутине
без посредников. То WiFi обращается туда через -
* точку доступа
* маршрутизатор
* роутер
(нужное подчеркнуть)
Такое построение сети имеет некоторые ограничения
И если точка доступа не ваша, а типа общественная,
то ограничения эти труднопреодолимые, есть конечно методы
Можно поломать или договориться.
В своем роутере понадобиться настроить проброску портов
Настройка портоа на ASUS
Trigger Port - это когда внешний запрос может пройти
на устройство в сети с указанным ип IP
эта тема избитая, наверно нет смысла переписывать из
других источников
У этой красоты есть еще один момент, В мировой паутине,
ИП "IP" много - красивых, и разных. Так который из них нужный?
Для точки доступа, можно заказать у провайдера статичный ип
который не будет меняться никогда. За это возьмут несколько денег
Для мобильного интернета такая услуга тоже предоставляется операторами.
Вот только что нашел
Настройка статического IP-адреса на МТС
Плата за активацию: 100 рублей;
Абонентская плата: 5 рублей в ежедневном формате;
Плата за отключение опции: отсутствует.
прогресс на лицо цены смехотворные
Для тех парней, которым важнее не цена а принципы
Есть вариант использование бесплатного (на момент написания)
сервиса Dynamic DNS на http://dnsip.ru/
Регистрация проста, сами разберетесь
В результате получите доменной имя типа такого - "ваше название".hldns.ru
Тогда ваш андроид сайт - http://"ваше название".hldns.ru:8080
порт 8080 это для обращения к устройству которое работает в сети через ГПРС "GPRS"
или "3G" - кому как нравится.
При работе через Wifi и точку доступа, для внешних обращений
порт будет - какой настроите, внутри домашней сети,
все тот же 8080, пока не известно как это изменить.
Теперь, по этому доменному имени можно обращаться с любого девайса из
любой точки мира!
После смены IP в сети, а это случается -
* после перезагрузки роутера
* при перемещении телефона от вышки к вышке
* Просто время от времени
Новый IP необходимо передать на сервис http://dnsip.ru/
Обновление доменного имени займет несколько минут.
Что вероятно для GPRS существенное препятствие,
ибо там IP меняется при перемещении аппарата весьма часто.
В зависимости от модели на телефона
поведение программы в фоновом режиме может быть разным
На Алкател (alkatel) 4034D, после погашения экрана
и ухода аппарата в спячку веб сайт не перестает работать
но скорость его работы снижается, не удобно но не смертельно
Уход в спячку можно предотвратить выставив в настройках телефона
- не выключать экран, при подключенной зарядке.
на других аппаратах смотрите сами, отчет о проведенных тестах
приветствуется
Описание блоков программы
01На верх
Здесь объявляются глобальные переменные
текстовая переменная Text - похоже это в данном проекте не используется
текстовая переменная Meta - здесь теги Мета и неизменяемая часть нашего сайта
======================================
< html> <head >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Refresh" content="5">
<style type="text/css">
.d {border:1px solid #0F0025; }
.d1 { font-size: 105%; color: red ;}
.d2 { color: blue ;}
</style>
<title> LABA 120 - Новые горизонты < /title>
</head> <body> <br> <img src="/ws.png" alt='КАРТИНКА' title='четонету'>
<br>
<h1> Новые горизонты №1 </h1> <br>
</b>
======================================
числовая переменная
refresh_ip - счетчик времени для обновления внешнего IP
ибо, чаще чем раз в 5 минут там делать нечего
текстовая переменная body - сюда блоком JOIN собирается весь сайт
который передается веб серверу для отправки
**********************************************
02
Обработчик when Screen1.initialize
срабатывает при запуске приложения на Андроид девайсе
в нем:
KIO4_SimpleWebserver1.ServeText присваиваться переменная
в которой содержится весь сайт
метка l_ip.text методом KIO4_SimpleWebserver1.GetIp
получает значение внутреннего IP если выход в интернет происходит через WiFi и
точку доступа
При коннекте через GPRS или 3G, тут будет
IP внешней сети
В компонент Таймер устанавливаются параметры
Clock1.TimerAlwaysFires - True дословно
Таймер Всегда Срабатывает, вероятно всегда, но бля по разному
Clock1.TimerEnable = True, а что же еще?
Clock1.TimerInterval = 5000 , это пять секунд
в метку l_cnt.text блоком TinyDB1.GetValue
считывается из базы приложения, значение счетчика
которое записывается туда при нажатии кнопки STOP
для чего? да просто так
**********************************************
03
процедура OUT_IP
в label - l_staus.text заносится информация о том
что кнопка была нажата
свойству Url компонент Web1 - присваивается адрес
на Бесплатный сервис DDNS hldns.ru
метод Web1.Get - выполняет запрос
При запросе специальной ссылки обновления система автоматически обновит на нашем
http://hldns.ru/update/"ваш ключ"
сервере Ваш ip-адрес и максимум в течении 5 минут он станет доступен по имени.
Обработчик when Web1.GotText
срабатывает когда компонент Web1
получает ответ и заносит в метки
l_out_ip.Text - ваш внешний IP
l_sattus.Text - код ответа сервера
****************************
04
Обработчик when TaifunBattery1 BatteryChanged
проверяет изменения в состоянии батареи устройства
и заносит в шесть штук label
соответствующие значения
status, plugged, level, health, temperature, voltage
состояние, подключение, уровень, здоровье, температура, напряжение
особенно про здоровье клево сказано
ну и наконец вызывается процедура SAVE
************************
05
Обработчик when Clock1.Timer
срабатывает каждые 5 секунд, помните настройки таймера?
и вызывает процедуру NET в которой с помощью подключаемого компонента
(App Inventor Thunkable Extensions ) TaifunTM1 снимается информация о
состоянии сотовой сети у самого компонента TaifunTM1 функций много, в данном проекте
используется только три из них
в метку
ll1.text = заносится TaifunTM1.CellID, - ID сотовой вышки
ll2.text = заносится TaifunTM1.Lac - Значение сотовой позиции
ll3.text = заносится TaifunTM1.NetworkOperator - Информация о сотовом операторе
По этим трем параметрам, применив некоторые действия,
можно узнать местоположение сотового телефона.
Точность определения положения, зависит от местности.
В большом городе точность будет выше, а вот на
колхозном поле в Сибири + - гектар
в метки
ll4.text - текущая дата
ll5.text - текущее время
это для того, чтобы не путаться, к какому периоду относятся
полученные данные
************************
06
Есть большая картинка
и напоследок самое сладкое, процедура SAVE
которая по таймеру выполняется каждые 5 секунд
в начале текстовая метка l_cnt в ней путем несложных математических операций
происходит инкремент числового
значения, это просто счетчик вызовов процедуры SAVE
и служит для того чтобы определить, а не повис наш
веб сервер, в месте с телефоном?
затем увеличивается глобальна переменная REFRESH_IP
которая отмеряет положенные пять минут для обновления
IP на DynDns сервисе процедурой OUT_IP она описана выше
далее в глобальной переменной BODY, конструкцией из блоков
JOIN собирается тело всего сайта.
Верхняя часть из переменной META
затем передаваемая телеметрия вперемежку с тегами HTML
разметки, и закрывающие теги по концовке
затем вся эта красота передается компоненту веб сервера
(App Inventor Thunkable Extensions )
KIO4_SimpleWebserver1.ServeText.text
автор этого расширения вероятно испанец, так что
встречается этот компонент и с названиями на испанском
пока не удалось, передать с веб сервера на телефоне с андроид
картинку через тег <img src="/ws.png" >
то есть с флешь аппарата, но есть возможность прописать путь к сетевой картинке,
< img src="http://aeha.narod.ru/ws.png" >
если уж без иллюстраций ни как не обойтись.
Естественно все чудеса которые творит на сайте разметка
HTML должна передаваться без проблем, JS JavaScript
также, ибо все это выполняется в браузере, и к веб серверу
отношение имеет слабое
пока получилось вот такое приложение , практически готовое
можно использовать для мониторинга, температуры жд или авторефрижератора , с
указанием его текущего местоположения
Про проблему с картинками
Есть такой Extension SimpleBase64.aixНа верх