Android Sterowanie Inteligentnym Domem eHouse poprzez Formularz z wybieraną Listą

Wysyłanie zdarzeń z oprogramowania Android – Wybór z listy

Artykuł ten opisuje sposób pisania oprogramowania dla paneli sterujących systemem eHouse pracujących na platformie ANDROID.

Mogą to być:

  • Tablety
  • Panele Mobilne
  • Telefony Komórkowe GSM
  • SmartPhone’y
  • TouchPhone’y
  • PDA
  • PalmTop’y
  • Telewizory – SMART TV
  • Tunery TV SAT
  • sprzęt Audio-Video
  • dowolny sprzęt z zainstalowanym systemem operacyjnym Android

 

Inteligentny Dom eHouse może być sterowany poprzez wybór urządzenia oraz zdarzenia z listy.

Zdarzenie jest automatycznie wysyłane (po naciśnięciu przycisku “Send”) po WiFi do systemu lub przez internet jeśli opcja połączenia internetowego jest uaktywniona.

Jeśli z jakichkolwiek powodów występuje brak komunikacji TCP/IP (WIFI, INTERNET (GSM,EDGE, 3G, 4G lub innej zależnej od typu panela sterującego ) Zdarzenie jest dodawane do kolejki, która może zostać przesłana manualnie do sterowników na 1 z dostępnych sposobów w systemie eHouse i możliwym do uzyskania w danym typie panela oraz zasięgu łączy komunikacyjnych i protokołów transmisji.

Do tego celu została stworzona klasa “RunEvent.class”, która wykorzystuje samodzielnie wszystkie operacje:

  • Wczytuje listę urządzeń (sterowników) i ich ustawienia wygenerowane z aplikacji eHouse.exe
  • Wczytuje listę zdarzeń dla każdego sterownika
  • Umożliwia dokonanie wyboru dowolnego zdarzenia z list do wysłania do systemu eHouse
  • Pozwala na przesłanie zdarzenia do sterownika po naciśnięciu przycisku “Send”

Wykorzystanie sterowania tą metodą nie wymaga utworzenia skomplikowanej wizualizacji i jest najprostszą metodą zdalnego sterowania inteligentnym domem eHouse.
Zrzuty ekranu formularza:
eHouse4Android - Inteligentny dom ehouse sterowanie z androida z formularza
Rozwinięcie list kalendarza i zdarzeń wielokrotnych.
eHouse4Android - Inteligentny dom ehouse sterowanie z androida z formularza kalendarz i zdarzenia wielokrotne

Rozwinięcie listy urządzeń (sterowników) –
z końcówką ” – E” zdarzenia zwykłe,
z końcówką ” – P” zdarzenia – programy,
bez suffix’u wszystkie zdarzenia

eHouse4Android - Inteligentny dom ehouse sterowanie z androida z formularza

Rozwinięcie listy zdarzeń dla sterownika zabezpieczeń CommManagera (Stref Ochrony i zabezpieczeń).

eHouse4Android - Inteligentny dom ehouse sterowanie z androida z formularza rozwinięcie listy zdarzeń (stref zabezpieczeń dla CommManagera)

Wysłanie zdarzeń przez WiFi, Internet (3G, GPRS, 4G, EDGE lub inne łącze w zależności od dostępności) po naciśnięciu przycisku
“Run Event” lub “Run Event And Hide”.
Opisy pobierane są z tekstowego pliku konfiguracyjnego aby można było tworzyć inne wersje językowe i własne indywidualne opisy.

eHouse4Android - Inteligentny dom ehouse sterowanie z androida z formularza

Użycie modułu wymaga tylko kilku linijek kodu źródłowego.

Przykładowy kod źródłowy umożliwiający sterowanie inteligentnym domem z paneli dotykowych, smartphonów, tabletów Android. Wykorzystuje także wizualizację, aby pokazać sposób jej integracji z formularzem sterującym


/* eHouse For ANDROID panels, tablets, PDAs, Smartphones template API for communication to the eHouse system
* ONLY FOR REGISTERED USERS, VENDORS, COOPERATIVES Copyright iSys.Pl All Rights Reserved
*
* Requires classes:
* !!!!!!     ehousecommunication.class :
*                          Sending Events to eHouse system via:
*                          SMS, eMail, WIFI, INTERNET, ETHERNET, TCPIP

* !!!!!!     EhouseTCP.class       :
*                          initiate TCP Communication for updating current status of devices
*                          Performing Query status from eHouse microcontrollers
*                          Assuring challange-response authorisation to the system and communication
*

* !!!!!!     StatusEhouse.class    :
*                            Organize classes of devices (names, actual status values etc)
*                            Fill up with actual values and data of eHouse1 controllers
*                             (RS485)

* !!!!!!     StatusCommManager.class :
*                            Organize classes of devices (names, actual status values etc)
*                            Fill up with actual values and data of Ethernet eHouse controllers
*                              (Ethernet)
*
*
* Szablon Aplikacji Sterującej (API) dla platformy ANDROID do komunikacji z systemem eHouse oraz Wizualizacji stanu systemu
* TYLKO Dla zarejestrowanych użytkowników systemu eHouse, Firm Współpracujących All Rights Reserved
*
* Wymaga class:
*
* !!!!!     ehousecommunication.class :
*                          Wysyła zdarzenia systemowe (komendy) do sterowników systemu eHouse przez:
*                          SMS, eMail, WIFI, INTERNET, ETHERNET, TCPIP
*
* !!!!!     EhouseTCP.class       :
*                          Inicjuje i utrzymuje komunikację TCP/IP ze sterownikami do aktualizacji stanu
*                          sterowników eHouse – wyjść, wejść pomiarowych eHouse
*                          Zapewnia autoryzację metodą challange-response do podłączenia się do systemu
*
* !!!!!     StatusEhouse.class    :
*                            Klasa zawiera wszystkie ustawienia oraz aktualne dane dla każdego sterownika eHouse
*                            do dalszego przetwarzania (nazwy, wartości, status) aktualizowane na bieżąco przez komunikację TCP/IP
*                            dla sterowników eHouse1 (RS485)
* !!!!!     StatusCommManager.class :
*                            Klasa zawiera wszystkie ustawienia oraz aktualne dane dla każdego sterownika eHouse
*                            do dalszego przetwarzania (nazwy, wartości, status) aktualizowane na bieżąco przez komunikację TCP/IP
*                            dla sterowników eHouse2 (Ethernet)
*

*   !!!!!!    RunEvent.class Wysyłanie zdarzeń do systemu z formularza umożliwiającego wybór urządzenia z listy oraz zdarzenienia oraz jego wysłanie po naciśnięciu przycisku przez WiFi, Internet lub dodanie do kolejki w przypadku braku połączenia ( Może być następnie wysłane manualnie przez SMS, email lub inne metody dostępne w systemie).

// Opcjonalnie wymaga klasy dla wizualizacji i sterowania graficznego
//
* !!!!!    visulization.class : klasa implementuje kompletną wizualizację graficzną w standardzie eHouse oraz sterowanie graficzne zgodne z formatem plików wejściowych ehouse
*      dla wizualizacji.
* Rysuje podstawowe krzywe (prostokąt, prostokąt zaokrąglony, elipsę, linię, text
* Uruchamia zdarzenia powiązane z obiektami graficznymi po ich naciśnięciu (przesyłanie po WiFi lub Internet dostępne łącze GSM lub inne).
* Wizualizacja jest automatycznie uaktualniany po każdorazowym odebraniu statusu sterowników.
* Moduł obsługuje gesty przesunięcie palcem – powoduje przesunięcie obrazu w określonych kierunkach gestem
* Przy ekranach multitouch obsługuje także skalowanie (powiększenie i pomniejszenie)
*
*
*/

package ehouse.android;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;
import java.util.Date;
import android.content.Context;
public class ehouseandroid extends Activity
{
public visualization vs;            //object for visualisation optional/ opcjonalny moduł dla wizualizacji wyremować jak nie używany
static boolean firsttime=true;        //first run flag

boolean TerminatedUpdates=false;
Date date;
Context context;
RunEvent RE=null;        //Formularz wysyłania zdarzeń do sterowników wybór z listy
////////////////////////////////////////////////////////////////////////////////
// Set Form to display
// Wybór formularza do wyświetlenia na ekranie Wizualizacja lub Formularz z listą zdarzeń
//
void SetView()
{
try
{
switch (ehousecommunication.CurrentForm)
{
case ehousecommunication.TEXT_EVENTS:           //wyświetla formularz z listą zdarzeń do przesłania
setContentView(RE.sv);break;
case ehousecommunication.VISUALIZATION:          //optional visualization, opcjonalna wizualizacja i sterowanie graficzne
setContentView(vs);break;
default: setContentView(RE.sv);break;
}

}
catch (Exception e)
{
MessageBox(e.getMessage());
}

}
////////////////////////////////////////////////////////////////////////////////
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (firsttime==true) ehousecommunication.init();
vs=new visualization(this,100,100,1);            //Instancja opcjonalnej wizualizacji i sterowania graficznego
RE=new RunEvent();
RE.Init(this);
if (firsttime==true)
{

/* Initate and setup Android Application from config files generated from eHouse.exe appliaction
*
* Inicjuje ustawienia aplikacji na platformę Android wygenerowane z aplikacji eHouse.exe
*/

/*
* Setup and Init List of Devices class containing:
* Names and Values digital input , adc inputs, outputs,
* {StatusEhouse for eHouse 1 devices, StatusCommManager for eHouse 2}
*
* Iniciuje urządzenia (Class) sterowników {Class StatusEhouse dla sterowników eHouse1, Class StatusCommManager dla sterowników eHouseTCPIP}
* Ustawia nazwy wyjść cyfrowych, wejść cyfrowych, wejść pomiarowych dla sterowników oraz zmienne statusu odbierane ze sterowników przez panele
*/

EhouseTCP.AllDevsStatus();
EhouseTCP.AllDevsTCPStatus();
EhouseTCP.ReadViewFile(ehousecommunication.currentview);    //Czyta plik dla wizualizacji (Opcjonalnie)
///Visualisation

/* Start infinite loop for reading query from eHouse controllers and putting to
* StatusEhouse and StatusCommManager Classes.
* Can be interrupted by EhouseTCP.TerminateQuery(); function
* Inicjuje pętlę nieskończoną pobierania danych bieżącego statusu (query) ze sterowników i
* ładowanie do class StatusEhouse i StatusCommManager
* Może zostać przerwane przez funkcje EhouseTCP.TerminateQuery()
*/

/*Query start*/

EhouseTCP.Query.start();

/*
* Terminate query eHouse controllers for information
*
* Przerwanie aktualizacji danych ze sterowników dla informacji jak to zrobić
*
*/
//EhouseTCP.TerminateQuery();

/*
*  Clear Event Queue do wysłania (after successful transmition via any metod) performed automatically
*
* Czyści kolejkę zdarzeń do wysłania (automatycznie usuwane są zdarzenia po przasłaniu dowolną metodą)
*
*/

//ehousecommunication.ClearEventQueue();

setTitle(“eHouse: “+ehousecommunication.currentview);       //wyświetla Tytuł aplikacji z nazwą widoku graficznego wizualizacji

}

else  //not first time
{
setTitle(“eHouse: “+ehousecommunication.currentview);       //wyświetla Tytuł aplikacji z nazwą widoku graficznego wizualizacji

//    EhouseTCP.UpdateVisualization();
//    EhouseTCP.UpdateViews();
//    vs.inav();
}

SetView();        //ustawia SetContextView dla wybranego ekranu
firsttime=false;    //wyłącza flagę pierwszego uruchomienia inicjalizacyjnego
}
///////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////
public void cap(String str)
{
setTitle(str);
}
////////////////////////////////////////////////////////////////////////////////
public void MessageBox(String message)
{
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
//////////////////////////////////////////////////////////////////////////

// Przykładowe Oprogramowanie przycisków hardwarowych telefonu komórkowego

@Override
public boolean onKeyDown(int keycode, KeyEvent event )
{
if(keycode == KeyEvent.KEYCODE_MENU)    //menu dostępne
{
MessageBox(“Menu”);
}
if (keycode==KeyEvent.KEYCODE_BACK)     //back dla smartphonów
{
MessageBox(“Back”);
}
if (keycode==KeyEvent.KEYCODE_HOME) //nadrzędny nie obsługuje
{
MessageBox (“Home”);
}
if (keycode==KeyEvent.KEYCODE_SEARCH)   //search krótki długi automatycznie obsługa wyszukiwarki
{
MessageBox(“Search”);
}
if (keycode==KeyEvent.KEYCODE_VOLUME_DOWN)
{                ///przełączenie wizualizacja / Formularz i inne do tyłu

if (ehousecommunication.CurrentForm<ehousecommunication.FORM_MAX) ehousecommunication.CurrentForm++;
else ehousecommunication.CurrentForm=1;
SetView();

}
if (keycode==KeyEvent.KEYCODE_VOLUME_UP)
{                //przełączenie wizualizacja /    Formularz i inne do przodu
if (ehousecommunication.CurrentForm>0) ehousecommunication.CurrentForm–;
else ehousecommunication.CurrentForm=ehousecommunication.FORM_MAX;
SetView();

}
return false;       //inaczej tracimy back z aplikacji i wychodzi
// super.onKeyDown(keycode,event);
}

}