#!/usr/bin/php
<?php
/*
Short example of an UDP server written in PHP for rtl_433.

You need to have `php_cli` installed.

To run this as service use these systemd service files for
ubuntu, lubuntu, xubuntu, debian, ubuntu core and so on.

## Service file to start the rtl_433 process


[Unit]
Description=rtl433 udp service
After=network.target
[Service]
Restart=always
RestartSec=5
RemainAfterExit=no
User=root
ExecStart=/bin/sh -c "/usr/bin/rtl_433 -f 433.92M -F syslog:127.0.0.1:1433"

[Install]
WantedBy=multi-user.target


## Service file to start the php udp server


[Unit]
Description=syslog 433 udp service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/php /home/user/rtl_433/examples/rtl_433_custom.php "0"

[Install]
WantedBy=multi-user.target
*/

error_reporting(E_ALL | E_STRICT);

//switch on debug mode
$debug = "1";
if (sizeof($argv) > 1)
{
    $debug  = $argv[1];
}
//udp server IP and Port for listen
$UDP_IP = "127.0.0.1";
$UDP_PORT = 1433;
//create socket and bind them
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, $UDP_IP, $UDP_PORT);
//init of this variables
$from = '';
$port = 0;

//use the output of rtl_433 -f 433920000 -f 433920000 -H 120 -F syslog:127.0.0.1:1433"
//returns the json payload
function parse_syslog($line)
{
    //Try to extract the payload from a syslog line.//
    $line = mb_convert_encoding($line, "ASCII");

    if (startsWith($line,"<"))
    {
        //fields should be "VER", timestamp, hostname, command, pid, mid, sdata, payload
        $fields = explode(" ",$line, 8);
        $line = $fields[7];
    }
    return $line;
}

//server main loop
for (;;)
{
    //read from $socket into $line
    socket_recvfrom($socket, $line, 1024, 0, $from, $port);
    try
    {
        //parse $line -> returns the json payload
        $line = parse_syslog($line);

        /*
        do something with content of $line
        for example decode $line into a array
        $arr = json_decode($line,true);

        do something with that array and
        puted into a file as json

        file_put_contents('test.json', json_encode($arr, JSON_PRETTY_PRINT);
        */
    }
    catch (Exception $e) {
        echo "---------------------------------------------\n";
        echo 'Exception intercepted: ', $e->getMessage(), "\n";
        echo "------------------------------------------- -\n";
    }
}
?>
