我在 Raspberry Pi 上运行 Python 脚本以获取智能插头测量的数据(电压、电流、能量、功率)。这些数据正在树莓派的终端上打印,但我需要的是将其发送到微软云。
我是这些主题的初学者,所以我需要一些帮助。如何“轻松”地将此数据传输到 Microsoft Azure 中?有人建议我使用 Node Red 调用终端中正在打印的值,然后将它们传输到 Microsoft Azure 云中的数据库中。这是可行的吗?我该如何开始?我很感谢任何提示,因为我很迷茫。
我的 Python 脚本基于 BeardMonkey https://www.beardmonkey.eu/tplink/hs110/2017/11/21/collect-and-store-realtime-data-from-the-tp-link-hs110的原始脚本。 html
这是我正在使用的脚本:
import sys
import time
import socket
import json
import threading
from struct import *
def int_to_bytes(x):
return x.to_bytes((x.bit_length() + 7) // 8, 'big')
def int_from_bytes(xbytes):
return int.from_bytes(xbytes, 'big')
def encrypt(string):
key = 171
result = pack('>I', len(string))
for i in string:
a = key ^ i
key = a
result += int_to_bytes(a)
return result
def decrypt(string):
key = 171
result = b""
for i in string:
a = key ^ i
key = i
result += int_to_bytes(a)
return result
def send_hs_command(address, port, cmd):
data = b""
tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
tcp_sock.connect((address, port))
tcp_sock.send(encrypt(cmd))
data = tcp_sock.recv(2048)
except socket.error:
print(time.asctime( time.localtime(time.time()) ), "Socket closed.", file=sys.stderr)
finally:
tcp_sock.close()
return data
def run():
threading.Timer(5.0, run).start()
data = send_hs_command("192.168.40.101", 9999, b'{"emeter":{"get_realtime":{}}}')
if not data:
print(time.asctime(time.localtime(time.time()) ), "No data returned on power request.", file=sys.stderr)
return
decrypted_data = decrypt(data[4:]).decode()
#print("DECRYPTED DATA", '\n',decrypted_data,'\n' )
json_data = json.loads(decrypted_data)
#print("JSON DATA", '\n',json_data,'\n' )
emeter = json_data["emeter"]["get_realtime"]
#print("RAW METER", '\n',emeter,'\n' )
print("SMART PLUG DATA - ",time.asctime( time.localtime(time.time()) ),'\n', "Current: ", emeter["current_ma"],"mA",'\n'\
,"Voltage: ",emeter["voltage_mv"], "mV", '\n',"Power: ", emeter["power_mw"], "mW",'\n', "Total Energy: ",\
emeter["total_wh"], "Wh", '\n\n')
if not emeter:
print("No emeter data returned on power request.", file=sys.stderr)
return
run()