繁体   English   中英

通过python`request`代码将树莓派传感器数据发送到远程elasticsearch

[英]Send Raspberry pi sensor data to remote elasticsearch via python `request` code

传感器数据 --> Raspberry Pi ---(通过requests Python 代码发送传感器数据)---> 远程服务器(Elasticsearch)

目标正在通过request python 模块将接收到的传感器数据发送到 elasticsearch。

问题:当我使用此代码时: data = '{"TempA":"23"}'data = '{"TempA":"23"}'的 post 请求工作和文档正在更新,如下所示:

{"_index":"report","_type":"_doc",{"TempA":"23"}

但是当我将代码更改为: data = {"TempA": mens} ,为了直接获取传感器的值,它不起作用并且弹性搜索的文档不会更新。 (这是我的 python 代码,它从传感器接收数据并将传感器的值放在“mens”中。)

#!/usr/bin/env python3

import time
from SX127x.LoRa import *
from SX127x.board_config import BOARD
import requests

BOARD.setup()
BOARD.reset()
headers = {
    'Content-Type': 'application/json',
}

class mylora(LoRa):

    def __init__(self, verbose=False):
        super(mylora, self).__init__(verbose)
        self.set_mode(MODE.SLEEP)
        self.set_dio_mapping([0] * 6)

    def on_rx_done(self):
        self.clear_irq_flags(RxDone=1)
        payload = self.read_payload(nocheck=True)
        mens=bytes(payload).decode("utf-8",'ignore')
        print(mens)
        data = {"TempA":mens}
        response = requests.post('http://192.168.100.125:9200/report/_doc/customer505', headers=headers, data=data)
        time.sleep(2)
        self.reset_ptr_rx()
        self.set_mode(MODE.RXCONT)

    def start(self):
        while True:
            self.reset_ptr_rx()
            self.set_mode(MODE.RXCONT) # Receiver mode
            while True:
                pass;

感谢您的评论。 经过一番谷歌搜索,我找到了解决方案。 关键点是json=paramsparams而不是data 变化如下:

#!/usr/bin/env python3

import time
from SX127x.LoRa import *
from SX127x.board_config import BOARD
import requests
import json

BOARD.setup()
BOARD.reset()
headers = {
    'Content-Type': 'application/json',
}

class mylora(LoRa):

    def __init__(self, verbose=False):
        super(mylora, self).__init__(verbose)
        self.set_mode(MODE.SLEEP)
        self.set_dio_mapping([0] * 6)

    def on_rx_done(self):
        self.clear_irq_flags(RxDone=1)
        payload = self.read_payload(nocheck=True)
        mens=bytes(payload).decode("utf-8",'ignore')
        print(mens)
        url = 'http://192.168.100.125:9200/report/_doc/customer600'
        params = {'soilA': mens, 'customer_id': 'customer600'}
        r = requests.post(url, headers=headers, json=params)
        time.sleep(2)
        self.reset_ptr_rx()
        self.set_mode(MODE.RXCONT)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM