RaspberryPi,collectdpython插件,rrd,基于CGP的占用日志/感知(PIR&Sound)

2024-06-12 14:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个PIR和一个声音传感器在我的圆周率上工作。 我还有一个python脚本,它打开一个监听套接字并处理“声音”或“运动”中断。对于每个声音/运动事件,它会增加一个可以通过套接字连接读取的值,并在成功读取后重置为零。在

我已经创建了2个集合python插件'运动.py'和'声音.py'他们正在CGP(collectedgraph panel)中创建rrd数据和图形,但它们是两个独立的插件。我真正想要的是:

  1. 显示两个变量相加的堆积图(内存使用方式)
  2. 显示两个变量但不求和的折线图(加载样式)

并且让它们每分钟更新一次(而不是每10秒更新一次)。在

目前我所掌握的情况如下:

我在~/collectd中定义了一个“职业”类型/本地数据库类型在~/cgp/inc/类型.db在

...
occupation              motion:GAUGE:0:U, sound:GAUGE:0:U
motion                  value:GAUGE:0:U
sound                   value:GAUGE:0:U
...

在~/cgp/plugin中占领.json在

^{pr2}$

还有我的职业.py插件如下:

/usr/share/pi/占用/bin/职业.py在

import collectd
import socket
import sys

server_name = 'localhost'
server_port = 10000

def config_func(config):
    collectd.info('config called')

def read_occupation():
    collectd.info('read_occupation called')
    # Read raw value
    # Create a TCP/IP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    global server_name
    global server_port

    server_address = (server_name, server_port)
    sock.connect(server_address)

    sock.sendall('MOVEMENT')
    motion = sock.recv(16)
    sock.sendall('SOUND')
    sound = sock.recv(16)
    sock.close()

    # Dispatch value to collectd
    val1 = collectd.Values()

    val1.plugin = 'occupation'
    val1.type = 'occupation'
    val1.values = [motion, sound]
    val1.dispatch()

    collectd.info('read_motion %s read_sound %s' % (motion, sound))

def init_func():
    collectd.info('init called')


collectd.register_config(config_func)
collectd.register_init(init_func)
collectd.register_read(read_occupation, 60)

使用这个配置我得到一个错误:没有名为'value'的DS'(它来自Base.class.php)因为我的rrd只有'motion'和'sound'值,没有'value'值。在

我觉得我已经很接近了,但我只是在猜测,因为我并不真正理解Python插件的有限文档,也没有找到更好的东西。在

我发现了这个链接https://www.programcreek.com/python/example/106897/collectd.register_read,这让我觉得我在python插件上做得不对。在

我假设我写的rrd文件是正确的,但是我似乎不能让cgp中的绘图部分正常工作。谁能告诉我哪里出错了吗?在

提前谢谢!在


Tags: py插件config声音readservervaluesocket