Tack för dit svar! Felet beror nog på att jag hade en egen yr parser som laddar in temperatur och väderförhållanden prognosen timme för timme. Såg nu att den standard yr parser endast hämtar aktuell temperatur ur xml filen (och även cachar den lokalt så att den inte hämtas s ofta). Därför fick jag också temperaturen från “framtiden” i infoboxen.
Eftersom jag gillar ha med prognosen i databasen vill jag jag gärna ha kvar en yr parser som gör det. Försökte förstå hur jag skulle kunna ändra koden i parser/system/yr.php funkar men fastnade på vägen
Här på rad 40
Code: Select all
$sensorReading = array("sensor_serial" => "yr-forecast-".$sensor,
"temp_c" => $value,
"date" => "now");
writeReading($sensorReading);
borde nog bli något i stil med
Code: Select all
$sensorReading = array("sensor_serial" => $sensorserial,
"temp_c" => $value,
"date" => $datehour); // te x '2017-01-24 11:00:00' från xml filen
writeReading($sensorReading);
Men det funkar inte ändå för funktion writeReading verkar ersätta värdet för date med now()?
Tror att jag hittade funktionen i system/classes/Sensors.php på rad 174
public static function writeReading($sensorId, $serial, $value, $name = "") {
………
………
Code: Select all
$params = array(
new dbParam(dbParamType::$STRING, "sensor_serial", $serial),
new dbParam(dbParamType::$DOUBLE, "temp_c", $value),
new dbParam(dbParamType::$STRING, "date", dbParam::now())
);
Antar att den funktionen då också skulle kunna ta in date som parameter, typ så här:
function writeReading($sensorId, $serial, $value, $date="", $name = "") {
……
……
och sedan typ
Code: Select all
if($date ==''){$date = date("Y-m-d H:i:s”);}
$params = array(
new dbParam(dbParamType::$STRING, "sensor_serial", $serial),
new dbParam(dbParamType::$DOUBLE, "temp_c", $value),
new dbParam(dbParamType::$STRING, "date", $date)
);
och sedan finns längre ner något som jag antar sätter in aktuell temp i tabellen temsensors:
Code: Select all
$params = array(
new dbParam(dbParamType::$DOUBLE, "last_reading", $value),
new dbParam(dbParamType::$INTEGER, "last_reading_id", $id),
new dbParam(dbParamType::$DOUBLE, "previous_reading", $sensorData[0]["last_reading"])
);
$db->save("tempsensors", $params, $sensorData[0]["id"]);
Den skulle då också behöva kompletteras vilkoret att $date == tid just nu (inom några minuter)
Men jag gav upp där och gjorde i stället en fulsnabb lösning där yr.php nu skriver in värderna i databasen direkt. Det funkar nu och med scheduled event i mysql databasen som uppdaterar lastreading som jag skrev om innan.
/Aryan