319 lines
7.6 KiB
Plaintext
319 lines
7.6 KiB
Plaintext
unit uMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, uMQTTComps, StdCtrls, Grids, BaseGrid, AdvGrid, uMQTT ,uSysLog,
|
|
ExtCtrls, DateUtils, ComCtrls, Menus, ScktComp, inifiles, FarmSMem,
|
|
JsonConvertor, Buttons, IntNum, NumEdit, ZConnection, MQTT,
|
|
ZAbstractDataset, ZDataset, DB, ZAbstractRODataset, FANTrend;
|
|
|
|
|
|
|
|
type
|
|
TfrmMain = class(TForm)
|
|
initTimer: TTimer;
|
|
StatusBar1: TStatusBar;
|
|
MainMenu1: TMainMenu;
|
|
ListBox1: TListBox;
|
|
File2: TMenuItem;
|
|
ProgramExit1: TMenuItem;
|
|
ZConnection1: TZConnection;
|
|
ZReadOnlyQuery1: TZReadOnlyQuery;
|
|
ZQuery1: TZQuery;
|
|
N3: TMenuItem;
|
|
CONFIG1: TMenuItem;
|
|
NILM2: TMenuItem;
|
|
Device1: TMenuItem;
|
|
N1: TMenuItem;
|
|
Panel1: TPanel;
|
|
TreeView1: TTreeView;
|
|
Splitter1: TSplitter;
|
|
Panel2: TPanel;
|
|
FANTrend1: TFANTrend;
|
|
Timer1: TTimer;
|
|
procedure initTimerTimer(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure ProgramExit1Click(Sender: TObject);
|
|
procedure CONFIG1Click(Sender: TObject);
|
|
procedure NILM2Click(Sender: TObject);
|
|
procedure Device1Click(Sender: TObject);
|
|
procedure TreeView1Click(Sender: TObject);
|
|
procedure Timer1Timer(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
select_nilmID, select_nilm_idxNo : integer;
|
|
public
|
|
//read_gwid : integer;
|
|
fNILM : array [1..max_gw] of TNILM;
|
|
appPath : string;
|
|
hubPort : integer;
|
|
dbIP, dbPW, dbUser, dbSchema, mqtt_topic, ClientID : string;
|
|
dbPort, brokerPort : integer;
|
|
brokerIP, mqtt_user, mqtt_pw : string;
|
|
old_NilmID : integer;
|
|
procedure PrintLog(msg : String);
|
|
procedure ClearIOTGW();
|
|
procedure insertSQL(sql : string);
|
|
procedure ShowNilmTreeView();
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses global, uConfigMQTT, uConfigNILM, uDevConfig;
|
|
|
|
|
|
|
|
procedure TfrmMain.ClearIOTGW();
|
|
var
|
|
p, i : integer;
|
|
begin
|
|
for p:=1 to max_gw do
|
|
begin
|
|
fNILM[p].idxNo := 0;
|
|
fNILM[p]._TOPIC := '';
|
|
fNILM[p]._NAME := '';
|
|
for i:=1 to 3 do
|
|
begin
|
|
fNILM[p]._VALUE.PF[i] := 0.0;
|
|
fNILM[p]._VALUE.Vrms[i] := 0.0;
|
|
fNILM[p]._VALUE.Irms[i] := 0.0;
|
|
fNILM[p]._VALUE._Var[i] := 0.0;
|
|
fNILM[p]._VALUE.Va[i] := 0.0;
|
|
fNILM[p]._VALUE.Pwr[i] := 0.0;
|
|
fNILM[p]._VALUE.Gyro[i] := 0.0;
|
|
fNILM[p]._VALUE.Accel[i] := 0.0;
|
|
end;
|
|
fNILM[p]._VALUE.TempC := 0;
|
|
fNILM[p].rcvCount := 0;
|
|
fNILM[p].oldRcvCount := 0;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.ShowNilmTreeView();
|
|
var
|
|
nilmID : integer;
|
|
subNode : TTreenode;
|
|
begin
|
|
TreeView1.Items.Clear;
|
|
|
|
for nilmID:=1 to max_gw do
|
|
begin
|
|
if fNILM[nilmID].idxNo> 0 then
|
|
begin
|
|
subNode := TreeView1.Items.AddChild(nil, format('%.5d',[nilmID]));
|
|
|
|
TreeView1.items.AddChild(subNode, 'IDXNO:'+inttostr(fNILM[nilmID].idxNo));
|
|
TreeView1.items.AddChild(subNode, 'NAME :'+fNILM[nilmID]._NAME);
|
|
TreeView1.items.AddChild(subNode, 'TOPIC:'+fNILM[nilmID]._TOPIC);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.PrintLog(msg : string);
|
|
begin
|
|
if ListBox1.Items.Count >= 300 then ListBox1.Items.Clear;
|
|
ListBox1.Items.Insert(0, FormatDateTime('hh:nn:ss :: ',now)+msg);
|
|
end;
|
|
|
|
procedure TfrmMain.initTimerTimer(Sender: TObject);
|
|
var
|
|
ini : TInifile;
|
|
pwd : string;
|
|
begin
|
|
FANTrend1.SetItem(1, 'PF', clLime, 1, 0);
|
|
FANTrend1.SetItem(2, 'Vrms', clYellow, 300, 0);
|
|
FANTrend1.SetItem(3, 'Irms', clSkyBlue, 10, 0);
|
|
FANTrend1.SetItem(4, 'Pwr', clRed, 5000, 0);
|
|
|
|
|
|
old_NilmID := 0;
|
|
ListBox1.Clear;
|
|
mqtt_topic := '';
|
|
mqtt_topic := 'QST/NILM/LVDT/#';
|
|
|
|
|
|
pwd := '';
|
|
pwd := appPath+'NILM_Manager.ini';
|
|
if FileExists(pwd) then
|
|
begin
|
|
ini := TInifile.Create(pwd);
|
|
with ini do
|
|
begin
|
|
mqtt_topic := ReadString('MQTT','TOPIC',mqtt_topic);
|
|
brokerIP := ReadString('MQTT','BrokerIP','183.111.125.203');
|
|
brokerPort := ReadInteger('MQTT','BrokerPort',1883);
|
|
ClientID := ReadString('MQTT','ClientID','NILM_1st');
|
|
|
|
mqtt_user := ReadString('MQTT','User','qsentech');
|
|
mqtt_pw := ReadString('MQTT','Password','qsentech!1233');
|
|
|
|
|
|
dbIP := ReadString('DATABASE','IP','192.168.200.199');
|
|
dbUser := ReadString('DATABASE','User','root');
|
|
dbPW := ReadString('DATABASE','PW','1233');
|
|
dbSchema := ReadString('DATABASE','Schema','nilm');
|
|
dbPort := ReadInteger('DATABASE','Port',3306);
|
|
|
|
hubPort := ReadInteger('MQTT_HUB','Port',6969);
|
|
end;
|
|
ini.Free;
|
|
end;
|
|
|
|
|
|
if ZConnection1.Connected then ZConnection1.disConnect();
|
|
Sleep(300);
|
|
ZConnection1.HostName := dbIP;
|
|
ZConnection1.Port := dbPort;
|
|
ZConnection1.User := dbUser;
|
|
ZConnection1.Password := dbPW;
|
|
ZConnection1.Database := dbSchema;
|
|
|
|
|
|
frmNILM.ShowNILM();
|
|
frmDevConfig.ShowDev();
|
|
|
|
ShowNilmTreeView();
|
|
Timer1.Enabled := True;
|
|
initTimer.Enabled := false;
|
|
end;
|
|
|
|
procedure TfrmMain.FormCreate(Sender: TObject);
|
|
begin
|
|
appPath := '';
|
|
appPath := ExtractFilePath(Application.ExeName);
|
|
|
|
|
|
ClearIOTGW();
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.insertSQL(sql : string);
|
|
begin
|
|
try
|
|
try
|
|
if not ZConnection1.Connected then ZConnection1.Connect();
|
|
if ZConnection1.Connected then
|
|
begin
|
|
ZQuery1.Active := false;
|
|
ZQuery1.SQL.Clear;
|
|
ZQuery1.SQL.Add(sql);
|
|
ZQuery1.ExecSQL;
|
|
end;
|
|
finally
|
|
if ZConnection1.Connected then ZConnection1.Disconnect;
|
|
end;
|
|
|
|
except
|
|
on e : exception do
|
|
begin
|
|
printlog('Database Connect Error :: '+e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.ProgramExit1Click(Sender: TObject);
|
|
begin
|
|
frmMain.Close;
|
|
|
|
end;
|
|
|
|
procedure TfrmMain.CONFIG1Click(Sender: TObject);
|
|
begin
|
|
frmConfigMQTT.Show;
|
|
|
|
end;
|
|
|
|
procedure TfrmMain.NILM2Click(Sender: TObject);
|
|
begin
|
|
frmNILM.Show;
|
|
|
|
end;
|
|
|
|
procedure TfrmMain.Device1Click(Sender: TObject);
|
|
begin
|
|
frmDevConfig.Show;
|
|
|
|
end;
|
|
|
|
procedure TfrmMain.TreeView1Click(Sender: TObject);
|
|
var
|
|
str1, str : string;
|
|
li : LongInt;
|
|
sub : TTreeNode;
|
|
begin
|
|
if TreeView1.Selected = nil then exit;
|
|
|
|
str := TreeView1.Selected.Text;
|
|
Statusbar1.Panels.Items[0].text := str;
|
|
if Pos(':', str)<= 0 then
|
|
begin
|
|
select_nilmID := StrTointDef(str, 0);
|
|
end;
|
|
|
|
if TreeView1.Selected.HasChildren then
|
|
begin
|
|
sub := TreeView1.Selected.getFirstChild;
|
|
str := sub.Text;
|
|
str1 := Copy(str, Pos(':', str)+1, Length(str)-Pos(':', str));
|
|
select_nilm_idxNo := StrTointDef(str1, 0);
|
|
|
|
printlog(str1);
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
procedure TfrmMain.Timer1Timer(Sender: TObject);
|
|
var
|
|
vPF, vVrms, vIrms, vPwr : single;
|
|
begin
|
|
if select_nilmID<= 0 then exit;
|
|
|
|
try
|
|
try
|
|
if not frmMain.ZConnection1.Connected then frmMain.ZConnection1.Connect();
|
|
if frmMain.ZConnection1.Connected then
|
|
begin
|
|
ZReadOnlyQuery1.Active := false;
|
|
ZReadOnlyQuery1.SQL.Clear;
|
|
ZReadOnlyQuery1.SQL.Add('SELECT * FROM nilm_value WHERE NilmID='+inttostr(select_nilmID));
|
|
ZReadOnlyQuery1.Open;
|
|
|
|
if ZReadOnlyQuery1.RecordCount> 0 then
|
|
begin
|
|
vPF := ZReadOnlyQuery1.FieldByName('pf_1').AsFloat;
|
|
vVrms := ZReadOnlyQuery1.FieldByName('Vrms_1').AsFloat;
|
|
vIrms := ZReadOnlyQuery1.FieldByName('Irms_1').AsFloat;
|
|
vPwr := ZReadOnlyQuery1.FieldByName('Pwr_1').AsFloat;
|
|
end;
|
|
end;
|
|
finally
|
|
if frmMain.ZConnection1.Connected then frmMain.ZConnection1.Disconnect;
|
|
end;
|
|
|
|
except
|
|
on e : exception do
|
|
begin
|
|
frmMain.printlog('Database Connect Error :: '+e.Message);
|
|
end;
|
|
end;
|
|
|
|
|
|
FANTrend1.Add(1, vPF, formatdatetime('hh:nn:ss',now()));
|
|
FANTrend1.Add(2, vVrms, formatdatetime('hh:nn:ss',now()));
|
|
FANTrend1.Add(3, vIrms, formatdatetime('hh:nn:ss',now()));
|
|
FANTrend1.Add(4, vPwr, formatdatetime('hh:nn:ss',now()));
|
|
end;
|
|
|
|
end.
|