Raspberrypi.solar

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen

program t;

{$mode objfpc}

uses

Classes, Sysutils;

const

cTemp_IllegalValue = -1000;
cSensorRoot = '/sys/bus/w1/devices/';
cSensorVal = '/w1_slave';
cSensorCPU = '/sys/class/thermal/thermal_zone0/temp';
cValue_Granularity = 5000;
cValue_MessureTime = 750;
cFormat_Revision = 1; //

function rTemp(SensorID: string) : extended; var

sl : TStringList;
k : Integer;
value: string;
d: extended;

begin

result := cTemp_IllegalValue;
sl := TStringList.create;
sl.loadFromFile(cSensorRoot+SensorID+cSensorVal);
repeat
 if (sl.Count<>2) then
  break;
 if (pos('YES',sl[0])<28) then
  break;
 k := pos('t=',sl[1]);
 if (k<>28) then
  break;
 value := copy(sl[1],30,MaxInt);

// writeln ('[',value,']');

 d := StrToFloat(value);
 result := Round(d / 100.0) / 10.0;
until true;
sl.free;

end;

var

temp_TimeStamp : TDateTime;
temp_Vorlauf,
temp_Ruecklauf : extended;
temp_Diff : extended;
LogFile : TextFile;

begin

while true do
begin


 // ATOMIC BEGIN
 temp_Vorlauf := rTemp('28-000005602b9d');
 temp_Ruecklauf := rTemp('28-000005603987');
 temp_TimeStamp := now;
 // ATOMIC END
 // Plausibilisierung
 repeat
  if (temp_Vorlauf=cTemp_IllegalValue) then
   break;
  if (temp_Ruecklauf=cTemp_IllegalValue) then
   break;
  // Berechnungen
  temp_Diff := temp_Ruecklauf - temp_Vorlauf;
  // Ausgabe
  AssignFile(LogFile,'/srv/smb/temp/temperatur-' + FormatDateTime('YYYYMMDD',temp_TimeStamp) + '.log.txt');
  {$i-}
  append(LogFile);
  {$i+}
  if (IOresult<>0) then
  begin
   rewrite(LogFile);
   writeln(LogFile,'FORMAT;MOMENT;VORLAUF;RUECKLAUF;DIFFERENZ');
  end;


  writeln(LogFile,
   {} cFormat_Revision,';',
   {} FormatDateTime('YYYYMMDD hh:mm:ss', temp_TimeStamp),';',
   {} temp_Vorlauf:0:1,';',
   {} temp_Ruecklauf:0:1,';',
   {} temp_Diff:0:1 );
 CloseFile(LogFile);
 until true;
 sleep(cValue_Granularity - 2 * cValue_MessureTime);
end;

end.

Counter

gpio readall
  • Einen Counter auf einen GPIO Pin setzen (mit wiringpi) und den Wert jede Sekunde in memchached schreiben
  • Andere Module können dann des "Herz" Wert aus dem memchached lesen