LABA 120 - Поднимаем самодельный Веб сервер на телефоне под Андроид

LABA 120 - самодельный Веб сервер на телефоне под Андроид

проект для мит апп инвентор 2



Вот оно и случилось, этот энтузиаст
-Juan Antonio Villalpando KIO4.COM сделал компонент для апп инвертор,
"MIt App Inventor 2"

если быть точным, или аналогичной среды Thunkable



Эти обе среды на данный момент работают одинаково
отличия только в графическом оформлении, проект из одной среды
запросто открывается в другой
  1. Группа этого проекта Вконтакте
  2. Коментарии
  3. Открывающее Бла-Бла-Бла
  4. Описание
  5. Скачать проект для мит апп инвентор 2

c помощью этого чуда можно легко реализовать веб сервер на андроид девайсе.
Конечно имеются легкие недостатки, но в целом для организации
удаленной обработки данных достаточно. Хотя бы программная реализация
всего сайта
 веб сервер +на андроид -  http://aeha.narod.ru/appinv/webserver/
Вид на экране телефона

домашний веб сервер -  http://aeha.narod.ru/appinv/webserver/
Вид В браузере на мониторе компа

Для примера выводить будем информацию о состоянии
батареи устройства и параметры сотовой сети
как то код оператора ID сотовой вышки и номер позиции сотовой ячейки

так как апп инвертор "MIt App Inventor 2" напрямую не поддерживает
эти операции в проекте используются расширения от сторонних разработчиков

App Inventor Thunkable Extensions

com.KIO4_SimpleWebServer.aix
com.puravidaapps.TaifunTM.aix
com.puravidaapps.TaifunBattery.aix


ни чего секретного, они бесплатны и легко скачиваются

web app server -  http://aeha.narod.ru/appinv/webserver/

компонент веб сервера 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 обращается туда через -

* точку доступа
* маршрутизатор
* роутер

(нужное подчеркнуть)

Такое построение сети имеет некоторые ограничения
И если точка доступа не ваша, а типа общественная,
то ограничения эти труднопреодолимые, есть конечно методы
Можно поломать или договориться.

В своем роутере понадобиться настроить проброску портов
app inventor 2	-  http://aeha.narod.ru/appinv/webserver/
Настройка портоа на 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
mit app inventor 2 -  http://aeha.narod.ru/appinv/webserver/
На верх
Здесь объявляются глобальные переменные
текстовая переменная 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
app inventor 2 +на русском -  http://aeha.narod.ru/appinv/webserver/

Обработчик 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
app inventor 2 скачать	-  http://aeha.narod.ru/appinv/webserver/


процедура 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
app inventor 2 уроки -  http://aeha.narod.ru/appinv/webserver/

Обработчик when TaifunBattery1 BatteryChanged
проверяет изменения в состоянии батареи устройства

и заносит в шесть штук label
соответствующие значения

status, plugged, level, health, temperature, voltage
состояние, подключение, уровень, здоровье, температура, напряжение

особенно про здоровье клево сказано

ну и наконец вызывается процедура SAVE

************************
05
thunkable -  http://aeha.narod.ru/appinv/webserver/

Обработчик 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
Есть большая картинка
веб сервер +на андроид -  http://aeha.narod.ru/appinv/webserver/

и напоследок самое сладкое, процедура 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

На верх

СКАЧАТЬ

Вопросы можно задать

Сообщество в контакте

проект для мит апп инвентор 2 исходник WebServerBat.aia

WebServerBat.aia

Скачать WebServerBat.apk

WebServerBat.apk