任务是通过I2C将数据从Arduino发送到STM32.
所以我使用C++在Arduino中定义了Struct和Enums:
enum PhaseCommands {
PHASE_COMMAND_TIMESYNC = 0x01,
PHASE_COMMAND_SETPOWER = 0x02,
PHASE_COMMAND_CALIBRATE = 0x03
};
enum PhaseTargets {
PHASE_CONTROLLER = 0x01,
// RESERVED = 0x02,
PHASE_LOAD1 = 0x03,
PHASE_LOAD2 = 0x04
};
struct saatProtoExec {
PhaseTargets target;
PhaseCommands commandName;
uint32_t commandBody;
} phaseCommand;
uint8_t phaseCommandBufferSize = sizeof(phaseCommand);
phaseCommand.target = PHASE_LOAD1;
phaseCommand.commandName = PHASE_COMMAND_SETPOWER;
phaseCommand.commandBody = (uint32_t)50;
Run Code Online (Sandbox Code Playgroud)
另一方面,我使用C得到了相同的定义:
typedef enum {
COMMAND_TIMESYNC = 0x01,
COMMAND_SETPOWER = 0x02,
COMMAND_CALIBRATE = 0x03
} MasterCommands;
typedef enum {
CONTROLLER = 0x01,
// RESERVED = …Run Code Online (Sandbox Code Playgroud) 有一个用Python编写的脚本,它通过IPMI解析来自多个服务器的传感器数据和事件.然后它将图形数据发送到一个服务器,并将错误日志发送到另一个服 记录服务器是Syslog-ng + Mysql
因此,任务是按所有者存储日志,而不是由脚本宿主存储.
一些代码示例:
import logging
import logging.handlers
loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(name)s: %(levelname)s: %(message)s')
loggerCent.setLevel(logging.INFO)
loggerCent.addHandler(ce)
loggerCent.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)
所以我需要扩展代码,以便我可以告诉syslog-ng,日志属于另一台主机.或者其他一些设计.
有任何想法吗?
UPD:
所以看起来有使用LogAdapter的方法.但如何使用它:
loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)-15s %(name)-5s %(levelname)-8s host: %(host)-15s %(message)s')
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent,
{'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)
通过TcpDump查找消息我在LoggerAdapter中看不到任何关于主机的信息我做错了什么?
UPD2:
好吧,我找不到将主机发送到syslog-ng的方法.虽然可以在链中发送第一个主机,但我真的找不到通过Python Logging发送它的方法.
无论如何,我在syslog-ng: CSV Parser中创建了解析器
parser ipmimon_log {
csv-parser(
columns("LEVEL", "UNIT", "MESSAGE")
flags(escape-double-char,strip-whitespace)
delimiters(";")
quote-pairs('""[](){}')
);
};
log {
source(s_net); …Run Code Online (Sandbox Code Playgroud) 我真的很困惑,但似乎不能做简单的任务:
我只需要设置字节数.
例如:
我需要5位设置.所以我需要0xb00011111.
没有循环可以做到这一点吗?
我也不想写很多东西#defines.