function checkBattery(Batteria,Batteria_LoRa,IDcentralina,DTcatena,Unit,Mail,conn,FileName) text = 'checkBattery function started'; fileID = fopen(FileName,'a'); fmt = '%s \r'; fprintf(fileID,fmt,text); fclose(fileID); % Centralina if strcmp(Unit,'GEI G801') == 1 || strcmp(Unit,'GEI G802') == 1 || strcmp(Unit,'GEI G201') == 1 ... || strcmp(Unit,'GEI G301') == 1 % G801, G802, G201, G301 Batt = 12; Threshold = 11; Dato = cellstr('12 V'); elseif strcmp(Unit,'GEI D2W') == 1 Batt = 6; Threshold = 5.6; Dato = cellstr('6 V'); elseif strcmp(Unit,'Nesa') == 1 Batt = 3.4; Threshold = 3; Dato = cellstr('3.4 V'); elseif strcmp(Unit,'Nesa evolution') == 1 Batt = 12.2; Threshold = 11.8; Dato = cellstr('12.2 V'); elseif strcmp(Unit,'Campbell CRX1000') == 1 Batt = 12; Threshold = 10; Dato = cellstr('12 V'); elseif strcmp(Unit,'SISGEO WR-GW-868') == 1 Batt = 5; Threshold = 4.5; Dato = cellstr('5 V'); end % Modulo LoRa if isempty(Batteria_LoRa) == 0 if strcmp(Unit,'GEI G802') == 1 Threshold_LoRa = 6.5; Dato_LoRa = cellstr('7.2 V'); elseif strcmp(Unit,'SISGEO WR-GW-868') == 1 Threshold_LoRa = 3; Dato_LoRa = cellstr('5 V'); end else Threshold_LoRa = []; Dato_LoRa = []; end FileNameBattery = strcat(IDcentralina,'-Batteria.txt'); if isfile(FileNameBattery) == 0 % NON Esiste outdat = fopen(FileNameBattery,'wt+'); fileID_site = fopen(FileNameBattery,'a'); fmt = '%f \r'; fprintf(fileID_site,fmt,Batt); fmt = '%.10f \r'; text = now; fprintf(fileID_site,fmt,text); fclose(fileID_site); end % Scarico dati di riferimento FileNameBattery = ['' IDcentralina '-Batteria.txt']; Dati = importdata(FileNameBattery); [rA,~] = size(Dati); if rA == 0 Livello_Rif = 0; Data_Rif = 0; elseif rA == 1 Livello_Rif = Dati(1,1); Data_Rif = 0; else Livello_Rif = Dati(1,1); Data_Rif = Dati(2,1); end if strcmp(Unit,'Nesa evolution') == 1 Level = str2double(cell2mat(Batteria(end,2))); else Level = cell2mat(Batteria(end,3)); end activate = 0; Centralina = 0; LoRa = 0; % Check Centralina if Level < Threshold if Level > 0 if now-Data_Rif > 1 % || Level < Livello_Rif Data_Rif = now; activate = 1; Centralina = 1; end end end % Check Modulo LoRa if isnan(cell2mat(Batteria_LoRa(end,3))) == 0 Level_LoRa = cell2mat(Batteria_LoRa(end,3)); if Level_LoRa < Threshold_LoRa if Level_LoRa > 0 if now-Data_Rif > 1 Data_Rif = now; activate = 1; LoRa = 1; end end end end if activate == 0 Mail = 0; end if Mail == 1 sms = 0; % Centralina if Centralina == 1 DATAinsert = cell(1,6); if strcmp(Unit,'Nesa evolution') == 1 Data = datestr(datenum(Batteria(end,1)),'yyyy-mm-dd HH:MM:SS'); else Data = datestr(strjoin([Batteria(end,1) Batteria(end,2)]),'yyyy-mm-dd HH:MM:SS'); end desc = Dato; DATAinsert{1,1} = 2; % Allarme tipologia batteria DATAinsert{1,2} = IDcentralina; DATAinsert{1,3} = Data; DATAinsert{1,4} = Level; DATAinsert{1,5} = sms; DATAinsert{1,6} = desc; % Cerco se il dato è già presente comando = ['select id, type_id, date_time from alarms where unit_name = ''' ... IDcentralina ''' and date_time = ''' Data ''' and type_id = ''' DATAinsert{1,1} ... ''' and registered_value = ''' Level ''' and description like ''' desc ''' order by date_time']; curs = exec(conn,comando); curs = fetch(curs); idDate = curs.Data; [~,cI] = size(idDate); if cI == 1 idElabData = 0; % 0 indica che il dato non è presente su DB else idElabData = cell2mat(idDate(:,1)); end tablename = 'alarms'; colnames = {'type_id','unit_name','date_time','battery_level','send_sms','description'}; data = [DATAinsert(1,1),DATAinsert(1,2),DATAinsert(1,3),DATAinsert(1,4),... DATAinsert(1,5),DATAinsert(1,6)]; if idElabData == 0 % Scrivo fastinsert(conn,tablename,colnames,data); text = ['ALERT was written in the DB by checkBattery function for date: ''' Data ''' ']; end end if LoRa == 1 DATAinsert = cell(1,7); Data = datestr(strjoin([Batteria_LoRa(end,1) Batteria_LoRa(end,2)]),'yyyy-mm-dd HH:MM:SS'); desc = Dato_LoRa; DATAinsert{1,1} = 2; % Allarme tipologia batteria DATAinsert{1,2} = IDcentralina; DATAinsert{1,3} = DTcatena; DATAinsert{1,4} = Data; DATAinsert{1,5} = Level_LoRa; DATAinsert{1,6} = sms; DATAinsert{1,7} = desc; % Cerco se il dato è già presente comando = ['select id, type_id, date_time from alarms where unit_name = ''' ... IDcentralina ''' and tool_name = ''' DTcatena ''' and date_time = ''' Data ... ''' and type_id = ''' DATAinsert{1,1} ''' and registered_value = ''' Level ... ''' and description like ''' desc ''' order by date_time']; curs = exec(conn,comando); curs = fetch(curs); idDate = curs.Data; [~,cI] = size(idDate); if cI == 1 idElabData = 0; % 0 indica che il dato non è presente su DB else idElabData = cell2mat(idDate(:,1)); end tablename = 'alarms'; colnames = {'type_id','unit_name','tool_name','date_time','battery_level','send_sms','description'}; data = [DATAinsert(1,1),DATAinsert(1,2),DATAinsert(1,3),DATAinsert(1,4),... DATAinsert(1,5),DATAinsert(1,6),DATAinsert(1,6)]; if idElabData == 0 % Scrivo fastinsert(conn,tablename,colnames,data); text = ['ALERT was written in the DB by checkBattery function for date: ''' Data ''' ']; end end fileID = fopen(FileName,'a'); fmt = '%s \r'; fprintf(fileID,fmt,text); fclose(fileID); end outdat = fopen(FileNameBattery,'wt+'); fileID_site = fopen(FileNameBattery,'a'); text_B = Level; fmt = '%f \r'; fprintf(fileID_site,fmt,text_B); fmt = '%.10f \r'; text = Data_Rif; fprintf(fileID_site,fmt,text); fclose(fileID_site); text = 'checkBattery function worked correctly'; fileID = fopen(FileName,'a'); fmt = '%s \r'; fprintf(fileID,fmt,text); fclose(fileID); end