如何处理来自连接的IoT设备的传入JSON数据

时间:2019-05-01 07:59:32

标签: mysql json listener iot

我需要一个我正在从事的个人项目的支持。我有一个已连接的设备,该设备以定义的时间间隔(每1分钟/ 5分钟/ 15分钟等)将JSON数据发送到端口8080上的特定IP地址。

发送的JSON采用以下格式:

{
"MeterSN": “1234”,
"Status": ###,
“Variable1”: “###”,
"Variable2”: “###”,
"Variable3”: ###
}

我已经开始构建PHP Rest API来处理这些数据,但是不知为何无法将其保存到mySQL。

这是我到目前为止所拥有的:

meterdata.php

class MeterDataInput{
    private $conn;
    private $table_name = "meterdata";
    public $MeterSN;
    public $StatusA;
    public $Variable1;
    public $Variable2;
    public $Variable3;

    public function __construct($db){
        $this->conn = $db;
    }
}
function createMeterRecord(){

    $query = "INSERT INTO
                " . $this->table_name . "
            SET
                MeterSN=:MeterSN, Status=:Status, Variable1=:Variable1, Variable2=:Variable2, Variable3=:Variable3";
    // prepare query
    $stmt = $this->conn->prepare($query);
    // sanitize
    $this->MeterSN=htmlspecialchars(strip_tags($this->MeterSN));
    $this->Status=htmlspecialchars(strip_tags($this->Status));
    $this->Variable1=htmlspecialchars(strip_tags($this->Variable1));
    $this->Variable2=htmlspecialchars(strip_tags($this->Variable2));
    $this->Variable3=htmlspecialchars(strip_tags($this->Variable3));
    // bind values
    $stmt->bindParam(":MeterSN", $this->MeterSN);
    $stmt->bindParam(":Status", $this->Status);
    $stmt->bindParam(":Variable1", $this->Variable1);
    $stmt->bindParam(":Variable2", $this->Variable2);
    $stmt->bindParam(":Variable3", $this->Variable3);
    // execute query
    if($stmt->execute()){
        return true;
    }
    return false;
}

index.php

// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// get database connection
include_once 'config/db.php';

// instantiate MeterData object
include_once 'objects/meterdata.php';

$database = new Database();
$db = $database->getConnection();

$meterdata = new MeterDataInput($db);

// get posted data
$data = json_decode(file_get_contents("php://input"));

// make sure data is not empty
if(!empty($data->MeterSN)){

    // set product property values
    $meterdata->MeterSN = $data->MeterSN;
    $meterdata->Status = $data->Status;
    $meterdata->Variable1 = $data->Variable1;
    $meterdata->Variable2 = $data->Variable2;
    $meterdata->Variable3 = $data->Variable3;

    // create the meter data entry
    if($meterdata->createMeterRecord()){
        // set response code - 201 created
        http_response_code(201);
        // update the status
        echo json_encode(array("message" => "Data record was added"));
    }
    // if unable to create the record
    else{

        // set response code - 503 service unavailable
        http_response_code(503);

        // tell the user
        echo json_encode(array("message" => "Unable to add record."));
    }
}

// data is incomplete
else{

    // set response code - 400 bad request
    http_response_code(400);

    // tell the user
    echo json_encode(array("message" => "Unable to create data record. Data is incomplete."));
}

很明显,我也有config.php和db.php

我不确定我要去哪里,但是我看不到mySQL中的记录弹出。

0 个答案:

没有答案