Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. [Frage] Erfahrungen mit Discovergy-Zählern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] Erfahrungen mit Discovergy-Zählern

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      ManfredH last edited by

      @uweklatt:

      ich verwende einen Carlo Gavazzi EM24-DIN AV93 X IS P (Hutschiene mit Modbus Schnittstelle) `
      Und mit welchen Mitteln bekommst Du die Daten in ioBroker? Bin nämlich grad auf der Suche nach Infos dazu.

      1 Reply Last reply Reply Quote 0
      • M
        ManfredH last edited by

        @ple:

        Wegen lokalen Zugriff, der Zähler kann doch D0 wenn ich das richtig verstanden habe, dann sollte es vielleicht mit dem Smartmeter Adapter funktionieren.

        D0-MSB (DIN EN 62056-61)

        Ethernet (RJ 45) 10/100 LAN 802.3

        RS485 / MODBUS (RJ 10) IEC 61158 `
        So wie ich das sehe ist D0 vom Gateway belegt (das setzt direkt auf dem Easymeter auf und versorgt sich über die D0 offensichtlich selbst)) und RJ45 wird wohl für den Datentransfer zu Discovergy benötigt. Bleibt nur noch RS485 / MODBUS und damit - wie ich gelernt habe - der Modbus-Adapter (Smartmeter-Adapter geht nur mit D0). Leider hab ich keine Ahnung, wie das dann letztendlich funktioniert 😞

        1 Reply Last reply Reply Quote 0
        • uweklatt
          uweklatt last edited by

          Hallo Manfred,@ManfredH:

          Und mit welchen Mitteln bekommst Du die Daten in ioBroker? Bin nämlich grad auf der Suche nach Infos dazu. ` der Zähler spricht Modbus über RS-485. Ich lese den mit meinem Photovoltaik Datenlogger Sun-Watch ein. Von dort holt sich IoBroker dann zusätzlich die Livewerte ab.

          Tschau

          Uwe

          1 Reply Last reply Reply Quote 0
          • M
            ManfredH last edited by

            @uweklatt:

            der Zähler spricht Modbus über RS-485. `
            Schon. Mir ist nur nicht klar, wie da die Konfiguration in ioBroker aussieht - da gibts ja ziemlich viel zu konfigurieren:
            6967_modbus_iobroker.jpg
            (plus die Tabs "Diskrete Ein-/Ausgäng", "Eingangsregister", "Holding Registers"). Leider hab ich dazu (wieder mal?) keine für mich verständliche Beschreibung gefunden (der Thread im Forum bringt ich leider auch nicht weiter) 😞

            1 Reply Last reply Reply Quote 0
            • M
              ManfredH last edited by

              Nachtrag: lt. Auskunft von Discovergy ist der einzige Wert, den der Zähler (bzw. das Gateway) über RS-485 liefert der aktuelle Verbrauch - sonst nix! Damit kann ich mir auch den Aufwand sparen, diesen Wert irgendwie auszulesen, weil ich den genausogut über den HomeMatic-Sensor bekomme (ES-LED), zumal ich den Sender selbst ja schon habe (lese im Moment noch über ES-Fer aus, was mir aber zu ungenau ist). An alle anderen Werte kommt man nur über die API, die https://api.discovergy.com/docs/ beschrieben ist.

              1 Reply Last reply Reply Quote 0
              • Stabilostick
                Stabilostick last edited by

                Als Basis z.B so etwas nehmen:

                https://github.com/CodeKing/de.codeking … discovergy

                1 Reply Last reply Reply Quote 0
                • M
                  ManfredH last edited by

                  Interessant - danke! Ist halt nur nicht für ioBroker und zum "umpfriemeln" fehlen mir die Kenntnisse.

                  1 Reply Last reply Reply Quote 0
                  • Webranger
                    Webranger last edited by

                    Ich beziehe meinen Strom jetzt von fresh energy und habe einen Discovergy Zähler seit mitte September im Zählerschrank verbaut.

                    Seit heute hab ich einen API Zugang von Discovergy bekommen.

                    Hat wer zufällig schon das auslesen der Daten hinbekommen oder umgesetzt?

                    Hätte einfach nur gerne meinen Verbrauch in der VIS angezeigt.

                    Am liebsten mit dem hier => viewtopic.php?f=21&t=2175

                    Kann da wer helfen vieleicht?

                    Gruss Danyel

                    1 Reply Last reply Reply Quote 0
                    • Webranger
                      Webranger last edited by

                      Ich habe da was bei ip-symcon gefunden vielleicht hilft es ja jemanden weiter:

                      
                       * @link        https://codeking.de
                       * @link        https://github.com/CodeKing/de.codeking.symcon
                       *
                       *
                       * @ToDo: short interval for current settings
                       * @ToDo: get relevant data:
                       * @ToDo: current consumption (kWh)
                       * @ToDo: current solar (kWh)
                       * @ToDo: current grid (kWh)
                       * @ToDo: consumption yesterday (kWh)
                       * @ToDo: consumption devices (kWh / €)
                       */
                      class GetFresh extends ModuleHelper
                      {
                          protected $prefix = 'GF';
                          private $email;
                          private $password;
                          private $token;
                          private $position_offset = 0;
                          public $data = [];
                          protected $archive_mappings = [ // archive: 0 = default, 1 = counter
                              'Base Price' => 0,
                              'Price per kWh' => 0,
                              'Current Price' => 0,
                              'Meter Reading' => 1,
                              'Power' => 0
                          ];
                          protected $profile_mappings = [
                              'Base Price' => 'Price',
                              'Price per kWh' => 'Price',
                              'Meter Reading' => 'kWh',
                              'Power' => 'Watt',
                              'Power L1' => 'Watt',
                              'Power L2' => 'Watt',
                              'Power L3' => 'Watt',
                              'Provider' => '~String'
                          ];
                          /**
                           * create instance
                           */
                          public function Create()
                          {
                              parent::Create();
                              // register public properties
                              $this->RegisterPropertyString('email', 'user@email.com');
                              $this->RegisterPropertyString('password', '');
                              $this->RegisterPropertyInteger('interval', 60); // in seconds
                              // register timer
                              $this->RegisterTimer('UpdateData', 0, $this->prefix . '_Update($_IPS[\'TARGET\']);');
                              $this->RegisterTimer('UpdateTariffData', 60 * 1000, $this->prefix . '_UpdateTariff($_IPS[\'TARGET\']);');
                          }
                          /**
                           * execute, when kernel is ready
                           */
                          protected function onKernelReady()
                          {
                              // update timer
                              $this->SetTimerInterval('UpdateData', $this->ReadPropertyInteger('interval') * 1000);
                              // Update tariff details
                              $this->UpdateTariff();
                              // Update data
                              $this->Update();
                          }
                          /**
                           * Read config
                           */
                          private function ReadConfig()
                          {
                              // get settings
                              $this->email = $this->ReadPropertyString('email');
                              $this->password = $this->ReadPropertyString('password');
                              $this->token = $this->GetBuffer('token');
                              // return if service or internet connection is not available
                              if (!Sys_Ping('getfresh.energy', 1000)) {
                                  $this->_log('GetFresh', 'Error: api or internet connection not available!');
                                  exit(-1);
                              }
                              // check if email and password are provided
                              if (!$this->email || !$this->password) {
                                  return false;
                              }
                              // read access token
                              if (!$this->token) {
                                  $this->token = $this->GetBuffer('token');
                              }
                              // login if no valid token was provided
                              if (!$this->token) {
                                  $this->Login();
                              }
                              // simple error handling
                              if (!$this->token) {
                                  $this->SetStatus(201);
                                  $this->_log('GetFresh', 'Error: The email address or password of your account is invalid!');
                                  exit(-1);
                              }
                              // everything looks ok, start
                              $this->SetStatus(102);
                          }
                          /**
                           * read & update tariff data
                           */
                          public function UpdateTariff()
                          {
                              // read config
                              $this->ReadConfig();
                              // get tariff provider name
                              if ($profile = $this->Api('profile')) {
                                  $this->data['Provider'] = $profile['brandName'];
                              }
                              // get tariff
                              if ($tariff = $this->Api('consumptionCurrentMonth')) {
                                  $this->data['Base Price'] = $tariff['monthlyBasePrice']['value'];
                                  $this->data['Price per kWh'] = $tariff['unitPrice']['value'];
                              }
                              // log data
                              $this->_log('GetFresh Tariff Data', json_encode($this->data));
                              // save data
                              $this->position_offset = 0;
                              $this->SaveData();
                          }
                          /**
                           * read & update consumption data
                           */
                          public function Update()
                          {
                              // read config
                              $this->ReadConfig();
                              // get current readings
                              if ($currentReadings = $this->Api('currentReadings')) {
                                  $cnt = count($currentReadings['readings']) - 1;
                                  $currentReading = $currentReadings['readings'][$cnt];
                                  $this->data['Meter Reading'] = $currentReading['energyReading'];
                                  $this->data['Power'] = $currentReading['power'];
                                  $this->data['Power L1'] = $currentReading['powerPhase1'];
                                  $this->data['Power L2'] = $currentReading['powerPhase2'];
                                  $this->data['Power L3'] = $currentReading['powerPhase3'];
                              }
                              // log data
                              $this->_log('GetFresh Data', json_encode($this->data));
                              // save data
                              $this->position_offset = 10;
                              $this->SaveData();
                          }
                          /**
                           * save data to variables
                           */
                          private function SaveData()
                          {
                              // loop data and save to variable
                              $position = $this->position_offset;
                              foreach ($this->data AS $key => $value) {
                                  $this->CreateVariableByIdentifier([
                                      'parent_id' => $this->InstanceID,
                                      'name' => $key,
                                      'value' => $value,
                                      'position' => $position
                                  ]);
                                  $position++;
                              }
                              // reset data
                              $this->data = [];
                          }
                          /**
                           * basic api to getfresh (inofficial)
                           * @param string $request
                           * @return array
                           */
                          public function Api($request = 'currentReadings')
                          {
                              // build url
                              $url = 'https://www.getfresh.energy/links';
                              // default data
                              $data = [];
                              // curl options
                              $curlOptions = [
                                  CURLOPT_TIMEOUT => 10,
                                  CURLOPT_RETURNTRANSFER => true,
                                  CURLOPT_HTTPHEADER => [
                                      'Authorization: Bearer ' . $this->token,
                                      'Content-Type: application/json',
                                      'Connection: keep-alive',
                                      'Accept-Encoding: gzip',
                                      'User-Agent: okhttp/3.2.0'
                                  ]
                              ];
                              // call api
                              $ch = curl_init($url);
                              curl_setopt_array($ch, $curlOptions);
                              $links = curl_exec($ch);
                              // get links
                              if ($links = json_decode($links, true)) {
                                  #var_dump($links);
                                  #exit;
                                  $links = [
                                      'currentReadings' => $links['_links']['currentReadings']['href'],
                                      'consumption' => $links['_links']['consumption']['href'],
                                      'profile' => $links['_links']['profile']['href'],
                                      'consumptionCurrentMonth' => $links['_links']['consumptionCurrentMonth']['href']
                                  ];
                                  if (isset($links[$request])) {
                                      curl_setopt($ch, CURLOPT_URL, $links[$request]);
                                      $result = curl_exec($ch);
                                      $data = json_decode($result, true);
                                  }
                              }
                              // close curl
                              curl_close($ch);
                              // return data
                              return $data;
                          }
                          /**
                           * Login to getfresh
                           */
                          public function Login()
                          {
                              $this->_log('GetFresh', sprintf('Logging in to account of %s...', $this->email));
                              // login url
                              $url = 'https://www.getfresh.energy/oauth/token';
                              // curl options
                              $curlOptions = [
                                  CURLOPT_TIMEOUT => 10,
                                  CURLOPT_RETURNTRANSFER => true,
                                  CURLOPT_POST => true,
                                  CURLOPT_POSTFIELDS => http_build_query([
                                      'grant_type' => 'password',
                                      'username' => $this->email,
                                      'password' => $this->password
                                  ]),
                                  CURLOPT_HTTPHEADER => [
                                      'Content-Type: application/x-www-form-urlencoded',
                                      'Accept-Encoding: gzip',
                                      'Connection: keep-alive',
                                      'User-Agent: okhttp/3.2.0'
                                  ],
                                  CURLOPT_USERPWD => 'fresh-webclient:'
                              ];
                              // login
                              $ch = curl_init($url);
                              curl_setopt_array($ch, $curlOptions);
                              $result = curl_exec($ch);
                              curl_close($ch);
                              // extract token
                              $json = json_decode($result, true);
                              $this->token = isset($json['access_token']) ? $json['access_token'] : false;
                              // save valid token
                              if ($this->token) {
                                  $this->SetStatus(102);
                                  $this->SetBuffer('token', $this->token);
                              } // simple error handling
                              else {
                                  $this->SetStatus(201);
                                  $this->_log('GetFresh', 'Error: The email address or password of your account is invalid!');
                                  exit(-1);
                              }
                              return true;
                          }
                          /**
                           * create custom variable profile
                           * @param string $profile_id
                           * @param string $name
                           */
                          protected function CreateCustomVariableProfile(string $profile_id, string $name)
                          {
                              switch ($name):
                                  case 'Watt':
                                      IPS_CreateVariableProfile($profile_id, 2); // float
                                      IPS_SetVariableProfileDigits($profile_id, 0); // 0 decimals
                                      IPS_SetVariableProfileText($profile_id, '', ' W'); // Watt
                                      IPS_SetVariableProfileIcon($profile_id, 'Electricity');
                                      break;
                                  case 'kWh':
                                      IPS_CreateVariableProfile($profile_id, 2); // float
                                      IPS_SetVariableProfileDigits($profile_id, 2); // 2 decimals
                                      IPS_SetVariableProfileText($profile_id, '', ' kWh'); // Watt
                                      IPS_SetVariableProfileIcon($profile_id, 'Electricity');
                                      break;
                                  case 'Price':
                                      IPS_CreateVariableProfile($profile_id, 2); // float
                                      IPS_SetVariableProfileDigits($profile_id, 4); // 4 decimals
                                      IPS_SetVariableProfileText($profile_id, '', ' €'); // currency symbol
                                      IPS_SetVariableProfileIcon($profile_id, 'Euro');
                                      break;
                              endswitch;
                          }
                      
                      1 Reply Last reply Reply Quote 0
                      • Stabilostick
                        Stabilostick last edited by

                        Ich hätte da mal einige Zähler:

                        7446_dcceccca-0e1b-4711-834d-2f0f8e652447.jpeg

                        Heißt das jetzt, ich brauche 4 intelligente Zähler und damit 4x ca. 100€=400€ Messstellenbetrieb pro Jahr?

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        904
                        Online

                        31.6k
                        Users

                        79.6k
                        Topics

                        1.3m
                        Posts

                        13
                        39
                        7390
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo