Sixtens hemsida Uppgifter Blogg Om

VED House bokningssystem

Gå till sida

Källkod

api/

database.php

api.php

ved/

monthBookingData.php

openingHoursException.php

bookingData.php

dayTimeframes.php

bookings.php

admin/

revokeToken.php

authorization.php

login.php

modules/

vedDatabase.php

utility.php

gyar/

log.php

auth/

revokeToken.php

authorization.php

login.php

station/

settings.php

log.php

modules/

gyarDatabase.php

databaseConnection.php

database.php

utility.php

credentials.json

weather/

latest.php

old.php

admin/

index.html

changeTimetable.html

login.html

js/

login.js

modules.js

admin.js

header.js

changeTimetable.js

cron/

vedClearExpiredTokens.php

api/gyar/station/log.php

1 lines
<?php
# log.php
# API endpoint
# Fil för en väderstation att ladda upp data på servern.

require_once "gyar/auth/authorization.php";

$functionPOST = function () {
    
$stationId acceptAuthorizationLevels(AuthLevel::STATION);

    require 
"gyar/modules/database.php";

    
$stationData $db->query("SELECT currentStationPointId FROM weatherStation WHERE stationId=:stationId", ["stationId" => $stationId]);
    if (!
$stationData["currentStationPointId"])
        throw new 
APIError(403"Station has not been assigned a point.");

    if (!isset(
$_POST["weatherData"]) && !isset($_POST["stationData"]))
        throw new 
APIParameterError(400, ["weatherData""stationData"], "Missing logging data.");

    if (isset(
$_POST["timestamp"]) && !is_int($_POST["timestamp"]))
        throw new 
APIParameterError(400"timestamp");

    
$db->pdo->beginTransaction();
    try {
        if (isset(
$_POST["timestamp"]))
            
$db->query("INSERT INTO stationPointTimeData(stationPointInstanceId, timestamp) VALUES (:pointId, FROM_UNIXTIME(:timestamp))", ["pointId" => $stationData["currentStationPointId"], "timestamp" => $_POST["timestamp"]]);
        else
            
$db->query("INSERT INTO stationPointTimeData(stationPointInstanceId, timestamp) VALUES (:pointId, CURRENT_TIMESTAMP())", ["pointId" => $stationData["currentStationPointId"]]);
        
$stationPointDataId $db->getLastId();

        if (isset(
$_POST["weatherData"])) {
            
$weatherData $_POST["weatherData"];
            if (
sizeof($weatherData) != || !isset($weatherData["temperature"]) || !isset($weatherData["humidity"]) || !isset($weatherData["airPressure"]) || !isset($weatherData["downfall"]) || !isset($weatherData["windSpeed"]) || !isset($weatherData["windDirection"]))
                throw new 
APIParameterError(400"weatherData");
            
$params $weatherData;
            
$params["stationPointDataId"] = $stationPointDataId;
            
$db->query("INSERT INTO weatherData(stationPointDataId, temperature, humidity, airPressure, downfall, windSpeed, windDirection) VALUES (:stationPointDataId, :temperature, :humidity, :airPressure, :downfall, :windSpeed, :windDirection)"$params);
        }
        if (isset(
$_POST["stationData"])) {
            
$stationData $_POST["stationData"];
            if (
sizeof($stationData) != || !isset($stationData["batteryVoltage"]) || !isset($stationData["solarPanelVoltage"]) || !isset($stationData["internalTemperature"]) || !isset($stationData["efficiencyModeActive"]) || !isset($stationData["chargeCutoffActive"]))
                throw new 
APIParameterError(400"stationData");
            
$params = [
                
"stationPointDataId" => $stationPointDataId,
                
"batteryVoltage" => $stationData["batteryVoltage"],
                
"solarPanelVoltage" => $stationData["solarPanelVoltage"],
                
"lifetimeFlags" => $stationData["efficiencyModeActive"] | $stationData["chargeCutoffActive"] << 1,
            ];
            
$db->query("INSERT INTO stationData(stationPointDataId, batteryVoltage, solarPanelVoltage, lifetimeFlags) VALUES (:stationPointDataId, :batteryVoltage, :solarPanelVoltage, :lifetimeFlags)"$params);
        }

        if (!isset(
$_POST["timestamp"])) {
            
$settings $db->query("SELECT ss.uploadInterval FROM weatherStation ws JOIN stationSettings ss ON ws.stationSettingsId = ss.stationSettingsId WHERE ws.stationId=:stationId", ["stationId" => $stationId]);
            
$db->query("UPDATE weatherStation ws SET nextExpectedUpload=ADDDATE(CURRENT_TIMESTAMP(), INTERVAL :uploadInterval SECOND) WHERE ws.stationId=:stationId", ["stationId" => $stationId"uploadInterval" => $settings["uploadInterval"]]);
        }
    } catch (
Exception $ex) {
        
# Om någonting misslyckas backas allting tillbaka..
        
$db->pdo->rollBack();
        throw 
$ex;
    }
    
$db->pdo->commit();
    
http_response_code(201);

    return 
$stationPointDataId;
};

$api = new APIEndpoint();

$httpPOST = new APIMethod("POST"$functionPOST);
//$httpPOST->setAuthorization($auth);
//$httpPOST->setRequiredBodyParameters(array("temperature"));
$api->addMethod($httpPOST);

return 
$api;
?>