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
GUI
Detailansicht aller Stromkreise
Kreissegment Ansicht aller Stromkreise
Ansicht einzelner Stromkreise
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.
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.
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
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.