diy家庭wifi局域网手机监控

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

# coding: utf8
###############################################################################
#      Author: gaohaibo
#       Email: gaohb@live.cn
#    Datetime: 2015-04-15 08:29:41 Wednesday
#     Version: 0.2
# Description: 网络接入点处理
###############################################################################
import sys
try:
    # http://discussion.forum.nokia.com/forum/showthread.php?p=575213
    # Try to import 'btsocket' as 'socket' (just for 1.9.x and up)
    # 对于版本>=PythonForS60_1.9.x的pys60需要这样用,只是import btsocket是不行的
    sys.modules['socket'] = __import__('btsocket')
except ImportError:
    pass
import socket
import appuifw
APID_SETTING_FILE = 'c:\\data\\python\\apid.txt'

def set_accesspoint():
    """
        设置网络接入点,并把接入点id号保存到文本文件中,便于后续程序读取该配置文件.
        使用:
            在程序初始时,执行set_accesspoint(),手机便会弹出网络接入点选择框.
    """
    apid = socket.select_access_point()         #弹出手机的接入点选择菜单
    f = open(APID_SETTING_FILE,'w')  #打开文件
    f.write(repr(apid))                         #将所选的接入点id号写进文件
    f.close()
    appuifw.note(u"Saved default access point.", "info")    #手机信息提醒框
    apo = socket.access_point(apid)         #通过接入点id号获取接入点完整信息
    socket.set_default_access_point(apo)    #设置默认接入点

def unset_accesspoint():
    """清除自定义接入点,设为None."""
    f = open(APID_SETTING_FILE,'w')
    f.write(repr(None))     #设接入点id号为None
    f.close()
    appuifw.note(u"Default access point is unset.", "info")

def read_accesspoint():
    """
        读取网络接入点配置文件,如此当手机无网络链接时间较长是,
        便不会再此弹出网络接入点的选择框,正所谓一次配置,自动执行.
        使用:
            在程序要执行联网操作前,执行read_accesspoint(),便读取配置并直接联网.
    """
    try:
        f=open(APID_SETTING_FILE,'rb')
        setting = f.read()      #读取接入点文件
        apid = eval(setting)    #执行
        f.close()
        if not apid == None :   #是否为None,即检测是否设置了自定义接入点
            apo = socket.access_point(apid)
            socket.set_default_access_point(apo)
        else:
            set_accesspoint()
    except:
        set_accesspoint()


###############################################################################
#      使用TCP协议发送图片数据
###############################################################################
import socket

HOST = '192.168.1.110'    # The remote host
PORT = 12008              # The same port as used by the server
def set_host_and_port():
    '''设置服务端IP和端口,端口到时有默认可选,存入host_ip.cfg文件中.'''
    pass

def send_data(data):
    '''use tcp send image base64 code'''
    try:
        sock_clt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock_clt.connect((HOST, PORT))
        sock_clt.send(data)
    finally:
        sock_clt.close()

###############################################################################
#      手机使用camera.viewfinder(cb,size),在cb中执行监控代码.
###############################################################################
#Using the viewfinder
import camera, e32, appuifw
import base64
import time

def quit():
    '''
        程序退出时,停掉finder,释放摄像头and发信号给Ao_lock
    '''
    camera.stop_finder()    #Close the viewfinder
    camera.release()        #Release the camera so other applications may use it
    app_lock.signal()

IMG_PATH = 'c:\\data\\python\\photo.jpg'   # 照片缓存完整路径
def set_img_path():
    '''程序首次运行时设置缓存完整路径,存入img_path.cfg文件中'''
    pass


def v_finder(im):
    '''
        Define a function for the viewfinder
    '''
    try:
        if im:
            canvas.blit(im)
        # 以下代码若能优化下最好,目前是先保存为图片,再打开读取此图片.
        # start_time = time.time()
        im.text((0,20),unicode(time.strftime("%Y/%m/%d    %H:%M:%S")),fill=0xffff00)
        im.save(IMG_PATH)  # 这里最好try下,如果异常则弹出框重新设置照片缓存路径(set_img_path)
        # print "time on save: %s" % (time.time() - start_time)
        try:
            # start_time1 = time.time()
            imgfile = open(IMG_PATH,'rb')                      # open whit byte
            # print "time on open: %s" % (time.time() - start_time1)
            # print "total time: %s" % (time.time() - start_time)
            image_buffer = base64.b64encode(imgfile.read())    # read and to base64 code
        finally:
            imgfile.close()
        send_data(image_buffer)         # socket发送image buffer
    except:
        # quit()
        pass

appuifw.app.title = u"Camera Monitor"
appuifw.app.exit_key_handler = quit             # 将"退出"键触发事件绑到def quit()上
appuifw.app.body = canvas = appuifw.Canvas()    # 初始化一个画布


read_accesspoint()      # 设置网络接入点
camera.start_finder(v_finder, size=camera.image_sizes()[-1])

app_lock=e32.Ao_lock()
app_lock.wait()