Anbindung Solarlog 1000

Was mir noch aufgefallen war, ist dass die Einheitenangaben bei Leistung aktuell „kW“ sein muss und nicht „kWh“ bei den einzelen Strings mit „WATT“ ist es richtig.
Die Anlagenleistung kommt vom Solarlog offenbar als „Wp“ in IPS kommt es als „kWp“ an.

Außerdem sollte es beim Anlegen der Variablenprofile möglich sein „MWh“ und nicht „mWh“ einzurichten.
Aber das sind ja nur kleine Schönheitskorrekturen bei so einer genialen Arbeit!
Nochmals Herzlichen Dank für diese wahnsinnige Arbeitserleichterung.
Das hätte ich nie hinbekommen !

bastelfrosch

Hallo,

freut mich, dass es letztendlich doch funktioniert. Ich habe bei der Entwicklung zuletzt den Wald vor lauter Bäumen nicht mehr gesehen, also sorry wegen der kleineren Fehler. Ich habe durch meine Arbeit zwar Zugriff auf zig Anlagen, aber momentan leider recht wenig Zeit :frowning:

Leider kann ich auch nicht alles testen, da es alle möglichen unterschiedlichen Konstellationen von Anlagen gibt. Auch liefert nicht jeder WR-Hersteller sauber alle Status- und Fehlercodes und solche Dinge. Aber man sollte das anhand der Scripte eigentlich hin bekommen.

Das Hersteller-Array dient nur zur Anlageninfo, zu finden in den Konfigurationsdaten.

Grüße
Grebi

Da ich mehrere Solaranlagen habe, ist ein Vergleich der Anlagen mit dem Ertrag pro kWp installierter Leistung sinnvoll.

Hier habe ich als PHP-Dau mir eine Erweiterung zusammenkopiert :

Im Script zum Anlegen der Variablen

eine Zeile eingefügt unter "Rechenwerte "

 $VarIDkwhp = CreateVariable ("spezifischer Tagesertrag", 2, $InstIDRechenwerte, "kWh", 0);

und dann ein Script zum Errechnen des spezifischen Tagesertrages mit reingenommen.
Die kann man sicherlich auch in das normale Abruf-Script integrieren.

<?
include "Funktionen_ads10.ips.php"; //Funktionen-Script einbeziehen

$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);

$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);

?>

… ist jetzt nur für die Gesamtanlage, kann man sicherlich auch noch auf den einzelen WR anpassen.
Für Verbesserungen bin ich immer offen :slight_smile:

Gruß
Bastelfrosch

Es müssten die Variablenprofile
MHh und kWhkWp angelegt werden

<?
//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 Wp",
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);
//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;
                }
}
?>

Nun sollten die Einheiten richtig sein und auch der spezifische Tagesertrag ist enthalten

Viele Grüße
bastelfrosch

hast du das Projekt bei dir schon implementiert und funktioniert es?

Jepp,
bis jetzt 3 Anlagen online :slight_smile:

Ich hätte da noch mal eine dumme Frage:

Die Scripte für Tages-, Monats- und Jahreswerte sind alle ohne zu ändernde IDs erstellt, also eigentlich für alle Anlagen gleich.
Ich kann die Scripte aber im Modulbaum nur verschieben, nicht aber kopieren.
Gibt es da einen Trick diese Scripte nicht immer manuell anlegen zu müssen ?
Bestimmt wieder so eine simple Zeile in PHP, oder ?

ok, prima: ich suche noch Opfer. Für den Project Exporter. damit soll man easy Projekte aus dem eigenen System exportieren können und dritten zur Verfügung stellen können.
Wird jedenfalls behauptet :smiley: Vielleicht kann es dir hier helfen :wink:

Na, dann mach ich geschwind mal ne Datensicherung und probiere es direkt aus …
Ich werde berichten

prima, danke :wink: aber ne DaSi brauchste nicht (solange du nur exportierts eh nicht: es wird nur gelesen und ein neues Export-Script angelegt)

Aber eine Testinstallation des Projektesports ist schon ratsam…manchmal übersieht man was

Erster Zwischenstand :
Export und danach verschieben in neuen Ordner ==>GENIAL
Vergabe der neuen IDs in den Scripten automatisch korrigiert ==>GENIAL
Timer werden nicht automatisch aktiviert ==>Gut, da man erst manuell probieren kann

Name des Timers in der Kopie „unbenanntes Objekt“ ==> schade, aber zu verschmerzen !

Ich werde weiter testen
Gruß
bastelfrosch

Prima, das sieht doch gut aus :wink: wenn du dem Timer vorher einen Namen gibst, wird der auch übertragen

Gesendet von meinem Galaxy Nexus mit Tapatalk 2

Hi Bastelfrosch,

anbei eine Erläuterung zum Timer-Event namen:

  1. Bild: „Eventname“, nachdem ein Event neu angelegt wurde:

  2. Bild: erst wenn man mit der rechten Maustaste auf das Kontextmenü „bearbeiten“ (oder 2mal auf die Eventbezeichnung klicken) geht, dann sieht man, dass das Event default-mässig „unbenanntes Objekt“ heisst. Und diese bezeichtung wird vom Exporter übernommen/übertragen.

wär vielleicht mal ein Change für eines der nächsten IPS-Updates :smiley:

Hallo Raketenschnecke.
Der Export / Import (kopieren) geht sehr gut in einem System. Die Übernahme in ein anderes System kann ich erst am WE ausprobieren.
Hier aber noch mal eine andere Frage:

Die Scripte sind ja, wie bereits erwähnt alle nicht nur gleich, sondern wirklich 100% Identisch. Jetzt ist es mit Deinem Tool sehr einfach so etwas zu kopieren, hat aber den Nachteil, dass ich alle Scripte anpassen muss, wenn ich etwas ändern möchte. Gibt es in IPS einen Befehl mit dem ich vorgeben kann, in welchem Verzeichnis ich dieses Script ausführen möchte?

In Windows wäre das z.B. c: est.exe AUSFÜHREN in c: empverzeichnis\

Ist bestimmt wieder was ganz einfaches :slight_smile:
Herzliche Grüße
bastelfrosch

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);
?>

@ Grebi

Hi,

ich stehe etwas auf dem Schlauch.
Was genau ist der Unterschied zwischen PAC Delta Tagesertrag und PAC Tagesertrag aktuell ?

Gruß bastelfrosch

Du kannst eine Testinstallation auch Problemlos im Quellsystem machen

das hab ich noch nicht verstanden, hilf mir mal auf die Sprünge. Welche Scripte sind alle gleich? Verzeichnis vorgeben?

z.B. das oben aufgeführte Script zur aktualisierung der Daten aus einer PV-Anlage.
Dieses Scipt liegt immer im Ordner Scripte der einzelnen PV-Anlage.
Da aber alle IDs nach Name in dem Ordner gesucht werden, muss das Script nicht geändert werden, sondern ist in jeder PV-Anlage gleich. Jetzt kann ich PV-Anlage 1 kopieren und dann den Namen ändern, Fertig

Wenn aber nachträglich Änderungen an dem Aufrufscript gemacht werden sollen, muss ich diese Änderungen 10x machen.

Ich denke es wird irgendwas mit „include“ oder „Runscript“ oder so etwas sein. Ich möchte einfach ein Script, welches in einem anderen Ordner ist mehrfach ausführen lassen, als ob es in mehrern Ordner vorhanden wäre.

Ich hoffe, ich habe mich einigermaßen verständliche ausgedrückt
Viele Grüße
bastelfrosch

Hi Bastelfrosch,

ja, jetzt verstehe ich :smiley:

ich denke, mit dem Exporter bekommt man das hin - ist aber nicht sehr elegant (Du definierst eine PV-Anlage als Projekt und machst davon n Kopieen mit dem Exporter. Wenn du für jede der Kopien ein dediziertes Export-Script (quasi das Export-Script n-Mal clonen) anlegst, kannst du jedes der Child-Projekte einzeln updaten)

Aber eleganter ist des sicher, wenn man ein Logik-Script hat, welches n PV-Analgen bedienen kann. Dazu muss das zentrale Script zwischen den PV-Anlagen unterscheiden können (im In- und Output). So zumindest meine spontane Überlegung. Ich denke, hier können sich die erfahrenen PHP-Cracks mal austoben :wink:

Hallo Rakete,

könntest du , Bitte, den Export hier zur Verfügung stellen ?

Hallöchen,
auch wenn dieser Thread sehr alt ist, möchte ich ihn erneut aufgreifen.
Zwar habe ich schon SYMCON im Einsatz, doch habe ich mich nie unter die Haube getraut.
Nun habe ich vor kurzen einen EGO Einschraubheizkörper bekommen und einfach in das Netzwerk gehängt. Nun sprechen mein SolarLog 500 und der Heizkörper per Modbus TCP miteinander und ich habe bei der jetzigen Sonneneinstrahlung „putinfreies“ (= ohne Gas) Warmwasser. Prima.

Doch möchte ich gerne die Modbus TCP Daten visualisiert bekommen.

Von SolarLog habe ich die kurze Dokumentation im Netz gefunden. (Anlage)
SolarLog_Datasheet_Modbus_TCP_Free_DE.pdf (1,2 MB)

Kann jemand daraus eine Modbus TCP Anbindung zaubern, die ich auch nachvollziehen kann, um etwas zu lernen?

Vielen Dank für Eure Hilfe!

P.S.: Mein SolarLog 500 hat eine höhere Firmware, als in dem Dokument gefordert.