Keep this open and running. Last update was at ".date("M d, Y Hi:s")); echo ("
"); require_once dirname(__FILE__) . '/ModbusMaster.php'; require_once dirname(__FILE__) . '/ClassicNames.php'; //IP 4 address of classic charge controllers $Solar1= "192.168.0.121"; $Solar2= "192.168.0.122"; $ClassicData[50]; $ClassicData[0]= ''; $Dlog_Data[18]; $History[6]; $HDay[5]; $inx=1; function regdata($reg, $count, $recData,$modbus){ global $classicheading, $inx, $ClassicData, $classicchargestate, $AUX1, $AUX2, $AUXstate ; try { // FC 3 $recData = $modbus->readMultipleRegisters(0, $reg - 1, $count); } catch (Exception $e) { // Print error information if any // echo $modbus; //prints raw data echo $e; //exit; } for ($a = 0; $a <= (($count*2-1)); $a++){ if (strlen($classicheading[($reg-4100)]) > 0 or $reg == 4130 or $reg == 4165){ echo ($inx); echo (" "); echo ($reg); echo (" "); echo ($classicheading[($reg-4100)]); echo (" "); if($reg == 4115 or $reg == 4116 or $reg == 4117 or $reg == 4118 or $reg == 4121 or $reg == 4122){ $ClassicData[$inx] =((($recData[$a]*256)+$recData[$a+1])/10); $inx++; } if($reg == 4120){ $ClassicData[$inx] =($classicchargestate[$recData[$a]]); $inx++; } if($reg == 4119 or $reg == 4125 or $reg == 4138 or $reg == 4139 or $reg == 4143 or $reg == 4154 or $reg == 4162 or $reg == 4365 or $reg == 4376 or $reg == 4377 or $reg == 4381){ $ClassicData[$inx] =((($recData[$a]*256)+$recData[$a+1])); $inx++; } if($reg == 4126 or $reg == 4128){ $ClassicData[$inx] =((((($recData[$a+2]*256)+$recData[$a+3])*256)+($recData[$a]*256)+$recData[$a+1])/10); $inx++; } if ($reg == 4132 or $reg == 4133 or $reg == 4134){ $ClassicData[$inx] =((($recData[$a]*256 +$recData[$a+1])/10)*1.8+32); $inx++; } if($reg == 4369 or $reg == 4371 ){ if (($recData[$a]*256)+$recData[$a+1] >= 0x8000){ $ClassicData[$inx] =((($recData[$a]*256)+$recData[$a+1]-0xffff)/10); }else{ $ClassicData[$inx] =((($recData[$a]*256)+$recData[$a+1])/10); } $inx++; } if($reg == 4367){ $ClassicData[$inx] =((($recData[$a]*256)+$recData[$a+1]-0x10000)); $inx++; } if($reg == 4372){ $ClassicData[$inx] =(($recData[$a+1]-50)*1.8 +32); $inx++; } //AUX states if ($reg == 4130){ if (($recData[$a] &0x40) == true){ $AX[0]="On"; }else{ $AX[0]='Off'; } if (($recData[$a] &0x80) == true){ $AX[1]="On"; }else{ $AX[1]='Off'; } } //AUX 1 & 2 function if($reg == 4165){ //AUX states $AX[2]=$AUX1[($recData[$a+1] &0x3f)]; $AX[3]=$AUXstate[($recData[$a+1] &0xc0)/64]; $AX[4]=$AUX2[($recData[$a] &0x3f)]; $AX[5]=$AUXstate[($recData[$a] &0xc0)/64]; echo ('
AUX 1 = '.$AX[2].' '.$AX[3].' '.$AX[0].'
'); echo ('AUX 2 = '.$AX[4].' '.$AX[5].' '.$AX[1].'
'); } if ($reg != 4165){ echo ($ClassicData[$inx-1]); } echo ("
"); } $a++; $reg++; } echo ("
"); return $AX; } function ClassicTime($reg, $count, $recData,$modbus){ try { // FC 3 $recData = $modbus->readMultipleRegisters(0, $reg - 1, $count); } catch (Exception $e) { // Print error information if any // echo $modbus; //prints raw data echo $e; //exit; } for ($a = 0; $a <= (($count*2-1)); $a++){ echo ($reg); echo (" "); echo ($recData[$a].' '.$recData[$a+1]); echo ("
"); if($reg == 4214){ $ct[0] = $recData[$a+1]; $ct[1] = $recData[$a]; } if($reg == 4215){ $ct[2] = $recData[$a+1]; $ct[3] = $recData[$a]; } if($reg == 4216){ $ct[4] = $recData[$a+1]; $ct[5] = $recData[$a]; } if($reg == 4217){ $ct[6] = ($recData[$a]*256)+$recData[$a+1]; } $a++; $reg++; } for ($a = 0;$a<6;$a++){ if (strlen($ct[$a]) == 1){ $ct[$a] = '0'.$ct[$a]; } } return $ct; } echo ('Solar 1 PV
'); $start = 4115; $count = 51; // IP4 address of first Classic. This Classic has a WizBang connected to monitor battery current. $modbus = new ModbusMaster($Solar1, "TCP"); $AX1=regdata($start, $count, $recData, $modbus); echo ('Solar 1 Battery
'); $start = 4364; $count = 20; regdata($start, $count, $recData, $modbus); echo ('Solar 1 Time
'); $start = 4214; $count = 5; $ct1 = ClassicTime($start, $count, $recData, $modbus); $time1=$ct1[2].':'.$ct1[1].':'.$ct1[0]; echo ('
Date 1 = '.$ct1[6].$ct1[5].$ct1[4]); echo ('
Time 1 = '.$time1.'
'); $Tag = $ct1[6].$ct1[5].$ct1[4]; // YYYYMMDD used for name of logging file $ClassicData[0] = $ct1[2].$ct1[1].$ct1[0]; //hhmmss used for time index echo ('
Classdata 0 = '.$ClassicData[0]); echo ('
Tag = '.$Tag.'
'); echo ('Solar 2 PV
'); $start = 4115; $count = 51; //IP4 address of second Classic $modbus = new ModbusMaster($Solar2, "TCP"); $AX2=regdata($start, $count, $recData, $modbus); echo ('Solar 2 Time
'); $start = 4214; $count = 5; $ct2 = ClassicTime($start, $count, $recData, $modbus); echo ('
Date 2 = '.$ct2[6].$ct2[5].$ct2[4]); $time2=$ct2[2].':'.$ct2[1].':'.$ct2[0]; echo ('
Time 2 = '.$time2.'
'); $Tag2 = $ct2[6].$ct2[5].$ct2[4]; // YYYYMMDD fom Classic 2 echo ('
Tag2 = '.$Tag2.'
'); //save data to daily detailed log file $Dailylog = fopen ($dir.$Tag.".txt","a"); fputcsv($Dailylog,$ClassicData); fputcsv($Dailylog,$AX1); fputcsv($Dailylog,$AX2); fclose($Dailylog); //Recall old Dlog_Data Daily high / low and Ahr consumed information. $Current = fopen ($dir."current.txt","r"); $Dlog_Data = fgetcsv($Current); fclose($Current); $Dlog_Data[18]=$time1;//S1 time $Dlog_Data[19]=$time2;//S2 time //$Tag=""; if (($Dlog_Data[0] <> $Tag) and ($Dlog_Data[0] <> $Tag2) and ($ClassicData[1] <> 0) and ($ClassicData[28] <> 0)){ $Solarlog = fopen ($dir."Solar_log.dat","a"); fputcsv($Solarlog,$Dlog_Data); fclose($Solarlog); //History $HistoryLog = fopen ($dir."history.txt","r"); for ($a = 0; $a <= 6; $a++){ $History[$a] = fgetcsv($HistoryLog); } fclose($HistoryLog); // shift down for ($a = 6; $a >= 0; $a--){ $History[($a+1)] = $History[$a]; } //Build new line $HDay[0]=$Dlog_Data[0];//date $HDay[1]=$Dlog_Data[3];//S1 Peak Watts $HDay[2]=$Dlog_Data[5];//S1 day kWhr $HDay[3]=$Dlog_Data[4];//S2 Peak Watts $HDay[4]=$Dlog_Data[6];//S2 Day kWhr $History[0]=$HDay; //save new $HistoryLog = fopen ($dir."history.txt","w"); for ($a = 0; $a <= 6; $a++){ fputcsv($HistoryLog,$History[$a]); } fclose($HistoryLog); //build new Dlog. Set initial highs and lows. $Dlog_Data[0] = $Tag;//Date $Dlog_Data[1] = $ClassicData[26]; // Start of day capacity $Dlog_Data[3] = 0;//S1 Peak Watts today $Dlog_Data[4] = 0;//S2 Peak Watts today $Dlog_Data[5] = 0;//S1 kWhr today $Dlog_Data[6] = 0;//S2 kWhr today $Dlog_Data[7] = 0;//S1 Ahr today $Dlog_Data[8] = 0;//S2 Ahr today $Dlog_Data[9] = 100;//Low battery voltage $Dlog_Data[10] = 0;//S1 Float $Dlog_Data[11] = 0;//S2 Float $Dlog_Data[12] = 0;//S1 Absorb $Dlog_Data[13] = 0;//S2 Absorb $Dlog_Data[14] = 0;//S1 Eq $Dlog_Data[15] = 0;//S2 Eq $Dlog_Data[16] = 100;//Low Charge $Dlog_Data[17] = 0;//High Charge } //Adjust Max min Dlog_Data $Dlog_Data[2] = $ClassicData[26]; //current capacity if ($ClassicData[5] >= $Dlog_Data[3]){ $Dlog_Data[3] = $ClassicData[5]; //S1 Peak Watts today } if ($ClassicData[32] >= $Dlog_Data[4]){ $Dlog_Data[4] = $ClassicData[32]; //S2 Peak Watts today } if ($ClassicData[4] >= $Dlog_Data[5]){ $Dlog_Data[5] = $ClassicData[4]; //S1 kWhr today } if ($ClassicData[31] >= $Dlog_Data[6]){ $Dlog_Data[6] = $ClassicData[31]; //S2 kWhr today } if ($ClassicData[9] >= $Dlog_Data[7]){ $Dlog_Data[7] = $ClassicData[9]; //S1 Ahr today } if ($ClassicData[36] >= $Dlog_Data[8]){ $Dlog_Data[8] = $ClassicData[36]; //S2 Ahr today } if ($ClassicData[1] <= $Dlog_Data[9]){ $Dlog_Data[9] = $ClassicData[1]; //Low battery voltage } if ($ClassicData[15] >= $Dlog_Data[10]){ $Dlog_Data[10] = $ClassicData[15]; //S1 Float } if ($ClassicData[42] >= $Dlog_Data[11]){ $Dlog_Data[11] = $ClassicData[42]; //S2 Float } if (($ClassicData[18]-$ClassicData[16]) >= $Dlog_Data[12]){ $Dlog_Data[12] = ($ClassicData[18]-$ClassicData[16]); //S1 Absorb } if (($ClassicData[45]-$ClassicData[43]) >= $Dlog_Data[13]){ $Dlog_Data[13] = ($ClassicData[45]-$ClassicData[43]); //S2 Absorb } if (($ClassicData[19]-$ClassicData[17]) >= $Dlog_Data[14]){ $Dlog_Data[14] = ($ClassicData[19]-$ClassicData[17]); //S1 Eq } if (($ClassicData[46]-$ClassicData[44]) >= $Dlog_Data[15]){ $Dlog_Data[15] = ($ClassicData[46]-$ClassicData[44]); //S2 Eq } if ((100*$ClassicData[26]/$ClassicData[27] )<= $Dlog_Data[16]){ $Dlog_Data[16] = number_format((100*$ClassicData[26]/$ClassicData[27]),$decimals=1 ); //Low Charge } if ((100*$ClassicData[26]/$ClassicData[27] )>= $Dlog_Data[17]){ $Dlog_Data[17] = number_format((100*$ClassicData[26]/$ClassicData[27]),$decimals=1 );//High Charge } //save data to current file if Battery is <> 0 volts. // Sometimes the Classic is busy and returns all zeros for the registers. // This prevents the zero data from being saved as low data. if ($ClassicData[1] <> 0 and $ClassicData[28] <> 0){ $Current = fopen ($dir."current.txt","w"); fputcsv($Current,$Dlog_Data); fputcsv($Current,$ClassicData); fputcsv($Current,$AX1); fputcsv($Current,$AX2); fclose($Current); } //Display Dlog_Data for ($a = 0; $a <= 19 ;$a++){ echo ($a.' '.$Daily_log_name[$a].' '.$Dlog_Data[$a].'
'); } //Display history $HistoryLog = fopen ($dir."history.txt","r"); for ($a = 0; $a <= 6; $a++){ $History[$a] = fgetcsv($HistoryLog); } fclose($HistoryLog); echo('
'); $HDay=$History[$a]; echo('
DateS1 PeakS1 kWhrS2 PeakS2 kWhr'); for ($a = 0; $a <= 6; $a++){ echo('
'.substr($HDay[0],4,2).'/'.substr($HDay[0],6,2)); echo(''.$HDay[1]); echo(''.number_format($HDay[2],$decimals=1)); echo(''.$HDay[3]); echo(''.number_format($HDay[4],$decimals=1)); } echo('
'); ?>