Graficzna wizualizacja systemu Inteligentnego Domu eHouse rozszerza środowisko programistyczne dla tego systemu i stwarza możliwość samodzielnego tworzenia oprogramowania przez użytkowników końcowych systemu eHouse, firmy współpracujące oraz firmy zamierzające indywidualnie rozwijać system eHouse dla środowiska JSE (JAVA).
Środowisko Java dla eHouse (eHouse4Java) jest kompatybilne do bibliotek Android i Windows Mobile umożliwiając tworzenie własnego oprogramowania dla paneli sterujących i tablety. Biblioteka stanowi szablon aplikacji umożliwiający:
- wczytanie konfiguracji systemu, nazw sterowników, wyjść, wejść, czujników itd
- zapewniający komunikację ze sterownikami systemu
- odbiór i dekodowanie danych statusu sterowników
- wysyłanie komend sterujących graficznie (z obiektów wizualizacji) lub tekstowo (z pól wybieranych)
- sterowanie systemem przez WiFi, Internet, SMS, eMail
- wizualizację i sterowanie graficzne – wczytanie tekstowego pliku obiektów graficznych powiązanych ze zdarzeniami do wykonania (eventami systemu) oraz statusami urządzeń
- wizualizacje automatyczne dla danego sterownika (pomieszczenia)
Wizualizacja tworzona jest przy użyciu biblioteki java.swing za pomocą elementów typu jpanel, jbutton itd. Obiekty te są automatycznie „podwójnie buforowane”, dzięki czemu wyeliminowany jest efekt migotania, bardzo dokuczliwy dla użytkownika.
Użytkownik ma możliwość sterowania obrazem:
- przybliżanie i oddalanie
- przesuwanie w górę, w dół i na boki
- zmianę bieżącego widoku poprzez wybór „Options”
- powrót do graficznej wizualizacji systemu poprzez wybranie „View”
Przykład wizualizacji systemu eHouse:
Przybliżanie oraz oddalanie (powiększenie i pomniejszenie) zrealizowano z użyciem skalowalnej grafiki wektorowej (SVG), dzięki czemu obraz nie traci na jakości po zmianie skali:
Stany sterowników są automatycznie wyświetlane:
I aktualizowane przez sieć komputerową lub internet (TCP lub UDP) – online (w czasie rzeczywistym)
Poprzez wybór „Options” oraz pomieszczenia można oglądać stany sterowników oraz wybierać programy. Zmiana statusów przychodzących po UDP powoduje automatyczną rewizualizację:
Poza wizualizacją zaprojektowaną indywidualnie na podstawie projektu architektonicznego i instalacji inteligentnego domu istnieje także wizualizacja automatyczna tworzona niezależnie dla każdego sterownika w systemie (w szczególności dla RoomManagerów i EthernetRoomManager’ów – dla poszczególnych pomieszczeń). Pozwala to na wykorzystanie niezależnych paneli sterujących i wizualizujących dla każdego pomieszczenia indywidualnie, bez żmudnego tworzenia wizualizacji opartej na projekcie instalacji.
Dla CommManagera (stany czujek alarmowych, wyjść)
Dla RoomManager’ów i EthernetRoomManager’ów:
Dla sterownika kotłowni, rekuperacji CO (HeatManagera)
Więcej informacji można znaleźć w artykułach poświęconych bibliotekom programistycznym eHouse4Android (eHouse for Android – Java Android’a) które zostały przetłumaczone na Java SE dla kompatybilności i ułatwienia rozwoju oprogramowania na różne systemy operacyjne.
sterowanie domem z androida
KOD ŹRÓDŁOWY PROGRAMU
/*
* Szablon aplikacji do wizualizacji graficznej systemu inteligentnego domu eHouse
* TYLKO Dla zarejestrowanych użytkowników systemu eHouse, Firm Współpracujących All Rights Reserved
*
* Wymaga klas:
* ehousecommunication.class – wysyłanie zdarzeń do systemu
* EhouseTCP.class – inicjalizacja i utrzymanie komunikacji po TCP/IP ze sterownikami, aktualizacja danych z wejść i wyjść systemu
* StatusEhouse.class – przechowywanie danych i ustawień sterowników, aktualizowanych na bieżąco po TCP/IP dla sterowników ehouse1 (RS485)
* StatusCommManager.class – przechowywanie aktualnych danych i ustawień sterowników, aktualizowanych na bieżąco po TCP/IP dla sterowników ehouse2 (Ethernet)
* GraphicObject.class – przechowywanie danych obiektów graficznych
* visualization.class – rysowanie obiektów graficznych (lini, elips, prostokątów) i obsługa zdarzeń z nimi związanych
*
* Application template designed to graphic visualization of eHouse System
* ONLY FOR REGISTERED USERS, VENDORS, COOPERATIVES Copyright iSys.Pl All Rights Reserved
*
* Required classes:
* ehousecommunication.class – sending events to system
* EhouseTCP.class – initialization and maintenance TCP/IP communication with drivers, updating current status of drivers
* StatusEhouse.class – drivers’ settings and data storage, updating data (TCP/IP) for ehouse1 drivers (RS485)
* StatusCommManager.class – drivers’ settings and data storage, updating data (TCP/IP) for ehouse2 drivers (Ethernet)
* GraphicObject.class – graphic objects data storage
* visualization.class – drawing graphic objects (lines, ellipses, rectangles) and handling events related to them
*/
package ehouse4java;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Ehouse4java extends JFrame implements ActionListener,ChangeListener{
/**
* Klasa odpowiedzialna za inicjalizację statusów systemu oraz tworzenie
* okna głównego aplikacji. Implementuje interfejsy obsługujące zdarzenia
* powiązane z przyciskami.
*
* Class responsible for initializing status classes and creating
* the main application window. Implements interfaces that support events
* related to the buttons.
*/
/**
* Visualization object containing currently displayed view
*/
public visualization Visualization;
//public visualization Options;
//public visualization TextEvents;
/**
* Pallete of buttons supporting zooming, shifting and changing
* displayed view
*/
JButton ZoomPlusButton;
JButton ZoomMinusButton;
JButton LeftShiftButton;
JButton RightShiftButton;
JButton UpButton;
JButton DownButton;
JButton ExitB=null;
JButton Options;
JButton View;
JButton Back;
JButton[] ViewsB=new JButton[MAX_VIEWS_COUNT];
/**
* Panel with all buttons
*/
JPanel ZoomPanel;
/**
* Panel containing currently displayed visualization
*/
JPanel viewpanel;
/**
* Panel containing a group of buttons used to access drivers states,
* system schedules etc.
*/
JPanel optionspanel;
/**
* Oprional scrollpanes
*/
JScrollPane jsp1;
JScrollPane jsp2;
public static int buttonscounter;
public int CenterX;
public int CenterY;
public int prevCenterX;
public int prevCenterY;
public int Ycompensation;
int prevOffsetX = 0, prevOffsetY = 0;
double prevScaleX;
double prevScaleY;
public final double zoomfactor=0.3;
public static String previousoptionsview = „”;
/**
* Creates new form Ehouse4java. Initiates status classes and graphic
* components with main window.
*/
public Ehouse4java() {
super(„Ehouse”);
onCreate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/**
* Initiates all graphic components
*/
addComponentToPane(getContentPane());
setSize(400, 400);
setLocation(200,0);
setMinimumSize(new Dimension(200,200));
setVisible(true);
prevCenterX =(int) Visualization.getBounds().getCenterX();
prevCenterY =(int) Visualization.getBounds().getCenterY();
}
/**
* Initiates all graphic components such as panels, buttons, scrollbars etc.
*
* @param pane
*/
public void addComponentToPane(Container pane) {
optionfirsttime=true;
ExitB=new JButton(„Exit”);
ExitB.setActionCommand(„Exit”);
ExitB.addActionListener(this);
…
int indexView=0;
ZoomPanel = new JPanel(new FlowLayout());
viewpanel.add(ZoomPanel, BorderLayout.PAGE_END);
ZoomPlusButton = new JButton(„+”);
ZoomPlusButton.setActionCommand(„ZoomPlus”);
ZoomPlusButton.addActionListener(this);
ZoomPanel.add(ZoomPlusButton);
ZoomMinusButton = new JButton(„-„);
ZoomMinusButton.setActionCommand(„ZoomMinus”);
ZoomMinusButton.addActionListener(this);
ZoomPanel.add(ZoomMinusButton);
…
}
/**
* Initiates classes StatusCommManager and StatusEhouse by loading drivers’
* status
*/
public void onCreate(){…}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ehouse4java().setVisible(true);
}
});
}
/**
* Supports events invoked by clicking on button
*
* @param e
*/
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case „ZoomPlus”:
prevOffsetX = ehousecommunication.OffsetX;
prevOffsetY = ehousecommunication.OffsetY;
ehousecommunication.ScaleX*=(1+zoomfactor);//*100/zoomleve;
ehousecommunication.ScaleY*=(1+zoomfactor);//*100/zoomleve;
//Centering the view after rescalling
ehousecommunication.OffsetX+=(int)((Visualization.getBounds().getCenterX()+prevOffsetX)*zoomfactor);
ehousecommunication.OffsetY+=(int)((Visualization.getBounds().getCenterY()+prevOffsetY)*zoomfactor)+Ycompensation/(1/(2*zoomfactor));
EhouseTCP.ReadViewFile(ehousecommunication.currentview); //calculate zoom
Visualization.repaint();
return;
…
}
}
}