ClearActions();
AddAction('SchrankJPG.show(); SchrankJPG.zoomOut(0);','SchrankJPG.zoomOut(700); ');
AddAction('SchrankJPG.zoomIn(0.73,0.68,11,700)');
AddAction('SchrankJPG.zoomIn(0.65,0.58,11,700)');
AddAction('SchrankJPG.zoomIn(0.59,0.24,11,700)');
AddAction('SchrankJPG.zoomIn(0.64,0.14,8,700)');
AddAction('SchrankJPG.zoomIn(0.64,0.36,6,700)','SchrankJPG.zoomIn(0.64,0.36,6,0); SchrankJPG.show(); ');
AddAction('Show("Software")');
StartWithAction(0,5);
SchrankJPG.hide();
ClearActions();
AddAction('Show("PVSchrank")');
AddAction('Software1.show(); Software1.zoomOut(0); Software2.hide(); ');
AddAction('Software2.zoomIn(Software1.getParentCoordsX(0.45),Software1.getParentCoordsX(0.53),1/20,0); Software2.show(); Software2.zoomOut(1000)','Software2.loadImg("2.jpg")');
AddAction('Software2.loadImg("3.jpg")');
AddAction('Software2.loadImg("4.jpg")');
AddAction('Software2.loadImg("5.jpg")');
AddAction('Software2.loadImg("6.jpg")');
AddAction('Software2.loadImg("7.jpg")');
AddAction('Software2.loadImg("8.jpg")');
AddAction('Software2.loadImg("9.jpg")');
AddAction('Software2.loadImg("10.jpg")');
AddAction('Software2.loadImg("11.jpg")','Software2.show(); Software1.show(); Software2.loadImg("11.jpg"); ');
AddAction('Show("DLL")');
StartWithAction(1,11);
Software1.hide();
Software2.hide();
Software2.loadImg("2.jpg");
ClearActions();
AddAction('Show("Software")');
AddAction('UnMark()');
AddAction('Mark(0)');
AddAction('Mark(1)');
AddAction('Mark(2)');
AddAction('Mark(3)');
AddAction('Mark(4)');
AddAction('Show("Server")');
StartWithAction(1,6);
library CalibWind;
{$mode objfpc}{$H+}
uses
Classes, Callback, Windows, sysutils;
var
CB : TCallback;
OldMemMgr : TMemoryManager;
ValueText : AnsiString = '';
Overclocking : POverclockTimes;
Wind : Array [0..19] of single;
WindFaktor : single = 1;
VarianzFaktor : single = 1;
Nullpos : integer = 0;
Precision : word;
my : single;
va : single;
Pos : byte;
{$R *.res}
procedure OverclockHook(Time : TDateTime);
begin
if (Length(Overclocking^) = 0) or (Overclocking^[0].Time = 0) then begin
SetLength(Overclocking^,1);
Overclocking^[0].Time := Time + 1000 / 86400000;
Overclocking^[0].Value := -1;
end;
end;
procedure Create(Params : PChar; _Callback : TCallbackProc; Board,Channel : Word; MemMgr : TMemoryManager);
var
i : integer;
b : boolean;
s,t : AnsiString;
procedure InterpretST;
begin
if (LowerCase(s) = 'windfaktor') then begin try WindFaktor := StrToFloat(t); except end; end;
if (LowerCase(s) = 'varianzfaktor') then begin try VarianzFaktor := StrToFloat(t); except end; end;
if (LowerCase(s) = 'nullpos') then begin try NullPos := StrToInt(t); except end; end;
end;
begin
GetMemoryManager(OldMemMgr);
SetMemoryManager(MemMgr);
CB := TCallback.Create(_Callback,Board,Channel);
CB.GetOverclockingAccess(@OverclockHook,Overclocking);
SetLength(Overclocking^,0);
OverclockHook(Now);
CB.CalibOnRequest := true;
Precision := CB.GetPrecision;
for i := 0 to 19 do PCardinal(@Wind[i])^ := 4294967295;
Pos := 0;
my := 0;
va := 0;
i := 0;
b := false;
s := '';
t := '';
while (PByte(Params+i)^ <> 0) do begin
if (PByte(Params+i)^ = 10) or (PByte(Params+i)^ = Byte(' ')) then begin end
else if (PByte(Params+i)^ = Byte('=')) then b := true
else if (PByte(Params+i)^ = 13) then begin
InterpretST;
b := false;
t := '';
s := '';
end else if (b) then t := t + Char(PByte(Params+i)^)
else s := s + Char(PByte(Params+i)^);
inc(i);
end;
InterpretST;
end;
type TCalib = record
i,j : integer;
end;
var _Calib : TCalib;
function Calib(Flag : ShortInt; Value : Word) : PChar;
begin
Result := nil;
if (Flag = -1) then begin
with (_Calib) do begin
i := 0;
j := 0;
my := 0;
va := 0;
while (i <= 19) do begin
if (PCardinal(@Wind[i])^ <> 4294967295) then begin my := my + Wind[i]; inc(j); end;
inc(i);
end;
if (j = 0) then begin ValueText := '?'; exit; end;
my := my / j;
i := 0;
while (i <= 19) do begin
if (PCardinal(@Wind[i])^ <> 4294967295) then va := va + (my - Wind[i]) * (my - Wind[i]);
inc(i);
end;
va := sqrt(va / j) * VarianzFaktor;
if (my < 0) then my := 0;
if (va < 0.1) then ValueText := '(konstant) ' + FloatToStrF(my,ffFixed,10,Precision)
else if (va < 0.3) then ValueText := '(leicht schwankend) ' + FloatToStrF(my,ffFixed,10,Precision)
else if (va < 0.6) then ValueText := '(schwankend) ' + FloatToStrF(my,ffFixed,10,Precision)
else if (va < 1) then ValueText := '(leichte B%037038ouml;hen) ' + FloatToStrF(my,ffFixed,10,Precision)
else if (va >= 1) then ValueText := '(starke B%037038ouml;hen) ' + FloatToStrF(my,ffFixed,10,Precision);
end;
Result := PChar(ValueText);
end else begin
if (Length(Overclocking^) = 0) then exit;
if (CB.GetStarted) then Overclocking^[0].Time := Overclocking^[0].Time + 5000 / 86400000
else Overclocking^[0].Time := 0;
Overclocking^[0].Value := -1;
Wind[Pos] := (Value - Nullpos) * WindFaktor;
inc(Pos);
if (Pos >= 20) then Pos := 0;
end;
end;
procedure Free;
begin
// Exit-Code hier
CB.Free;
if (IsMemoryManagerSet) then SetMemoryManager(OldMemMgr);
end;
exports Create,Calib,Free;
end.
ClearActions();
AddAction('Show("DLL")');
AddAction('_UnMark(); document.getElementById("Browser").style.display = "none"; document.getElementById("BrowserFrame").src = ""; ');
AddAction('_Mark(0)','document.getElementById("Browser").style.display = "none"; ');
AddAction('document.getElementById("Browser").style.display = "block"; ','_Mark(0)');
AddAction('document.getElementById("Browser").style.display = "block"; document.getElementById("BrowserSrc").value = "http://www.hems-renewables.de/Messdatensystem/Messdaten.pl?GETLATESTDATA"; FBrowser(); ');
AddAction('Show("Site")');
StartWithAction(1,4);
Fordert
einen Schlüssel (TempConnectKey)
für den Aufbau der Verbindung mit CONNECT an. Dieser wird
zufällig gewählt und mit RSA-Public-Key
verschlüsselt übertragen (Siehe 4.4.1 RSA).
Rückgabe:
Wenn
erfolgreich INITIALIZED&TempConnectKey_Crypt
Sonst
ERROR
CONNECT&PasswordHash&SessionKeys_Crypt
Startet
die Verbindung. Der Parameter PasswordHash
berechnet sich aus Hauptpasswort und TempConnectKey
(Siehe 4.4.2 Passwort-Hash). Die SessionKeys_Crypt
sind die drei, für die Verbindung relevanten, Schlüssel
UploadKey, UploadSeq
und CheckKey, welche vom
Client erstellt werden (Siehe 4.4.3 Verschlüsselung der Keys).
Diese wurden mit dem TempConnectKey
verschlüsselt, welcher nun nicht mehr gebraucht wird und
potentiellen, anderen Verbindungspartnern zur Verfügung steht.
Rückgabe:
Wenn
erfolgreich CONNECTED&CheckSeq
Sonst
ERROR
oder WRONG
KEY
SETCONFIG&UploadSeq&Timer&ChannelData_1&ChannelData_2&
.. &ChannelData_n
Überträgt
die aktuelle Konfiguration des Messdatensystem, die für alle
folgenden Messdaten gelten soll. Das ist zum einen das Interval
(Timer), mit dem diese
Abgefragt werden und zum anderen die Kanäle (ChannelData_1
.. ChannelData_n), die
übertragen werden. Letztere bestehen aus dem Kanalnamen, einem
Komma und der Einheit.
Rückgabe:
Wenn
erfolgreich UPLOADED&CheckSeq
Sonst
ERROR
oder
WRONG
KEY oder
NOT
CONNECTED
UPLOAD&UploadSeq&Time&Channel_1&Channel_2&
.. &Channel_n
Überträgt
die Messdaten. Diese bestehen aus einem Zeitstempel (Time)
sowie den Messwerten (Channel_1
.. Channel_n).
Rückgabe:
Wenn
erfolgreich UPLOADED&CheckSeq
Sonst
ERROR
oder WRONG
KEY oder
NOT
CONNECTED
SETCONNECTIONINFO&UploadSeq&Connectioninfo
Speichert
Informationen zur Verbindung.
Rückgabe:
Wenn
erfolgreich UPLOADED&CheckSeq
Sonst
ERROR
oder WRONG
KEY oder
NOT
CONNECTED
DISCONNECT&UploadSeq
Schließt
die Verbindung. Mit der Ausgabe von UploadKey
ist die Verbindung geschlossen.
Rückgabe:
Wenn
erfolgreich DISCONNECTED&UploadKey
Sonst
ERROR
oder
WRONG
KEY oder
NOT
CONNECTED
ClearActions();
AddAction('Show("Server")');
AddAction('g_.hide(); document.getElementById("g0").style.visibility = "visible"; ');
AddAction('g_.show(); document.getElementById("g0").style.visibility = "hidden";','g_.loadImg("g1.jpg"); ');
AddAction('g_.loadImg("g2.jpg"); ','g_.loadImg("g2.jpg"); ');
AddAction('g_.loadImg("g3.jpg"); ');
StartWithAction(1);
g_.hide();