【发布时间】:2020-11-26 13:18:00
【问题描述】:
概念:
通过 pubnub 通道发送 GPS 数据和接近度数据,将它们存储在 mysql 数据库中,然后使用 grafana 监控数据库内容。
目前情况:
我们有 2 个人通过名为“frameData”的 pubnub 频道发布数据,一个发送 GPS 数据,另一个发送接近度数据。 echo 给出了正确的参数,但是它们不会发布到数据库中。谁能帮忙解决这个问题?
代码:
import os
import time
import sys
import datetime
import MySQLdb
from pubnub.enums import PNStatusCategory
from pubnub.callbacks import SubscribeCallback
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub
# removed the pub and sub key for the purpose of asking this question
pnconfig = PNConfiguration()
pnconfig.publish_key = "pub-c-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
pnconfig.subscribe_key = "sub-c-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
pubnub = PubNub(pnconfig)
CHANNEL = "frameData"
database = MySQLdb.connect(host="localhost", user="pi", passwd="raspberry",db="IoTProject")
cursor = database.cursor()
FrameID = 1
SerieNummer = "000001"
Longitude = ""
Latitude = ""
isGeladen = ""
Datum=datetime.datetime.now()
class MySubscribeCallbackITF(SubscribeCallback):
def message (self, pubnub, message):
if type(message.message) is list:
Latitude = message.message[0].lstrip("u")
Longitude = message.message[1].lstrip("u")
print(Latitude)
print(Longitude)
return(Latitude,Longitude)
elif type(message.message) is not list:
isGeladen = message.message
print(isGeladen)
return(isGeladen)
else:
print("No data available")
def presence(self, pubnub, event):
print("[PRESENCE: {}]".format(event.event))
print("uuid: {}, channel: {}".format(event.uuid, event.channel))
def status(self, pubnub, event):
if event.category == PNStatusCategory.PNConnectedCategory:
print("[STATUS: PNConnectedCategory]")
print("connected to channels: " + CHANNEL)
cursor.execute("INSERT INTO IoTProject(FrameID,SerieNummer,isGeladen,Longitude,Latitude,Datum) VALUES(%s, %s, %s, %s, %s, %s)",(FrameID,SerieNummer,isGeladen,Longitude,Latitude,Datum))
database.commit()
print('Listening...')
pubnub.add_listener(MySubscribeCallbackITF())
pubnub.subscribe().channels(CHANNEL).execute()
【问题讨论】:
-
您能否提供您的
print语句中的任何日志。如果您可以enable PubNub SDK logging 并复制,那将很有帮助。在message回调中,您return是什么?因为这是一个异步调用,所以不应该有任何“返回”的东西。你有任何错误吗?此外,发布者发送消息的速度有多快(消息/分钟)。 -
当我重新阅读详细信息时,您似乎在
message回调中收到了消息,但消息没有进入您的数据库。同样,cursor.execute周围报告的任何错误? -
我启用了PubNub SDK,下图显示反馈,我删掉了经纬度。你是对的,消息回调的返回现在被删除了。 GPS 模块大约每 5 秒发送一次数据,如果值与之前的值不同,则大约 10 秒发送一次。所以估计 15 条消息/分钟。下面的截图:(没有真正看到如何添加截图作为回复,所以我做了一个图片链接)ibb.co/YtWzpPV@CraigConover
-
如何在消息回调之外接收 pubnub 数据?所以我可以给它分配一个变量名并用它来写入数据库
-
这是个好主意!很高兴看到这个。将消息数据保存到消息接收器内部的 MySQL
database, you'd but the cursor.execute("INSERT INTO .. ")和database.commit()。