ChatGPT是时下火热的AI自然语言引擎,啥都知道啥都会,今天咱们就使用ChatGPT来写一段python代码,模拟一个温湿度传感器,持续的给服务器发数据,并在物联网管理软件ThingsPanel上显示数据。
我们的工作分为两个部分,首先要写一段代码发数据,然后要配置服务端软件来接收数据,并监控设备数据
。
生成代码
服务端软件上配置设备
修改代码参数
执行代码
查看数据。
ChatGPT:要注册并可以登录。
Python:安装好Python,缺乏的库可以在过程中安装。
ThingsPanel:开源物联网平台,用来接收数据,查看数据。
首先要登录到https://chat.openai.com/chat,并使用如下的描述来生成代码:
生成一段python代码,模拟一个温度传感器,持续的给MQTT
broker发温湿度数据,需要带上用户名和密码校验,发送到device/attributes这个主题,上报数据格式为json,数据精确到小数点后两位。


具体的代码复制如下:
import random
import time
import json
import paho.mqtt.client as mqtt
# MQTT broker的地址和端口
MQTT_BROKER = "localhost"
MQTT_PORT = 1883
# MQTT用户名和密码
MQTT_USERNAME = "your-username"
MQTT_PASSWORD = "your-password"
# MQTT client
client = mqtt.Client()
# 设置MQTT用户名和密码
client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
# 连接MQTT broker
client.connect(MQTT_BROKER, MQTT_PORT)
# 循环不断地发送温湿度数据
while True:
temperature = round(random.uniform(20, 30), 2)
humidity = round(random.uniform(50, 60), 2)
data = {
"temperature": temperature,
"humidity": humidity
}
data_json = json.dumps(data)
client.publish("device/attributes", data_json)
print(data_json)
time.sleep(1)
创建一个名为temperatureHumidity.py文件,并粘贴代码到这个文件中。
打开网址 dev.thingspanel.cn,使用如下帐号登录:
测试帐号admin@thingspanel.cn 密码 123456
在设备接入页面中创建项目 。

点击设备管理进入设备管理页面

输入设备名:温湿度传感器
选择默认分组
选择设备
绑定插件选择【温湿度传感器插件】
点击【编辑参数】获得设备的推送参数。
在编辑参数页面中,我们获得如下信息。

是dev.thingspanel.cn(ThingsPanel的官方演示服务器),端口1883。
记下来粘贴到代码对应的位置。
复制下来,作为用户名,粘贴到刚复制的代码对应的位置。
报文格式,一定要按照这个格式发数据,temp和hum不能变。
修改后的代码如下:

import random
import time
import json
import paho.mqtt.client as mqtt
# MQTT broker的地址和端口
MQTT_BROKER = "dev.thingspanel.cn"
MQTT_PORT = 1883
# MQTT用户名和密码
MQTT_USERNAME = "202e0140-dbac-0052-933d-7fc094b842cd"
MQTT_PASSWORD = ""
# MQTT client
client = mqtt.Client()
# 设置MQTT用户名和密码
client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
# 连接MQTT broker
client.connect(MQTT_BROKER, MQTT_PORT)
# 循环不断地发送温湿度数据
while True:
temperature = round(random.uniform(20, 30), 1)
humidity = round(random.uniform(50, 60), 1)
data = {
"temp": temperature,
"hum": humidity
}
data_json = json.dumps(data)
client.publish("device/attributes", data_json)
print(data_json)
time.sleep(1)

执行时,如果遇到问题"No module named
‘paho’",可以把这个问题扔给ChatGPT,它 会告诉你怎么做:

完毕后继续执行"python3 temperatureHumidity.py"命令。
只要推送数据,在服务端软件上立即看到在线状态,并看到上次消息推送的时间
。

在数据管理菜单中,也可以查看刚刚推送的数据

在设备监控中,可以看到刚刚推送的数据的可视化 :

如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_