Werte in private Variablen schreiben und abfragen

Ich drehe mich im Kreis und schnalle nicht, warum das nicht funktioniert

Ich erstelle diese Variablen innerhalb der Klasse

?php

class WPLUX extends IPSModule
{
    private $updateTimer;
    private $start_kwh_in;
    private $start_value_out;

In dieser Funktion dann möchte ich die Variablen befüllen und auch wieder abfragen

private function calc_jaz(string $mode, float $value_out)
    {
        // Berechnung des JAZ-Faktors
        $jazVisible = $this->ReadPropertyFloat('kwhin');
        $jazfaktorVariableID = @$this->GetIDForIdent('jazfaktor');
    
        if ($mode == 'jaz' && $jazVisible !== 0 && IPS_VariableExists($jazVisible) && $jazfaktorVariableID !== false)
        {
            $kwh_in = GetValue($this->ReadPropertyFloat('kwhin'));

            $this->SendDebug("JAZ", "Variablen zur Berechnung: start_kwh_in: ".$this->start_kwh_in." start_value_out: ".$this->start_value_out." kWh_in: ".$kwh_in." value_out: ".$value_out."", 0);
            
            // Überprüfen, ob die Instanzvariablen bereits initialisiert wurden
            if ($this->start_kwh_in === null || $this->start_value_out === null)
            {
                // Initialisierung der Instanzvariablen
                $this->start_kwh_in = $kwh_in;
                $this->start_value_out = $value_out;
                $this->SendDebug("JAZ", "Variablen wurden abgeglichen (sollte nur einmalig passieren) Eingang: ".$this->start_kwh_in." Ausgang: ".$this->start_value_out."", 0);
            }

            $kwh_in_Change = $kwh_in - $this->start_kwh_in;
            $value_out_Change = $value_out - $this->start_value_out;

            if ($kwh_in_Change != 0) // Überprüfen, ob der Wert von $kwh_in_Change nicht 0 ist, um eine Division durch 0 zu verhindern
            {
                $jaz = $value_out_Change / $kwh_in_Change;
                $this->SetValue('jazfaktor', $jaz);
                $this->SendDebug("JAZ", "JAZ-Faktor: ".$jaz." wurde durch 'calc_jaz' berechnet (seit Reset)): Eingangsenergie: ".$kwh_in_Change." und Ausgangsenergie: ".$value_out_Change." und in die Variable ausgegeben", 0);
            }
            else 
            {
                $this->SetValue('jazfaktor', 0);
                $this->SendDebug("JAZ", "Der JAZ-Faktor konnte noch nicht berechnet werden da die Wertänderung noch nicht stattgefunden hat", 0);
            } 
        }
    }

Warum nur kommt beim nächsten Aufruf immer ‚null‘ zurück, obwohl ich im Debug sehe dass die Werte hier

$this->start_kwh_in = $kwh_in;
$this->start_value_out = $value_out;

synchronisiert wurden

Weil die Instanz von deiner PHP-Klasse (damit ist nicht die Symcon Instanz gemeint) nicht persistent im Speicher ist.
Jedes mal wenn dein Modul was machen soll, erzeugt Symcon ein neues Objekt aus deiner Modulklasse und führt die gewünschte Funktion aus.
Anschließend wird das Script beendet und somit alles verworfen, inklusive dem erzeugten Objekt.

Darum gibt es die Buffer im SDK um Daten hier in einer Symcon-Instanz vorzuhalten.
Michael

Aber der Buffer wird doch gelöscht beim beenden von IP-Symcon?
Das ist auch nicht das was ich möchte.
Gibt es keine persistente Variable, welche nicht im Objektbaum auftaucht?
So funktioniert mein Vorhaben, da diese Variablen persistent sind, mich stören aber die nun eingegrauten Variablen.

$this->RegisterVariableFloat('start_value_out', 'Startwert Energie Out', '', 6);
$this->RegisterVariableFloat('start_kwh_in', 'Startwert Energie In', '', 6);
IPS_SetHidden($this->GetIDForIdent('start_value_out'), true);
IPS_SetHidden($this->GetIDForIdent('start_kwh_in'), true);

Du meinst Attribute. Die gibt es auch und sind persistent.
Michael

1 „Gefällt mir“

Halleluja, das wars.
Viiielen Dank

1 „Gefällt mir“