0 前言
本文通过python文件IO操作获得树莓派CPU温度信息,通过python request库周期性向yeelink平台上传温度,修改rc.local脚本使得该python脚本在开机时便在后台运行,向平台每5分钟上报一次温度信息。
网上查阅了很多关于linux开机启动的博文,尝试了几遍居然发现方法都无法实现开机启动效果。我想可能是操作系统或开发环境的微小差异产生的,如果发现博文中的内容存在问题,请及时留言,我查证之后定当修改。
    【相关博文】
【 树莓派学习笔记——获取树莓派CPU温度】
【 树莓派学习笔记——索引博文】——更多博文请关注。
1 修改python脚本
修改【树莓派学习笔记——获取树莓派CPU温度】一文中的python脚本,由单次运行变为间隔运行,间隔时间为5分钟。由于该脚本将在后台运行,所以每次上传CPU温度参数之后,把温度参数写到同目录中的txt文件中,验证该脚本是否在成功运行,上传的参数是否正常等(yeelink平台没有列表功能,所有历史数据查看比较麻烦)
    【python脚本】
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import timedef main():fileRecord = open("result.txt", "w")fileRecord.write("connect to yeelink\n");fileRecord.close()while True:# 打开文件file = open("/sys/class/thermal/thermal_zone0/temp")# 读取结果,并转换为浮点数temp = float(file.read()) / 1000# 关闭文件file.close()# 设备URIapiurl = 'http://api.yeelink.net/v1.1/device/1949/sensor/2510/datapoints'# 用户密码, 指定上传编码为JSON格式apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec59fa3', 'content-type': 'application/json'}# 字典类型数据,在post过程中被json.dumps转换为JSON格式字符串 {"value": 48.123}payload = {'value': temp}#发送请求r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))# 向控制台打印结果fileRecord = open("result.txt", "a")strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))fileRecord.writelines(strTime + "\n")strTemp = "temp : %.1f" %temp + "\n"fileRecord.writelines(strTemp)fileRecord.writelines(str(r.status_code) + "\n")fileRecord.close()time.sleep(5*60)if __name__ == '__main__':main()

2 开机启动——增加脚本
    【auto-start.sh】
#!/bin/bash 
cd /home/pi/python-works/yeelink-temp 
python yeelink-temp.py &     
    【提醒】
【1】&表示脚本后台运行
【2】sudo chmod a+x auto-start.sh
3 开机启动——修改/etc/rc.local
在exit 0之前增加一行,内容为/home/pi/path/to/auto-start.sh start,请修改为auto-start.sh所在目录。修改之后的rc.local内容如下:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; thenprintf "My IP address is %s\n" "$_IP"
fi# 向yeelink上传树莓派CPU温度
/home/pi/python-works/yeelink-temp/auto-start.sh startexit 0
    【必要的验证】
可通过ps指令查看该脚本是否在后台运行,保证万无一失。
ps aux | grep yeelink-temp.py
图1 ps aux执行返回结果
请注意返回结果中还包括grep过滤指令,yeelink-temp.py的PID为2836。
    【可能的后悔】
如果发现调试存在问题可通过kill指令终止进程,此时yeelink-temp.py的进程PID为2836
kill -s 9 2836
4 运行结果
    【平台查看】
图2 平台查看
    【本地查看】
本地记录被保存到result.txt文件中。在15分钟的时间内关闭了空调,室内温度快速升高,而树莓派的CPU温度由42.2上升到47.1度。
图3 本地查看
5 总结和参考资料
【1】修改rc.local可使linux在开机之后自动执行用户程序。
【2】当关闭房间空调之后,树莓派CPU温度从42.2度上升至47.1度,符合实际预期,说明实验成功了。
【3】再做一个保存温度到数据库的例子,再做一个RESTFul API读取温度历史数据的例子。
    【吐槽】
yeelink平台对于历史数据的处理存在一些问题的。我本以为可以通过API把传感器的历史数据获得,并可设定查询时间,阅读了yeelink平台的文档我居然发现并没有此功能。在yeelink的用户中心中,我打开的网页调试工具,发现网页调用的API为sensor-data?sensor_id=2510&timescale=3600
返回的数据为两个数组,一个代表数据点,一个为UNIX时间戳。从API和返回数据的格式上看并没有追求RESTFul结构,不知道是不是开发人员换了,所以风格变化了。
    【参考资料】
【1】 树莓派 插电自动登录、自动运行程序
【1】 理解Linux系统/etc/init.d目录和/etc/rc.local脚本——CSDN博客
【2】 linux下杀死进程(kill)的N种方法 ——CSDN博客

树莓派学习笔记——定时向yeelink上传树莓派CPU温度相关推荐

  1. 【信安学习笔记三】文件上传

    个人学习参考用笔记 目录 前言 一.文件上传 **定义** **危害** **查找及判断** **分类** 二.验证与绕过 前端防护 后端防护 (一)黑名单 (二)白名单 (三)内容及其他 三.漏洞 ...

  2. android学习笔记---32_文件断点上传器,解决多用户并发,以及自定义协议,注意协议中的漏洞

    32_文件断点上传器 --------------------------- 1.当文件很大的时候就无法通过http协议进行上传了,因为get,post的安全原因,很多服 务器会   禁止这些协议,而 ...

  3. extjs4 学习笔记------表单数据上传

    extjs 表单数据上传 js代码 Ext.onReady(function(ite) {// 所有的操作定义在函数showform中var showform = function() {var ad ...

  4. 学习笔记二:OSS上传视频截帧

    简介 这章主要是上传视频截帧,公司需求对动态上传需求是OSS上传和截帧(最开始时没有需求,自己用的是FFmpeg 多媒体处理工具截取的),最后因为服务器上没有FFmpeg 工具,导致上传docker报 ...

  5. Laravel学习笔记4,文件上传,分页,验证码,数据表和迁移

    目录 一.文件上传 二.数据分页 三.验证码 Return Image Return URL Return HTML 六.响应处理 一.文件上传 在laravel, 里面实现文件的上传是很简单的,压根 ...

  6. 第三十二天学习笔记-web漏洞-文件上传的条件竞争、.htaccess文件与.user.ini文件使用前提、二次渲染

    目录 二次渲染原理 绕过方法 htaccess配置文件 .user.ini 二次渲染原理 在我们上传文件后,网站会对图片进行二次处理(格式.尺寸,保存,删除 要求等),服务器会把里面的内容进行替换更新 ...

  7. ssm上传文件进度条_ssm学习笔记-三种文件上传方式

    首先需要引入commons-fileupload commons-fileupload commons-fileupload 1.3.3 MultipartFile方式 示例代码: @RequestM ...

  8. Java Web学习笔记09:文件上传与下载

    文章目录 一.SmartUpload组件 1.SmartUpload概述 2.SmartUpload优点 3.SmartUpload缺点 4.环境准备

  9. 树莓派学习笔记——Python SQLite插入温度记录

    0 前言 本文使用python向SQLite数据库中插入树莓派温度数据,SQLite数据库中包含一张只包含三个字段的记录表--参数名称,时间和温度值.本文重点解释Python操作SQlite的具体方法 ...

最新文章

  1. 【linux】可执行程序执行时报错-sh: ./mxc_v4l2_tvin.out: No such file or directory的解决方法
  2. matlab根据结构体数组,用邻接矩阵和序遍历创建树形结构:
  3. Beta 冲刺(3/7)
  4. 一致性设计,而不是一致性
  5. 云南省农村信用社计算机岗位待遇如何,云南农村信用社薪资待遇如何?
  6. Spring 注解AOP 入门
  7. Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
  8. vue 嵌套表格组件_使用form-create动态生成vue自定义组件和嵌套表单组件
  9. 日期插件My97DatePicker
  10. 设计模式(十七):享元模式
  11. html color 转换,Color颜色转换的三种方式(c#)
  12. APP_FIELD设置Item运行时行为
  13. 课后实践4:以支付宝为例,使用商业画布分析一款产品
  14. 数理逻辑习题集(9)
  15. Office Word 之画肘形箭头
  16. 聊天系统服务器,聊天系统服务器
  17. OpenCV3的GPU模块编译
  18. Envoy proxy 源代码解读 - original_dst cluster
  19. linux进程系列(5)进程链与进程扇
  20. ps如何去掉不想要的东西

热门文章

  1. Stress Tests
  2. 苹果怎么使用专业计算机,20个你应该知道的iPhone 7实用小技巧
  3. Ubuntu 更新软件命令
  4. 国内外电容电感品牌厂商
  5. 十大排序算法思想和代码总结(Python版)
  6. 从Twitter应用布局看国内微博应用发展趋势
  7. MobTech袤博亮相DevFest上海谷歌开发者节
  8. 浅析领导力和执行力在企业管理中的运用
  9. 自动拆箱自动装箱以及String 和基本数据类型封装类生成的对象是否相等
  10. 【职场】而立之年,未来5-10年行业预测和职业规划