Werte per php aus Instanzen auslesen

Hallo,
in Bezug auf php bin ich Einsteiger. Beim Auslesen der Werte tauchen Fehlermeldungen auf. Aufgrund meines Einsteigerniveaus weiß ich nicht ob ein Fehler in der Syntax oder bei der Bedienung vorliegt.
In der Klammer von getValue habe ich die ObjektID ausgewählt wo die Werte ausgelesen werden sollen.
Es wäre nett eine Rückmeldung zum Auslesen der Werte (Zeile 6,9,12), bzw. der Fehlermeldungen zu erhalten. Siehe Screenshot.
Herzlichen Dank und einen guten Rutsch ins neue Jahr…
Arnold

Hi Arnold,

wenn Du die Zeile 6,9 und 12 auskommentierst kommen natürlich die Fehlermeldungen das die Variablen $wertA usw. nicht definiert sind. Was passiert wenn Du die Zeilen einkommentierst?

Bzw. bist Du Dir sicher das die ID 48050 einer Variablen gehört und nicht einem Modul?

Gruß Heiko

PS: der Code sieht generell merkwürdig aus!? Was ist $internalTableA usw.

Da musst Du schon mehr Infos rauslassen und mehr Code zeigen!

Gruß HEiko

Danke für die schnelle Antwort Heiko,
mit den Bezeichnungen von Symcon bin ich noch nicht im Reinen - ja, ID 48050 gehört zu einem Modul. Wenn ich das Modul öffne steht Instanzkonfiguration. Und wenn ich ID 48050 öffne steht „Variable bearbeiten“. Da bin ich etwas verwirrt - Modul, Instanz, Variable?

Der komplette Code:

// Funktion zum Auslesen der Werte A, B und C aus internen Tabellen
function getValues() {
// Code zum Abrufen von Wert A aus der internen Tabelle
// z.B. $wertA = $internalTableA->getValue();

// Code zum Abrufen von Wert B aus der internen Tabelle
// z.B. $wertB = $internalTableB->getValue();

// Code zum Abrufen von Wert C aus der internen Tabelle
// z.B. $wertC = $internalTableC->getValue();

// Wert A, B und C als Array zurückgeben
return array($wertA, $wertB, $wertC);

}

// Funktion zur Berechnung der Summe des Wertes B, wenn Wert A unter 0 liegt
function calculateSum($wertB) {
// Code zur Berechnung der Summe von Wert B
// …

// Ergebnis zurückgeben
return $sum;

}

// Funktion zum Erstellen der Verbrauchstabelle
function createConsumptionTable($verbrauchTag, $verbrauchWoche, $verbrauchMonat, $verbrauchJahr) {
$table = „






















Zeitraum Verbrauch (kWh)
Tag “ . $verbrauchTag . „
Woche “ . $verbrauchWoche . „
Monat “ . $verbrauchMonat . „
Jahr “ . $verbrauchJahr . „
“;

return $table;

}

// Funktion zur Erstellung der Selbstversorgungstabelle
function createSelfConsumptionTable($prozent) {
$table = „






















Zeitraum Prozentuale Selbstversorgung
Tag “ . $prozent . „%
Woche “ . $prozent . „%
Monat “ . $prozent . „%
Jahr “ . $prozent . „%
“;

return $table;

}

// Werte A, B und C auslesen
list($wertA, $wertB, $wertC) = getValues();

// Variable für den Verbrauch in kWh initialisieren
$verbrauchTag = 0;
$verbrauchWoche = 0;
$verbrauchMonat = 0;
$verbrauchJahr = 0;

// Variable für die Summe in kWh initialisieren
$summe = 0;

// Variable für den prozentualen Selbstversorgungsgrad initialisieren
$prozent = 0;

// Schleife für die permanente Berechnung
while (true) {
// Check, ob Wert A unter 0 liegt
if ($wertA < 0) {
// Wenn ja, Summe von Wert B berechnen
$summe += $wertB / 1000; // Annahme: Wert B ist in Watt angegeben
} else {
// Wenn neuer Tag beginnt
if (date(„H:i“) == „00:00“) {
// Werte für den Verbrauch in kWh aktualisieren
$verbrauchTag = $summe;
$summe = 0;

        // Woche abschließen und Summe bilden
        if (date("N") == 1) {
            $verbrauchWoche += $verbrauchTag;
            $verbrauchTag = 0;
        }

        // Monat abschließen und Summe bilden
        if (date("j") == 1) {
            $verbrauchMonat += $verbrauchWoche;
            $verbrauchWoche = 0;
        }

        // Jahr abschließen und Summe bilden
        if (date("z") == 0 && date("n") == 1) {
            $verbrauchJahr += $verbrauchMonat;
            $verbrauchMonat = 0;
        }
    }

    // Selbstversorgungsgrad berechnen
    $prozent = $wertB * 100 / $wertC;
}

// Tabelle mit Verbrauch erstellen
$consumptionTable = createConsumptionTable($verbrauchTag, $verbrauchWoche, $verbrauchMonat, $verbrauchJahr);

// Tabelle mit Selbstversorgung erstellen
$selfConsumptionTable = createSelfConsumptionTable($prozent);

// Tabelle anzeigen
echo $consumptionTable;
echo $selfConsumptionTable;

// Eine Sekunde warten, bevor die nächste Berechnung erfolgt
sleep(1);

}

?>

Da habe ich noch nicht genug Kenntnisse in php - in dem Sinne weiß ich noch nicht ob der Begriff „Tabelle auslesen“ - $internalTableA überhaupt korrekt ist…

Mit dem Skript will ich erfassen wieviel von dem durch die Wärmepumpe verbrauchtem Strom durch die PV-Anlage erzeugt wurde.

Ich bin verwirrt von deinem Codeansatz bzw. deiner Aufgabenstellung. Geht es um das Auslesen von Variablenwerten, die zu einer Geräteinstanz deines Zählers gehören?

Falls ja: den aktuellen Wert bekommst du mit GetValue(ID) wobei ID die ID-Nummer der Variablen ist, die du links im IPS-Baum sehen kannst. Die Variable ist der jeweiligen Instanz untergeordnet, und wie gesagt: für GetValue benötigst du die ID der Variablen (nicht Modulinstanz!)

Aber du schreibst „interne Tabellen“, da ist zumindest mir nicht klar was gemeint ist. Möchtest du auf geloggte Archivwerte einer Variablen zurückgreifen?

Danke für Deine Antwort. Erstmal alles Gute zum neuen Jahr…

Die Aufgabenstellung habe ich überarbeitet und kurzgefasst:
IP-Symcon
Wert A ID 48050 Rechen-Modul Summe
Wert B ID 35123 ShellyEM Leistung L2 aktueller Verbrauch Wärmepumpe
Wert C ID 56667 ShellyEM Gesamt L2 Summe Stromverbrauch Wärmepumpe
Wert D Summe Wert B, solange der Wert A geringer als der Wert B ist.
Wert E Wert E in % = Wert D mit 100 multipliziert und durch Wert C geteilt.

PV-Wärmepumpe
Ich möchte den Stromverbrauch der Wärmepumpe in der Summe und prozentual des Gesamtverbrauchs der Wärmepumpe erfassen und darstellen (Wert D + E).
Beispielgrafik am Jahresende:
Zwischen ca. 10:30 und 13:00 ist der Gesamtstromverbrauch (grüne Linie) niedriger als der aktuelle Stromverbrauch der Wärmepumpe (rote Linie). In diesem Zeitraum erzeugt die PV-Anlage den bei der Wärmepumpe benötigten Strom. Und dies möchte ich messen und in Tabelle darstellen.

Dir auch ein gutes neues Jahr!

Deine Beschreibung ist grob verständlich, aber im Detail doch unklar, weil vermutlich auch Begriffe wie Verbrauch (ist hier Leistung Watt gemeint oder Verbrauch in Wh?) unscharf verwendet werden.

Ganz grob klingt es für mich so, als ob du eine zusätzliche Variable verwenden solltest, die bei A<B die Differenz in die Variable speichert, bei A>=B hingegen den Wert 0. Diese Berechnung wird per ausgelöstem Ereignis durchgeführt bei jeder Änderung von A oder B.

Aber wie gesagt, deine Beschreibung ist weiterhin etwas unklar. Die gute Nachricht ist jedenfalls, dass es offensichtlich um ganz normale IPS-Variablen (nix „internes“) geht die für Berechnungen leicht zugänglich sind.

Bezüglich einer Skripterstellung bin ich Einsteiger.
Bei den Begrifflichkeiten habe ich auch noch Nachholbedarf. Die Werte A,B,C sind in Symcon abrufbar.
Die Werte D und E errechnen sich daraus.

Hier die Langfassung:
Wert A wird in Echtzeit aus einer internen Tabelle ausgelesen (Wert A ist die Bilanzierung des Shelly 3EM).
Wert B wird in Echtzeit aus einer internen Tabelle ausgelesen (Wert B ist der aktuelle Stromverbrauch der Wärmepumpe).
Wert C wird in Echtzeit aus einer internen Tabelle ausgelesen (Wert C ist der gesamte Stromverbrauch der Wärmepumpe).

Wert D ergibt sich aus der Summierung des Wertes B, solange der Wert A geringer als der Wert B ist.
Wert E ist der Anteil in % des selbsterzeugten Photovoltaikstroms vom gesamten Stromverbrauch der Wärmepumpe.

Die Werte A, B und C werden aus einer internen Tabelle gelesen.
Der Wert A, B und C werden in Watt angezeigt.
Wenn der Wert A geringer als der Wert B ist, soll der Wert B in Watt erfasst und der Wert B soll in kWh summiert werden, für den Zeitraum wo der Wert A unter dem Wert B bleibt.

Diese Berechnung, also die Summe des Wertes B solange Wert A unter Wert B ist soll permanent erfolgen. Das Ergebnis dieser Berechnung soll dem Wert D zugeordnet werden.

Die Summe aus dieser Berechnung (Wert D) des Wertes aus der Tabelle B soll erfasst und in eine neue Tabelle nach Tag, Woche, Monat und Jahr ausgegeben werden.

Diese Tabelle soll so dargestellt werden, dass die aktuellen Tage der Woche, jeder einzelne Monat und der Endwert des Jahres dargestellt werden.

Dieser Verbrauch soll an jedem einzelnen Tag erfasst werden. Der nächste Tag beginnt immer in der neuen Ausgabetabelle bei 0 Watt, bzw. 0 kWh.
Am Ende der Woche soll eine Summe der vergangenen 7 Tage in kWh gebildet werden. Die nächste Woche beginnt immer bei 0 Watt, bzw. 0 kWh.
Am Ende des Monats soll eine Summe des vergangenen Monats in kWh gebildet werden. Der nächste Monat beginnt immer bei 0 Watt, bzw. 0 kWh.
Am Ende des Jahres soll eine Summe der Monate des vergangenen Jahres in kWh gebildet werden.

Zusätzlich soll eine neue Tabelle für den selbsterzeugten Strom für die Wärmepumpe in Prozent dargestellt werden.
Wert C und Wert D werden in Echtzeit aus einer internen Tabelle ausgelesen.
Das Ergebnis der Berechnung ergibt den neuen Werte E. Diese Berechnung soll in der neuen Tabelle wie folgt durchgeführt werden.
Wert E in % = Wert D mit 100 multipliziert und durch den Wert C geteilt.
Wert E soll als Durchschnitt eines jeden Kalendermonats und eines jeden Kalenderjahres dargestellt werden. Alle Monate und Jahre sollen einzeln dargestellt werden.

Tut mir leid, ich komme mit deiner Textbeschreibung nicht weiter. Einerseits ist A ein Wert in Watt, das wäre eine Leistung, andererseits schreibst du etwas von Bilanzierung, was nach Energie (Leistung x Zeit) klingt.

Das Problem ist (soweit ich deinen Text verstehe mit all seinen Widersprüchen) nicht der Teil der Aufbereitung sondern ganz banal die Ausgangswerte: Die „Bilanzierung“ in Varible A (vermutlich Wh?) kann man nicht so einfach verrechnen mit einer Momentanleistung, sondern man müsste die Momentanleistung permanent erfassen und integrieren.

Ein weiteres Problem: Du schreibst, die Berechnung solle permanent erfolgen, aber deine Kurven zeigen dass es nur wenige Datenpunkte in grösseren Zeitabständen gibt, deshalb gibt es zwischendurch natürlich große Unsicherheit bezüglich der Werte.

Ich kann leider nicht helfen und befürchte, das wird so nicht funktionieren.