问题描述
在我的项目中,我使用 pymodbus 从通过 RS486 USB 适配器连接到传感器的树莓派读取注册表值,并希望使用 greengrass 发布到 MQTT 主题:
...
# Configuration Parameters (default if not passed in environment)
unit_id = int(os.getenv('UNIT_ID') or '1')
port = os.getenv('SERIAL_PORT_DEVICE') or '/dev/ttyUSB0'
mb_baudrate = int(os.getenv('SERIAL_BAUD_RATE') or '9600')
modbus_mode = os.getenv('MODBUS_MODE') or 'rtu'
mb_timeout = int(os.getenv('MODBUS_TIMEOUT') or '1')
mbclient = ModbusClient(method=modbus_mode,port=port,timeout=mb_timeout,baudrate=mb_baudrate)
logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout,level=logging.DEBUG)
# Creating a greengrass core sdk client
client = greengrasssdk.client('iot-data')
def run_sync_client():
while True:
mbclient.connect()
# set the address and number of bytes that will be read on the modbus device
address = 0x00
count = 1
rre = mbclient.read_input_registers(address,count,unit=unit_id)
logging.info(rre.registers)
# publish results to topic in AWS IoT
client.publish(topic='test/topic_data',payload=rre.registers[0].encode())
time.sleep(5)
run_sync_client()
def lambda_handler(event,context):
return
我使用 pip install greengrasssdk 来安装我的 sdk,但是当我部署我的 lambda 时,在 greengras 中创建我的组件并将它部署到我的树莓上,我得到了响应:
2021-02-03T09:22:49.622Z [ERROR] (pool-2-thread-31) IbmutSensor:greengrass_ipc_python_sdk.ipc_client.IPCException:HTTP 错误 400:错误请求。 {serviceInstance=0,serviceName=IbmutSensor,currentState=RUNNING}
我也尝试用 rre.registers[0].encode()
更改 'test'.encode()
但没有任何改变。
如果我删除日志中的 client.publish
行,我会看到来自传感器的正确数据,我的发布问题在哪里?
非常感谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)