RaspberryPi,收集python插件,rrd,基于CGP的占用记录/感知(PIR& Sound)

时间:2018-01-16 00:59:56

标签: python plugins collectd

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

我创建了2个collectd python插件'motion.py'和'sound.py',他们在CGP(collectd graph panel)中创建rrd数据和图形,但它们是两个独立的插件。我真的很喜欢它:

  1. 显示两个变量相加的堆叠图(内存使用方式)
  2. 显示两个变量但未汇总(加载方式)
  3. 的折线图

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

    到目前为止我所拥有的内容如下:

    我在〜/ collectd / types.db.local和〜/ cgp / inc / types.db中定义了一个类型'职业'

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

    在〜/ cgp / plugin中我有Occup.json

    {
        "occupation": {
            "title": "Occupancy on {{HOST}}",
            "vertical": "Events",
            "type": "stacked",
            "legend": {
                "motion": {
                    "name": "Motion",
                    "color": "0000f0"
                },
                "sound": {
                    "name": "Sound",
                    "color": "ff00f0"
                }
            },
            "legend_format": "%.1lf"    
        }
    }
    

    和我的occup.py插件如下:

    /usr/share/pi/occupation/bin/occupation.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)
    

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

    我觉得我很接近,但我只是在猜测,因为我不太了解Python插件的有限文档,但还没有找到更好的东西。

    我发现这个链接https://www.programcreek.com/python/example/106897/collectd.register_read让我觉得我对python插件的看法都是错的。

    我假设我正在正确编写rrd文件,但我似乎无法使cgp中的图形部分正常工作。谁能证明我哪里出错?

    提前致谢!

0 个答案:

没有答案