+ Antworten
Ergebnis 1 bis 5 von 5
  1. #1
    Registriert seit
    Aug 2010
    Beiträge
    749

    Standard 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?

  2. #2
    Registriert seit
    Mar 2008
    Ort
    Ruesselsheim
    Beiträge
    3,855

    Hallo
    Daten zu einem bestimmten Zeitpunkt in die Datenbank einzufuegen funktioniert hiermit
    https://www.symcon.de/service/dokume...dloggedvalues/

    Danach noch eine Reaggregation per Script.

  3. #3
    Registriert seit
    Aug 2010
    Beiträge
    749

    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-Code:
    <?php

    $ch 
    curl_init();

    curl_setopt($chCURLOPT_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($chCURLOPT_RETURNTRANSFERtrue);

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

    $SensiboArray json_decode($server_outputtrue);
    $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->setAttributePDO::ATTR_ERRMODEPDO::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>";
    }
    ?>

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    10,171

    Zitat Zitat von aag Beitrag anzeigen
    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-Code:
    <?php

    $ch 
    curl_init();

    curl_setopt($chCURLOPT_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($chCURLOPT_RETURNTRANSFERtrue);

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

    $SensiboArray json_decode($server_outputtrue);
    $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->setAttributePDO::ATTR_ERRMODEPDO::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
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Aug 2010
    Beiträge
    749

    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-Code:
    <?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->setAttributePDO::ATTR_ERRMODEPDO::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");
    ?>

Ähnliche Themen

  1. externer Zugriff über Webhook (Werte and Symcon senden) Frage:
    Von AndyA1 im Forum Allgemeine Diskussion
    Antworten: 5
    Letzter Beitrag: 24.05.20, 13:14
  2. Migration einer CSV-Datei in die IPS-Datenbank
    Von audi2010 im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 25.09.17, 08:45
  3. Externe Daten in IPS Datenbank eintragen?
    Von Daste im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 24
    Letzter Beitrag: 14.06.16, 17:04
  4. Werte externer Scripte an IPS Variablen übergeben ?
    Von mareng im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 16.01.11, 12:33
  5. mit IPS script auf die RDD datenbank zugreifen!?
    Von Roeni im Forum IP-Symcon WIIPS für Version 1.0
    Antworten: 2
    Letzter Beitrag: 20.05.07, 17:02