Module – IPSPowerControl

Allgemein

IPSPowerControl ist ein Modul, das die Visualisierung des Stromverbrauchs ermöglicht.

Folgende Funktionalitäten stellt das Modul zur Verfügung.

  • Einbindung von Variablen, die den aktuellen Stromverbrauch in Watt bzw. kWh enthalten
  • Callback Funktionen für die Berechnung von Detailwerten
  • Historisierung der Werte in bestimmten Zeitintervallen
  • Visualisierung der Werte in vordefinierten Graphen (Gesamt,Detail,selektive Stromkreise)

Download und Installation

Voraussetzung

IPSHighcharts, Chartanzeige auf Basis von Highcharts

Die Installation gliedert sich wie für alle IPSLibrary Module in 3 Teile:

  • Download
  • Konfiguration
  • Installation

Download und Installation können entweder manuell mit dem IPSModuleManager gemacht werden oder man verwendet das IPSModuleManagerGUI Modul.

Konfiguration

Im File IPSPowerControl_Configuration.inc.php werden die einzelnen Stromkreise definiert.

Die Konfiguration gliedert sich dabei in 2 Bereiche:

  • Sensoren
  • Visualisierungs Werte
Konfiguration der Sensoren

In der Funktion „IPSPowerControl_GetSensorConfiguration“ werden die Sensoren definiert, dort kann man für jeden Stromkreis Variablen für aktuell Watt Verbrauchswerte und für kWh Verbrauchswerte definieren.

Beispiel

Im folgendem Beispiel werden 3 Strom Sensoren, ein Wasser und ein Gas Sensor definiert.

Bei Strom Sensoren kann jeweils eine Variable für Watt und für kWh Werte angegeben werden. Sollte einer der Sensoren diese Variable nicht zur Verfügung stellen, kann der Wert in der Callback Funktion berechnet werden (Details siehe weiter unten).

  function IPSPowerControl_GetSensorConfiguration() {
    return array(
      0    => array(IPSPC_PROPERTY_NAME        => 'L1',
                    IPSPC_PROPERTY_VARWATT     => 47185,
                    IPSPC_PROPERTY_VARKWH      => null,
                    ),
      1    => array(IPSPC_PROPERTY_NAME        => 'L2',
                    IPSPC_PROPERTY_VARWATT     => null,
                    IPSPC_PROPERTY_VARKWH      => 56151,
                    ),
      2    => array(IPSPC_PROPERTY_NAME        => 'L3',
                    IPSPC_PROPERTY_VARWATT     => 17513,
                    IPSPC_PROPERTY_VARKWH      => 27616,
                    ),
      3    => array(IPSPC_PROPERTY_NAME        => 'Water',
                    IPSPC_PROPERTY_VARM3       => 58167,
                    ),
      4    => array(IPSPC_PROPERTY_NAME        => 'Gas',
                    IPSPC_PROPERTY_VARM3       => 16534,
                    ),
      );
  }
Konfiguration der Visualisierungswerte

In der Funktion „IPSPowerControl_GetValueConfiguration“ werden die Visualisierungs Werte definiert. Die Sensorwerte werden über vordefinierte Timer regelmäßig auf die Visualisierungs Werte übertragen und auch hier autom. Archiviert. Die Übernahme erfolgt mit der default Konfiguration für die Watt Werte jede Minute und für die kWh Werte jede Stunde.

Hintergrund für diesen Mechanismus ist, dass die Datenmenge für die Archivierten Werte kleiner gehalten wird, da die Sensorwerte normalerweise in kleineren Intervallen geliefert werden.

Es ist auch möglich zusätzliche Visualisierungs Werte zu definieren, diese müssen dann aber in den Callback Funktionen berechnet werden (Details siehe auch im Abschnitt Callback Funktions).

Das Property „ValueType“ spezifiert den Type des Visualisierungs Wertes, folgende Werte stehen zur Auswahl:

  • IPSPC_VALUETYPE_TOTAL … definiert die Variable als Summenwert über alle Stromkreise
  • IPSPC_VALUETYPE_DETAIL … definiert die Variable als Detailwert eines Stromkreises
  • IPSPC_VALUETYPE_OTHER … übrige Werte (weder Total noch Detail)
  • IPSPC_VALUETYPE_WATER … Werte eines Wasserverbrauchs Sensors
  • IPSPC_VALUETYPE_GAS … Werte eines Gas Sensors

ACHTUNG: Die Reihenfolge der Werte sollte im nachhinein nicht mehr geändert werden, da sonst die bereits gespeicherten Werte nicht richtig zugeordnet werden.

Beispiel

Im folgendem Beispiel wird zusätzlich zu den Sensorwerten noch ein Wert für die Gesamtsumme definiert. Dieser Wert muss in der Callback Funktion gesondert berechnet werden.

  function IPSPowerControl_GetValueConfiguration() {
    return array(
      0    => array(IPSPC_PROPERTY_NAME        => 'L1',
                    IPSPC_PROPERTY_DISPLAY     => true,
                    IPSPC_PROPERTY_VALUETYPE   => IPSPC_VALUETYPE_DETAIL,
                    ),
      1    => array(IPSPC_PROPERTY_NAME        => 'L2',
                    IPSPC_PROPERTY_DISPLAY     => true,
                    IPSPC_PROPERTY_VALUETYPE   => IPSPC_VALUETYPE_DETAIL,
                    ),
      2    => array(IPSPC_PROPERTY_NAME        => 'L3',
                    IPSPC_PROPERTY_DISPLAY     => true,
                    IPSPC_PROPERTY_VALUETYPE   => IPSPC_VALUETYPE_DETAIL,
                    ),
      3    => array(IPSPC_PROPERTY_NAME        => 'Total',
                    IPSPC_PROPERTY_DISPLAY     => true,
                    IPSPC_PROPERTY_VALUETYPE   => IPSPC_VALUETYPE_TOTAL,
                    ),
      4    => array(IPSPC_PROPERTY_NAME        => 'Wasser',
                    IPSPC_PROPERTY_DISPLAY     => true,
                    IPSPC_PROPERTY_VALUETYPE   => IPSPC_VALUETYPE_WATER,
                    ),
      5    => array(IPSPC_PROPERTY_NAME        => 'Gas',
                    IPSPC_PROPERTY_DISPLAY     => true,
                    IPSPC_PROPERTY_VALUETYPE   => IPSPC_VALUETYPE_GAS,
                    ),
    );
  }

Details zur Konfiguration der einzelnen Stromkreise sind im File IPSPowerControl_Configuration.inc.php zu finden.

Zusätzliche Konfigurationsparameter

Zusätzlich werden noch folgende Parameter definiert:

  • Stromkosten in Cent pro KWh
  • Kosten für Wasser in Cent pro m³
  • Umrechnungsfaktor für Gas von m³ in kWh
  • Kosten für Gas in Cent pro kWh
  • Intervall zur Speicherung der Watt Werte
  • Intervall zur Speicherung der kWh Werte

Utility Funktionen

IPSPowerControl stellt einige Funktionen zur Verfügung, die die Berechnung der Visualisierungs Werte vereinfachen:

  • IPSPowerControl_Value2KWH ($sensorIdx, $factor=1, $correctNegativDifferences=false)
  • IPSPowerControl_Value2m3 ($sensorIdx, $factor=1, $correctNegativDifferences=false)
  • IPSPowerControl_KWH2Watt ($sensorIdx, $factor=1)
  • IPSPowerControl_Watt2KWH ($sensorIdx, $factor=1)
  • IPSPowerControl_GetCalculatedKWH ($sensorIdx)
  • IPSPowerControl_AddCalculatedValue ($name, $value, $factor=1)
  • IPSPowerControl_GetCalculatedValue ($name)

Der Parameter $sensorIdx spezifiziert jeweils den Index des jeweiligen Sensors, der zur Berechnung des Wertes verwendet werden soll.

Mit dem Korrekturfaktor kann der Sensor Wert vor der Speicherung korrigiert werden.
Beispiel: Sensor liefert 2 Impulse pro KWH, mit einen Faktor von 1/2 kann der Sensorwert wieder korrigiert werden.

Mit dem Parameter $correctNegativDifferences werden nur die positiven Differenzen zum letzten Sensorwert ausgewertet (dieses Feature sollte aktiviert werden, wenn der Sensor nach einem Stromausfall wieder bei 0 beginnt).

Callback Funktionen

Folgende Callback Funktionen stehen zur Zeit zur Verfügung:

  • IPSPowerControl_CalculateValuesWatt($sensorList, $valueList)
  • IPSPowerControl_CalculateValuesKWH($sensorList, $valueList)

Diese Funktionen werden zum Berechnen der Watt bzw. kWh Werte aufgerufen. Im einfachsten Fall, wenn die Liste der Sensoren gleich der Visualisierungs Liste ist, brauchen die Werte der Arrays nur durchgereicht zu werden (das ist auch die default Implementierung der Funktionen).

Hat man aber noch zusätzliche Visualisierungs Variablen definiert, so müssen die Werte hierfür in dieser Funktion berechnet werden.

Beispiele für berechnete Werte:

  • Licht, anhand der IP-Symcon Steuerung weiß man welche Lichter in Betrieb sind und kann den Verbrauch berechnen (IPSLight unterstützt zum Beispiel diese Funktionalität)
  • Konstante Verbraucher – Verbraucher, die einen fixen Stromverbrauch haben (zB Wohnraumlüftung) können ebenfalls herausgerechnet werden.

Berechnung der Watt Werte

Hier werden aus den Sensor Werten die Visualisierungs Werte in Watt berechnet.

Für Gas und Wasser Sensoren muss hier nichts berechnet werden.

Beispiel

Die Funktion IPSPowerControl_KWH2Watt kann für die Berechnung der Watt Werte verwendet werden, wenn der Sensor keine Watt Angabe unterstützt.

Zusätzlich wird auch noch die Summe der 3 einzelnen Phasen berechnet, für diesen Wert gibt es keinen eigenen Sensor, dieser Visualisierungs Wert wird aus den anderen Sensor Werten berechnet.

Mit der Funktion IPSPowerControl_Watt2KWH kann man aus einem Sensor, der nur Watt Werte unterstützt, die KWH Werte berechnen. Diese berechneten Werte kann man später mit der Funktion IPSPowerControl_GetCalculatedKWH wieder auslesen.

function IPSPowerControl_CalculateValuesWatt($sensorList, $valueList) {
    // Berechnung der Watt Visualisierungs Werte 
    $returnList[0] = $sensorList[0];
    $returnList[1] = IPSPowerControl_KWH2Watt(1);
    $returnList[2] = $sensorList[2];
    $returnList[3] = $returnList[0]+$returnList[1]+$returnList[2];

    // Berechnung der KWH Werte zur späteren Verwendung
    IPSPowerControl_Watt2KWH(0);

    return $returnList;
}

Berechnung der kWh Werte

Hier werden aus den Sensor Werten die Visualisierungs Werte in kWh bzw. die Werte für Gas und Wasser berechnet.

Beispiel

Die Funktion IPSPowerControl_GetCalculatedKWH kann verwendet werden, wenn der Sensor keine KWH Werte unterstützt. Die KWH Werte müssen allerdings vorher in der Watt Callback Methode mit der Funktion IPSPowerControl_Watt2KWH berechnet werden.

Die Funktion IPSPowerControl_Value2KWH bietet die Möglichkeit zur Auswertung von Differenzen. Nützlich wenn der Sensor nach einem Spannungsausfall wieder bei 0 zu zählen beginnt.

Mit der Funktion IPSPowerControl_Value2m3 kann man das Selbe auch für Gas bzw. Wasser Sensoren realisieren.

function IPSPowerControl_CalculateValuesKWH($sensorList, $valueList) {
    $returnList[0] = IPSPowerControl_GetCalculatedKWH (0);
    $returnList[1] = IPSPowerControl_Value2KWH(1, 1, true);
    $returnList[2] = IPSPowerControl_Value2KWH(2, 1/20);
    $returnList[3] = $returnList[0]+$returnList[1]+$returnList[2];
    $returnList[4] = IPSPowerControl_Value2m3(3);
    $returnList[5] = IPSPowerControl_Value2m3(4);

    return $returnList;
}

Weiterführende Links

Diskussions Thread zum Modul

IPSLibrary Main Thread

IPSLibrary Diskussions Thread

GUI

Detailansicht aller Stromkreise

 

IPSPowerControl_Details

Kreissegment Ansicht aller Stromkreise

IPSPowerControl_Pie

Ansicht einzelner Stromkreise

IPSPowerControl_Watt

Tipps und Tricks

Korrektur der Startwerte

IPSPowerControl geht davon aus, dass die eingelesenen Sensorwerte fortlaufende Absolutwerte sind. Diese werden auch so dargestellt und in weiterer Folge werden die Differenzwerte automatisch berechnet und dargestellt. Das hat zur Folge, daß der Anfangswert falsch dargestellt wird (nämlich der absolute Sensorwert) und dann weiters aufgrund der automatischen Skalierung der Diagramme durch Highchart die folgenden Werte nicht mehr sichtbar sind. IPSPowerControl aktualisiert mit den Standardeinstellungen stündlich die Verbrauchswerte für die m3 und kwh Werte bzw. minütlich für die Watt Werte.

IPSPowerControl_Correct1

IPSPowerControl_Correct2

Dieses Verhalten kann folgendermaßen korrigiert werden:

IPSPowerControl legt unter IPS Library\data\modules\IPS PowerControl\Values die jeweiligen Verbrauchsvariablen ab. Mit dem Archive Handler kann man die einzelnen gespeicherten Werte der Variablen einsehen und löschen. Hier sieht man auch den Anfangswert, der 0 ist, diesen kann man mit dem Papierkorbsymbol in der jeweiligen Zeile löschen.
IPSPowerControl_Correct3
Damit dieser Wert auch in den Diagrammen verschwindet, muß man die Variablen neu aggregieren. Das kann man entweder manuell (mit Doppelklick auf die Variable und Button Neu Aggregieren) machen, oder durch ein Script (von einem User aus dem Forum) automatisch machen lassen.

Automatisch: Folgendes

IPSPowerControl_Correct4

Script anlegen und ausführen:

<?php

/*****
*
* Automatische Reaggregation aller geloggten Variablen
*
* Dieses Skript reaggregiert automatisch alle geloggten Variablen nacheinander
* automatishert bei Ausführung. Nach Abschluss des Vorgangs wird der Skript-Timer
* gestoppt. Zur erneuten kompletten Reaggregation ist der Inhalt der automatisch
* unterhalb des Skripts angelegten Variable 'History' zu löschen.
*
*****/

$archiveHandlerID = IPS_GetInstanceIDByName("Archive Handler", 0);
$historyID = CreateVariableByName($IPS_SELF, "History", 3, "");

$finished = true;
$history = explode(',', GetValue($historyID));
$variableIDs = IPS_GetVariableList();

foreach ($variableIDs as $variableID)
{
  if (AC_GetLoggingStatus($archiveHandlerID, $variableID) && !in_array($variableID, $history))
  {
     $finished = false;

    if (@AC_ReAggregateVariable($archiveHandlerID, $variableID))
    {
      $history[] = $variableID;
      SetValue($historyID, implode(',', $history));
    }

    break;
  }
}

if ($finished)
{
  IPS_LogMessage('Reaggregation', 'Reaggregation completed!');
}

IPS_SetScriptTimer($IPS_SELF, $finished ? 0 : 60);

function CreateVariableByName($id, $name, $type, $profile = "")
{
  global $IPS_SELF;
  $vid = @IPS_GetVariableIDByName($name, $id);
  if($vid === false)
  {
    $vid = IPS_CreateVariable($type);
    IPS_SetParent($vid, $id);
    IPS_SetName($vid, $name);
    IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
    if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
  }
  return $vid;
}

?>

Das Script legt im Objektbaum eine Variable an, in der die aggregierten Variablen abgelegt werden und läuft solange, bis alle Variablen aggregiert wurden.

Achtung! Das kann je nach Anzahl der Variablen und der darin abgelegten Werte länger dauern und die CPU Auslastung des Rechners geht in diesem Zeitraum entsprechend hoch.

IPSPowerControl_Correct5