Erstes Modul

Hallo zusammen,

ich versuche mich derzeit an meinem ersten Modul.
Prinzipiell nichts was sich auch nicht mit einem Skript lösen lassen würde, dennoch wollte ich die Funktion gerne in ein Modul packen und ggf. auch anderen zur Verfügung stellen.

Um folgendes geht es:

Das Stromspeichersystem Fenecon Home stellt eine REST Schnittstelle zur Verfügung um aktuelle Daten abzugreifen ( Verbrauch, Ladezustand, etc. ).

Laut Dokumentation muss ich für jeden Wert den ich haben möchte eine eigene Abfrage starten.
Das ganze habe ich Beispielhaft derzeit mal mit 3 Werten in einer foreach Schleife dargestellt.

Soweit funktioniert das ganze auch, möchte jedoch mal um euren Rat bitten ob ich so auf dem richtigen Wege bin.

Nicht irritieren lassen von der IP, User & Passwort die direkt in der Schleife eingebaut sind, sobald alles richtig steht werde ich die Daten über Formularfelder der Instanz übergeben wie z.B. der Update Intervall.

<?

// Klassendefinition
class Fenecon extends IPSModule {




    // Überschreibt die interne IPS_Create($id) Funktion
    public function Create() {
        // Diese Zeile nicht löschen.
        parent::Create();

        if(!IPS_VariableProfileExists('fho.energy'))

        {
            IPS_CreateVariableProfile("fho.energy", 2);
            IPS_SetVariableProfileText("fho.energy", ""," kWh"); 
        }

        if(!IPS_VariableProfileExists('fho.percent'))

        {
            IPS_CreateVariableProfile("fho.percent", 1);
            IPS_SetVariableProfileText("fho.percent", ""," %"); 
            IPS_SetVariableProfileValues("fho.percent", 0,100,1);
        }


        $this->RegisterVariableFloat("State", "Zustand");
        $this->RegisterVariableFloat("ConsumptionActivePower", "Aktueller Verbrauch", "fho.energy");
        $this->RegisterVariableInteger("EssSoc", "Ladezustand Speicher", "fho.percent");
        $this->RegisterPropertyInteger("UpdateIntervall", 0);

        $this->RegisterTimer("Update", 0, 'FHO_update(' . $this->InstanceID . ');');


    }
    // Überschreibt die intere IPS_ApplyChanges($id) Funktion
    public function ApplyChanges() {
        // Diese Zeile nicht löschen
        parent::ApplyChanges();


        $this->SetTimerInterval("Update", $this->ReadPropertyInteger("UpdateIntervall") * 1000);


    }
    /**
    * Die folgenden Funktionen stehen automatisch zur Verfügung, wenn das Modul über die "Module Control" eingefügt wurden.
    * Die Funktionen werden, mit dem selbst eingerichteten Prefix, in PHP und JSON-RPC wiefolgt zur Verfügung gestellt:
    *
    * ABC_MeineErsteEigeneFunktion($id);
    *
    */


    public function update()

    {

        $stats = array(
        
            "State", 
            "EssSoc",
            "ConsumptionActivePower"
    
        );


        foreach ($stats as $key=>$value)

        {
            $json_info = file_get_contents ("http://x:user@10.200.10.212:80/rest/channel/_sum/$value");
            $info = json_decode($json_info);
            $this->SetValue($value,floatval($info->value));
        }
    }

}

?>

Ich freu mich über eure Meinungen dazu.

Grüße,
Adrian.

Hallo Adrian, ich hätte Bedarf an so einer Lösung: Am Samstag soll mein Fenecon System in Betrieb gehen und das aller-erste was ich dann noch am gleichen Abend brauchen werde, ist natürlich die Anbindung an Symcon :slight_smile: . Also tatsächlich wären erstmal die Werte vom Smartmeter wichtig (Eingang/Ausgang am Zähler), der Ladezustand vom Speicher und die aktuell generierte Leistung. Hast Du da schon etwas fertig, was ich übernehmen kann?
Vielen Dank vorab!