Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RaspberryPi、collectd python插件、rrd、基于CGP的占用率记录/感知(PIR&;Sound)_Python_Plugins_Collectd - Fatal编程技术网

RaspberryPi、collectd python插件、rrd、基于CGP的占用率记录/感知(PIR&;Sound)

RaspberryPi、collectd python插件、rrd、基于CGP的占用率记录/感知(PIR&;Sound),python,plugins,collectd,Python,Plugins,Collectd,我有一个PIR和一个声音传感器在我的PIZerow上工作。 我还有一个python脚本,可以打开监听套接字并处理“声音”或“运动”中断。对于每个声音/运动事件,它增加一个可通过套接字连接读取的值,并在成功读取后重置为零 我已经创建了两个collectd python插件“motion.py”和“sound.py”,它们正在CGP(collectd graph panel)中创建rrd数据和图形,但它们是两个独立的插件。我真正想要的是: 显示两个变量相加的叠加图(内存使用方式) 显示两个变量但未求

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

我已经创建了两个collectd python插件“motion.py”和“sound.py”,它们正在CGP(collectd graph panel)中创建rrd数据和图形,但它们是两个独立的插件。我真正想要的是:

  • 显示两个变量相加的叠加图(内存使用方式)
  • 显示两个变量但未求和的折线图(加载样式)
  • 而且,他们都需要每分钟更新一次(而不是每10秒更新一次)

    到目前为止,我掌握的情况如下:

    我在~/collectd/types.db.local和~/cgp/inc/types.db中定义了一个类型“occulation”

    ...
    occupation              motion:GAUGE:0:U, sound:GAUGE:0:U
    motion                  value:GAUGE:0:U
    sound                   value:GAUGE:0:U
    ...
    
    在~/cgp/plugin中,我有occulation.json

    {
        "occupation": {
            "title": "Occupancy on {{HOST}}",
            "vertical": "Events",
            "type": "stacked",
            "legend": {
                "motion": {
                    "name": "Motion",
                    "color": "0000f0"
                },
                "sound": {
                    "name": "Sound",
                    "color": "ff00f0"
                }
            },
            "legend_format": "%.1lf"    
        }
    }
    
    我的occulation.py插件如下:

    /usr/share/pi/occulation/bin/occulation.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插件的有限文档,也没有找到更好的东西

    我发现了这个链接,这让我觉得我对python插件的理解是错的

    我假设我正确地编写了rrd文件,但我似乎无法使cgp中的绘图部分正常工作。谁能告诉我哪里出了问题

    提前谢谢