Eintragen externer Werte in die IPS-Datenbank

Ich habe einige Sensibo-Sensoren, welche Feuchte und Temperatur messen. Sie speichern die Werte einer ganzen Woche intern, und können via POST/GET abgefragt werden. Nun würde ich die Werte gerne in IPS einbinden. Ständige Abfragen sind aber overkill, eine Abfrage alle 24 Std reicht völlig.

Aber existiert eine Möglichkeit, ein Array von Werten mit Timestamp (welches problemlos aus dem Sensibo geholt werden kann) in die IPS-Datenbank zu importieren, so dass es dann als Variable dargestellt werden kann?

Hallo
Daten zu einem bestimmten Zeitpunkt in die Datenbank einzufuegen funktioniert hiermit
https://www.symcon.de/service/dokumentation/modulreferenz/archive-control/ac-addloggedvalues/

Danach noch eine Reaggregation per Script.

danke. Ich habe nun ein Skript geschrieben um die Daten in ein Microsoft SqlExpress zu schreiben. Hier ist der Skript, falls es für jemanden interessant sein könnte. Es braucht allerdings die PDO Extension im PHP und den entsprechenden Eintrag in PHP.ini.

Hätte jemand vielleicht einen Code Snippet, um von MsSQL auf IPS zu übertragen? Oder, noch lieber, kann man die Webfront-Graphik mit MsSql als externe Datenquelle füttern?


<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"https://home.sensibo.com/api/v2/pods/2MBXUhuw/historicalMeasurements?apiKey=JyZ8vtNy8K9b&days=1");
//curl_exec ($ch);
//curl_setopt($ch, CURLOPT_GETFIELDS, $AcCommand);

// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec($ch);
//echo $server_output;
curl_close ($ch);

$SensiboArray = json_decode($server_output, true);
$temperatureArray= $SensiboArray["result"]["temperature"];
$humidityArray= $SensiboArray["result"]["humidity"];

insertArray($temperatureArray, "dbo.TemperatureSportRoom", "temperatureValue");
insertArray($humidityArray, "dbo.HumiditySportRoom", "humidityValue");


//***************************
//  FUNCTION INSERT ARRAY INTO SQL SERVER
//*************************** 

function insertArray($sensibo, $dbo, $sensorValue)
{//connect to SQL server
$SqlIsPassword= $_ENV["SqlIpsPassword"];
$SqlIpsUser=  "SqlAdmin";
$SqlServerString = "sqlsrv:Server=SERVERKELLER\SQLEXPRESS;Database=sensiboValues";
try  
    {$conn = new PDO($SqlServerString, $SqlIpsUser, $SqlIsPassword);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );}  
catch(Exception $e)  
    {die( print_r( $e->getMessage() ) );   }  
//insert arrays
$insertString = "INSERT INTO ". $dbo .  "(" . $sensorValue.", timestamp" .") VALUES ";
//echo $insertString;
$counterFails = 0;
$counterSuccess = 0;
foreach($sensibo as $eachElement)
    {
    $temper=  number_format(($eachElement["value"]),2,'.','');
    //echo "value:".$temper."¦ "; 
    $timest = "'".$eachElement['time']."'";
    //echo "time:".$timest."¦ ";
    try 
        {$conn->query($insertString .  "(". $temper.", ". $timest.")");
        $counterSuccess=$counterSuccess+1; }
    catch(Exception $e)  
          {$counterFails = $counterFails +1;}
    }
    echo "success  n = ". $counterSuccess ."<br>";
    echo "failures n = ". $counterFails ."<br>";
}
?>

Es gibt zwei verfügbare Module um IPS Variablen in externe Datenbanken zu schreiben.
Einmal MySql und einmal MSSql.
Aber die Darstellung funktioniert nur mit externen Lösungen wie Highcharts oder Grafana.
Die IPS Diagramme funktionieren nur mit dem IPS Archiv.
Michael

Besten Dank. Ich hab mich letzen Endes dafür entschieden, die Graphen mit jpgraph zu machen und dann die PNG in Webfront darzustellen. Hier ist der Code, falls für jemanden nützlich:


<?php

// connect to sql
//connect to SQL server


$SqlIsPassword= $_ENV["SqlIpsPassword"];
$SqlIpsUser=  "SqlAdmin";
$SqlServerString = "sqlsrv:Server=SERVERKELLER\SQLEXPRESS;Database=sensiboValues";
try  
    {$conn = new PDO($SqlServerString, $SqlIpsUser, $SqlIsPassword);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );}  
catch(Exception $e)  
    {die( print_r( $e->getMessage() ) );   }  

//retrieve data
$sqlQuery_X = "SELECT DATEDIFF(SECOND,'1970-01-01',[timestamp]) AS timestamp2 FROM [sensiboValues].[dbo].[HumiditySportRoom]";
$sqlQuery_Y = "SELECT [humidityValue] FROM [sensiboValues].[dbo].[HumiditySportRoom]";

echo $sqlQuery_X;

$humidityArray_y = $conn->query($sqlQuery_Y)->fetchAll(PDO::FETCH_COLUMN);
$humidityArray_x = $conn->query($sqlQuery_X)->fetchAll(PDO::FETCH_COLUMN);

//print_r($humidityArray_x);





// **********************************


require_once ('C:\Program Files\Symcon\ext\jpgraph\src\jpgraph.php');
require_once ('C:\Program Files\Symcon\ext\jpgraph\src\jpgraph_line.php');
require_once ('C:\Program Files\Symcon\ext\jpgraph\src\jpgraph_date.php');


// Some data
$nowDate = Time();
$ydata = $humidityArray_y;
$xdata = $humidityArray_x;
//print_r ($xdata);

// Create the graph. These two calls are always required
// Setup the graph

$graph = new Graph(1500,1250);
$graph->SetScale("textlin");

$theme_class=new UniversalTheme;

$graph->SetTheme($theme_class);
$graph->img->SetAntiAliasing(false);
$graph->title->Set('Filled Y-grid');
$graph->SetBox(false);

$graph->SetMargin(40,20,36,63);

$graph->img->SetAntiAliasing();

$graph->yaxis->HideZeroLabel();
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);

$graph->xgrid->Show();
$graph->xgrid->SetLineStyle("solid");
//$graph->xaxis->SetTickLabels(array('A','B','C','D'));
$graph->xgrid->SetColor('#E3E3E3');

// Create the first line
$p1 = new LinePlot($ydata);
$graph->Add($p1);
$p1->SetColor("#6495ED");
$p1->SetLegend('Line 1');

/* / Create the second line
$p2 = new LinePlot($datay2);
$graph->Add($p2);
$p2->SetColor("#B22222");
$p2->SetLegend('Line 2');
*/

$graph->legend->SetFrameWeight(1);
// Display the graph
unlink("C:\ProgramData\Symcon\webfront\jpgraph2\imagefile.png");
$graph->Stroke("C:\ProgramData\Symcon\webfront\jpgraph2\imagefile.png");
?>