dalen/owl-packet-interceptor

拦截来自 OWL Intuition 的数据包并解析它们

dev-master 2016-07-19 11:43 UTC

This package is not auto-updated.

Last update: 2024-09-22 07:27:55 UTC


README

官方仓库统计

Build Status Coverage Status Scrutinizer Code Quality

###描述 owl-packet-interceptor 是一个 PHP 库,它拦截并解析由 OWL Monitor 通过 UDP 发送的 XML 数据包。

为此,您首先需要在 OWL Intuition 控制面板上更改数据推送设置,提供您将安装 owl-packet-interceptor 的 IP 地址和端口。

目前 owl-packet-interceptor 能够处理来自以下设备的包

###结构 owl-packet-interceptor 被划分为四个主要包

  • Packet: 包含将数据包反序列化的类。Packet 包包含来自 OWL 设备发送的每种类型的数据包的子包,目前只支持电力和太阳能包类型。每个数据包都由一个主要类(Electricity.php 用于电力,Solar.php 用于太阳能)表示,该类实现了 IPacket 接口。
  • Listener: 包含拦截从设备发送的包的 UDP 监听器。
  • Parser: 包含用于从 XML 数据包中提取数据的类。每个解析器实现了 IParser 接口。
  • Storage: 包含处理数据包表示的类。每个存储类实现了 IStorage 接口。

所以

  • Listener 拦截新的数据包,
  • Parser 从数据包中提取数据并构建一个新的 Packet 对象
  • 数据包对象由 Storage 处理

###入门指南

创建一个新的文件夹并进入它

安装 owl-packet-interceptor

$ composer require dalen/owl-packet-interceptor:dev-master

创建一个新的 PHP 文件,例如 App.php,并写入类似以下内容

<?php

require_once('./vendor/autoload.php');

use Dalen\OWLPacketInterceptor\Listener\UDPListener;
use Dalen\OWLPacketInterceptor\Storage\StdOutStorage;
use Dalen\OWLPacketInterceptor\Parser\Parser;

// create listener on port 8000
$listener = new UDPListener('0.0.0.0',8000);
// create a new parser
$parser = new Parser();
// create standard output storage (outputs on the console) 
$storage = new StdOutStorage();

// listen for new packets
while(true)
{
    // pass the XML string to the parser
    $parser->setXMLString($listener->read());
    // make the storage handle the Packet object extracted by the parser
    $storage->storePacket($parser->parse());
}

运行 App.php

$ php App.php

打开一个新的 shell 并尝试发送一个数据包

$ echo -n "<electricity id='AA12345679'><signal rssi='-86' lqi='91'/><battery level='100%'/><chan id='0'><curr units='w'>1288.00</curr><day units='wh'>9904.89</day></chan></electricity>" | nc -4u -q1 127.0.0.1 8000 > /dev/null 2>/dev/null &

App.php 应该打印

This is an Electricity Packet

现在您可以为 Storage 编写自己的代码!

###许可证

MIT