Φτιάχνοντας ένα Έξυπνο Σπίτι, και έλεγχος από το Android (μέρος 12ο)

android smart home

Έχοντας κάνει το Android tablet μας να .. φτιάχνει καφέ, φτάνουμε στο 12ο μέρος της κατασκευής του Android Smart Home.

Σήμερα λοιπόν, θα δούμε πώς μπορούμε να προσθέσουμε κάμερα ασφαλείας στο έξυπνο σπίτι μας, από την οποία θα παίρνουμε εικόνα στην Android εφαρμογή μας, την οποία θα παραμετροποιήσουμε αναλόγως!

Κάμερα ασφαλείας και η Android εφαρμογή μας

Μία καλή λύση για κάμερα ασφαλείας στο σπίτι μας, την οποία θα μπορούμε να την ελέγξουμε από το Android, είναι μία IP Camera. Οι ενσύρματες λύσεις (που συνδέονται με καλώδιο ethernet στο router) αρχίζουν από 20 ευρώ, ενώ οι ασύρματες ξεκινάνε από τα 50.

Παρ' όλα αυτά, εμείς, μιας και είχαμε παλιές Android συσκευές παρατημένες σε αχρηστία, είπαμε να τις χρησιμοποιήσουμε αυτές για IP Cameras! Γενικότερα με τις Android συσκευές να ξεκινάνε από λιγότερα από 70 ευρώ, είναι μία "καλή" λύση για αυτή την χρήση!

Ορίστε τι θα καταφέρουμε:

  • android-smart-home-camera-1
  • android-smart-home-camera-2

 

Χρησιμοποιώντας Android συσκευές ως Security Cameras

Κατεβάζουμε στην (παλιά) Android συσκευή μας την εφαρμογή IP Webcam, και ξεκινάμε τον Server, όπου σημειώνουμε την IP στην οποία τρέχει.

Download IP Webcam

  • android-ip-webcam

Στην συνέχεια τοποθετούμε την συσκευή σε "κρυφό" σημείο, στο οποίο όμως να υπάρχει και τροφοδοσία.

 

Παραμετροποιούμε την δική μας Android εφαρμογή

Την Android εφαρμογή που έχουμε φτιάξει, αρκεί να την παραμετροποιήσουμε με τέτοιο τρόπο ώστε το WebView να "βλέπει" στις IP που τρέχουν οι Servers.

Επ' ευκαιρία, μιας και μπορεί να έχουμε περισσότερες από μία ip cameras, θα δώσουμε στην εφαρμογή την δυνατότητα να τις "βλέπει" όλες.

Ο πιο εύκολος τρόπος είναι μέσω του ίδιου του WebView και του jquery mobile να εμφανίσουμε την λίστα με τις επιλογές. Πιο συγκεκριμένα θα αλλάξουμε την java μας ώστε να βλέπει μέσα στα assets:

package com.sql.greekapp;

import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.sql.greekapp.R;

public class GreekNewsActivity extends Activity {
	WebView webview;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);    
        getWindow().setFeatureInt(	Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
        webview = (WebView) findViewById(R.id.web_engine); 
        webview.setWebViewClient(new HelloWebViewClient());
        webview.getSettings().setJavaScriptEnabled(true); 
        webview.getSettings().setPluginsEnabled(true);  //depriciated
        if (Integer.parseInt(Build.VERSION.SDK) >= Build.VERSION_CODES.FROYO)
        	webview.getSettings().setPluginState(WebSettings.PluginState.ON); 
        webview.getSettings().setAllowFileAccess(true);        
        webview.getSettings().setBuiltInZoomControls(true); //multitouch an ipostirizetai        
        webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);      
        //webview.loadUrl("http://google.com"); //gia debug
	webview.loadUrl("file:///android_asset/content/a.html"); //update na vlepei sta assets
      
       final Activity MyActivity = this;
	   webview.setWebChromeClient(new WebChromeClient() {
       public void onProgressChanged(WebView view, int progress)   
       {
       	//Na svisw tin mpara afou fortwsei to url
       	MyActivity.setTitle("Φόρτωση...");
       	MyActivity.setProgress(progress * 100); //svisimo

       	// Kai na emfanisw to app name
           if(progress == 100)
           	MyActivity.setTitle(R.string.app_name);
         }
       });   
    }

    //Na krataw ta clicks within the app
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {        	 
                return false;            
        }    
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }    
}

 

Τα assets που χρησιμοποιήσαμε σας τα δίνουμε εδώ, κατεβάστε τα και αντικαταστήστε τα στο project σας.

Download Smart Home App Assets

Αυτά περιλαμβάνουν όλες τις εικόνες, αλλά και τις στατικές λίστες/μενού της εφαρμογής μας, η οποία θα γίνει ως εξής:

Βεβαιωθείτε ότι θα αλλάξετε μέσα στα assets την/τις IP στην οποία τρέχουν οι Servers από τις IP Cameras, εμείς έχουμε βάλει τα δικά μας, αλλά αλλάζουν από δίκτυο σε δίκτυο.

  • assets-code

Η εφαρμογή μας θα γίνει πλέον ως εξής:

  • ip-camera-android-app-1
  • ip-camera-android-app-2

Επιλέγοντας μία από αυτές τις κάμερες, εμφανίζουμε το live feed τους στην εφαρμογή μας! Για πρόσβαση όταν είμαστε εκτός σπιτιού απαιτείται να κάνουμε port forwaring. Αν έχουμε δυναμική IP απαιτείται και να χρησιμοποιήσουμε DynDNS στο router.

  • android-smart-home-camera-1
  • android-smart-home-camera-2

 

Κάντε Like το GreeceAndroid.gr στο Facebook!

Γίνετε μέλος της Ελληνική Κοινότητας του Android στο G+

aByte