# Hilfe bei HTTP Datenabfrage Fenecon

**URL:** <https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427>\
**Category:** Skripte, PHP, SQL (Fragen)\
**Created:** [16. September 2024 um 15:59 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427 "2024-09-16T15:59:56Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![fuchs](https://community.symcon.de/letter_avatar_proxy/v4/letter/f/bcef8e/32.png) [@fuchs](https://community.symcon.de/u/fuchs)\
**Post date:** [16. September 2024 um 15:59 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/1 "2024-09-16T15:59:56Z")

</div>

Hallo Community,

ich lerne gerade erst die Basics von IPS und PHP daher bedanke ich mich gleich schonmal im voraus für die Hilfe. Ausgangspunkt ist wie folgend:

Ich besitze einen Fenecon Stromspeicher welche mir Daten über Energieverbrauch, Speicherladung, PV-Erzeugung usw. liefert. Diesen versuche ich über die API auszulesen, das funktioniert auch soweit jedoch werden mir die Infos nicht in einer einzigen Abfrage zur Verfügung gestellt. Ich muss jeden einzelnen Wert abfragen (Wenn es einen besseren weg gibt bin ich jederzeit für Tipps dankbar (Modbus evtl.?)). Ich würde die Werte gerne so aktuell wie möglich halten und lasse das Skript zur abfrage daher alle 5 Sekunden neu ausführen.

Nun zum eigentlichen Problem: Teilweise dauert die Abfrage des Speichers etwas länger und und das Skript wird während es noch läuft erneut gestartet. Dadurch wird IPS teilweise etwas träge und ich bekomme auch Fehlermeldungen das zu viele Skripts gleichzeitig ausgeführt werden.

Dauert eine solche Abfrage einfach seine Zeit und die einfachste Lösung ist die Abfragezeit zu erhöhen?  
Gibt es einen einfacheren weg an die Variablen zu kommen ?  
Kann ich das Skript automatisch erneut starten wenn es „fertig“ ist ?

hier noch der Code:

```auto
<?php

$VerbrauchGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePower"),true);
$VerbrauchL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePowerL1"),true);
$VerbrauchL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePowerL2"),true);
$VerbrauchL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePowerL3"),true);

$NetzGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePower"),true);
$NetzL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePowerL1"),true);
$NetzL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePowerL2"),true);
$NetzL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePowerL3"),true);

$SpeicherGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePower"),true);
$SpeicherL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePowerL1"),true);
$SpeicherL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePowerL2"),true);
$SpeicherL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePowerL3"),true);
$SpeicherLadung = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssSoc"),true);

$PVGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePower"),true);
$PVL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePowerL1"),true);
$PVL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePowerL2"),true);
$PVL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePowerL2"),true);

$NetzbezugWh = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridBuyActiveEnergy"),true);
$NetzbezugkWh = $NetzbezugWh ['value'] * 0.001;

$NetzeinspeisungWh = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridSellActiveEnergy"),true);
$NetzeinspeisungkWh = $NetzeinspeisungWh ['value'] * 0.001;

$ErzeugungWh = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionActiveEnergy"),true);
$ErzeugungkWh = $ErzeugungWh ['value'] * 0.001;

//Verbrauch
setvalue(17292, $VerbrauchGesamt ['value']);
setvalue(38324, $VerbrauchL1 ['value']);
setvalue(37695, $VerbrauchL2 ['value']);
setvalue(33962, $VerbrauchL3 ['value']);

//NETZ
setvalue(10625, $NetzGesamt ['value']);
setvalue(59789, $NetzL1 ['value']);
setvalue(31634, $NetzL2 ['value']);
setvalue(52611, $NetzL3 ['value']);

if($NetzGesamt ['value'] > 0 ) {
    setvalue(11804, $NetzGesamt ['value']);
    setvalue(26301, 0);
    }
elseif ($NetzGesamt ['value'] < 0 ) {
        setvalue(11804, 0);
        setvalue(26301, $NetzGesamt ['value']*-1);
    }
else {
    setvalue(11804, 0);
    setvalue(26301, 0);
    }

//SPEICHER
setvalue(17660, $SpeicherGesamt ['value']);
setvalue(56736, $SpeicherL1 ['value']);
setvalue(58141, $SpeicherL2 ['value']);
setvalue(41429, $SpeicherL3 ['value']);
setvalue(36552, $SpeicherLadung ['value']);

if($SpeicherGesamt ['value'] > 0 ) {
    setvalue(31972, 0);
    setvalue(29347, $SpeicherGesamt ['value']);
    }
elseif ($SpeicherGesamt ['value'] < 0 ) {
        setvalue(31972, $SpeicherGesamt ['value']*-1);
        setvalue(29347, 0);
    }
else {
    setvalue(31972, 0);
    setvalue(29347, 0);
    }

//PV
setvalue(24122, $PVGesamt ['value']);
setvalue(21979, $PVL1 ['value']);
setvalue(54932, $PVL2 ['value']);
setvalue(17750, $PVL3 ['value']);

//Energie
setvalue(52292, $NetzbezugkWh);
setvalue(51061, $NetzeinspeisungkWh);
setvalue(41466, $ErzeugungkWh);

```

---

<div class="post-metadata">

**Author:** ![tobiasr](https://community.symcon.de/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@tobiasr](https://community.symcon.de/u/tobiasr)\
**Post date:** [16. September 2024 um 16:15 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/2 "2024-09-16T16:15:45Z")

</div>

Wodurch startest du das Script denn aktuell? Timer alle ~10 Sekunden, aber es braucht 15 Sekunden?

Hier gegen hilft a) Timer hoch stellen, b) Semaphore [IPS\_SemaphoreEnter — IP-Symcon :: Automatisierungssoftware](https://www.symcon.de/de/service/dokumentation/befehlsreferenz/ablaufsteuerung/ips-semaphoreenter/)

Zudem würde ich prüfen, ob man ggf. über eine URL wie:

```auto
http://x:user@192.168.250.58:80/rest/allChannels/

```

alles gleichzeitig abfragen kann und dann selbst zerlegt. Das spart den ganzen http overhead.

---

<div class="post-metadata">

**Author:** ![fuchs](https://community.symcon.de/letter_avatar_proxy/v4/letter/f/bcef8e/32.png) [@fuchs](https://community.symcon.de/u/fuchs)\
**Post date:** [16. September 2024 um 17:15 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/4 "2024-09-16T17:15:49Z")

</div>

Eine URL um alle Datenpunkte auf einmal auszulesen gibt es laut Dokumentation nicht.

Ich habe das Skript nochmals angepasst jetzt funktionierts scheinbar stabil.  
Davor wurde das Skript durch ein zyklisches Ereignis gestartet, jetzt wird es direkt aus dem Skript heraus gestartet. Das denke ich war das Hauptproblem 🤷‍♂️

Mit der Sempaphore Funktion bekomme ich jetzt aber auch eine Fehlermeldung wenn’s mal länger als 5 Sekunden gedauert hat.

Danke dir !

```auto
<?php

$Time = 5000;
if ( IPS_SemaphoreEnter("Abfrage", $Time))
{

$VerbrauchGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePower"),true);
$VerbrauchL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePowerL1"),true);
$VerbrauchL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePowerL2"),true);
$VerbrauchL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ConsumptionActivePowerL3"),true);

$NetzGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePower"),true);
$NetzL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePowerL1"),true);
$NetzL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePowerL2"),true);
$NetzL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridActivePowerL3"),true);

$SpeicherGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePower"),true);
$SpeicherL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePowerL1"),true);
$SpeicherL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePowerL2"),true);
$SpeicherL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssActivePowerL3"),true);
$SpeicherLadung = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/EssSoc"),true);

$PVGesamt = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePower"),true);
$PVL1 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePowerL1"),true);
$PVL2 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePowerL2"),true);
$PVL3 = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionAcActivePowerL2"),true);

$NetzbezugWh = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridBuyActiveEnergy"),true);
$NetzbezugkWh = $NetzbezugWh ['value'] * 0.001;

$NetzeinspeisungWh = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/GridSellActiveEnergy"),true);
$NetzeinspeisungkWh = $NetzeinspeisungWh ['value'] * 0.001;

$ErzeugungWh = json_decode(
        file_get_contents("http://x:user@192.168.250.58:80/rest/channel/_sum/ProductionActiveEnergy"),true);
$ErzeugungkWh = $ErzeugungWh ['value'] * 0.001; 

// echo "erfolgreich Abgefragt";
IPS_SemaphoreLeave("Abfrage");
} else {
    echo "abfrage Fehlgeschlagen";
}

//Verbrauch
setvalue(17292, $VerbrauchGesamt ['value']);
setvalue(38324, $VerbrauchL1 ['value']);
setvalue(37695, $VerbrauchL2 ['value']);
setvalue(33962, $VerbrauchL3 ['value']);

//NETZ
setvalue(10625, $NetzGesamt ['value']);
setvalue(59789, $NetzL1 ['value']);
setvalue(31634, $NetzL2 ['value']);
setvalue(52611, $NetzL3 ['value']);

if($NetzGesamt ['value'] > 0 ) {
    setvalue(11804, $NetzGesamt ['value']);
    setvalue(26301, 0);
    }
elseif ($NetzGesamt ['value'] < 0 ) {
        setvalue(11804, 0);
        setvalue(26301, $NetzGesamt ['value']*-1);
    }
else {
    setvalue(11804, 0);
    setvalue(26301, 0);
    }

//SPEICHER
setvalue(17660, $SpeicherGesamt ['value']);
setvalue(56736, $SpeicherL1 ['value']);
setvalue(58141, $SpeicherL2 ['value']);
setvalue(41429, $SpeicherL3 ['value']);
setvalue(36552, $SpeicherLadung ['value']);

if($SpeicherGesamt ['value'] > 0 ) {
    setvalue(31972, $SpeicherGesamt ['value']);
    setvalue(29347, 0);
    }
elseif ($SpeicherGesamt ['value'] < 0 ) {
        setvalue(31972, 0);
        setvalue(29347, $SpeicherGesamt ['value']*-1);
    }
else {
    setvalue(31972, 0);
    setvalue(29347, 0);
    }

//PV
setvalue(24122, $PVGesamt ['value']);
setvalue(21979, $PVL1 ['value']);
setvalue(54932, $PVL2 ['value']);
setvalue(17750, $PVL3 ['value']);

//Energie
setvalue(52292, $NetzbezugkWh);
setvalue(51061, $NetzeinspeisungkWh);
setvalue(41466, $ErzeugungkWh);

IPS_Sleep($Time);
IPS_RunScript(35586);

```

---

<div class="post-metadata">

**Author:** ![tobiasr](https://community.symcon.de/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@tobiasr](https://community.symcon.de/u/tobiasr)\
**Post date:** [16. September 2024 um 17:16 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/5 "2024-09-16T17:16:57Z")

</div>

Welche Fehlermeldung kommt denn genau? Wieso startest du das Script denn direkt aus sich selbst? Und wie willst du das extern unterbrechen können? Brauchst du die Daten wirklich so schnell, dass alle 2~5 Sekunden notwendig sind?

---

<div class="post-metadata">

**Author:** ![meike0\_0](https://community.symcon.de/letter_avatar_proxy/v4/letter/m/b3f665/32.png) [@meike0\_0](https://community.symcon.de/u/meike0_0)\
**Post date:** [16. September 2024 um 17:18 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/6 "2024-09-16T17:18:31Z")

</div>

[Modbus Fenecon](https://community.symcon.de/t/modbus-vorlage-openfems-fenecon-heckert-speichersystem/135948)  
Das hier schon probiert?  
Beim Mobus brauchst du dich um nichts zu kümmern.

![image](https://community.symcon.de/uploads/default/original/3X/4/a/4a302cc9e39c8bc2e75fa492327a9ad3b84807eb.png)

 ![image](https://community.symcon.de/uploads/default/original/3X/e/4/e4b3dcdcf05dccf3b04e41cceec447390b3dcc5a.png)

---

<div class="post-metadata">

**Author:** ![fuchs](https://community.symcon.de/letter_avatar_proxy/v4/letter/f/bcef8e/32.png) [@fuchs](https://community.symcon.de/u/fuchs)\
**Post date:** [16. September 2024 um 17:29 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/7 "2024-09-16T17:29:53Z")

</div>

Sorry gemeint war keine richtige Fehlermeldung sondern eine Meldung wenn die Semaphore fehlschlägt. Die Daten hätte ich doch gern so aktuell wie möglich da diese sich auch in der Visualisierung angezeigt werden.  
Was ist denn die eleganteste Art ein Skript zyklisch zu starten ? (Wie schon erwähnt lerne ich das ganze erst, das ist mein erstes Skript)

---

<div class="post-metadata">

**Author:** ![tobiasr](https://community.symcon.de/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@tobiasr](https://community.symcon.de/u/tobiasr)\
**Post date:** [16. September 2024 um 17:31 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/8 "2024-09-16T17:31:52Z")

</div>

Wie lange braucht das Script denn?

```auto
$time_start = microtime(true);

// hier das gesamte SCript

$time_end = microtime(true);
$time = $time_end - $time_start;
print $time;

```

Zyklisch fände ich schon besser. Entsprechend mit Semaphore schützen und eine Zeit finden, die etwas über der durchschnittlichen Laufzeit liegt.

---

<div class="post-metadata">

**Author:** ![fuchs](https://community.symcon.de/letter_avatar_proxy/v4/letter/f/bcef8e/32.png) [@fuchs](https://community.symcon.de/u/fuchs)\
**Post date:** [16. September 2024 um 17:37 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/9 "2024-09-16T17:37:59Z")

</div>

Habs ein paar mal ausgeführt. Dauert immer unterschiedlich zwischen 4-7 Sekunden. Wahrscheinlich ist es wirklich das einfachste nur alle 10 Sekunden abzufragen.

---

<div class="post-metadata">

**Author:** ![fuchs](https://community.symcon.de/letter_avatar_proxy/v4/letter/f/bcef8e/32.png) [@fuchs](https://community.symcon.de/u/fuchs)\
**Post date:** [16. September 2024 um 17:44 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/10 "2024-09-16T17:44:08Z")

</div>

Habs gerade ausprobiert. Das funktioniert super, hätt ich mir das Skript sparen können 😁  
Ich werde hier noch ein paar Datenpunkte hinzufügen und über Modbus die Daten auslesen

Danke !

---

<div class="post-metadata">

**Author:** ![meike0\_0](https://community.symcon.de/letter_avatar_proxy/v4/letter/m/b3f665/32.png) [@meike0\_0](https://community.symcon.de/u/meike0_0)\
**Post date:** [16. September 2024 um 18:07 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/11 "2024-09-16T18:07:46Z")

</div>

Falls du noch die einzeln String-Werte benötigst

```auto
<?php
$debug = false;

$apiUrl = "http://192.168.0.15:80/rest/channel/charger1/(.*)(ActualPower|Voltage|Current|ActualEnergy)";
$ch = curl_init($apiUrl); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER,  
            ["Authorization:Basic eDp1c2Vy"]); 
$response = curl_exec($ch); 
if (curl_errno($ch)) { 
    echo "Curl error: " . curl_error($ch); 
} 
curl_close($ch); 
  
$data = json_decode($response, true); 
  
if ($data) { 
    if ($debug) print_r($data); 
} else { 
    echo "Error fetching data from GitHub API."; 
} 

for ($i=0;$i<count($data);$i++)
    {
    if ($debug) echo $data[$i]['address']." ";
    if ($debug) echo $data[$i]['value']."\n";
    switch ($data[$i]['address'])
            {
            case "charger1/Voltage":
                $a = $data[$i]['value']/1000;
                SetValue(13260,$a);
                break;

            case "charger1/ActualPower":
                $a = $data[$i]['value']/1000;
                SetValue(32682,$a);
                break;

            case "charger1/ActualEnergy":
                $a = $data[$i]['value']/1000;
                SetValue(55391,$a);
                break;

            case "charger1/Current":
                $a = $data[$i]['value']/1000;
                SetValue(27238,$a);
                break;

            default:
                break;
            }
    }
ips_Sleep(2000);

$apiUrl = "http://192.168.0.15:80/rest/channel/charger0/(.*)(ActualPower|Voltage|Current|ActualEnergy)";
$ch = curl_init($apiUrl); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER,  
            ["Authorization:Basic eDp1c2Vy"]); 
$response = curl_exec($ch); 
if (curl_errno($ch)) { 
    echo "Curl error: " . curl_error($ch); 
} 
curl_close($ch); 
  
$data = json_decode($response, true); 
  
if ($data) { 
    if ($debug) print_r($data); 
} else { 
    echo "Error fetching data from GitHub API."; 
} 

for ($i=0;$i<count($data);$i++)
    {
    if ($debug) echo $data[$i]['address']." ";
    if ($debug) echo $data[$i]['value']."\n";
    switch ($data[$i]['address'])
            {
            case "charger0/Voltage":
                $a = $data[$i]['value']/1000;
                SetValue(25213,$a);
                break;

            case "charger0/ActualPower":
                $a = $data[$i]['value']/1000;
                SetValue(55393,$a);
                break;

            case "charger0/ActualEnergy":
                $a = $data[$i]['value']/1000;
                SetValue(35258,$a);
                break;

            case "charger0/Current":
                $a = $data[$i]['value']/1000;
                SetValue(10320,$a);
                break;

            default:
                break;
            }
    }

```

---

<div class="post-metadata">

**Author:** ![tobiasr](https://community.symcon.de/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@tobiasr](https://community.symcon.de/u/tobiasr)\
**Post date:** [16. September 2024 um 18:11 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/12 "2024-09-16T18:11:28Z")

</div>

Kann man mit dieser URL doch alles auf einmal abrufen?

---

<div class="post-metadata">

**Author:** ![meike0\_0](https://community.symcon.de/letter_avatar_proxy/v4/letter/m/b3f665/32.png) [@meike0\_0](https://community.symcon.de/u/meike0_0)\
**Post date:** [16. September 2024 um 18:14 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/13 "2024-09-16T18:14:03Z")

</div>

Noch nicht probiert, Modbus war einfacher.  
Das ist meine Modbus Vorlage  
[modbus (2).json](https://community.symcon.de/uploads/short-url/98V25WS6Yh0d3lhoUVSz5Halg2n.json) (16,5 KB)

---

<div class="post-metadata">

**Author:** ![sfeilmeier](https://community.symcon.de/user_avatar/community.symcon.de/sfeilmeier/32/80147_2.png) [@sfeilmeier](https://community.symcon.de/u/sfeilmeier)\
**Post date:** [17. September 2024 um 11:11 UTC](https://community.symcon.de/t/hilfe-bei-http-datenabfrage-fenecon/138427/14 "2024-09-17T11:11:55Z")

</div>

> [@tobiasr](#):
>
> Kann man mit dieser URL doch alles auf einmal abrufen?

Ja, die API unterstützt die Angabe eines regulären Ausdrucks sowohl für die Komponente (z. B. `_sum`, `meter0`, `charger0`, etc.) als auch den Channel (z. B. `ActivePower` oder `ActualPower`). Im Beispiel:

`charger1/(.*)(ActualPower|Voltage|Current|ActualEnergy)`

Wer es ganz genau wissen will: hier ist der Code dafür in OpenEMS → [openems/io.openems.edge.controller.api.rest/src/io/openems/edge/controller/api/rest/RestHandler.java at develop · OpenEMS/openems · GitHub](https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.controller.api.rest/src/io/openems/edge/controller/api/rest/RestHandler.java#L251-L267)

Gruß,  
Stefan
