前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >树莓派上传数据错误一例

树莓派上传数据错误一例

作者头像
DotNet Whisperer
发布于 2024-08-14 07:21:47
发布于 2024-08-14 07:21:47
13300
代码可运行
举报
文章被收录于专栏:DotNet杂记DotNet杂记
运行总次数:0
代码可运行

首先是源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 # -*- utf-8 -*-
  2 #env !/usr/bin/python
  3 
  4 import RPi.GPIO as GPIO
  5 import time
  6 import json
  7 import datetime
  8 import requests
  9 
 10 requests.adapters.DEFAULT_RETRIES = 5
 11 # s = requests.session()
 12 # s.keep_alive = False
 13 apiurl = 'https://xxxxxx.cn/api/TmpApi'
 14 apiheaders = {'Content-Type': 'application/json','Connection': 'close'}
 15 
 16 def getCPUTemp():
 17     file = open("/sys/class/thermal/thermal_zone0/temp")
 18     cpuTemp=float(file.read())/1000
 19     file.close()
 20     return cpuTemp
 21 
 22 def getTemp():
 23     channel = 17
 24     data = []
 25     j = 0
 26 
 27     GPIO.setmode(GPIO.BCM)
 28 
 29     time.sleep(1)
 30 
 31     GPIO.setup(channel, GPIO.OUT)
 32 
 33     GPIO.output(channel, GPIO.LOW)
 34     time.sleep(0.02)
 35     GPIO.output(channel, GPIO.HIGH)
 36 
 37     GPIO.setup(channel, GPIO.IN)
 38 
 39     while GPIO.input(channel) == GPIO.LOW:
 40         continue
 41 
 42     while GPIO.input(channel) == GPIO.HIGH:
 43         continue
 44 
 45     while j < 40:
 46         k = 0
 47         while GPIO.input(channel) == GPIO.LOW:
 48             continue
 49     
 50         while GPIO.input(channel) == GPIO.HIGH:
 51             k += 1
 52             if k > 100:
 53                 break
 54     
 55         if k < 8:
 56             data.append(0)
 57         else:
 58             data.append(1)
 59 
 60         j += 1
 61 
 62     print("sensor is working.")
 63     # print(data)
 64 
 65     humidity_bit = data[0:8]
 66     humidity_point_bit = data[8:16]
 67     temperature_bit = data[16:24]
 68     temperature_point_bit = data[24:32]
 69     check_bit = data[32:40]
 70 
 71     humidity = 0
 72     humidity_point = 0
 73     temperature = 0
 74     temperature_point = 0
 75     check = 0
 76     
 77     cpu_temperature = 0
 78 
 79     for i in range(8):
 80         humidity += humidity_bit[i] * 2 ** (7 - i)
 81         humidity_point += humidity_point_bit[i] * 2 ** (7 - i)
 82         temperature += temperature_bit[i] * 2 ** (7 - i)
 83         temperature_point += temperature_point_bit[i] * 2 ** (7 - i)
 84         check += check_bit[i] * 2 ** (7 - i)
 85 
 86     tmp = humidity + humidity_point + temperature + temperature_point
 87 
 88     csv=open('/home/pi/Desktop/Projects/DHT11/log.csv', 'a+')
 89     if humidity>99:
 90         return "Wrong data"
 91     if check == tmp:
 92         print("temperature : ", temperature, ", humidity : " , humidity)
 93         cpu_temperature = getCPUTemp()
 94         print("CPU Temperature : ", cpu_temperature)
 95 
 96         CurTime = datetime.datetime.now()
 97         payload = {'DeviceName':"DHT11a",'Temp':temperature,'Humidity':humidity,'AcquisitionTime':CurTime.isoformat(), 'Memo': 'cpu:%.3f' % cpu_temperature}
 98         print("Current time: %s" % CurTime.isoformat())
 99         print("Upload Temperature: %.3f" % temperature,"Humdity: %.3f" % humidity)
100 
101         jdata = json.dumps(payload)
102 
103         r=requests.post(apiurl,headers=apiheaders,data=json.dumps(payload))
104 
105         csv.write(time.strftime("%Y/%m/%d %H:%M:%S",time.localtime()) + ",")
106         csv.write(str(temperature))
107         csv.write(',')
108         csv.write(str(humidity))
109         csv.write('\n')
110     else:
111         # print("wrong")
112         r = "wrong"
113         print("temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp)
114 
115     csv.close()
116 
117     return r
118 
119 if __name__ == "__main__":
120     try:
121         while 1:
122             resp = getTemp()
123             print("xxxxxx.cn request result:  %s" %resp)
124             time.sleep(60)
125     finally:
126         GPIO.cleanup()

错误故障:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 sensor is working.
 2 temperature :  24 , humidity :  44
 3 CPU Temperature :  47.236
 4 Current time: 2018-09-14T04:37:06.303399
 5 Upload Temperature: 24.000 Humdity: 44.000
 6 xxxxxx.cn request result:  <Response [201]>
 7 sensor is working.
 8 temperature :  16 , humidity :  50  check :  161  tmp :  78
 9 xxxxxx.cn request result:  wrong
10 sensor is working.
11 temperature :  24 , humidity :  55
12 CPU Temperature :  46.698
13 Current time: 2018-09-14T04:39:08.722444
14 Upload Temperature: 24.000 Humdity: 55.000
15 Traceback (most recent call last):
16   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 138, in _new_conn
17     (self.host, self.port), self.timeout, **extra_kw)
18   File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 75, in create_connection
19     for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
20   File "/usr/lib/python3.5/socket.py", line 733, in getaddrinfo
21     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
22 socket.gaierror: [Errno -3] Temporary failure in name resolution
23 
24 During handling of the above exception, another exception occurred:
25 
26 Traceback (most recent call last):
27   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 594, in urlopen
28     chunked=chunked)
29   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 350, in _make_request
30     self._validate_conn(conn)
31   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 837, in _validate_conn
32     conn.connect()
33   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 281, in connect
34     conn = self._new_conn()
35   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 147, in _new_conn
36     self, "Failed to establish a new connection: %s" % e)
37 requests.packages.urllib3.exceptions.NewConnectionError: <requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x75aa01b0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution
38 
39 During handling of the above exception, another exception occurred:
40 
41 Traceback (most recent call last):
42   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 423, in send
43     timeout=timeout
44   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 643, in urlopen
45     _stacktrace=sys.exc_info()[2])
46   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 363, in increment
47     raise MaxRetryError(_pool, url, error or ResponseError(cause))
48 requests.packages.urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='xxxxxx.cn', port=443): Max retries exceeded with url: /api/TmpApi (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x75aa01b0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',))
49 
50 During handling of the above exception, another exception occurred:
51 
52 Traceback (most recent call last):
53   File "dht11GV.py", line 121, in <module>
54     resp = getTemp()
55   File "dht11GV.py", line 102, in getTemp
56     r=requests.post(apiurl,headers=apiheaders,data=json.dumps(payload))
57   File "/usr/lib/python3/dist-packages/requests/api.py", line 110, in post
58     return request('post', url, data=data, json=json, **kwargs)
59   File "/usr/lib/python3/dist-packages/requests/api.py", line 56, in request
60     return session.request(method=method, url=url, **kwargs)
61   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 488, in request
62     resp = self.send(prep, **send_kwargs)
63   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 609, in send
64     r = adapter.send(request, **kwargs)
65   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 487, in send
66     raise ConnectionError(e, request=request)
67 requests.exceptions.ConnectionError: HTTPSConnectionPool(host='xxxxxx.cn', port=443): Max retries exceeded with url: /api/TmpApi (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x75aa01b0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',))

根据错误提示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Max retries exceeded with url: /api/TmpApi (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x75aa01b0>: 
Failed to establish a new connection: [Errno -3] Temporary failure in name resolution

在网上找到以下几个点:

1. requests 模块太老,须升级:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --upgrade requests

2. 连接数太多,没有释放:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
解决办法:

1、增加重试连接次数

  requests.adapters.DEFAULT_RETRIES = 5

2、关闭多余的连接

requests使用了urllib3库,默认的http connection是keep-alive的,requests设置False关闭。

操作方法

s = requests.session()
  s.keep_alive = False

3. 加代理服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://obroll.com/max-retries-exceeded-for-url-in-requests-module-python-solved/ 
A: 
Python代码 
proxy = {'http': '33.33.33.10:8118'}  
result = requests.get(url, proxies=proxy)  

B: 
Java代码
proxy = '33.33.33.11:8118'  
result = requests.get(url, proxies={'http': proxy})  

分析:

因为是自建的网站,所以排除封锁IP的可能,所以代理服务器方法不用尝试。

尝试方法1和2,看后续效果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
Lombok是一款Java代码功能增强库,在Github上已有9.8k+Star。它会自动集成到你的编辑器和构建工具中,从而使你的Java代码更加生动有趣。通过Lombok的注解,你可以不用再写getter、setter、equals等方法,Lombok将在编译时为你自动生成。
macrozheng
2021/01/06
9640
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
Spring Boot 早在 2.1.x 版本后就在 starter 中内置了 Lombok 依赖,Intellij IDEA 也早在 IDEA 2020.3 版本的时候内置了 Lombok 插件。为什么它们都要支持 Lombok 呢?Lombok 到底有啥牛皮的?今天我们就来补上这一课。
沉默王二
2022/04/14
5570
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
Lombok详解
1. Lombok简介 官网地址:https://projectlombok.org/ Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为你优化Java代码。 所以可以不用再手写一个getter、setter或equals方法。 2. 变量使用介绍 2.1 val修饰变量 可以使用val作为局部变量声明的类型,而不用实际编写该类型。 当您执行此操作时,将从初始值设定项表达式中推断出类型。 局部变量也将成为final类型的变量。 此功能仅适用于局部变量和foreach循环,不适用于字
牧晗
2020/06/05
1.3K0
Lombok详解
加倍提升开发效率,继续深挖Lombok的使用
本篇来接续上一篇文章 这些极简的注解你都清楚吗,主要介绍一下 Lombok 非常用注解。
cxuan
2019/08/09
7800
加倍提升开发效率,继续深挖Lombok的使用
你干啥的?Lombok
说实话,我英文不太好(不是找借口,真的),但借助金山词霸,大致知道了这段英文的意思:Lombok 是个好类库,可以为 Java 代码添加一些“处理程序”,让其变得更简洁、更优雅。
沉默王二
2019/05/15
4810
使用Lombok的@Builder 注解时,属性有默认值,会有什么坑🥶
在 java 中使用 Lombok的注解@Builder时,对象属性有默认值时会碰到默认值不会生效的坑。
崔认知
2025/02/26
1690
使用Lombok的@Builder 注解时,属性有默认值,会有什么坑🥶
Lombok 安装及使用指南
为了减少写一些 get/set/toString 方法,让项目代码更加整洁,提高开发效率,发现大家都开始采用 Lombok 这个工具。Lombok 是一个 Java 类库,它会自动插入编辑器和构建工具,用于帮助开发人员消除 Java 中冗长样板代码。而我们开发人员所要做的,仅仅是添加几个 Lombok 中的注解,就可以替换掉原来的多行 get/set/toString 方法代码,既简洁也易于维护。下面我们就来看看,如何安装并使用这一工具。
村雨遥
2021/09/16
1K0
Lombok 安装及使用指南
Lombok中关于@Data的使用
当你在使用 Lombok 的 @Data 注解时,其实会有一些坑需要关注,今天就让我们来见识一下。
健程之道
2019/11/03
6890
超级全面的 Lombok 注解介绍,学一波!
blog.csdn.net/riemann_/article/details/105374987
全栈程序员站长
2021/06/29
5.1K0
lombok使用基础教程
前言 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。在很多工具类的项目中都有这个功能。比如dagger。 通俗的说,lombok可以通过注解来标示生成getter settter等代码。我们自然可以通过编译器比如IDEA的Generate生成,为啥要用这个? 在项目开发阶段,一个class的属性是一直变化的,今天可能增加一个字段,明天可能删除一个字段。每次变化都需要修改对应的模板代码。另外,有的class的字段超级多,多到一眼看不完。如果加上模板代码,更难一眼看出来。更有甚者,由于字
Ryan-Miao
2018/03/14
1.7K0
lombok使用基础教程
一份不可多得的 Lombok 学习指南
Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(POJO)。在开发环境中使用 Lombok 插件后,Java 开发人员可以节省出重复构建,诸如 hashCode 和 equals 这样的方法以及各种业务对象模型的 accessor 和 toString 等方法的大量时间。对于这些方法,Lombok 能够在编译源代码期间自动帮我们生成这些方法,但并不会像反射那样降低程序的性能。
阿宝哥
2019/11/06
9820
一份不可多得的 Lombok 学习指南
【SpringBoot-3】Lombok使用详解
Lombak是一款Java开发插件,它主要应用在Java模型对象类中。 Lomabk通过注解的方式,隐式(即代码中不可见,但编译后可见)实现Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等,大幅度精简冗长繁琐的代码。 Lombok针对这些内容的处理是在编译期,而不是通过反射机制,这样的好处是并不会降低系统的性能。
云深i不知处
2020/09/16
1.3K0
第十三节:使用Lombok简化你的代码
TOC 在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去产生其属性的构造器、getter、setter、equals、hashcode、toString方法,当要增加属性或者对某个属性进行改变时,比如命名、类型等,都需要重新去产生上面提到的这些方法。这样重复的劳动没有任何意义,Lombok里面的注解可以轻松解决这些问题。 官方地址:https://projectlombok.org/ github地址:https://github.com/rzwitserloot/lombok lombo
入门笔记
2022/02/18
5550
第十三节:使用Lombok简化你的代码
一份不可多得的 Lombok 学习指南
Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(POJO)。在开发环境中使用 Lombok 插件后,Java 开发人员可以节省出重复构建,诸如 hashCode 和 equals 这样的方法以及各种业务对象模型的 accessor 和 toString 等方法的大量时间。对于这些方法,Lombok 能够在编译源代码期间自动帮我们生成这些方法,但并不会像反射那样降低程序的性能。
江南一点雨
2019/11/06
9000
一份不可多得的 Lombok 学习指南
Lombok,简化代码的神器,你值得拥有
本文给大家介绍一个Java代码简化的神器 -- Lombok。主要从如下几个方面进行展开:
孟君
2019/08/26
1.6K0
Lombok,简化代码的神器,你值得拥有
Java代码简化神器-Lombok
  前段时间在开源社区中发现了一个比较牛逼的简化Java代码的神器-Lombok,接着自己写了demo进行测试和练习,感觉真的很不错,特此分享给需要的小伙伴们~
阿豪聊干货
2018/08/09
5240
Java代码简化神器-Lombok
简化开发|Lombok神器带你消除冗余代码
Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务过程中冗余的代码,尤其是简单的Java模型对象(POJO)。而当我们如果在开发环境中使用Lombok开发插件后,可以省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生产这些方法,并没有如反射那样降低程序的性能。本文将带大家详细介绍关于Lombok的使用以及原理。
浅羽技术
2020/12/07
5540
简化开发|Lombok神器带你消除冗余代码
IDEA 2022 之 Lombok 使用 教程
​ Lombok是使用java编写的一款开源类库。其主作用是使用注解来代替一些具有格式固定,没有过多技术含量的编码工作。使我们可以仅仅在代码中添加一个注解(annotation),就可以起到和编写一大段代码一样的作用。对于这些格式固定的的代码,IDE也提供了自动生成的功能,但是无论是自动生成还是纯手动写,这些代码在类中是实实在在的存在,有时候,看到一个类文件很长,其中却都是一些,没有任何技术含量的getter和setter方法。无疑会影响我们的代码阅读。而使用Lombok可以将这些“无用”的代码,通过相应的注解替换掉。好了,废话少说,进入主题:
猫头虎
2024/04/08
4780
IDEA 2022 之 Lombok 使用 教程
lombok系列2:lombok注解详解
看到第一篇《初识lombok》你可能意犹未尽,本文我们按照场景来介绍一下常用的注解。
pollyduan
2019/11/04
1K0
lombok在java项目中的使用
@NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor
jinjunzhu
2020/08/20
6670
相关推荐
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档