Shelly 1 pm plus nur 3 Sensoren?

[ Shelly Automation Version 2 ] [ Energiemonitor ]
Die Entwicklung der Shelly Produkte und der HomeMatic Haussteuerung schreiten weiter voran. Dieser Bereich dient der grafischen Anzeige von vielen Shelly und HomeMatic Lösungen., sowie einer Shelly Steuerung Version 2. Es können bis zu 50 Geräte ausgelesen und angezeigt werden. Mit der Steuerung können bis zu 5 Shelly Relais gesteuert werden. Die Cloud wird dazu nicht benutzt. Alles passiert rein lokal.

Moderator: Ulrich

Benutzeravatar
Schwarzermann
Beiträge: 440
Registriert: Sa 9. Okt 2021, 11:16
Wohnort: 87733
Hat sich bedankt: 9 Mal
Danksagung erhalten: 14 Mal

Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Schwarzermann »

Ich spiele gerade mit einem Shelly 1 pm plus rum um eine alte Bloomberg WWWP smart zumachen das Addon kann 5 Sensoren auslesen die soolaranzeige zeig mir aber nur 3 Temp sensoren an kann man diese erweitern das 5 angezeigt werden vielen Dank.
Der mit sympatischen Vollmeise
viewtopic.php?p=10570#p10570 USB Zuweisungen.
viewtopic.php?p=41308#p41308 Shelly in Grafana schalten
viewtopic.php?p=32232#p32232

andreas_n
Beiträge: 1682
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 14 Mal
Danksagung erhalten: 98 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von andreas_n »

na nix einfacher als das...rein in die .php und den part raussuchen und um 2 sensoren 4-5 ergänzen
SMA Tripower 8/Growatt MIN 3000 TL-XE/1500S/SPH 4600,4 ARK LV,10kWh
ELWA DC WW Puffer m. 300L/Gesamt PV Leistung 20,5kWp gesteuert mit Pi4 und Pi5
hier stehen alle Geräte>> viewtopic.php?f=13&t=1069

Benutzeravatar
Schwarzermann
Beiträge: 440
Registriert: Sa 9. Okt 2021, 11:16
Wohnort: 87733
Hat sich bedankt: 9 Mal
Danksagung erhalten: 14 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Schwarzermann »

ja in die PHP hab ich schon geschaut nur sind da mehrere einträge mit den Sensoren und bevor ich darin jetzt rum doktore und danach nichts mehr geht Frag ich lieber im vorraus
Der mit sympatischen Vollmeise
viewtopic.php?p=10570#p10570 USB Zuweisungen.
viewtopic.php?p=41308#p41308 Shelly in Grafana schalten
viewtopic.php?p=32232#p32232

Benutzeravatar
Schwarzermann
Beiträge: 440
Registriert: Sa 9. Okt 2021, 11:16
Wohnort: 87733
Hat sich bedankt: 9 Mal
Danksagung erhalten: 14 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Schwarzermann »

Code: Alles auswählen

<?php

/*****************************************************************************
//  Solaranzeige Projekt             Copyright (C) [2016-2020]  [Ulrich Kunz]
//
//  Dieses Programm ist freie Software. Sie können es unter den Bedingungen
//  der GNU General Public License, wie von der Free Software Foundation
//  veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß
//  Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
//
//  Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es
//  Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne
//  die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
//  BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
//
//  Ein original Exemplar der GNU General Public License finden Sie hier:
//  http://www.gnu.org/licenses/
//
//  Dies ist ein Programmteil des Programms "Solaranzeige"
//
//  Es dient dem Auslesen von Shelly Geräten mit WLAN Schnittstelle
//  Das Auslesen wird hier mit einer Schleife durchgeführt. Wie oft die Daten
//  ausgelesen und gespeichert werden steht in der user.config.php
//
//  Gen 1 Device Typen:
//  SH2LED-1
//  SHAIR-1
//  SHBDUO-1
//  SHBLB-1
//  SHBTN-1
//  SHBTN-2
//  SHCB-1
//  SHCL-255
//  SHDIMW-1
//  SHDM-1
//  SHDM-2
//  SHDW-1
//  SHDW-2
//  SHEM
//  SHEM-3
//  SHGS-1
//  SHHT-1
//  SHIX3-1
//  SHMOS-01
//  SHPLG-1
//  SHPLG2-1
//  SHPLG-AU1
//  SHPLG-IT1
//  SHPLG-S
//  SHPLG-U1
//  SHPLG-UK1
//  SHRGBW2
//  SHRGBWW-01
//  SHSEN-1
//  SHSM-01
//  SHSPOT-1
//  SHSW-1
//  SHSW-21
//  SHSW-25
//  SHSW-44
//  SHSW-L
//  SHSW-PM
//  SHUNI-1
//  SHVIN-1
//  SHWT-1
//  *****************************************************************************
//  Implementiert:
//  Shelly Pro 3EM
//  Shelly Pro EM
//  Shelly 3EM
//  Shelly EM
//  Shelly Plus 1
//  Shelly Plus 1PM
//  Shelly Plus Plug S
//  Shelly PM mini
//  Shelly SHPLG-S
 *****************************************************************************/
$path_parts = pathinfo($argv[0]);
$Pfad = $path_parts['dirname'];
if (!is_file($Pfad . "/1.user.config.php")) {
  // Handelt es sich um ein Multi Regler System?
  require $Pfad . "/user.config.php";
}
require_once $Pfad . "/phpinc/funktionen.inc.php";
if (!isset($funktionen)) {
  $funktionen = new funktionen();
}
$Tracelevel = 7; //  1 bis 10  10 = Debug
$RemoteDaten = true;
$Device = "WR"; // WR = Wechselrichter
$Version = "";
$Start = time(); // Timestamp festhalten
$funktionen->log_schreiben("-----------------   Start  shelly.php    ------------------ ", "|--", 6);
$funktionen->log_schreiben("Zentraler Timestamp: " . $zentralerTimestamp, "   ", 8);
$aktuelleDaten = array();
$aktuelleDaten["zentralerTimestamp"] = $zentralerTimestamp;
setlocale(LC_TIME, "de_DE.utf8");
if (!is_file($Pfad . "/1.user.config.php")) {
  if ((int) substr(trim($FreierSpeicher), 0, -1) < 4) {
    // Minimum von 4 GB freier speicher muss zur Verfügung stehen.
    $funktionen->log_schreiben(substr(trim($FreierSpeicher), 0, -1) . " GB freier Speicher steht auf der SD-Karte / USB Stick zur Verfügung.", "!! ", 2);
    $funktionen->log_schreiben("Das ist zu wenig! Ist der gesamte Speicherplatz freigegeben? Bitte prüfen!", "!! ", 2);
  }
}

//  Hardware Version ermitteln.
//  $Platine = "Raspberry Pi Model B Plus Rev 1.2";
$funktionen->log_schreiben("Hardware Version: " . $Platine, "   ", 8);

if ($WR_IP == "0.0.0.0" and $WR_Port == "0") {
  $funktionen->log_schreiben("Es handelt sich um einen Shelly H&T, der nur sporadisch über den Script shellyinput.php Daten meldet.", "H&T", 7);
  goto Ausgang;
}

/*****************************************************************************
//  Die Status Datei wird dazu benutzt, um die Leistung des Reglers
//  pro Tag zu speichern.
//  Achtung! Dieser Wert wird jeden Tag um Mitternacht auf 0 gesetzt.
//
 *****************************************************************************/
$StatusFile = $Pfad . "/database/" . $GeraeteNummer . ".WhProTag.txt";
if (file_exists($StatusFile)) {

  /***************************************************************************
  //  Daten einlesen ...
   ***************************************************************************/
  $aktuelleDaten["WattstundenGesamtHeute"] = file_get_contents($StatusFile);
  $aktuelleDaten["WattstundenGesamtHeute"] = round($aktuelleDaten["WattstundenGesamtHeute"], 2);
  $funktionen->log_schreiben("WattstundenGesamtHeute: " . $aktuelleDaten["WattstundenGesamtHeute"], "   ", 8);
  if (empty($aktuelleDaten["WattstundenGesamtHeute"])) {
    $aktuelleDaten["WattstundenGesamtHeute"] = 0;
  }
  if (date("H:i") == "00:00" or date("H:i") == "00:01") { // Jede Nacht 0 Uhr
    $aktuelleDaten["WattstundenGesamtHeute"] = 0; //  Tageszähler löschen
    $rc = file_put_contents($StatusFile, "0");
    $funktionen->log_schreiben("WattstundenGesamtHeute gelöscht.", "    ", 5);
  }
} else {
  $aktuelleDaten["WattstundenGesamtHeute"] = 0;

  /***************************************************************************
  //  Inhalt der Status Datei anlegen.
   ***************************************************************************/
  $rc = file_put_contents($StatusFile, "0");
  if ($rc === false) {
    $funktionen->log_schreiben("Konnte die Datei kwhProTag_ax.txt nicht anlegen.", "   ", 5);
  }
}
$COM1 = fsockopen($WR_IP, $WR_Port, $errno, $errstr, 5);
if (!is_resource($COM1)) {
  $funktionen->log_schreiben("Kein Kontakt zum Wechselrichter " . $WR_IP . "  Port: " . $WR_Port, "XX ", 3);
  $funktionen->log_schreiben("Exit.... ", "XX ", 3);
  goto Ausgang;
}
$aktuelleDaten["AC"]["Gesamtleistung"] = 0;
$i = 1;
do {
  $funktionen->log_schreiben("Die Daten werden ausgelesen...", "+  ", 9);

  /****************************************************************************
  //  Ab hier werden die Shelly's ausgelesen.
  //
  //
   ****************************************************************************/
  // Füllen der Variablen falls es sich um einen Shelly EM handelt, der nur eine Phase hat.
  $aktuelleDaten["OK"] = 0;
  $URL = "shelly";
  $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
  if ($Daten != false) {
    if (isset($Daten["app"])) {
      // Es ist ein pro Gerät
      $aktuelleDaten["Info"]["Type.Text"] = $Daten["app"];
      $aktuelleDaten["Info"]["Firmware.Text"] = $Daten["fw_id"];
      $aktuelleDaten["Info"]["Modell.Text"] = $Daten["model"];
      $aktuelleDaten["Info"]["Shelly.Text"] = $Daten["id"];
      $aktuelleDaten["Info"]["Generation"] = $Daten["gen"];
      $funktionen->log_schreiben("Shelly Plus Typ: " . $aktuelleDaten["Info"]["Type.Text"], "   ", 5);
    } else {
      // Es ist ein älteres Gerät
      $aktuelleDaten["Info"]["Type.Text"] = $Daten["type"];
      $aktuelleDaten["Info"]["Firmware.Text"] = $Daten["fw"];
      $aktuelleDaten["Info"]["Generation"] = "1";
      $funktionen->log_schreiben("Shelly Typ: " . $aktuelleDaten["Info"]["Type.Text"], "   ", 5);
    }
    if (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PRO3EM") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      $aktuelleDaten["AC"]["Spannung_R"] = $Daten["em:0"]["a_voltage"];
      $aktuelleDaten["AC"]["Spannung_S"] = $Daten["em:0"]["b_voltage"];
      $aktuelleDaten["AC"]["Spannung_T"] = $Daten["em:0"]["c_voltage"];
      $aktuelleDaten["AC"]["Strom_R"] = $Daten["em:0"]["a_current"];
      $aktuelleDaten["AC"]["Strom_S"] = $Daten["em:0"]["b_current"];
      $aktuelleDaten["AC"]["Strom_T"] = $Daten["em:0"]["c_current"];
      $aktuelleDaten["AC"]["Wirkleistung_R"] = $Daten["em:0"]["a_act_power"];
      $aktuelleDaten["AC"]["Wirkleistung_S"] = $Daten["em:0"]["b_act_power"];
      $aktuelleDaten["AC"]["Wirkleistung_T"] = $Daten["em:0"]["c_act_power"];
      $aktuelleDaten["AC"]["PowerFactor_R"] = $Daten["em:0"]["a_pf"];
      $aktuelleDaten["AC"]["PowerFactor_S"] = $Daten["em:0"]["b_pf"];
      $aktuelleDaten["AC"]["PowerFactor_T"] = $Daten["em:0"]["c_pf"];
      $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["em:0"]["total_act_power"];
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_R"] = $Daten["emdata:0"]["a_total_act_energy"];
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_S"] = $Daten["emdata:0"]["b_total_act_energy"];
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_T"] = $Daten["emdata:0"]["c_total_act_energy"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_R"] = $Daten["emdata:0"]["a_total_act_ret_energy"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_S"] = $Daten["emdata:0"]["b_total_act_ret_energy"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_T"] = $Daten["emdata:0"]["c_total_act_ret_energy"];
      $aktuelleDaten["Summen"]["Wh_Gesamt_Verbrauch"] = $Daten["emdata:0"]["total_act"];
      $aktuelleDaten["Summen"]["Wh_Gesamt_Einspeisung"] = $Daten["emdata:0"]["total_act_ret"];
      $aktuelleDaten["Summen"]["Wh_Heute"] = $aktuelleDaten["WattstundenGesamtHeute"];
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PROEM") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      $aktuelleDaten["AC"]["Spannung"] = $Daten["em1:0"]["voltage"];
      $aktuelleDaten["AC"]["Strom"] = $Daten["em1:0"]["current"];
      $aktuelleDaten["AC"]["Leistung"] = $Daten["em1:0"]["act_power"];
      $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["em1:0"]["act_power"];
      $aktuelleDaten["Summen"]["Wh_Gesamt"] = $Daten["em1data:0"]["total_act_energy"];
      $aktuelleDaten["AC"]["Frequenz"] = $Daten["em1:0"]["freq"];
      $aktuelleDaten["Service"]["ShellyTemperatur"] = $Daten["switch:0"]["temperature"]["tC"];
      $aktuelleDaten["Service"]["RelaisKontakt"] = (int) $Daten["switch:0"]["output"];
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHEM") {
      $URL = "status";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        $funktionen->log_schreiben("Status Werte sind falsch... nochmal lesen.", "   ", 3);
        if ($i >= 6) {
          $funktionen->log_schreiben(var_export($funktionen->read($WR_IP, $WR_Port, $URL), 1), "o=>", 9);
          break;
        }
        $i++;
        continue;
      }
      $aktuelleDaten["AC"]["Spannung_R"] = $Daten["emeters"][0]["voltage"];
      if (isset($Daten["emeters"][0]["current"])) {
        $aktuelleDaten["AC"]["Strom_R"] = $Daten["emeters"][0]["current"];
      }
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_R"] = $Daten["emeters"][0]["total"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_R"] = $Daten["emeters"][0]["total_returned"];
      if (isset($Daten["emeters"][0]["pf"])) {
        $aktuelleDaten["AC"]["PowerFactor_R"] = $Daten["emeters"][0]["pf"];
      }
      $aktuelleDaten["AC"]["Wirkleistung_R"] = $Daten["emeters"][0]["power"];
      $aktuelleDaten["OK"] = $Daten["relays"][0]["is_valid"];
      if ($aktuelleDaten["OK"] == false) {
        $aktuelleDaten["Service"]["OK"] = 0;
      }
      $aktuelleDaten["Ueberlastung"] = $Daten["relays"][0]["overpower"];
      if ($aktuelleDaten["Ueberlastung"] == false) {
        $aktuelleDaten["Service"]["Ueberlastung"] = 0;
      }
      $aktuelleDaten["Relaisstatus"] = $Daten["relays"][0]["ison"];
      if ($aktuelleDaten["Relaisstatus"] == false) {
        $aktuelleDaten["Service"]["Relaisstatus"] = 0;
      }
      $aktuelleDaten["Summen"]["Wh_Gesamt_Verbrauch"] = $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_R"];
      $aktuelleDaten["Summen"]["Wh_Gesamt_Einspeisung"] = $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_R"];
      //  Negative Werte sind Einspeisung!
      $aktuelleDaten["AC"]["Gesamtleistung"] = $aktuelleDaten["AC"]["Wirkleistung_R"];
      if (isset($Daten["emeters"][1]["power"])) {
        $aktuelleDaten["AC"]["Spannung_S"] = $Daten["emeters"][1]["voltage"];
        if (isset($Daten["emeters"][1]["current"])) {
          $aktuelleDaten["AC"]["Strom_S"] = $Daten["emeters"][1]["current"];
        }
        $aktuelleDaten["AC"]["Wh_VerbrauchGesamt_S"] = $Daten["emeters"][1]["total"];
        $aktuelleDaten["AC"]["Wh_EinspeisungGesamt_S"] = $Daten["emeters"][1]["total_returned"];
        if (isset($Daten["emeters"][1]["pf"])) {
          $aktuelleDaten["AC"]["PowerFactor_S"] = $Daten["emeters"][1]["pf"];
        }
        $aktuelleDaten["AC"]["Wirkleistung_S"] = $Daten["emeters"][1]["power"];
        $aktuelleDaten["Summen"]["Wh_Gesamt_Verbrauch"] = $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_R"] + $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_S"];
        $aktuelleDaten["Summen"]["Wh_Gesamt_Einspeisung"] = $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_R"] + $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_S"];
        //  Negative Werte sind Einspeisung!
        $aktuelleDaten["AC"]["Gesamtleistung"] = $aktuelleDaten["AC"]["Wirkleistung_R"] + $aktuelleDaten["AC"]["Wirkleistung_S"];
        $aktuelleDaten["Summen"]["Wh_Heute"] = $aktuelleDaten["WattstundenGesamtHeute"];
      }
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHEM-3") {
      $URL = "status";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        $funktionen->log_schreiben("Status Werte sind falsch... nochmal lesen.", "   ", 3);
        if ($i >= 6) {
          $funktionen->log_schreiben(var_export($funktionen->read($WR_IP, $WR_Port, $URL), 1), "o=>", 9);
          break;
        }
        $i++;
        continue;
      }
      $aktuelleDaten["AC"]["Spannung_R"] = $Daten["emeters"][0]["voltage"];
      $aktuelleDaten["AC"]["Spannung_S"] = $Daten["emeters"][1]["voltage"];
      $aktuelleDaten["AC"]["Spannung_T"] = $Daten["emeters"][2]["voltage"];
      if (isset($Daten["emeters"][0]["current"])) {
        $aktuelleDaten["AC"]["Strom_R"] = $Daten["emeters"][0]["current"];
        $aktuelleDaten["AC"]["Strom_S"] = $Daten["emeters"][1]["current"];
        $aktuelleDaten["AC"]["Strom_T"] = $Daten["emeters"][2]["current"];
      } else {
        $aktuelleDaten["AC"]["Strom_R"] = 0;
        $aktuelleDaten["AC"]["Strom_S"] = 0;
        $aktuelleDaten["AC"]["Strom_T"] = 0;
      }
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_R"] = $Daten["emeters"][0]["total"];
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_S"] = $Daten["emeters"][1]["total"];
      $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_T"] = $Daten["emeters"][2]["total"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_R"] = $Daten["emeters"][0]["total_returned"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_S"] = $Daten["emeters"][1]["total_returned"];
      $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_T"] = $Daten["emeters"][2]["total_returned"];
      if (isset($Daten["emeters"][0]["pf"])) {
        $aktuelleDaten["AC"]["PowerFactor_R"] = $Daten["emeters"][0]["pf"];
        $aktuelleDaten["AC"]["PowerFactor_S"] = $Daten["emeters"][1]["pf"];
        $aktuelleDaten["AC"]["PowerFactor_T"] = $Daten["emeters"][2]["pf"];
      } else {
        $aktuelleDaten["AC"]["PowerFactor_R"] = 1;
        $aktuelleDaten["AC"]["PowerFactor_S"] = 1;
        $aktuelleDaten["AC"]["PowerFactor_T"] = 1;
      }
      $aktuelleDaten["AC"]["Wirkleistung_R"] = $Daten["emeters"][0]["power"];
      $aktuelleDaten["AC"]["Wirkleistung_S"] = $Daten["emeters"][1]["power"];
      $aktuelleDaten["AC"]["Wirkleistung_T"] = $Daten["emeters"][2]["power"];
      $aktuelleDaten["OK"] = $Daten["relays"][0]["is_valid"];
      if ($aktuelleDaten["OK"] == false) {
        $aktuelleDaten["Service"]["OK"] = 0;
      }
      $aktuelleDaten["Service"]["Ueberlastung"] = $Daten["relays"][0]["overpower"];
      if ($aktuelleDaten["Service"]["Ueberlastung"] == false) {
        $aktuelleDaten["Service"]["Ueberlastung"] = 0;
      }
      $aktuelleDaten["Service"]["Relaisstatus"] = $Daten["relays"][0]["ison"];
      if ($aktuelleDaten["Service"]["Relaisstatus"] == false) {
        $aktuelleDaten["Service"]["Relaisstatus"] = 0;
      }
      $aktuelleDaten["Summen"]["Wh_Gesamt_Verbrauch"] = ($aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_R"] + $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_S"] + $aktuelleDaten["Summen"]["Wh_VerbrauchGesamt_T"]);
      $aktuelleDaten["Summen"]["Wh_Gesamt_Einspeisung"] = ($aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_R"] + $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_S"] + $aktuelleDaten["Summen"]["Wh_EinspeisungGesamt_T"]);
      //  Negative Werte sind Einspeisung!
      $aktuelleDaten["AC"]["Gesamtleistung"] = ($aktuelleDaten["AC"]["Wirkleistung_R"] + $aktuelleDaten["AC"]["Wirkleistung_S"] + $aktuelleDaten["AC"]["Wirkleistung_T"]);
      $aktuelleDaten["Summen"]["Wh_Heute"] = $aktuelleDaten["WattstundenGesamtHeute"];
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUS1") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["switch:0"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur"] = $Daten["switch:0"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt"] = (int) $Daten["switch:0"]["output"];
        if (isset($Daten["switch:0"]["input"])) {
          $aktuelleDaten["Service"]["RelaisSchalter"] = (int) $Daten["switch:0"]["input"];
        }
      }
      if (isset($Daten["temperature:100"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:100"] = $Daten["temperature:100"]["tC"];
      }
      if (isset($Daten["temperature:101"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:101"] = $Daten["temperature:101"]["tC"];
      }
      if (isset($Daten["temperature:102"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:102"] = $Daten["temperature:102"]["tC"];
      }
      if (isset($Daten["temperature:103"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:103"] = $Daten["temperature:103"]["tC"];
      }
      if (isset($Daten["temperature:104"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:104"] = $Daten["temperature:104"]["tC"];
      }

      if (isset($Daten["humidity:100"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:101"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:101"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:102"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUS1PM") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["switch:0"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur"] = $Daten["switch:0"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt"] = (int) $Daten["switch:0"]["output"];
        if (isset($Daten["input:0"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter"] = (int) $Daten["input:0"]["state"];
        }
        $aktuelleDaten["AC"]["Spannung"] = $Daten["switch:0"]["voltage"];
        $aktuelleDaten["AC"]["Strom"] = $Daten["switch:0"]["current"];
        $aktuelleDaten["AC"]["Leistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Energie"] = $Daten["switch:0"]["aenergy"]["total"];
      }
      if (isset($Daten["temperature:100"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:100"] = $Daten["temperature:100"]["tC"];
      }
      if (isset($Daten["temperature:101"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:101"] = $Daten["temperature:101"]["tC"];
      }
      if (isset($Daten["temperature:102"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:102"] = $Daten["temperature:102"]["tC"];
      }
      if (isset($Daten["temperature:103"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:103"] = $Daten["temperature:103"]["tC"];
      }
      if (isset($Daten["temperature:104"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:104"] = $Daten["temperature:104"]["tC"];
      }
      if (isset($Daten["humidity:100"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:101"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:101"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:102"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUS2PM") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["switch:0"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur"] = $Daten["switch:0"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt"] = (int) $Daten["switch:0"]["output"];
        if (isset($Daten["input:0"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter"] = (int) $Daten["input:0"]["state"];
        }
        $aktuelleDaten["AC"]["Spannung"] = $Daten["switch:0"]["voltage"];
        $aktuelleDaten["AC"]["Strom"] = $Daten["switch:0"]["current"];
        $aktuelleDaten["AC"]["Leistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Frequenz"] = $Daten["switch:0"]["freq"];
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Energie"] = $Daten["switch:0"]["aenergy"]["total"];
      }
      if (isset($Daten["switch:1"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur2"] = $Daten["switch:1"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt2"] = (int) $Daten["switch:1"]["output"];
        if (isset($Daten["input:1"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter2"] = (int) $Daten["input:1"]["state"];
        }
        $aktuelleDaten["AC"]["Spannung2"] = $Daten["switch:1"]["voltage"];
        $aktuelleDaten["AC"]["Strom2"] = $Daten["switch:1"]["current"];
        $aktuelleDaten["AC"]["Leistung2"] = $Daten["switch:1"]["apower"];
        $aktuelleDaten["AC"]["Frequenz2"] = $Daten["switch:1"]["freq"];
        $aktuelleDaten["AC"]["Gesamtleistung2"] = $Daten["switch:1"]["apower"];
        $aktuelleDaten["AC"]["Energie2"] = $Daten["switch:1"]["aenergy"]["total"];
      }
      if (isset($Daten["temperature:100"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:100"] = $Daten["temperature:100"]["tC"];
      }
      if (isset($Daten["temperature:101"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:101"] = $Daten["temperature:101"]["tC"];
      }
      if (isset($Daten["temperature:102"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:102"] = $Daten["temperature:102"]["tC"];
      }
      if (isset($Daten["temperature:103"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:103"] = $Daten["temperature:103"]["tC"];
      }
      if (isset($Daten["temperature:104"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:104"] = $Daten["temperature:104"]["tC"];
      }
      if (isset($Daten["humidity:100"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:101"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:101"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:102"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUSPMMINI") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["pm1:0"])) {
        $aktuelleDaten["AC"]["Spannung"] = $Daten["pm1:0"]["voltage"];
        $aktuelleDaten["AC"]["Strom"] = $Daten["pm1:0"]["current"];
        $aktuelleDaten["AC"]["Leistung"] = $Daten["pm1:0"]["apower"];
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["pm1:0"]["apower"];
        $aktuelleDaten["AC"]["Energie"] = $Daten["pm1:0"]["aenergy"]["total"];
        $aktuelleDaten["AC"]["Frequenz"] = $Daten["pm1:0"]["freq"];
      }
      if (isset($Daten["temperature:100"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:100"] = $Daten["temperature:100"]["tC"];
      }
      if (isset($Daten["temperature:101"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:101"] = $Daten["temperature:101"]["tC"];
      }
      if (isset($Daten["temperature:102"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:102"] = $Daten["temperature:102"]["tC"];
      }
      if (isset($Daten["temperature:103"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:103"] = $Daten["temperature:103"]["tC"];
      }
      if (isset($Daten["temperature:104"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:104"] = $Daten["temperature:104"]["tC"];
      }
      if (isset($Daten["humidity:100"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:101"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:101"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:102"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PRO2") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["switch:0"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur1"] = $Daten["switch:0"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt1"] = (int) $Daten["switch:0"]["output"];
        if (isset($Daten["input:0"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter1"] = (int) $Daten["input:0"]["state"];
        }
      }
      if (isset($Daten["switch:1"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur2"] = $Daten["switch:1"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt2"] = (int) $Daten["switch:1"]["output"];
        if (isset($Daten["input:0"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter2"] = (int) $Daten["input:1"]["state"];
        }
      }
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUSHT") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["temperature:0"])) {
        $aktuelleDaten["Service"]["Temperatur"] = $Daten["temperature:0"]["tC"];
      }
      if (isset($Daten["humidity:0"])) {
        $aktuelleDaten["Service"]["Luftfeuchte"] = $Daten["humidity:0"]["rh"];
      }
      if (isset($Daten["temperature:1"])) {
        $aktuelleDaten["Service"]["ExtTemperatur"] = $Daten["temperature:1"]["tC"];
      }
      if (isset($Daten["humidity:1"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte"] = $Daten["humidity:1"]["rh"];
      }
      if (isset($Daten["devicepower:0"])) {
        $aktuelleDaten["Service"]["Batterie"] = $Daten["devicepower:0"]["battery"]["V"];
        $aktuelleDaten["Service"]["Batteriestatus"] = $Daten["devicepower:0"]["battery"]["percent"];
        $aktuelleDaten["Service"]["Stromversorgung_vorhanden"] = $Daten["devicepower:0"]["external"]["present"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHSW-1") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["meters"])) {
        $aktuelleDaten["AC"]["Leistung"] = $Daten["meters"]["0"]["power"];
        $aktuelleDaten["Service"]["Button"] = $Daten["inputs"]["0"]["input"];
      }
      if (isset($Daten["meters"]["0"]["total"])) {
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["meters"]["0"]["total"];
      }
      if (isset($Daten["relais"]["0"]["ison"])) {
        $aktuelleDaten["Relais"]["Kontakt1"] = $Daten["relais"]["0"]["ison"];
      }
      $funktionen->log_schreiben("Wifi Signalstärke: " . $Daten["wifi_sta"]["rssi"], "   ", 7);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHSW-PM") {
      $URL = "status";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        $funktionen->log_schreiben("Keine Antwort vom Shelly. Ausgang." . print_r($Daten, 1), "   ", 7);
        goto Ausgang;
      }
      if (isset($Daten["meters"])) {
        $aktuelleDaten["AC"]["Leistung"] = $Daten["meters"]["0"]["power"];
        $aktuelleDaten["Service"]["Button"] = $Daten["inputs"]["0"]["input"];
      }
      if (isset($Daten["meters"]["0"]["total"])) {
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["meters"]["0"]["total"];
        $aktuelleDaten["AC"]["Zaehler_0"] = $Daten["meters"]["0"]["counters"]["0"];
        $aktuelleDaten["AC"]["Zaehler_1"] = $Daten["meters"]["0"]["counters"]["1"];
        $aktuelleDaten["AC"]["Zaehler_2"] = $Daten["meters"]["0"]["counters"]["2"];
      }
      if (isset($Daten["temperature"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur"] = $Daten["temperature"];
      }
      $funktionen->log_schreiben("Wifi Signalstärke: " . $Daten["wifi_sta"]["rssi"], "   ", 7);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUSPLUGS") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["switch:0"])) {
        $aktuelleDaten["AC"]["Spannung"] = $Daten["switch:0"]["voltage"];
        $aktuelleDaten["AC"]["Strom"] = $Daten["switch:0"]["current"];
        $aktuelleDaten["AC"]["Leistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Energie"] = $Daten["switch:0"]["aenergy"]["total"];
        $aktuelleDaten["AC"]["RelaisKontak1"] = $Daten["switch:0"]["output"];
      }
      if (isset($Daten["temperature:100"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:100"] = $Daten["temperature:100"]["tC"];
      }
      if (isset($Daten["temperature:101"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:101"] = $Daten["temperature:101"]["tC"];
      }
      if (isset($Daten["temperature:102"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:102"] = $Daten["temperature:102"]["tC"];
      }
      if (isset($Daten["temperature:103"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:103"] = $Daten["temperature:103"]["tC"];
      }
      if (isset($Daten["temperature:104"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:104"] = $Daten["temperature:104"]["tC"];
      }
      if (isset($Daten["humidity:100"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:100"] = $Daten["humidity:100"]["rh"];
      }
      if (isset($Daten["humidity:101"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:101"] = $Daten["humidity:101"]["rh"];
      }
      if (isset($Daten["humidity:102"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "MINIPMG3") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["pm1:0"])) {
        $aktuelleDaten["AC"]["Spannung"] = $Daten["pm1:0"]["voltage"];
        $aktuelleDaten["AC"]["Strom"] = $Daten["pm1:0"]["current"];
        $aktuelleDaten["AC"]["Leistung"] = $Daten["pm1:0"]["apower"];
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["pm1:0"]["apower"];
        $aktuelleDaten["AC"]["Energie"] = $Daten["pm1:0"]["aenergy"]["total"];
        $aktuelleDaten["AC"]["Frequenz"] = $Daten["pm1:0"]["freq"];

        $aktuelleDaten["AC"]["Energie_Minute0_Wh"] = round($Daten["pm1:0"]["aenergy"]["by_minute"][0] / 1000, 5);
        $aktuelleDaten["AC"]["Energie_Minute1_Wh"] = round($Daten["pm1:0"]["aenergy"]["by_minute"][1] / 1000, 5);
        $aktuelleDaten["AC"]["Energie_Minute2_Wh"] = round($Daten["pm1:0"]["aenergy"]["by_minute"][2] / 1000, 5);
        $aktuelleDaten["AC"]["Timestamp_Minute0"] = $Daten["pm1:0"]["aenergy"]["minute_ts"];
      }

    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHPLG-S") {
      $URL = "status";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        $funktionen->log_schreiben("Status Werte sind falsch... nochmal lesen.", "   ", 3);
        if ($i >= 6) {
          $funktionen->log_schreiben(var_export($funktionen->read($WR_IP, $WR_Port, $URL), 1), "o=>", 9);
          break;
        }
        $i++;
        continue;
      }
      $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["meters"]["0"]["power"];
      $aktuelleDaten["AC"]["Leistung_Minute_0"] = $Daten["meters"]["0"]["counters"]["0"];
      $aktuelleDaten["AC"]["Leistung_Minute_1"] = $Daten["meters"]["0"]["counters"]["1"];
      $aktuelleDaten["AC"]["Leistung_Minute_2"] = $Daten["meters"]["0"]["counters"]["2"];
      $aktuelleDaten["AC"]["Energie"] = $Daten["meters"]["0"]["total"];
      $aktuelleDaten["Summen"]["Wh_Gesamt"] = $Daten["meters"]["0"]["total"];
      $aktuelleDaten["Summen"]["Wh_Heute"] = $aktuelleDaten["WattstundenGesamtHeute"];
      if (isset($Daten["relais"]["0"]["ison"])) {
        $aktuelleDaten["Relais"]["Kontakt1"] = $Daten["relais"]["0"]["ison"];
      }
      $funktionen->log_schreiben("Wifi Signalstärke: " . $Daten["wifi_sta"]["rssi"], "   ", 7);
      $aktuelleDaten["Service"]["Temperatur"] = $Daten["temperature"];
    } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PRO2PM") {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        goto Ausgang;
      }
      if (isset($Daten["switch:0"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur"] = $Daten["switch:0"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt"] = (int) $Daten["switch:0"]["output"];
        if (isset($Daten["input:0"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter"] = (int) $Daten["input:0"]["state"];
        }
        $aktuelleDaten["AC"]["Spannung"] = $Daten["switch:0"]["voltage"];
        $aktuelleDaten["AC"]["Strom"] = $Daten["switch:0"]["current"];
        $aktuelleDaten["AC"]["Leistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Frequenz"] = $Daten["switch:0"]["freq"];
        $aktuelleDaten["AC"]["Gesamtleistung"] = $Daten["switch:0"]["apower"];
        $aktuelleDaten["AC"]["Energie"] = $Daten["switch:0"]["aenergy"]["total"];
      }
      if (isset($Daten["switch:1"])) {
        $aktuelleDaten["Service"]["ShellyTemperatur2"] = $Daten["switch:1"]["temperature"]["tC"];
        $aktuelleDaten["Service"]["RelaisKontakt2"] = (int) $Daten["switch:1"]["output"];
        if (isset($Daten["input:1"]["state"])) {
          $aktuelleDaten["Service"]["RelaisSchalter2"] = (int) $Daten["input:1"]["state"];
        }
        $aktuelleDaten["AC"]["Spannung2"] = $Daten["switch:1"]["voltage"];
        $aktuelleDaten["AC"]["Strom2"] = $Daten["switch:1"]["current"];
        $aktuelleDaten["AC"]["Leistung2"] = $Daten["switch:1"]["apower"];
        $aktuelleDaten["AC"]["Frequenz2"] = $Daten["switch:1"]["freq"];
        $aktuelleDaten["AC"]["Gesamtleistung2"] = $Daten["switch:1"]["apower"];
        $aktuelleDaten["AC"]["Energie2"] = $Daten["switch:1"]["aenergy"]["total"];
      }
      if (isset($Daten["temperature:100"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:100"] = $Daten["temperature:100"]["tC"];
      }
      if (isset($Daten["temperature:101"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:101"] = $Daten["temperature:101"]["tC"];
      }
      if (isset($Daten["temperature:102"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:102"] = $Daten["temperature:102"]["tC"];
      }
      if (isset($Daten["temperature:103"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:103"] = $Daten["temperature:103"]["tC"];
      }
      if (isset($Daten["temperature:104"])) {
        $aktuelleDaten["Service"]["ExtTemperatur:104"] = $Daten["temperature:104"]["tC"];
      }
      if (isset($Daten["humidity:100"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:101"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:101"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      if (isset($Daten["humidity:102"])) {
        $aktuelleDaten["Service"]["ExtLuftfeuchte:102"] = $Daten["humidity:102"]["rh"];
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 10);
      $funktionen->log_schreiben(print_r($Daten, 1), "   ", 10);
    } else {
      $URL = "rpc/shelly.getstatus";
      $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
      if ($Daten === false) {
        $URL = "status";
        $Daten = $funktionen->read($WR_IP, $WR_Port, $URL);
        if ($Daten === false) {
          goto Ausgang;
        }
      }
      $funktionen->log_schreiben(var_export($aktuelleDaten, 1), "   ", 9);
      $funktionen->log_schreiben("Dieses Gerät ist noch nicht implementiert. Bitte per eMail melden: support@solaranzeige.de", "   ", 1);
      $funktionen->log_schreiben("\n" . $aktuelleDaten["Info"]["Type.Text"] . "\n" . print_r($Daten, 1), "   ", 1);
      goto Ausgang;
    }
  } else {
    goto Ausgang;
  }

  /****************************************************************************
  //  ENDE REGLER AUSLESEN      ENDE REGLER AUSLESEN      ENDE REGLER AUSLESEN
   ****************************************************************************/
  $funktionen->log_schreiben("Gesamtleistung: " . $aktuelleDaten["AC"]["Gesamtleistung"] . " Watt", "   ", 6);

  /****************************************************************************
  //  Die Daten werden für die Speicherung vorbereitet.
   ****************************************************************************/
  if (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHEM") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly EM";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PRO3EM") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Pro 3EM";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PROEM") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Pro EM";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHEM-3") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly 3EM";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUS1") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Plus 1";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUS1PM") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Plus 1PM";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUSPMMINI") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Plus PM Mini";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PRO2") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Pro 2";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHSW-PM") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly 1PM";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "PLUSPLUGS") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Plus Plug S";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "MINIPMG3") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly PM mini Gen3";
  } elseif (strtoupper($aktuelleDaten["Info"]["Type.Text"]) == "SHPLG-S") {
    $aktuelleDaten["Info"]["Produkt.Text"] = "Shelly Plug S";
  }
  $aktuelleDaten["Regler"] = $Regler;
  $aktuelleDaten["Info"]["Objekt.Text"] = $Objekt;
  $aktuelleDaten["zentralerTimestamp"] = ($aktuelleDaten["zentralerTimestamp"] + 10);

  $funktionen->log_schreiben(print_r($Daten, 1), "   ", 9);

  $aktuelleDaten["Summen"]["Wh_GesamtHeute"] = $aktuelleDaten["WattstundenGesamtHeute"];

  /****************************************************************************
  //  User PHP Script, falls gewünscht oder nötig
   ****************************************************************************/
  if (file_exists("/var/www/html/shelly_math.php")) {
    include 'shelly_math.php'; // Falls etwas neu berechnet werden muss.
  }
Der mit sympatischen Vollmeise
viewtopic.php?p=10570#p10570 USB Zuweisungen.
viewtopic.php?p=41308#p41308 Shelly in Grafana schalten
viewtopic.php?p=32232#p32232

Benutzeravatar
Schwarzermann
Beiträge: 440
Registriert: Sa 9. Okt 2021, 11:16
Wohnort: 87733
Hat sich bedankt: 9 Mal
Danksagung erhalten: 14 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Schwarzermann »

Code: Alles auswählen

  /**************************************************************************
  //  Alle ausgelesenen Daten werden hier bei Bedarf als mqtt Messages
  //  an den mqtt-Broker Mosquitto gesendet.
  //  Achtung! Die Übertragung dauert ca. 30 Sekunden!
   **************************************************************************/
  if ($MQTT) {
    $funktionen->log_schreiben("MQTT Daten zum [ $MQTTBroker ] senden.", "   ", 1);
    require $Pfad . "/mqtt_senden.php";
  }

  if (date("Y.W") <= "2024.30") {
    // Woche xx
    $funktionen->log_schreiben(print_r($aktuelleDaten, 1), "   ", 5);
  } else {
    $funktionen->log_schreiben(print_r($aktuelleDaten, 1), "   ", 8);
  }

  /****************************************************************************
  //  Zeit und Datum
   ****************************************************************************/
  //  Der Regler hat keine interne Uhr! Deshalb werden die Daten vom Raspberry benutzt.
  $aktuelleDaten["Statistik"]["Timestamp"] = time();
  $aktuelleDaten["Statistik"]["Monat"] = date("n");
  $aktuelleDaten["Statistik"]["Woche"] = date("W");
  $aktuelleDaten["Statistik"]["Wochentag.Text"] = strftime("%A", time());
  $aktuelleDaten["Statistik"]["Datum.Text"] = date("d.m.Y");
  $aktuelleDaten["Statistik"]["Uhrzeit.Text"] = date("H:i:s");


  /****************************************************************************
  //  InfluxDB  Zugangsdaten ...stehen in der user.config.php
  //  falls nicht, sind das hier die default Werte.
   ****************************************************************************/
  $aktuelleDaten["InfluxAdresse"] = $InfluxAdresse;
  $aktuelleDaten["InfluxPort"] = $InfluxPort;
  $aktuelleDaten["InfluxUser"] = $InfluxUser;
  $aktuelleDaten["InfluxPassword"] = $InfluxPassword;
  $aktuelleDaten["InfluxDBName"] = $InfluxDBName;
  $aktuelleDaten["InfluxDaylight"] = $InfluxDaylight;
  $aktuelleDaten["InfluxDBLokal"] = $InfluxDBLokal;
  $aktuelleDaten["InfluxSSL"] = $InfluxSSL;
  $aktuelleDaten["Demodaten"] = false;

  /*********************************************************************
  //  Daten werden in die Influx Datenbank gespeichert.
  //  Lokal und Remote bei Bedarf.
   *********************************************************************/
  if ($InfluxDB_remote) {
    // Test ob die Remote Verbindung zur Verfügung steht.
    if ($RemoteDaten) {
      $rc = $funktionen->influx_remote_test();
      if ($rc) {
        $rc = $funktionen->influx_remote($aktuelleDaten);
        if ($rc) {
          $RemoteDaten = false;
        }
      } else {
        $RemoteDaten = false;
      }
    }
    if ($InfluxDB_local) {
      $rc = $funktionen->influx_local($aktuelleDaten);
    }
  } else {
    $rc = $funktionen->influx_local($aktuelleDaten);
  }
  if (is_file($Pfad . "/1.user.config.php")) {
    // Ausgang Multi-Regler-Version
    $Zeitspanne = (1 - (time() - $Start));
    $funktionen->log_schreiben("Multi-Regler-Ausgang. " . $Zeitspanne, "   ", 2);
    if ($Zeitspanne > 0) {
      sleep($Zeitspanne);
    }
    break;
  } else {
    $funktionen->log_schreiben("Schleife: " . ($i) . " Zeitspanne: " . (floor((54 - (time() - $Start)) / ($Wiederholungen - $i + 1))), "   ", 9);
    sleep(floor((54 - (time() - $Start)) / ($Wiederholungen - $i + 1)));
  }
  if ($Wiederholungen <= $i or $i >= 6) {
    $funktionen->log_schreiben("OK. Daten gelesen.", "   ", 9);
    $funktionen->log_schreiben("Schleife " . $i . " Ausgang...", "   ", 8);
    break;
  }
  $i++;
} while (($Start + 54) > time());
if (isset($aktuelleDaten["Info"]["Firmware.Text"]) and isset($aktuelleDaten["Regler"])) {

  /*********************************************************************
  //  Jede Minute werden bei Bedarf einige Werte zur Homematic Zentrale
  //  übertragen.
   *********************************************************************/
  if (isset($Homematic) and $Homematic == true) {
    $funktionen->log_schreiben("Daten werden zur HomeMatic übertragen...", "   ", 8);
    require $Pfad . "/homematic.php";
  }

  /*********************************************************************
  //  Sollen Nachrichten an einen Messenger gesendet werden?
  //  Bei einer Multi-Regler-Version sollte diese Funktion nur bei einem
  //  Gerät aktiviert sein.
   *********************************************************************/
  if (isset($Messenger) and $Messenger == true) {
    $funktionen->log_schreiben("Nachrichten versenden...", "   ", 8);
    require $Pfad . "/meldungen_senden.php";
  }
  $funktionen->log_schreiben("OK. Datenübertragung erfolgreich.", "   ", 7);
} else {
  $funktionen->log_schreiben("Keine gültigen Daten empfangen.", "!! ", 6);
}

/*****************************************************************************
//  Die Status Datei wird dazu benutzt, um die Leistung des Reglers
//  pro Tag zu speichern.
//  Achtung! Dieser Wert wird jeden Tag um Mitternacht auf 0 gesetzt.
//  Leistung in Watt / 60 Minuten, da 60 mal in der Stunde addiert wird.
 *****************************************************************************/
if (file_exists($StatusFile) and isset($aktuelleDaten["Info"]["Firmware.Text"])) {

  /***************************************************************************
  //  Daten einlesen ...   ( Watt * Stunden ) pro Tag = Wh
   ***************************************************************************/
  $whProTag = file_get_contents($StatusFile);
  // aktuellen Wert in die Datei schreiben:
  $whProTag = ($whProTag + round(($aktuelleDaten["AC"]["Gesamtleistung"] / 60), 2));
  $rc = file_put_contents($StatusFile, $whProTag);
  $funktionen->log_schreiben("WattstundenGesamtHeute: " . round($whProTag, 2), "   ", 5);
}
Ausgang:
/*********/
/****/
fclose($COM1);

$funktionen->log_schreiben("-----------------   Stop   shelly.php    ------------------ ", "|--", 6);
return;
?>
Jupp es passt dank Chat GPT hb ich es hin bekommen.
Der mit sympatischen Vollmeise
viewtopic.php?p=10570#p10570 USB Zuweisungen.
viewtopic.php?p=41308#p41308 Shelly in Grafana schalten
viewtopic.php?p=32232#p32232

Ruhz69
Beiträge: 88
Registriert: Fr 28. Jan 2022, 19:41
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Ruhz69 »

Hallo,

die add on Sensoren muss man über die Solaranzeige auslesen, über den Energiemonitor geht das nicht?

viele Grüsse

Rüdiger

Benutzeravatar
Ulrich
Administrator
Beiträge: 5656
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 164 Mal
Danksagung erhalten: 833 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Ulrich »

Hallo Rüdiger,

das sollte auch mit dem Energiemonitor möglich sein. Es sind aber noch nicht alle Shelly's mit allen Sensoren implementiert.

Um welche Sensoren, an welchem Shelly geht es denn?
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

Ruhz69
Beiträge: 88
Registriert: Fr 28. Jan 2022, 19:41
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Ruhz69 »

Hallo Ulrich,
Erst einmal vielen Dank für den Energiemonitor. Der macht es zum Beispiel sehr einfach an diese Daten zu kommen:

shelly plus 1pm
Generation 2.
Shelly software
Es ist ein add on mit drei ds18b20 dran, könnten wohl bis zu fünf Temperatur Sonden oder eine Luftfeuchtem mit Temperatur dran.

Mir ist noch aufgefallen, das im Homematic Teil der Steuerung.config Daten für eine Homematic drinstehen (IP und Token).

Viele Grüße
Rüdiger

Benutzeravatar
Schwarzermann
Beiträge: 440
Registriert: Sa 9. Okt 2021, 11:16
Wohnort: 87733
Hat sich bedankt: 9 Mal
Danksagung erhalten: 14 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Schwarzermann »

OK ich lese das Shelly addon an einem 1 pm plus gen4 aus aber hier 5 Sensoren das sollte gehen, eventuell geht es nicht weil es ein gen2 gerät ist? Dazu kenne ich mich ber zuwenig aus frag doch mal im shelly Forum nach eventuell wissen die da mehr.
Der mit sympatischen Vollmeise
viewtopic.php?p=10570#p10570 USB Zuweisungen.
viewtopic.php?p=41308#p41308 Shelly in Grafana schalten
viewtopic.php?p=32232#p32232

Ruhz69
Beiträge: 88
Registriert: Fr 28. Jan 2022, 19:41
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Re: Shelly 1 pm plus nur 3 Sensoren?

Beitrag von Ruhz69 »

Hallo,
Der Shelly stammt add on wird über die Solaranzeige ausgelesen. Das geht ich hab zwei Dinge vor.
-Meine Solaranzeige läuft etwa 50 s für die 6 Geräte, ich hab da zwei lahme drin, das würde ich gerne entspannen.
-Ich überlege ob ich meinen Keller mit Wärmepumpe und Wäscheleine automatisch belüfte. Dazu braucht es zwei addon für die Luftfeuchtigkeit.
Ulrich schaut mal bei mir drüber.

Beste Grüße
Rüdiger

Zurück zu „Shelly + Solaranzeige + Steuerung + HomeMatic“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste