本帖最后由 独行客 于 2016-6-4 11:34 编辑
09 远程获取温度利用BMP085基于python ssh
接上篇 [BPI_M3] 【banana pi BPI-M3】08 BMP085温度气压传感器读写笔记
香蕉派我放在家里,这样我可以获取 家里的温度和气压了,但是平时在上班,怎么获取呢?
于是有了这篇
思路:
1、我烧的linux系统默认已经开启ssh服务,但是要远程连接到香蕉派,必须要端口映射,即外部网络访问SSH 端口22时自动转发到我的香蕉派,一般的路由都有这个功能;
2、保证家里的路由拨号获取的是外网ip而不是局域网Ip,否则端口映射也没用,只能打洞,这个不说了,我知道这么多,怎么分辨局域网IP和外网IP自行网络搜索;
3、有外网IP,有端口映射,但是我的外网IP每次重启或掉线拨号后都会变动,于是需要IP地址与域名绑定,即连接某个网站只需要输入网址即可,会自动找到对应IP并连接
于是有了花生壳做域名和IP地址的绑定,一般主流路由都内置了花生壳,去花生壳官网 注册后再路由登陆即可,具体的自行网络搜索
4、接下来就是重头戏,用python 脚本自动ssh 远程连接我的香蕉派并执行命令返回结果,代码在XP下面OK,在linux 也OK,需要安装某些模块 【paramiko】
网络搜索进去官网下载后,解压 ,在命令行 运行 下面安装命令即可
5、重头戏,上python脚本源码 【ssh-bpi远程登录获取bpi上家里的温度bmp085-paramiko.py】:
- #-*- coding: utf-8 -*-
- #!/usr/bin/python
- import paramiko
- import threading
- import time
- def ssh2(ip,username,passwd,cmd):
- try:
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect(ip,22,username,passwd,timeout=5)
- for m in cmd:
- stdin, stdout, stderr = ssh.exec_command(m)
- # stdin.write("Y") #简单交互,输入 ‘Y’
- out = stdout.readlines()
- #屏幕输出
- for o in out:
- print o,
- print '%s\tOK\n'%(ip)
- ssh.close()
- except :
- print '%s\tError\n'%(ip)
- import socket
- if __name__=='__main__':
- cmd = ['cal','echo hello!']#你要执行的命令列表
- print "Begin......"
- ip = '192.168.1.1'
- ip = '14.157.26.189'
- web='你的网址XXXX.gicp.net'
- try:
- web2ip=socket.getaddrinfo(web,None)#[0][4][0]
- except socket.herror, e:
- print e
- exit(0)#return
- print web2ip
- if web2ip[0][4][0] == '':
- ip='192.168.1.102'
- pass
- else:
- ip = web2ip[0][4][0]
- print 'get ip is ' + ip
- username='bpi'
- passwd='输入你的密码'
- #cmd='ls'
- #cmd = 'mv_bmp085
- cmd = ['mv_bmp085','uname']#['cal','echo hello!']
- ssh2(ip,username,passwd,cmd)
- time.sleep(4)
复制代码
脚本在XP下双击即可
上源码和 模块
paramiko-master.zip
ssh-bpi远程登录获取bpi上家里的温度bmp085-paramiko.zip
上一张效果图:
热死了,房间温度32度,昨天看到最高温度35度,还好晚上有空调~~~~~
|