Hallo,
ich habe das doch noch angepasst, um die Monate und Jahre der Anlagen miteinander vergleichen zu können
Anlegen von Variablen
<?
//Kategorie manuell anlegen, Name = Verzeichnisname des FTP-Servers!!!
set_time_limit(60);
include "Funktionen_ads10.ips.php"; //Funktionen-Script einbeziehen
//Variablen
$VarArray = array(
1 => "var AnlagenKWP=integer,Anlagenleistung in kWp",
2 => "var SollYearKWP=integer,Sollleistung in kWh/kWp",
3 => "var AnzahlWR =integer,Anzahl Geraete",
4 => "var HPTitel=string,Anlagenbezeichnung",
5 => "var HPBetreiber=string,Betreiber",
6 => "var HPEmail=string,Kontakt-EMail-Adresse",
7 => "var HPStandort=string,Standort der Anlage",
8 => "var HPModul=string,Module und Hersteller",
9 => "var HPWR=string,Wechselrichter und Hersteller",
10 => "var HPLeistung=string,Groesse der Anlage",
11 => "var HPInbetrieb=string,Installationsdatum",
12 => "var HPAusricht=string,Modulneigung und Ausrichtung",
13 => "var Verguetung=integer,Verguetung",
14 => "var Serialnr =integer,Seriennummer",
15 => "var Firmware =string,Firmware",
16 => "var FirmwareDate =string,Datum der Firmware",
17 => "var WRTyp =string,Kommunikation der Wechselrichter",
18 => "var OEMTyp =integer,OEM-Typ",
19 => "var SLTyp =string,SL-Typ",
20 => "var SLVer =integer,SL-Version",
21 => "var SLHW =integer,SLHW",
22 => "var SLBV =integer,SLBV",
23 => "var Intervall =integer,Intervall",
24 => "var SLDatum =string,SLDatum",
25 => "var SLUhrzeit =string,SLUhrzeit",
26 => "var CFDatum =string,CFDatum",
27 => "var CFUhrzeit =string,CFUhrzeit"
);
//WRInfo
$VarWRInfoArray = array(
0 => "Typ",
1 => "Adresse",
2 => "Modulleistung in W",
3 => "unbenutzt",
4 => "Bezeichnung",
5 => "Anzahl Strings",
6 => "Stringbezeichnungen",
7 => "Modulfelder",
8 => "Nennleistung",
9 => "Stringleistungen",
10 => "Hersteller",
11 => "Funktion",
12 => "Innentemperaturmessung?",
13 => "Korrekturfaktor",
14 => "Erweiterung"
);
//Hersteller
$VarWRInfoHerstellerArray = array(
1 => "SMA",
2 => "Kaco",
3 => "Sunways",
4 => "Solarmax",
5 => "Fronius",
6 => "Powerlynx/Kyocera",
7 => "Power-One",
8 => "Mitsubishi",
9 => "SOIN",
10 => "DELTA",
11 => "Solutronic",
17 => "Kostal"
);
// Hauptkategorie ermitteln (ID der Anlage)
$AnlagenID = IPS_GetParent($IPS_SELF);
$Anlagenname = IPS_GetName($AnlagenID);
//Dummy-Instanz Konfigurationsdaten anlegen
$InstIDKonfigurationsdaten = checkcreateDummyInstance($AnlagenID, "Konfigurationsdaten");
//Dummy-Instanzen anlegen
$InstIDBetriebsdaten = checkcreateDummyInstance($AnlagenID, "Betriebsdaten");
$InstIDDaten = checkcreateDummyInstance($InstIDBetriebsdaten, "Daten");
$InstIDMesswerte = checkcreateDummyInstance($InstIDBetriebsdaten, "Messwerte");
$InstIDRechenwerte = checkcreateDummyInstance($InstIDBetriebsdaten, "Rechenwerte");
$InstIDStatus = checkcreateDummyInstance($InstIDBetriebsdaten, "Status");
$InstIDDiagramme = checkcreateDummyInstance($AnlagenID, "Diagramme");
$InstIDScripte = checkcreateDummyInstance($AnlagenID, "Scripte");
//Variablen in Instanz "Daten" anlegen
$VarIDDatenAenderungDays = CreateVariable ("Daten-Aenderung (days.js)", 3, $InstIDDaten, "", "");
$VarIDDatenAenderungMinDay = CreateVariable ("Daten-Aenderung (min_day.js)", 3, $InstIDDaten, "", "");
$VarIDDatenAenderungMonths = CreateVariable ("Daten-Aenderung (months.js)", 3, $InstIDDaten, "", "");
$VarIDDatenAenderungYears = CreateVariable ("Daten-Aenderung (years.js)", 3, $InstIDDaten, "", "");
$VarIDDatenDatumMinDays = CreateVariable ("Daten Datum (min_day.js)", 3, $InstIDDaten, "", "");
$VarIDDatenUhrzeitMinDays = CreateVariable ("Daten Uhrzeit (min_day.js)", 3, $InstIDDaten, "", "");
$VarIDDatenDatumDays = CreateVariable ("Daten Datum (days.js)", 3, $InstIDDaten, "", "");
$VarIDDatenDatumMonths = CreateVariable ("Daten Datum (months.js)", 3, $InstIDDaten, "", "");
$VarIDDatenDatumYears = CreateVariable ("Daten Datum (years.js)", 3, $InstIDDaten, "", "");
$VarIDDatenDatenStatus = CreateVariable ("Datenstatus", 3, $InstIDDaten, "~HTMLBox", "");
//Variablen in Instanz "Messwerte" anlegen
$VarIDPACJahresertragStartwert = CreateVariable ("PAC Jahresertrag Startwert", 2, $InstIDMesswerte, "MWh", 0);
$VarIDPACMonatsertragStartwert = CreateVariable ("PAC Monatsertrag Startwert", 2, $InstIDMesswerte, "kWh", 0);
$VarIDPACTagesertragAktuell = CreateVariable ("PAC Tagesertrag aktuell", 2, $InstIDMesswerte, "kWh", 0);
$VarIDPACTagesertragDavor = CreateVariable ("PAC Tagesertrag davor", 2, $InstIDMesswerte, "kWh", 0);
$VarIDPDCLeistungAktuell = CreateVariable ("PDC Leistung aktuell", 2, $InstIDMesswerte, "kWh", 0);
$VarIDPACLeistungAktuell = CreateVariable ("PAC Leistung aktuell", 2, $InstIDMesswerte, "kWh", 0);
$VarIDPACMonatsertragBisGestern = CreateVariable ("PAC Monatsertrag bis gestern", 2, $InstIDMesswerte, "kWh", 0);
$VarIDPACJahresertragBisGestern = CreateVariable ("PAC Jahresertrag bis gestern", 2, $InstIDMesswerte, "kWh", 0);
//Variablen in Instanz "Rechenwerte" anlegen
$VarIDPACDeltaTagesertrag = CreateVariable ("PAC Delta Tagesertrag", 2, $InstIDRechenwerte, "kWh", 0);
$VarIDPACErtragLaufend = CreateVariable ("PAC Ertrag laufend", 2, $InstIDRechenwerte, "kWh", 0);
$VarIDPACJahresertragAktuell = CreateVariable ("PAC Jahresertrag aktuell", 2, $InstIDRechenwerte, "MWh", 0);
$VarIDPACMonatsertragAktuell = CreateVariable ("PAC Monatsertrag aktuell", 2, $InstIDRechenwerte, "kWh", 0);
$VarIDWirkungsgrad = CreateVariable ("Wirkungsgrad", 2, $InstIDRechenwerte, "Prozent", 0);
$VarIDkwhp = CreateVariable ("spezifischer Tagesertrag", 2, $InstIDRechenwerte, "kWhkWp", 0);
$VarIDkwhpM = CreateVariable ("spezifischer Monatsertrag", 2, $InstIDRechenwerte, "kWhkWp", 0);
$VarIDkwhpY = CreateVariable ("spezifischer Jahresertrag", 2, $InstIDRechenwerte, "kWhkWp", 0);
//Variablen in Instanz "Status" anlegen
$VarIDStatusDatum = CreateVariable ("Status Datum (min_cur.js)", 3, $InstIDStatus, "","");
$VarIDStatusUhrzeit = CreateVariable ("Status Uhrzeit (min_cur.js)", 3, $InstIDStatus, "","");
$VarIDStatusGeraete = CreateVariable ("Status Geraete", 3, $InstIDStatus, "~HTMLBox","");
$VarIDWirkungsgradeGeraete = CreateVariable ("Wirkungsgrade Geraete", 3, $InstIDStatus, "~HTMLBox","");
$VarIDStatusDatenStatus = CreateVariable ("Datenstatus", 3, $InstIDStatus, "~HTMLBox", "");
// Anlagennamen anlegen
CreateVariable ("Anlage", 3, $InstIDKonfigurationsdaten, "", $Anlagenname);
//Speichert alle Wechselrichter-Instanzen als Array
$GeraeteInstanzen = CreateVariable ("Geraete-Instanzen", 3, $InstIDKonfigurationsdaten, "", "");
SetValue($GeraeteInstanzen,"");
// Datenpfad zum FTP-Verzeichnis anlegen
$Datenpfad = GetValue(CreateVariable ("Datenpfad", 3, $InstIDKonfigurationsdaten, "", GetFTPPath($Anlagenname)));
// Solarlog-Konfigurationsdatei finden
$base_vars_js = $Datenpfad."/base_vars.js";
// Globale Konfig-Daten einlesen
for ($i=1;$i<count($VarArray);$i++){
$zeile[$i] = $VarArray[$i];
$posTrenner = strpos($zeile[$i],"=");
$Variablenname = substr($zeile[$i],0,$posTrenner+1);
$Variablenlaenge = strlen($Variablenname);
$Wert = substr($zeile[$i],$posTrenner+1);
$WertInhalte = explode(",",$Wert);
$Datentyp = $WertInhalte[0];
$WertName = $WertInhalte[1];
If ($Datentyp == "string")
{
CreateVariable ($WertName, 3, $InstIDKonfigurationsdaten, "", GetSolarlogValue($Variablenname,$Variablenlaenge,$Datentyp,$base_vars_js));
}
If ($Datentyp == "integer")
{
CreateVariable ($WertName, 1, $InstIDKonfigurationsdaten, "", GetSolarlogValue($Variablenname,$Variablenlaenge,$Datentyp,$base_vars_js));
}
}
// Wechselrichter / Geräte als Instanzen anlegen
$AnzahlGeraete = GetValue(IPS_GetVariableIDByName("Anzahl Geraete",$InstIDKonfigurationsdaten));
$neuesi = "";
$interneNummer = "";
for ($i=0;$i<$AnzahlGeraete;$i++){
$Geraetetyp = "";
$x=0;
$Suchmuster = "WRInfo[$i]=new Array";
$inhalt = str_replace("\"","",GetSolarlogValue($Suchmuster,strlen($Suchmuster),"",$base_vars_js));
$LaengeInhalt = strlen($inhalt);
$posLinkeKlammer = strpos($inhalt,"(");
$inhalt2 = substr($inhalt,$posLinkeKlammer+1,$LaengeInhalt-$posLinkeKlammer-4);
$WRDaten[$i] = explode(",",$inhalt2);
if ($i < 9)
{
$neuesi = (string) $i+1;
$interneNummer = "0".$neuesi;
}
else
{
$neuesi = (string) $i+1;
$interneNummer = $neuesi;
}
//Gerätetyp ermitteln
switch (ltrim($WRDaten[$i][11])){ //Gerätetyp
case 0:
$Geraetetyp="Wechselrichter";
$WRName = ltrim($WRDaten[$i][4]);
$DummyID = checkcreateDummyInstance($AnlagenID, $interneNummer." - ".$Geraetetyp.": ".$WRName); //Wechselrichter anlegen
$VarIDGeraetetyp = CreateVariable ("Geraetetyp", 3, $DummyID, "",$Geraetetyp);
IPS_SetHidden($VarIDGeraetetyp, true); //Objekt verstecken
SetValue($GeraeteInstanzen,(GetValue($GeraeteInstanzen).",".$DummyID));
$AnzahlStrings = ltrim($WRDaten[$i][5]);
If ($AnzahlStrings > 1){
$VarIDAnzahlStrings = CreateVariable ("Anzahl Strings", 1, $DummyID, "",(int)$AnzahlStrings);
IPS_SetHidden($VarIDAnzahlStrings, true); //Objekt verstecken
//Namen
$SuchmusterWR = "WRInfo[$i][6]=new Array";
$inhaltWR = str_replace("\"","",GetSolarlogValue($SuchmusterWR,strlen($SuchmusterWR),"",$base_vars_js));
$LaengeInhaltWR = strlen($inhaltWR);
$posLinkeKlammerWR = strpos($inhaltWR,"(");
$inhalt2WR = substr($inhaltWR,$posLinkeKlammerWR+1,$LaengeInhaltWR-$posLinkeKlammerWR-4);
$StringDatenWR[$i] = explode(",",$inhalt2WR);
for ($z=0;$z<$AnzahlStrings;$z++){
$interneNummerStrings = $z+1;
$DummyIDString = checkcreateDummyInstance($DummyID, "String ".$interneNummerStrings);
CreateVariable ("Bezeichnung", 3, $DummyIDString, "",$StringDatenWR[$i][$z]);
//Modulleistungen
$SuchmusterWR2 = "WRInfo[$i][9]=new Array";
$inhaltWR2 = str_replace("\"","",GetSolarlogValue($SuchmusterWR2,strlen($SuchmusterWR2),"",$base_vars_js));
$LaengeInhaltWR2 = strlen($inhaltWR2);
$posLinkeKlammerWR2 = strpos($inhaltWR2,"(");
$inhalt2WR2 = substr($inhaltWR2,$posLinkeKlammerWR2+1,$LaengeInhaltWR2-$posLinkeKlammerWR2-4);
$StringDatenWR2[$i] = explode(",",$inhalt2WR2);
CreateVariable ("angeschlossene Modulleistung", 2, $DummyIDString, "Watt", (float)$StringDatenWR2[$i][$z]);
CreateVariable ("PDC", 2, $DummyIDString, "Watt",0);
CreateVariable ("UDC", 2, $DummyIDString, "~Volt",0);
CreateVariable ("ADC", 2, $DummyIDString, "Solar_Ampere",0);
}
} // Strings Ende
else
{
CreateVariable ("Anzahl Strings", 1, $DummyID, "",1);
CreateVariable ("angeschlossene Modulleistung", 2, $DummyID, "Watt", $WRDaten[$i][8]);
CreateVariable ("PDC", 2, $DummyID, "Watt",0);
CreateVariable ("UDC", 2, $DummyID, "~Volt",0);
CreateVariable ("ADC", 2, $DummyID, "Solar_Ampere",0);
}
$VarIDMitTemperaturmessung = CreateVariable ("Mit Temperaturmessung", 3, $DummyID, "","Nein");
// restliche Angaben
$Infobox = CreateVariable ("Infos", 3, $DummyID, "~HTMLBox", "");
$Info = "";
for ($x=0;$x<15;$x++){
$InfoWert = ltrim((string)$WRDaten[$i][$x]);
If ($InfoWert == "null"){$InfoWert = "nicht angegeben";}
If ($x==12 and $InfoWert == 0){$InfoWert = "Nein";}
If ($x==12 and $InfoWert == 1){
$InfoWert = "Ja";
SetValue($VarIDMitTemperaturmessung,"Ja");
}
If ($x==10){$InfoWert = $VarWRInfoHerstellerArray[$InfoWert];}
If ($x==6 and $AnzahlStrings>1){$InfoWert = "siehe Strings";}
If ($x==9 and $AnzahlStrings>1){$InfoWert = "siehe Strings";}
If ($x==11 or $x==14 or $x==3){}
else{
$Info .= $VarWRInfoArray[$x].": ".$InfoWert."<br>";
}
}
SetValue($Infobox,$Info);
CreateVariable ("Tagesertrag", 2, $DummyID, "kWh",0);
CreateVariable ("PAC aktuell", 2, $DummyID, "Watt",0);
CreateVariable ("PAC Tagesertrag", 2, $DummyID, "kWh",0);
CreateVariable ("PAC Max des Tages", 2, $DummyID, "Solar_kW",0);
CreateVariable ("PAC Monatsertrag", 2, $DummyID, "kWh",0);
CreateVariable ("PAC Jahresertrag", 2, $DummyID, "MWh",0);
CreateVariable ("Wirkungsgrad", 2, $DummyID, "Prozent",0);
CreateVariable ("Status", 3, $DummyID, "","");
CreateVariable ("Fehler", 3, $DummyID, "","");
CreateVariable ("PDC aktuell", 2, $DummyID, "Watt",0);
CreateVariable ("angeschlossene Modulleistung", 2, $DummyID, "Watt", $WRDaten[$i][2]);
CreateVariable ("Innentemperatur", 2, $DummyID, "~Temperature",0);
//Statuscodes in String schreiben
$SuchmusterWRStatus = "StatusCodes[$i] = ";
$inhaltWRStatus = str_replace("\"","",GetSolarlogValue($SuchmusterWRStatus,strlen($SuchmusterWRStatus),"",$base_vars_js));
$StatusCodes = CreateVariable ("StatusCodes", 3, $DummyID, "", $inhaltWRStatus);
IPS_SetHidden($StatusCodes, true); //Objekt verstecken
//Statuscodes Ende
//Fehlercodes in String schreiben
$SuchmusterWRFehler = "FehlerCodes[$i] = ";
$inhaltWRFehler = str_replace("\"","",GetSolarlogValue($SuchmusterWRFehler,strlen($SuchmusterWRFehler),"",$base_vars_js));
$FehlerCodes = CreateVariable ("FehlerCodes", 3, $DummyID, "", $inhaltWRFehler);
IPS_SetHidden($FehlerCodes, true); //Objekt verstecken
//Fehlercodes Ende
break;
case 1:
$Geraetetyp="Sensorbox";
$SBName = ltrim($WRDaten[$i][4]);
$DummyID = checkcreateDummyInstance($AnlagenID, $interneNummer." - ".$Geraetetyp.": ".$SBName); //Sensorbox anlegen
CreateVariable ("Geraetetyp", 3, $DummyID, "",$Geraetetyp);
SetValue($GeraeteInstanzen,(GetValue($GeraeteInstanzen).",".$DummyID));
CreateVariable ("Einstrahlung", 2, $DummyID, "Solar_Strahlung", 0);
CreateVariable ("Modultemperatur", 2, $DummyID, "~Temperature", 0);
CreateVariable ("Aussentemperatur", 2, $DummyID, "~Temperature", 0);
CreateVariable ("Windgeschwindigkeit", 2, $DummyID, "~WindSpeed.ms", 0);
CreateVariable ("Status", 3, $DummyID, "","");
CreateVariable ("Fehler", 3, $DummyID, "","");
//Sensorwerte ermitteln: ltrim($WRDaten[$i][14])
//1: Einstarhlung
//2: Modultemperatur
//3: Aussentemperatur
//4: Windmesser
//Statuscodes in String schreiben
$SuchmusterWRStatus = "StatusCodes[$i] = ";
$inhaltWRStatus = str_replace("\"","",GetSolarlogValue($SuchmusterWRStatus,strlen($SuchmusterWRStatus),"",$base_vars_js));
$StatusCodes = CreateVariable ("StatusCodes", 3, $DummyID, "", $inhaltWRStatus);
//Statuscodes Ende
//Fehlercodes in String schreiben
$SuchmusterWRFehler = "FehlerCodes[$i] = ";
$inhaltWRFehler = str_replace("\"","",GetSolarlogValue($SuchmusterWRFehler,strlen($SuchmusterWRFehler),"",$base_vars_js));
$FehlerCodes = CreateVariable ("FehlerCodes", 3, $DummyID, "", $inhaltWRFehler);
//Fehlercodes Ende
break;
case 2:
$Geraetetyp="S0-Stromzähler";
//zählt was?: ltrim($WRDaten[$i][14])
break;
}
}
?>
Aufruf Aktualisierung
<?
include "Funktionen_ads10.ips.php"; //Funktionen-Script einbeziehen
// Hauptkategorie ermitteln (ID der Anlage)
$ScripteInstanz = IPS_GetParent($IPS_SELF);
$AnlagenID = IPS_GetParent($ScripteInstanz);
$Betriebsdateninstanz = IPS_GetInstanceIDByName("Betriebsdaten", $AnlagenID);
$Messwerteinstanz = IPS_GetInstanceIDByName("Messwerte", $Betriebsdateninstanz);
$Statusinstanz = IPS_GetInstanceIDByName("Status", $Betriebsdateninstanz);
$Dateninstanz = IPS_GetInstanceIDByName("Daten", $Betriebsdateninstanz);
$Rechenwertinstanz = IPS_GetInstanceIDByName("Rechenwerte", $Betriebsdateninstanz);
$Konfigurationsinstanz = IPS_GetInstanceIDByName("Konfigurationsdaten", $AnlagenID);
//spez.Tagesertrag
$TagesErtragAktuell = GetValue (IPS_GetVariableIDByName("PAC Tagesertrag aktuell", $Messwerteinstanz));
$Anlagenleistung = GetValue (IPS_GetVariableIDByName("Anlagenleistung in Wp", $Konfigurationsinstanz));
$VarkWhp =IPS_GetVariableIDByName("spezifischer Tagesertrag", $Rechenwertinstanz);
$kWhp=round( ($TagesErtragAktuell)/($Anlagenleistung/1000),2 );
SetValue($VarkWhp,$kWhp);
//spez.Monatsertrag
$MonatsErtragAktuell = GetValue (IPS_GetVariableIDByName("PAC Monatsertrag aktuell", $Rechenwertinstanz));
$Anlagenleistung = GetValue (IPS_GetVariableIDByName("Anlagenleistung in Wp", $Konfigurationsinstanz));
$VarkWhpM =IPS_GetVariableIDByName("spezifischer Monatsertrag", $Rechenwertinstanz);
$kWhpM=round( ($MonatsErtragAktuell)/($Anlagenleistung/1000),2 );
SetValue($VarkWhpM,$kWhpM);
//spez. Jahresertrag
$JahresErtragAktuell = GetValue (IPS_GetVariableIDByName("PAC Jahresertrag aktuell", $Rechenwertinstanz));
$Anlagenleistung = GetValue (IPS_GetVariableIDByName("Anlagenleistung in Wp", $Konfigurationsinstanz));
$VarkWhpY =IPS_GetVariableIDByName("spezifischer Jahresertrag", $Rechenwertinstanz);
$kWhpY=round( ($JahresErtragAktuell*1000)/($Anlagenleistung/1000),2 );
SetValue($VarkWhpY,$kWhpY);
?>