Fehlermeldung beim Auslesen Solar Solar WR

Wenn mehr als ein Gerät an den Raspberry angeschlossen werden sollen. Z.B. ein Regler und ein Wechselrichter oder mehrere Wechselrichter. Das Maximum sind 6 Geräte pro Raspberry Pi.

Moderator: Ulrich

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

Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Hallo Ulrich,

ich habe mal wieder ein Problem mit meinem Sofar Solar Wechselrichter. Ich will auf die 6.17 Version 64 bit gehen, da ich nach SD-Schrott jetzt auf eine SSD als Speicher gehen will. Letzte Version von vor ein paar Tagen runtergeladen.

Bei meinem Sofa solar WR bekomme ich folgende Fehlermeldung:

Solaranzeige Log

28:24 -Verarbeitung von: '2.user.config.php' Regler: 73
25.09. 11:28:24 |------------------------- Start sofarsolar_wr.php ---------------------
25.09. 11:28:24 -Timer Wert. [ normal = 400000 ]: 200000
25.09. 11:29:02 -Multi Regler Auslesen [Start].
25.09. 11:29:02 -Verarbeitung von: '1.user.config.php' Regler: 41
25.09. 11:29:02 |--------------- Start us3000_bms.php -----------------

Bricht also ab.

PHP log:

[25-Sep-2026 11:28:24 Europe/Berlin] PHP Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /var/www/html/sofarsolar_wr.php:143
Stack trace:
#0 /var/www/html/multi_regler_auslesen.php(436): require()
#1 {main}
thrown in /var/www/html/sofarsolar_wr.php on line 143

die Zeile 143 ist bei mir etwas verschoben nicht wie im Standard und sieht so aus.

// Ab hier wird der Regler ausgelesen.
// Modell: x.x KTL-X
****************************************************************************/
$Befehl["DeviceID"] = $WR_ID;
$Befehl["BefehlFunctionCode"] = "04";
$Befehl["RegisterAddress"] = str_pad( "2000", 4, "0", STR_PAD_LEFT );
$Befehl["RegisterCount"] = "0010";

Die $WR_ID wird weiter oben gesetzt.


/var/www~_wr.php [----] 57 L:[ 87+16 103/336] *(3734/15036b) 0010 0x00A [*][X]

default:
break;
}
if (empty($WR_Adresse)) {
$WR_ID = "01";
}
elseif (strlen( $WR_Adresse ) == 1) {
$WR_ID = str_pad( dechex( $WR_Adresse ), 2, "0", STR_PAD_LEFT );
}
elseif (strlen( $WR_Adresse ) == 2) {
$WR_ID = str_pad( dechex( substr( $WR_Adresse, - 2 )), 2, "0", STR_PAD_LEFT );
}
else {
$WR_ID = dechex( $WR_Adresse );
}
$funktionen->log_schreiben( "WR_ID: ".$WR_ID, "+ ", 8 );

Ich habe den Fehler gegoogelt.

https://www.woltlab.com/community/threa ... type-stri/

Ich habe auch mal den Regler 87 probiert, der macht den gleichen Fehler.

Gruss

Rüdiger

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ulrich »

Hallo Rüdiger,
hast du nach der Installation ein Update auf die Solaranzeige gemacht?
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Hallo Ulrich,

hatte ich nicht, habe es grade nachgeholt, der Fehler bleibt (Regler 73 und Regler 87, beide mit reboot).

Ich habe den allerersten Solar Solar, der hat schon öfter nach updates Ärger gemacht, wobei er dann auf Lesefehler läuft. 6.15 32 Bit ging, 6.17 32 Bit Lesefehler, 6.17 64 Bit die gezeigten Fehler.
Ist also wahrscheinlich nach dem Fehler nicht fertig.

viele Grüsse

Rüdiger

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ulrich »

Bitte melde dich einmal per eMail an support
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Hallo Ulrich,

die Mail ist raus,

viele Grüsse

Rüdiger

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Hallo Ulrich,

Hast du eigentlich mal reingeschaut?
Ich hab dir ein paar mails geschickt, die landen ja schon mal im Spam Ordner :D

Viele Grüße
Rüdiger

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ulrich »

Ich hatte dir auch eine eMail gesendet. Ich habe von dir keine erhalten. Auch im SPAM nicht.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Deine ist angekommen, meine ist grade noch mal raus.

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Hallo Ulrich,

du warst ja grade an meinem Pi und sagtest, dass keine Daten von meinem Sofar Solar WR kommen.

Ich habe noch eine SD Karte mit meiner alten Version der Solaranzeige. Leider zickt dort der Andere Wechselrichter samt Influx. Deswegen ja das update.

Wenn ich diese Karte einmache, wird der Solar Solar ausgelesen.

Zugriff via Terminal:

Code: Alles auswählen

Linux solaranzeige 6.6.31+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64

Raspberry Version 6.1.5 [32Bit]   Basis    Mai   2025 (Bookworm)
Last login: Sun Sep 27 09:42:18 2026
CPU Temperatur 45 °C

Raspberry Pi 4 Model B Rev 1.5
Solaranzeige log:

03.10. 10:54:00 -Multi Regler Auslesen [Start].
03.10. 10:54:00 -Verarbeitung von: '1.user.config.php' Regler: 73
03.10. 10:54:00 |------------------------- Start sofarsolar_wr.php ---------------------
03.10. 10:54:00 -Zentraler Timestamp: 1791017640
03.10. 10:54:00 o -Hardware Version: Raspberry Pi 4 Model B Rev 1.5
03.10. 10:54:00 + -WR_ID: 01
03.10. 10:54:00 + -Die Daten werden ausgelesen...
03.10. 10:54:00 -Timer Wert. [ normal = 400000 ]: 200000
03.10. 10:54:00 -senden > [ 010420000010fa06 ]
03.10. 10:54:00 -empfangen > [ ]
03.10. 10:54:00 -senden > [ 010420000010fa06 ]
03.10. 10:54:00 -empfangen > [ 010420000153463445533030354c3855303038563234305631303056323430563234302cd7 ]
03.10. 10:54:00 -Produkt: 1
03.10. 10:54:00 -Seriennummer: SF4ES005L8U008
03.10. 10:54:00 -senden > [ 01030000003045de ]
03.10. 10:54:01 -empfangen > [ ]
03.10. 10:54:01 -senden > [ 01030000003045de ]
03.10. 10:54:01 -empfangen > [ 01036000020000000000000000000010af00c90316000000560000004dffc2138909180090091f008f0922008e00004c410000523c009b00c60027003518da10ab0316 ]
03.10. 10:54:01 -empfangen > [ 01036000020000000000000000000010af00c90316000000560000004dffc2138909180090091f008f0922008e00004c410000523c009b00c60027003518da10ab0316003c00000001000004ae08fa0760000000000000000503e603e803e200000000ad02 ]
03.10. 10:54:01 -[ 01036000020000000000000000000010af00c90316000000560000004dffc2138909180090091f008f0922008e00004c410000523c009b00c60027003518da10ab0316003c00000001000004ae08fa0760000000000000000503e603e803e200000000ad02 ]
03.10. 10:54:01 -Auslesen des Gerätes beendet.
03.10. 10:54:01 -Array
(
[zentralerTimestamp] => 1791017650
[KeineSonne] =>
[Produkt] => SofarSolar
[Seriennummer] => SF4ES005L8U008
[Firmware] => V240
[Hardware] => V100
[Status] => 2
[Fehler1] => 0
[Fehler2] => 0
[Fehler3] => 0
[Fehler4] => 0
[Fehler5] => 0
[PV1_Spannung] => 427.1
[PV1_Strom] => 2.01
[PV2_Spannung] => 79
[PV2_Strom] => 0
[PV1_Leistung] => 770
[PV2_Leistung] => 0
[AC_Frequenz] => 50.01
[AC_Spannung_R] => 232.8
[AC_Strom_R] => 1.44
[AC_Spannung_S] => 233.5
[AC_Strom_S] => 1.43
[AC_Spannung_T] => 233.8
[AC_Strom_T] => 1.42
[WattstundenGesamtHeute] => 1550
[Laufzeit_Heute] => 198
[Temperatur_Module] => 39
[Temperatur] => 53
[Energie_Total] => 19521000
[Laufzeit_Total] => 21052
[PV_Leistung] => 770
[Regler] => 73
[Objekt] =>
[Modell] => KTL-X
)

03.10. 10:54:01 -MQTT Daten zum [ localhost ] senden.
03.10. 10:54:01 -box1/zentralerTimestamp 1791017650 rc: 36
03.10. 10:54:01 -box1/KeineSonne rc: 18
03.10. 10:54:01 -box1/Produkt SofarSolar rc: 25
03.10. 10:54:01 -box1/Seriennummer SF4ES005L8U008 rc: 34
03.10. 10:54:01 -box1/Firmware V240 rc: 20
03.10. 10:54:01 -box1/Hardware V100 rc: 20
03.10. 10:54:01 -box1/Status 2 rc: 15
03.10. 10:54:01 -box1/Fehler1 0 rc: 16
03.10. 10:54:01 -box1/Fehler2 0 rc: 16
03.10. 10:54:01 -box1/Fehler3 0 rc: 16
03.10. 10:54:01 -box1/Fehler4 0 rc: 16
03.10. 10:54:01 -box1/Fehler5 0 rc: 16
03.10. 10:54:01 -box1/PV1_Spannung 427.1 rc: 25
03.10. 10:54:01 -box1/PV1_Strom 2.01 rc: 21
03.10. 10:54:01 -box1/PV2_Spannung 79 rc: 22
03.10. 10:54:01 -box1/PV2_Strom 0 rc: 18
03.10. 10:54:01 -box1/PV1_Leistung 770 rc: 23
03.10. 10:54:01 -box1/PV2_Leistung 0 rc: 21
03.10. 10:54:01 -box1/AC_Frequenz 50.01 rc: 24
03.10. 10:54:01 -box1/AC_Spannung_R 232.8 rc: 26
03.10. 10:54:01 -box1/AC_Strom_R 1.44 rc: 22
03.10. 10:54:01 -box1/AC_Spannung_S 233.5 rc: 26
03.10. 10:54:01 -box1/AC_Strom_S 1.43 rc: 22
03.10. 10:54:01 -box1/AC_Spannung_T 233.8 rc: 26
03.10. 10:54:01 -box1/AC_Strom_T 1.42 rc: 22
03.10. 10:54:01 -box1/WattstundenGesamtHeute 1550 rc: 34
03.10. 10:54:01 -box1/Laufzeit_Heute 198 rc: 25
03.10. 10:54:01 -box1/Temperatur_Module 39 rc: 27
03.10. 10:54:01 -box1/Temperatur 53 rc: 20
03.10. 10:54:01 -box1/Energie_Total 19521000 rc: 29
03.10. 10:54:01 -box1/Laufzeit_Total 21052 rc: 27
03.10. 10:54:01 -box1/PV_Leistung 770 rc: 22
03.10. 10:54:01 -box1/Regler 73 rc: 16
03.10. 10:54:01 -box1/Objekt rc: 14
03.10. 10:54:01 -box1/Modell KTL-X rc: 19
03.10. 10:54:01 -Aktuelle Daten:
Array
(
[zentralerTimestamp] => 1791017650
[KeineSonne] =>
[Produkt] => SofarSolar
[Seriennummer] => SF4ES005L8U008
[Firmware] => V240
[Hardware] => V100
[Status] => 2
[Fehler1] => 0
[Fehler2] => 0
[Fehler3] => 0
[Fehler4] => 0
[Fehler5] => 0
[PV1_Spannung] => 427.1
[PV1_Strom] => 2.01
[PV2_Spannung] => 79
[PV2_Strom] => 0
[PV1_Leistung] => 770
[PV2_Leistung] => 0
[AC_Frequenz] => 50.01
[AC_Spannung_R] => 232.8
[AC_Strom_R] => 1.44
[AC_Spannung_S] => 233.5
[AC_Strom_S] => 1.43
[AC_Spannung_T] => 233.8
[AC_Strom_T] => 1.42
[WattstundenGesamtHeute] => 1550
[Laufzeit_Heute] => 198
[Temperatur_Module] => 39
[Temperatur] => 53
[Energie_Total] => 19521000
[Laufzeit_Total] => 21052
[PV_Leistung] => 770
[Regler] => 73
[Objekt] =>
[Modell] => KTL-X
[Timestamp] => 1791017641
[Monat] => 10
[Woche] => 40
[Wochentag] => Samstag
[Datum] => 03.10.2026
[Uhrzeit] => 10:54:01
[InfluxAdresse] =>
[InfluxPort] => 8086
[InfluxUser] =>
[InfluxPassword] =>
[InfluxDBName] => solaranzeige
[InfluxDaylight] =>
[InfluxDBLokal] => solaranzeige2
[InfluxSSL] =>
[Demodaten] =>
)

03.10. 10:54:01 -Query:
AC Spannung_R=232.8,Spannung_S=233.5,Spannung_T=233.8,Frequenz=50.01,Strom_R=1.44,Strom_S=1.43,Strom_T=1.42,Leistung=770 1791017650
PV Spannung1=427.1,Spannung2=79,Strom1=2.01,Strom2=0,Leistung=770,Leistung1=770,Leistung2=0 1791017650
Service Temperatur=53,WR_Fehler=0,Modell="KTL-X",Status=2,Seriennummer="SF4ES005L8U008" 1791017650
Summen Wh_Heute=1550,Wh_Gesamt=19521000,Laufzeit_Heute=198 1791017650

03.10. 10:54:01 * -Daten zur lokalen InfluxDB [ solaranzeige2 ] gesendet.
03.10. 10:54:01 -Multi-Regler-Ausgang. 8
03.10. 10:54:09 -OK. Datenübertragung erfolgreich.
03.10. 10:54:09 |------------------------- Stop sofarsolar_wr.php ---------------------

Ich hänge mal die damalige sofarsolar_wr.php an. Da hat sich ein bisschen etwas geändert. Mit deiner Hilfe sind da ein paar Änderungen reingekommen. Die ist für Regler 73, der läuft bei mir aber immer noch auf den Fehler oben ($WR_ID)
Ich habe mir auch mal ein 32 bit Version 6.17 image geladen, da laufen Beide Regler auf "Lesefehler" auch mit der alten Sofarsolar_wr.php.

Code: Alles auswählen

!/usr/bin/php
<?php

/*****************************************************************************
//  Solaranzeige Projekt             Copyright (C) [2015-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 des Wechselrichters SofarSolar über eine RS485
//  Schnittstelle mit USB Adapter. Protokoll Version 2013-8-17
//  Das Auslesen wird hier mit einer Schleife durchgeführt. Wie oft die Daten
//  ausgelesen und gespeichert werden steht in der user.config.php
//
//
*****************************************************************************/
// Wartezeit für das Lesen der MODBUS Daten.
$Timer = 200000; // Kann in der config noch angepasst werden.
$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( );
}
// Im Fall, dass man die Device manuell eingeben muss
if (isset($USBDevice) and !empty($USBDevice)) {
  $USBRegler = $USBDevice;
}
$Tracelevel = 7; //  1 bis 10  10 = Debug
$RemoteDaten = true;
$Start = time( ); // Timestamp festhalten
$funktionen->log_schreiben( "----------------------   Start  sofarsolar_wr.php   --------------------- ", "|--", 6 );
$funktionen->log_schreiben( "Zentraler Timestamp: ".$zentralerTimestamp, "   ", 8 );
$aktuelleDaten = array();
$aktuelleDaten["zentralerTimestamp"] = $zentralerTimestamp;
$aktuelleDaten["KeineSonne"] = false;
setlocale( LC_TIME, "de_DE.utf8" );
if (!is_file( $Pfad."/1.user.config.php" )) {
  if ((int) substr( trim( $FreierSpeicher ), 0, - 1 ) < 6) {
    // Minimum von 6 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";
$Teile = explode( " ", $Platine );
if ($Teile[1] == "Pi") {
  $funktionen->log_schreiben( "Hardware Version: ".$Platine, "o  ", 8 );
  $Version = trim( $Teile[2] );
  if ($Teile[3] == "Model") {
    $Version .= trim( $Teile[4] );
    if ($Teile[5] == "Plus") {
      $Version .= trim( $Teile[5] );
    }
  }
}   
switch ($Version) {
    
  case "2B":
    break;
  
  case "3B":
    break;
  
  case "3BPlus":
    break;
  
  case "4B":
    break;
  
  default:
    break;
}
if (empty($WR_Adresse)) {
  $WR_ID = "01";
}
elseif (strlen( $WR_Adresse ) == 1) {
  $WR_ID = str_pad( dechex( $WR_Adresse ), 2, "0", STR_PAD_LEFT );
}
elseif (strlen( $WR_Adresse ) == 2) {
  $WR_ID = str_pad( dechex( substr( $WR_Adresse, - 2 )), 2, "0", STR_PAD_LEFT );
}
else {
  $WR_ID = dechex( $WR_Adresse );
}
$funktionen->log_schreiben( "WR_ID: ".$WR_ID, "+  ", 8 );
$USB1 = $funktionen->openUSB( $USBRegler );
if (!is_resource( $USB1 )) {
  $funktionen->log_schreiben( "USB Port kann nicht geöffnet werden. [1]", "XX ", 7 );
  $funktionen->log_schreiben( "Exit.... ", "XX ", 7 );
  goto Ausgang;
}
/*************
   Ausgang Nachts
*************/
if($funktionen->tageslicht("binzen") === false)  {
  $funktionen->log_schreiben("Nachts kein Auslesen","XX ",7);
  goto Ausgang;
}
  
/*
$COM1 = fsockopen($WR_IP, $WR_Port, $errno, $errstr, 5);   // 5 = Timeout in Sekunden
if (!is_resource($COM1)) {
  $funktionen->log_schreiben("Kein Kontakt zum Wechselrichter ".$WR_IP."  Port: ".$WR_Port,"XX ",3);
  $funktionen->log_schreiben("Exit.... ","XX ",9);
  goto Ausgang;
}*/

$i = 1;
do {
  $funktionen->log_schreiben( "Die Daten werden ausgelesen...", "+  ", 9 );
  $funktionen->log_schreiben( "Timer Wert. [ normal = 400000 ]: ".$Timer, "   ", 7 );
/****************************************************************************
  // Ausgang Nachts
  ****************************************************************************/
/*/if (date("H") > "19" or date("H") < "04"  ) {/
if($funktionen->tageslicht("binzen") === false)  {
  $funktionen->log_schreiben("Kein Auslesen nach Sonnenuntergang","XX ",7);

   goto Ausgang;
}*/
  /****************************************************************************
  //  Ab hier wird der Regler ausgelesen.
  //  Modell: x.x KTL-X
  ****************************************************************************/
  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterAddress"] = str_pad( "2000", 4, "0", STR_PAD_LEFT );
  $Befehl["RegisterCount"] = "0010";
  //Ausgang bei wenig PV und falscher Daten
  $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl, $Timer );.
  if ($rc == false) {
    $funktionen->log_schreiben( "Das Gerät kann nicht ausgelesen werden.", "   ", 7 );
    goto Ausgang;
  }
  $aktuelleDaten["Produkt"] = hexdec( substr( $rc["data"], 0, 4 ));
  $aktuelleDaten["Seriennummer"] = $funktionen->hex2string( substr( $rc["data"], 4, 28 ));
  $aktuelleDaten["Firmware"] = $funktionen->hex2string( substr( $rc["data"], 32, 8 ));
  $aktuelleDaten["Hardware"] = $funktionen->hex2string( substr( $rc["data"], 40, 8 ));
  $funktionen->log_schreiben( "Produkt: ".$aktuelleDaten["Produkt"], "   ", 7 );
  $funktionen->log_schreiben( "Seriennummer: ".$aktuelleDaten["Seriennummer"], "   ", 7 );
  
  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["BefehlFunctionCode"] = "03";
  $Befehl["RegisterAddress"] = str_pad( "0", 4, "0", STR_PAD_LEFT );
 
  $Befehl["RegisterCount"] = "0030";
  $rc = $funktionen->phocos_pv18_auslesen( $USB1, $Befehl, $Timer );
  $aktuelleDaten["Status"] = hexdec( substr( $rc["data"], 0, 4 )); // 0
  $aktuelleDaten["Fehler1"] = hexdec( substr( $rc["data"], 4, 4 )); // 1
  $aktuelleDaten["Fehler2"] = hexdec( substr( $rc["data"], 8, 4 ));
  $aktuelleDaten["Fehler3"] = hexdec( substr( $rc["data"], 12, 4 ));
  $aktuelleDaten["Fehler4"] = hexdec( substr( $rc["data"], 16, 4 ));
  $aktuelleDaten["Fehler5"] = hexdec( substr( $rc["data"], 20, 4 ));
  $aktuelleDaten["PV1_Spannung"] = hexdec( substr( $rc["data"], 24, 4 )) / 10;
  $aktuelleDaten["PV1_Strom"] = hexdec( substr( $rc["data"], 28, 4 )) / 100;
  $aktuelleDaten["PV2_Spannung"] = hexdec( substr( $rc["data"], 32, 4 )) / 10;
  $aktuelleDaten["PV2_Strom"] = hexdec( substr( $rc["data"], 36, 4 )) / 100;
  $aktuelleDaten["PV1_Leistung"] = hexdec( substr( $rc["data"], 48, 4 )) * 10; // A
  $aktuelleDaten["PV2_Leistung"] = hexdec( substr( $rc["data"], 52, 4 )) * 10; // B
  $aktuelleDaten["AC_Frequenz"] = hexdec( substr( $rc["data"], 56, 4 )) / 100; // C Ab hier + 2 in der Dokumentation
  $aktuelleDaten["AC_Spannung_R"] = hexdec( substr( $rc["data"], 60, 4 )) / 10; // D  => F
  $aktuelleDaten["AC_Strom_R"] = hexdec( substr( $rc["data"], 64, 4 )) / 100; // E  => 10
  $aktuelleDaten["AC_Spannung_S"] = hexdec( substr( $rc["data"], 68, 4 )) / 10; // F  => 11
  $aktuelleDaten["AC_Strom_S"] = hexdec( substr( $rc["data"], 72, 4 )) / 100; // 10 => 12
  $aktuelleDaten["AC_Spannung_T"] = hexdec( substr( $rc["data"], 76, 4 )) / 10; // 11 => 13
  $aktuelleDaten["AC_Strom_T"] = hexdec( substr( $rc["data"], 80, 4 )) / 100; // 12 => 14
  $Energie_Total_H = (substr( $rc["data"], 84, 4 )); // 13 => 15
  $Energie_Total_L = (substr( $rc["data"], 88, 4 )); // 14 => 16
  $Laufzeit_Total_H = (substr( $rc["data"], 92, 4 )); // 15 => 17
  $Laufzeit_Total_L = (substr( $rc["data"], 96, 4 )); // 16 => 18
  $aktuelleDaten["WattstundenGesamtHeute"] = hexdec( substr( $rc["data"], 100, 4 )) * 10; // 17 => 19  Watt
  $aktuelleDaten["Laufzeit_Heute"] = hexdec( substr( $rc["data"], 104, 4 )); // 18 => 1A  Minuten
  $aktuelleDaten["Temperatur_Module"] = hexdec( substr( $rc["data"], 108, 4 )); // 19 => 1B  °C
  $aktuelleDaten["Temperatur"] = hexdec( substr( $rc["data"], 112, 4 )); // 1A => 1C  °C
  $funktionen->log_schreiben( "Auslesen des Gerätes beendet.", "   ", 8 );

  /****************************************************************************
  //  ENDE REGLER AUSLESEN      ENDE REGLER AUSLESEN      ENDE REGLER AUSLESEN
  ****************************************************************************/
  $aktuelleDaten["Energie_Total"] = (hexdec( $Energie_Total_H.$Energie_Total_L ) * 1000);
  $aktuelleDaten["Laufzeit_Total"] = hexdec( $Laufzeit_Total_H.$Laufzeit_Total_L );
  if ($aktuelleDaten["PV2_Strom"] > 0.1) {
    $aktuelleDaten["PV_Leistung"] = ($aktuelleDaten["PV1_Leistung"] + $aktuelleDaten["PV2_Leistung"]);
  }
  else {
    $aktuelleDaten["PV_Leistung"] = $aktuelleDaten["PV1_Leistung"];
    $aktuelleDaten["PV2_Leistung"] = 0;
  }

  /**************************************************************************
  //  Falls ein ErrorCode vorliegt, wird er hier in einen lesbaren
  //  Text umgewandelt, sodass er als Fehlermeldung gesendet werden kann.
  //  Die Funktion ist noch nicht überall implementiert.
  **************************************************************************/
  $FehlermeldungText = "";

  /****************************************************************************
  //  Die Daten werden für die Speicherung vorbereitet.
  ****************************************************************************/
  $aktuelleDaten["Regler"] = $Regler;
  $aktuelleDaten["Objekt"] = $Objekt;
  $aktuelleDaten["Produkt"] = "SofarSolar";
  $aktuelleDaten["Modell"] = "KTL-X";
  $aktuelleDaten["zentralerTimestamp"] = ($aktuelleDaten["zentralerTimestamp"] + 10);
  $funktionen->log_schreiben( print_r( $aktuelleDaten, 1 ), "   ", 8 );

  /****************************************************************************
  //  User PHP Script, falls gewünscht oder nötig
  ****************************************************************************/
  if (file_exists( "/var/www/html/sofarsolar_wr_math.php" )) {
    include 'sofarsolar_wr_math.php'; // Falls etwas neu berechnet werden muss.
  }

  /**************************************************************************
  //  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 and strtoupper( $MQTTAuswahl ) != "OPENWB") {
    $funktionen->log_schreiben( "MQTT Daten zum [ $MQTTBroker ] senden.", "   ", 1 );
    require ($Pfad."/mqtt_senden.php");
  }

  /****************************************************************************
  //  Zeit und Datum
  ****************************************************************************/
  $aktuelleDaten["Timestamp"] = time( );
  $aktuelleDaten["Monat"] = date( "n" );
  $aktuelleDaten["Woche"] = date( "W" );
  $aktuelleDaten["Wochentag"] = strftime( "%A", time( ));
  $aktuelleDaten["Datum"] = date( "d.m.Y" );
  $aktuelleDaten["Uhrzeit"] = 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 = (9 - (time( ) - $Start));
    $funktionen->log_schreiben( "Multi-Regler-Ausgang. ".$Zeitspanne, "   ", 2 );
    if ($Zeitspanne > 0) {
      sleep( $Zeitspanne );
    }
    break;
  }
  else {
    $funktionen->log_schreiben( "Schleife: ".($i)." Zeitspanne: ".(floor( (56 - (time( ) - $Start)) / ($Wiederholungen - $i + 1))), "   ", 9 );
    sleep( floor( (56 - (time( ) - $Start)) / ($Wiederholungen - $i + 1)));
  }
  if ($Wiederholungen <= $i or $i >= 6) {
    $funktionen->log_schreiben( "Schleife ".$i." Ausgang...", "   ", 8 );
    break;
  }
  $i++;
} while (($Start + 54) > time( ));
if (isset($aktuelleDaten["Seriennummer"])) {

  /*********************************************************************
  //  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 );
}
Ausgang:$funktionen->log_schreiben( "----------------------   Stop   sofarsolar_wr.php   --------------------- ", "|--", 6 );
return;
?>
Meine Mails kommen übrigens auf meiner zweiten Mail Adresse an. Keine Ahnung, was da schief läuft.

trotzdem vielen Dank und viele Grüsse

Rüdiger

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

Re: Fehlermeldung beim Auslesen Solar Solar WR

Beitrag von Ruhz69 »

Was mir auffällt,

der alte log

-senden > [ 010420000010fa06 ]
03.10. 10:54:00 -empfangen > [ 010420000153463445533030354c3855303038563234305631303056323430563234302cd7 ]
03.10. 10:54:00 -Produkt: 1

was bei mir unter Regler 87 im log steht

-senden > [ 010300440001c41f ]
03.10. 15:45:09 -empfangen > [ ]
03.10. 15:45:09 -senden > [ 010300440001c41f ]
03.10. 15:45:09 -empfangen > [ ]
03.10. 15:45:09 -senden > [ 010300440001c41f ]

müsste die "Sendung" nicht die gleiche sein?

Zurück zu „Multi-Regler-Version [ bis zu 6 Geräten an einem Raspberry Pi ]“

Wer ist online?

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