是否可以使用 influxdb 以仅保持值变化的方式对旧数据进行下采样?
我的例子如下:
我有一个二进制传感器每 10 分钟发送一次数据,所以自然连续值看起来像这样:0,0,0,0,0,1,1,0,0,0,0.. .
我的目标是使用保留策略在一段时间内保留这种原始数据,并对数据进行下采样以进行更长时间的存储。我想删除所有具有相同数字的连续值,以便在值实际更改时只有带有时间戳的数据点。下采样数据应如下所示:0,1,0,1,0,1,0.... 但在事件实际发生时具有正确的时间戳。
当使用 aws s3 cli 将 Web 应用程序的文件同步到我的 s3 存储桶时,我注意到该sync命令始终上传每个文件,即使它们实际上没有更改。但改变的是文件的时间戳。所以我想知道该sync命令如何确定需要上传哪些文件?
sync只比较文件名和时间戳吗?
我正在使用boost::asio::write()将数据从缓冲区写入 com-Port。这是一个波特率为 115200 的串行端口,这意味着(据我所知)我可以有效地将 11520 字节/秒或 11,52 KB/秒的数据写入套接字。
现在我有一大块数据(10015 字节)要写入。我认为这应该需要不到一秒钟的时间才能真正在端口上写入。但是boost::asio::write()在使用传输的字节 10015 调用后已经返回 300 微秒。我认为在那个波特率下这是不可能的?
所以我的问题是它实际上在做什么?真正将其写入端口,或者只是其他类型的缓冲区,稍后将其写入端口。
我希望write()只有在所有字节真正写入端口后才返回。
编辑代码示例:
问题是我总是遇到未来/承诺的超时,因为发送消息需要超过 100 毫秒,但我认为计时器应该只在发送最后一个字节后启动。因为write()应该阻塞?
void serial::write(std::vector<uint8_t> message) {
//create new promise for the request
promise = new boost::promise<deque<uint8_t>>;
boost::unique_future<deque<uint8_t>> future = promise->get_future();
// --- Write message to serial port --- //
boost::asio::write(serial_,boost::asio::buffer(message));
//wait for data or timeout
if (future.wait_for(boost::chrono::milliseconds(100))==boost::future_status::timeout) {
cout << "ACK timeout!" << endl;
//delete pointer and set it to 0
delete …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用标准 C 中的 unistd.h 将一些字节写入 mac OSX 10.9.3 上的串行端口。我知道有一个类似的主题,但它已经 4 岁了,并且存在不同的问题,所以请原谅我开始一个新线程。
我的问题是 write(); 函数,它总是以 -1 的值返回。打开我的端口的代码如下:
curByte = 0;
numBytes = 0;
bool blocking = false;
//Settings structure old and new
struct termios newtio;
fd = open(port, O_RDWR | O_NOCTTY | (blocking ? 0 : O_NDELAY));
if (fd < 0)
{
return PORT_ERROR;
}
bzero(&newtio, sizeof(newtio));
if (cfsetispeed(&newtio, BDR_ESP3) != 0)
return PORT_ERROR;
if (cfsetospeed(&newtio, BDR_ESP3) != 0)
return PORT_ERROR;
newtio.c_cflag &= ~PARENB;
newtio.c_cflag &= ~CSTOPB;
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag …Run Code Online (Sandbox Code Playgroud) influxdb ×2
amazon-s3 ×1
aws-cli ×1
boost ×1
boost-asio ×1
c ×1
c++ ×1
macos ×1
serial-port ×1