Enkel trådlös temperatursensor uppdatera webbplatsen med elektriska imp och termistor (18 / 21 steg)
Steg 18: Få på webbservern
JSON.php är en server baserad fil att imp moln tjänst samtal, passerar data från ditt imp program till det som JSON formaterade data. Den funktionen är att avkoda data, logga det till en loggfil (eller en databas) och spara den i ett format för enkel visning.
(Glöm inte, bara kopiera mellan koden börjar och koden slutet Taggar, inte taggarna sig)
< koden börja >
<? php
sript att få URL-kodade JSON data från IMP
JSON-sträng liknar:
{"värde": {"volt":3.2780001163482666,"temp":24.332368850708008}, "mål": "300e600a779951c4", "kanal": 1}
funktion jsonToArray ($json) {
Konverterar JSON objekt till en standard Array
$json = substr ($json, strpos ($json,'{") + 1, strlen($json));
$json = substr ($json, 0, strrpos($json,'}'));
$json = preg_replace('/(^|,)([\\s\\t]*)([^:]*) (([\\s\\t]*)):(([\\s\\t]*))/s', ' $1 "$3" $4: ", trim($json));
återgå json_decode ('{". $json."} ", true);
}
Få data i en matris som vi kan arbeta med
$dArray = jsonToArray (file_get_contents ('php://input'));
extrahera varje komponent i egen variabel för att underlätta
behandlingen. Obs, detta inte är obligatoriska eftersom det är verkligen
fördubbling upp men kan göra koden lite lättare att läsa.
$target = $dArray ['mål'];
$channel = $dArray ['kanal'];
Observera att de data du definiera och skicka i Imp-koden är
en matris inom "värde" nyckel/värde-paret.
$temp = $dArray ['värde'] ['temp'];
$volt = $dArray ['värde'] ['v'];
$location = $dArray ['värde'] ['plats'];
skapa ett datum/tidsstämpel
se http://php.net/manual/en/timezones.php för stöds tidszoner
date_default_timezone_set("Australia/Adelaide");
$dateTime = datum ("Y-m-d H:i:s"); "Y-m-d H:i:s"
Vi ska skapa en loggfil i CSV-format. Obs, beroende på uppdateringsfrekvens, denna fil kan bli
mycket stor!!! Du kan också ändra det för att logga data till en mySQL-server istället.
$fa = fopen ("data.csv", "a");
om (flock ($fa, LOCK_EX))
{
fwrite ($fa, $target. "," . $channel. "," . $dateTime. "," . number_format ($temp, 2). ",". number_format ($volt, 2). "\n");
fflush($FA);
flock ($fa, LOCK_UN);
}
Skapa den fil som kan läsas för live uppdateringar i en webbläsare.
$fw = fopen ("latestImpData.txt", "w");
om (flock ($fw, LOCK_EX))
{
fwrite ($fw, $target. "|" . $channel. "|" . $dateTime. "|" . number_format ($temp, 1). "|". number_format ($volt, 2). "|" . $location);
fwrite ($fw, file_get_contents ('php://input'));
fflush($FW);
flock ($fw, LOCK_UN);
}
? >
< code slut >