Files
matlab-python/Tilt/Time_Of_Failure.m

1572 lines
92 KiB
Matlab
Executable File
Raw Blame History

function Time_Of_Failure(IDcentralina,DTcatena,date,ARRAYdateTL,ARRAYdateIPL,...
yesTL,yesTLHR3D,yesIPL,yesIPLHR3D,rTL,rIPL,NodoTiltLink,NodoTiltLinkHR,...
NodoTiltLinkHR3D,NodoInPlaceLink,NodoInPlaceLinkHR,NodoInPlaceLinkHR3D,...
Mail,Users_Alert,Users_SMS,ini_CoV,activeIT,activeEN,sms,siteID,conn,FileName)
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'Time_Of_Failure function started';
fprintf(fileID,fmt,text);
fclose(fileID);
if yesTL == 1 || yesIPL == 1
if yesTL == 1 % Vertical Array
ARRAYdate = ARRAYdateTL;
yes3D = yesTLHR3D;
rNL = rTL;
NodoTilt = NodoTiltLink;
NodoTiltHR = NodoTiltLinkHR;
NodoTiltHR3D = NodoTiltLinkHR3D;
else % In Place Array
ARRAYdate = ARRAYdateIPL;
yes3D = yesIPLHR3D;
rNL = rIPL;
NodoTilt = NodoInPlaceLink;
NodoTiltHR = NodoInPlaceLinkHR;
NodoTiltHR3D = NodoInPlaceLinkHR3D;
end
FileNameFuk = ['' IDcentralina '-' DTcatena '-Fuk.txt'];
if isfile(FileNameFuk) == 0 % NON Esiste
outdat = fopen(FileNameFuk,'wt+');
fileID = fopen(FileNameFuk,'a');
fmt = '%.10f \r';
DATA = 0;
fprintf(fileID,fmt,DATA);
fmt = '%.10f \r';
fprintf(fileID,fmt,now);
fprintf(fileID,fmt,DATA);
fclose(fileID);
end
if now-datenum(date) > 30
% Fukuzono real-time
[alert,alert_local,alarm,alarm_local,Date,RQ,RQ_Loc,DataFuK,DataFuK_local,...
Tr_mail,Tr_Loc_mail,Tr_Inf,Tr_Inf_Loc,Tr_Sup,Tr_Sup_Loc,Tr_Loc_HR,...
DataFuK_local_HR,Number,Number_Loc] = Fukuzono(IDcentralina,DTcatena,...
date,ARRAYdate,yes3D,rNL,NodoTilt,NodoTiltHR,NodoTiltHR3D,conn,FileName);
% Fukuzono storico
[alarm_STORICO,alarm_local_STORICO,DateGiorno,Tr_Loc_Sup_S,Tr_Loc_Inf_S,...
Tr_Loc_S,Tr_Sup_S,Tr_Inf_S,Tr_S,Tr_Loc_HR_S,Tr_mail_S,Tr_Loc_mail_S,...
DataFuK_S,DataFuK_local_S,DataFuK_local_HR_S,Number_S,Number_Loc_S,...
RQ_S,RQ_Loc_S] = Fukuzono_Giornaliero(IDcentralina,DTcatena,date,...
ARRAYdate,yes3D,rNL,NodoTilt,NodoTiltHR,NodoTiltHR3D,conn,FileName);
else
alert = [];
alert_local = [];
alarm = [];
alarm_local = [];
alarm_STORICO = [];
alarm_local_STORICO = [];
end
else
alert = [];
alert_local = [];
alarm = [];
alarm_local = [];
alarm_STORICO = [];
alarm_local_STORICO = [];
end
fileID = fopen(FileName,'a');
fmt = '%s \r';
activate = 0; % attiva l'invio di mail
FileNameFuk = ['' IDcentralina '-' DTcatena '-Fuk.txt'];
% - Allerta -
if isempty(find(alert)) == 1 && isempty(find(alert_local)) == 1
Alert = 0; % non ho allerte
else
Alert = 1; % ho allerte
activate = 1;
end
if isempty(find(alarm)) == 1 && isempty(find(alarm_local)) == 1
Alarm = 0; % non ho allarmi
else
Alarm = 1; % ho allarmi
activate = 1;
end
if isempty(find(alarm_STORICO)) == 1 && isempty(find(alarm_local_STORICO)) == 1
Alarm_Storico = 0; % non ho allarmi
else
Alarm_Storico = 1; % ho allarmi
activate = 1;
end
if activate == 1 % mando la mail
A = importdata(FileNameFuk);
DataRif = A(1,1);
%% Criterio Real Time
if Alert == 1 || Alarm == 1
[numDate,~] = size(alert);
Level = zeros(numDate,rNL);
Level_Local = zeros(numDate,rNL);
for j = 1:rNL % nodi
for i = 1:numDate % date
% -------- Cumulati ----------
if alert(i,j) == 1 % --- Livello 1 ---
if Date(i) >= DataRif
if Date(i) >= DataRif+1
Level(i,j) = 1;
end
if alarm(i,j) == 1
if Tr_mail(i,j)+Date(i) < now % --- Livello 1.5 ---
Level(i,j) = 1.5;
else % --- Livello 2 ---
INI = find(Date >= Date(i,1)-1);
Casi = 0;
Index = [];
for FANFANI = INI(1):i
for SCAJOLA = 1:rNL
if DataFuK(FANFANI,SCAJOLA)+Tr_mail(FANFANI,SCAJOLA) > now || ...
DataFuK_local(FANFANI,SCAJOLA)+Tr_Loc_mail(FANFANI,SCAJOLA) > now
Casi = Casi+1;
Index = [Index; FANFANI SCAJOLA];
end
end
end
if Number(i,j) > 5 || RQ(i,j) > 0.92 || Casi > 1 % --- Livello 3 ---
[rII,~] = size(Index);
if rII > 0
for II = 1:rII
if Number(i,j) > 5 && RQ(i,j) > 0.92 ||...
Number(i,j) > 5 && Number(Index(II,1),Index(II,2)) > 5 && Casi == 2 ||...
RQ(i,j) > 0.92 && RQ(Index(II,1),Index(II,2)) > 0.92 && Casi == 2 ||...
Casi > 2 % --- Livello 4 ---
if Number(i,j) > 5 && RQ(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level(i,j) = 5;
else
Level(i,j) = 4;
end
else
Level(i,j) = 3;
end
end
else
if Number(i,j) > 5 && RQ(i,j) > 0.92 || Casi > 2 % --- Livello 4 ---
if Number(i,j) > 5 && RQ(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level(i,j) = 5;
else
Level(i,j) = 4;
end
else
Level(i,j) = 3;
end
end
else
Level(i,j) = 2;
end
end
end
end
end
% -------- Locali ----------
if alert_local(i,j) == 1 % --- Livello 1 ---
if Date(i) >= DataRif+1
Level_Local(i,j) = 1;
end
if Date(i) >= DataRif
if alarm_local(i,j) == 1
if Tr_Loc_mail(i,j)+Date(i) < now % --- Livello 1.5 ---
Level_Local(i,j) = 1.5;
else % --- Livello 2 ---
INI = find(Date >= Date(i,1)-1);
Casi = 0;
Index = [];
for CRAXI = INI(1):i
for ALEMANNO = 1:rNL
if DataFuK_local(CRAXI,ALEMANNO)+Tr_mail(CRAXI,ALEMANNO) > now ||...
DataFuK(CRAXI,ALEMANNO)+Tr_Loc_mail(CRAXI,ALEMANNO) > now
Casi = Casi+1;
Index = [Index; CRAXI ALEMANNO];
end
end
end
if Number_Loc(i,j) > 5 || RQ_Loc(i,j) > 0.92 || Casi > 1 % --- Livello 3 ---
[rII,~] = size(Index);
if rII > 0
for II = 1:rII
if Number_Loc(i,j) > 5 && RQ_Loc(i,j) > 0.92 ||...
Number_Loc(i,j) > 5 && Number_Loc(Index(II,1),Index(II,2)) > 5 && Casi == 2 ||...
RQ_Loc(i,j) > 0.92 && RQ_Loc(Index(II,1),Index(II,2)) > 0.92 && Casi == 2 ||...
Casi > 2 % --- Livello 4 ---
if Number_Loc(i,j) > 5 && RQ_Loc(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level_Local(i,j) = 5;
else
Level_Local(i,j) = 4;
end
else
Level_Local(i,j) = 3;
end
end
else
if Number_Loc(i,j) > 5 && RQ_Loc(i,j) > 0.92 || Casi > 2 % --- Livello 4 ---
if Number_Loc(i,j) > 5 && RQ_Loc(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level_Local(i,j) = 5;
else
Level_Local(i,j) = 4;
end
else
Level_Local(i,j) = 3;
end
end
else
Level_Local(i,j) = 2;
end
end
end
end
end
end
end
else
Level = 0;
Level_Local = 0;
end
%% Criterio Storico
if Alarm_Storico == 1
[numDate,~] = size(alarm_STORICO);
Level_Storico = zeros(numDate,rNL);
Level_Local_Storico = zeros(numDate,rNL);
for j = 1:rNL % nodi
for i = 1:numDate % date
% -------- Cumulati ----------
if DateGiorno(i) >= DataRif
if alarm_STORICO(i,j) == 1
if Tr_S(i,j)+DateGiorno(i) < now % --- Livello 1.5 ---
Level_Storico(i,j) = 1.5;
else % --- Livello 2 ---
INI = find(DateGiorno >= DateGiorno(i,1)-1);
Casi = 0;
Index = [];
for COSSIGA = INI(1):i
for SCHIFANI = 1:rNL
if DataFuK_S(COSSIGA,SCHIFANI)+Tr_mail_S(COSSIGA,SCHIFANI) > 0 ||...
DataFuK_local_S(COSSIGA,SCHIFANI)+Tr_Loc_mail_S(COSSIGA,SCHIFANI) > 0
Casi = Casi+1;
Index = [Index; COSSIGA SCHIFANI];
end
end
end
if Number_S(i,j) > 5 || RQ_S(i,j) > 0.92 || Casi > 1 % --- Livello 3 ---
[rII,~] = size(Index);
if rII > 0
for II = 1:rII
if Number_S(i,j) > 5 && RQ_S(i,j) > 0.92 ||...
Number_S(i,j) > 5 && Number_S(Index(II,1),Index(II,2)) > 5 && Casi == 2 ||...
RQ_S(i,j) > 0.92 && RQ_S(Index(II,1),Index(II,2)) > 0.92 && Casi == 2 ||...
Casi > 2
% --- Livello 4 ---
if Number_S(i,j) > 5 && RQ_S(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level_Storico(i,j) = 5;
else
Level_Storico(i,j) = 4;
end
else
Level_Storico(i,j) = 3;
end
end
else
if Number_S(i,j) > 5 && RQ_S(i,j) > 0.92 || Casi > 2 % --- Livello 4 ---
if Number_S(i,j) > 5 && RQ_S(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level_Storico(i,j) = 5;
else
Level_Storico(i,j) = 4;
end
else
Level_Storico(i,j) = 3;
end
end
else
Level_Storico(i,j) = 2;
end
end
end
% -------- Locali ----------
if alarm_local_STORICO(i,j) == 1
if Tr_Loc_S(i,j)+DateGiorno(i) < now % --- Livello 1.5 ---
Level_Local_Storico(i,j) = 1.5;
else % --- Livello 2 ---
INI = find(DateGiorno >= DateGiorno(i,1)-1);
Casi = 0;
Index = [];
for CROSETTO = INI(1):i
for CAPEZZONE = 1:rNL
if DataFuK_local_S(CROSETTO,CAPEZZONE)+Tr_Loc_mail_S(CROSETTO,CAPEZZONE) > 0 ||...
DataFuK_S(CROSETTO,CAPEZZONE)+Tr_mail_S(CROSETTO,CAPEZZONE) > 0
Casi = Casi+1;
Index = [Index; CROSETTO CAPEZZONE];
end
end
end
if Number_Loc_S(i,j) > 5 || RQ_Loc_S(i,j) > 0.92 || Casi > 1 % --- Livello 3 ---
[rII,~] = size(Index);
if rII > 0
for II = 1:rII
if Number_Loc_S(i,j) > 5 && RQ_Loc_S(i,j) > 0.92 ||...
Number_Loc_S(i,j) > 5 && Number_Loc_S(Index(II,1),Index(II,2)) > 5 && Casi == 2 ||...
RQ_Loc_S(i,j) > 0.92 && RQ_Loc_S(Index(II,1),Index(II,2)) > 0.92 && Casi == 2 ||...
Casi > 2 % --- Livello 4 ---
if Number_Loc_S(i,j) > 5 && RQ_Loc_S(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level_Local_Storico(i,j) = 5;
else
Level_Local_Storico(i,j) = 4;
end
else
Level_Local_Storico(i,j) = 3;
end
end
else
if Number_Loc_S(i,j) > 5 && RQ_Loc_S(i,j) > 0.92 || Casi > 2 % --- Livello 4 ---
if Number_Loc_S(i,j) > 5 && RQ_Loc_S(i,j) > 0.92 && Casi >= 2
% --- Livello 5 ---
Level_Local_Storico(i,j) = 5;
else
Level_Local_Storico(i,j) = 4;
end
else
Level_Local_Storico(i,j) = 3;
end
end
else
Level_Local_Storico(i,j) = 2;
end
end
end
end
end
end
else
Level_Storico = 0;
Level_Local_Storico = 0;
end
Data_Text = [];
% A partire dal site ID, risalgo al Nome del sito
comando = ['select name from sites where id like ''' siteID ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Sito = char(curs.Data);
%% Mail di Livello 5
[rLV5,cLV5] = find(Level==5);
[rLV5_S,cLV5_S] = find(Level_Storico==5);
[rLV5_Loc,cLV5_Loc] = find(Level_Local==5);
[rLV5_Loc_S,cLV5_Loc_S] = find(Level_Local_Storico==5);
nC = 1;
nCS = 1;
nF = 1;
nFS = 1;
nW = 1;
D = 1;
nA = 1; % Contatore Allegati
nACL = 1;
nACLS = 1;
message_LV5 = [];
% --- Cumulati ---
if isempty(rLV5) ~= 1 || isempty(rLV5_S) ~= 1
[dim,~] = size(rLV5);
[dim_S,~] = size(rLV5_S);
message_LV5_Cliente{nC,1} = 'Gentile Cliente,';
message_LV5_Cliente{nC+1,1} = 'Il Software di elaborazione automatica Tilt ha rilevato un trend di spostamenti potenzialmente critico, la cui evoluzione ha attivato il Metodo di stima del Tempo di Collasso del versante monitorato: ';
message_LV5_Cliente{nC+2,1} = ['- Sito: ' Sito];
message_LV5_Cliente{nC+3,1} = ['- Centralina: ' IDcentralina];
message_LV5_Cliente{nC+4,1} = ['- Catena: ' DTcatena];
message_LV5_Cliente_ENG{nC,1} = 'Dear Client,';
message_LV5_Cliente_ENG{nC+1,1} = 'The automatic software Tilt has detected a potentially critical displacement trend, which triggered the activation of a Failure Forecasting Model in order to estimate the collapse date of the monitored slope: ';
message_LV5_Cliente_ENG{nC+2,1} = ['- Site: ' Sito];
message_LV5_Cliente_ENG{nC+3,1} = ['- Data Logger: ' IDcentralina];
message_LV5_Cliente_ENG{nC+4,1} = ['- Array: ' DTcatena];
message_LV5_Cliente_ENG(nC:nC+4,2) = message_LV5_Cliente(nC:nC+4,1); % Prima colonna - Criterio Real Time, Seconda Colonna - Criterio Storico
nC = nC+5;
if dim ~= 0 % Criterio Real Time
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV5(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV5(I),3)));
data = datestr(DataFuK(rLV5(I),cLV5(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_mail(rLV5(I),cLV5(I))+Date(rLV5(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
% --- Mail ASE ---
Collasso_Inf = datestr(Tr_Inf(rLV5(I),cLV5(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup(rLV5(I),cLV5(I)),'dd-mm-yyyy HH:MM');
message_LV5{nW,1} = ['ALLARME sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' m, centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK(rLV5(I),cLV5(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK(rLV5(I),cLV5(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK(rLV5(I),cLV5(I));
D = D+1;
nW = nW+1;
nA = nA+2;
% --- Mail Cliente ---
message_LV5_Cliente{nC,1} = '';
message_LV5_Cliente{nC+1,1} = '- Tipologia dati: spostamenti cumulati';
message_LV5_Cliente{nC+2,1} = ['- Nodo e Profondita'': ' NodeNum ', ' Depth ' m'];
message_LV5_Cliente_ENG{nC,1} = '';
message_LV5_Cliente_ENG{nC+1,1} = '- Data Typology: cumulative displacements';
message_LV5_Cliente_ENG{nC+2,1} = ['- Node Typology and Depth: ' NodeNum ', ' Depth 'm'];
Finestra_RealTime(nF,1) = Tr_Inf(rLV5(I),cLV5(I)); % Colonna 1: Limite inferiore
Finestra_RealTime(nF,2) = Tr_Sup(rLV5(I),cLV5(I)); % Colonna 2: Limite superiore
Finestra_RealTime(nF,3) = DataFuK(rLV5(I),cLV5(I)); % Colonna 3: Data di inizio accelerazione
allegati_cliente{nACL,1} = filename;
allegati_cliente{nACL+1,1} = filename2;
nF = nF+1;
nC = nC+3;
nACL = nACL+2;
end
text = ['Alarm of Level #5 activated by IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV5_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV5_S(I),3)));
data = datestr(DataFuK_S(rLV5_S(I),cLV5_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_S(rLV5_S(I),cLV5_S(I))+DateGiorno(rLV5_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
% --- Mail ASE ---
Collasso_Inf = datestr(Tr_Inf_S(rLV5_S(I),cLV5_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_S(rLV5_S(I),cLV5_S(I)),'dd-mm-yyyy HH:MM');
message_LV5{nW,1} = ['ALLARME sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK_S(rLV5_S(I),cLV5_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_S(rLV5_S(I),cLV5_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_S(rLV5_S(I),cLV5_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
% --- Mail Cliente ---
message_LV5_Cliente{nCS,2} = '';
message_LV5_Cliente{nCS+1,2} = '- Tipologia dati: spostamenti cumulati';
message_LV5_Cliente{nCS+2,2} = ['- Nodo e Profondita'': ' NodeNum ', ' Depth 'm'];
message_LV5_Cliente_ENG{nCS,2} = '';
message_LV5_Cliente_ENG{nCS+1,2} = '- Data Typology: cumulative displacements';
message_LV5_Cliente_ENG{nCS+2,2} = ['- Node Typology and Depth: ' NodeNum ', ' Depth 'm'];
Finestra_Storico(nFS,1)= Tr_Inf_S(rLV5_S(I),cLV5_S(I));
Finestra_Storico(nFS,2)= Tr_Sup_S(rLV5_S(I),cLV5_S(I));
Finestra_Storico(nFS,3) = DataFuK_S(rLV5_S(I),cLV5_S(I)); % Colonna 3: Data di inizio accelerazione
allegati_cliente{nACLS,1} = filename;
allegati_cliente{nACLS+1,1} = filename2;
nFS = nFS+1;
nCS = nCS+3;
nACLS = nACLS+2;
end
text = ['Alarm of Level #5 activated by Daily IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
else
message_LV5_Cliente = [];
end
% --- Locali ---
if isempty(rLV5_Loc) ~= 1 || isempty(rLV5_Loc_S) ~= 1 % Criterio Locale
if isempty(message_LV5_Cliente) == 1
message_LV5_Cliente{nC,1} = 'Gentile Cliente,';
message_LV5_Cliente{nC+1,1} = 'Il Software di elaborazione automatica Tilt ha rilevato un trend di spostamenti potenzialmente critico, la cui evoluzione ha attivato il Metodo di stima del Tempo di Collasso del versante monitorato: ';
message_LV5_Cliente{nC+2,1} = ['- Sito: ' Sito];
message_LV5_Cliente{nC+3,1} = ['- Centralina: ' IDcentralina];
message_LV5_Cliente{nC+4,1} = ['- Catena: ' DTcatena];
message_LV5_Cliente_ENG{nC,1} = 'Dear Client,';
message_LV5_Cliente_ENG{nC+1,1} = 'The automatic software Tilt has detected a potentially critical displacement trend, which triggered the activation of a Failure Forecasting Model in order to estimate the collapse date of the monitored slope: ';
message_LV5_Cliente_ENG{nC+2,1} = ['- Site: ' Sito];
message_LV5_Cliente_ENG{nC+3,1} = ['- Data Logger: ' IDcentralina];
message_LV5_Cliente_ENG{nC+4,1} = ['- Array: ' DTcatena];
message_LV5_Cliente_ENG(nC:nC+4,2) = message_LV5_Cliente(nC:nC+4,1); % Prima colonna - Criterio Real Time, Seconda Colonna - Criterio Storico
nC = nC+5;
end
[dim,~] = size(rLV5_Loc);
if dim ~= 0
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV5_Loc(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV5_Loc(I),3)));
data = datestr(DataFuK_local(rLV5_Loc(I),cLV5_Loc(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_mail(rLV5_Loc(I),cLV5_Loc(I))+Date(rLV5_Loc(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
% --- Mail ASE ---
Collasso_Inf = datestr(Tr_Inf_Loc(rLV5_Loc(I),cLV5_Loc(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_Loc(rLV5_Loc(I),cLV5_Loc(I)),'dd-mm-yyyy HH:MM');
message_LV5{nW,1} = ['ALLARME sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK_local(rLV5_Loc(I),cLV5_Loc(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local(rLV5_Loc(I),cLV5_Loc(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local(rLV5_Loc(I),cLV5_Loc(I));
D = D+1;
nW = nW+1;
nA = nA+2;
% --- Mail Cliente ---
message_LV5_Cliente{nC,1} = '';
message_LV5_Cliente{nC+1,1} = '- Tipologia dati: spostamenti locali';
message_LV5_Cliente{nC+2,1} = ['- Nodo e Profondita'': ' NodeNum ', ' Depth ' m'];
message_LV5_Cliente_ENG{nC,1} = '';
message_LV5_Cliente_ENG{nC+1,1} = '- Data Typology: local displacements';
message_LV5_Cliente_ENG{nC+2,1} = ['- Node Typology and Depth: ' NodeNum ', ' Depth ' m'];
Finestra_RealTime(nF,1) = Tr_Inf_Loc(rLV5_Loc(I),cLV5_Loc(I));
Finestra_RealTime(nF,2) = Tr_Sup_Loc(rLV5_Loc(I),cLV5_Loc(I));
Finestra_RealTime(nF,3) = DataFuK_local(rLV5_Loc(I),cLV5_Loc(I));
allegati_cliente{nACL,1} = filename;
allegati_cliente{nACL+1,1} = filename2;
nF = nF+1;
nC = nC+3;
nACL = nACL+2;
end
text = ['Alarm of Level #5 activated for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
[dim_S,~] = size(rLV5_Loc_S);
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV5_Loc_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV5_Loc_S(I),3)));
data = datestr(DataFuK_local_S(rLV5_Loc_S(I),cLV5_Loc_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_S(rLV5_Loc_S(I),cLV5_Loc_S(I))+DateGiorno(rLV5_Loc_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
% --- Mail ASE ---
Collasso_Inf = datestr(Tr_Loc_Inf_S(rLV5_Loc_S(I),cLV5_Loc_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Loc_Sup_S(rLV5_Loc_S(I),cLV5_Loc_S(I)),'dd-mm-yyyy HH:MM');
message_LV5{nW,1} = ['ALLARME sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK_local_S(rLV5_Loc_S(I),cLV5_Loc_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local_S(rLV5_Loc_S(I),cLV5_Loc_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local_S(rLV5_Loc_S(I),cLV5_Loc_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
% --- Mail Cliente ---
message_LV5_Cliente{nCS,1} = '';
message_LV5_Cliente{nCS+1,2} = '- Tipologia dati: spostamenti locali';
message_LV5_Cliente{nCS+2,2} = ['- Nodo e Profondita'': ' NodeNum ', ' Depth ' m'];
message_LV5_Cliente_ENG{nCS,2} = '';
message_LV5_Cliente_ENG{nCS+1,2} = '- Data Typology: local displacements';
message_LV5_Cliente_ENG{nCS+2,2} = ['- Node Typology and Depth: ' NodeNum ', ' Depth ' m'];
Finestra_Storico(nFS,1) = Tr_Loc_Inf_S(rLV5_Loc_S(I),cLV5_Loc_S(I));
Finestra_Storico(nFS,2) = Tr_Loc_Sup_S(rLV5_Loc_S(I),cLV5_Loc_S(I));
Finestra_Storico(nFS,3) = DataFuK_local_S(rLV5_Loc_S(I),cLV5_Loc_S(I));
allegati_cliente{nACLS,1} = filename;
allegati_cliente{nACLS+1,1} = filename2;
nFS = nFS+1;
nCS = nCS+3;
nACLS = nACLS+2;
end
text = ['Alarm of Level #5 activated by Daily IVM analysis for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
%% Mail di Livello 4
[rLV4,cLV4] = find(Level==4);
[rLV4_S,cLV4_S] = find(Level_Storico==4);
[rLV4_Loc,cLV4_Loc] = find(Level_Local==4);
[rLV4_Loc_S,cLV4_Loc_S] = find(Level_Local_Storico==4);
message_LV4 = [];
% --- Cumulati ---
if isempty(rLV4) ~= 1 || isempty(rLV4_S) ~= 1
message_LV4_Cliente{1,1} = 'Gentile Cliente,';
message_LV4_Cliente{2,1} = '';
message_LV4_Cliente{3,1} = 'Il Software di elaborazione automatica Tilt ha rilevato un progressivo aumento delle accelerazioni degli spostamenti relativamente al versante monitorato: ';
message_LV4_Cliente{4,1} = ['- Sito: ' Sito];
message_LV4_Cliente{5,1} = ['- Centralina: ' IDcentralina];
message_LV4_Cliente{6,1} = ['- Catena: ' DTcatena];
message_LV4_Cliente{7,1} = '';
message_LV4_Cliente_ENG{1,1} = 'Dear Client,';
message_LV4_Cliente_ENG{2,1} = '';
message_LV4_Cliente_ENG{3,1} = 'The automatic software Tilt has detected an increment of the displacements acceleration recorded on the monitored slope: ';
message_LV4_Cliente_ENG{4,1} = ['- Site: ' Sito];
message_LV4_Cliente_ENG{5,1} = ['- Data Logger: ' IDcentralina];
message_LV4_Cliente_ENG{6,1} = ['- Array: ' DTcatena];
message_LV4_Cliente_ENG{7,1} = '';
[dim,~] = size(rLV4);
[dim_S,~] = size(rLV4_S);
if dim ~= 0 % Criterio Real Time
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV4(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV4(I),3)));
data = datestr(DataFuK(rLV4(I),cLV4(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_mail(rLV4(I),cLV4(I))+Date(rLV4(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
% --- Mail ASE ---
Collasso_Inf = datestr(Tr_Inf(rLV4(I),cLV4(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup(rLV4(I),cLV4(I)),'dd-mm-yyyy HH:MM');
message_LV4{nW,1} = ['Pre-Allarme sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK(rLV4(I),cLV4(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK(rLV4(I),cLV4(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK(rLV4(I),cLV4(I));
D = D+1;
nW = nW+1;
nA = nA+2;
% --- Mail Cliente ---
end
text = ['Alarm of Level #4 activated by IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV4_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV4_S(I),3)));
data = datestr(DataFuK_S(rLV4_S(I),cLV4_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_S(rLV4_S(I),cLV4_S(I))+DateGiorno(rLV4_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
% --- Mail ASE ---
Collasso_Inf = datestr(Tr_Inf_S(rLV4_S(I),cLV4_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_S(rLV4_S(I),cLV4_S(I)),'dd-mm-yyyy HH:MM');
message_LV4{nW,1} = ['Pre-Allarme sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK_S(rLV4_S(I),cLV4_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_S(rLV4_S(I),cLV4_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_S(rLV4_S(I),cLV4_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
% --- Mail Cliente ---
end
text = ['Alarm of Level #4 activated by Daily IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
else
message_LV4_Cliente = [];
end
% --- Locali ---
if isempty(rLV4_Loc) ~= 1 || isempty(rLV4_Loc_S) ~= 1 % Criterio Real Time
if isempty(message_LV4_Cliente) == 1
message_LV4_Cliente{1,1} = 'Gentile Cliente,';
message_LV4_Cliente{2,1} = 'Il Software di elaborazione automatica Tilt ha rilevato un progressivo aumento delle accelerazioni degli spostamenti relativamente al versante monitorato: ';
message_LV4_Cliente{3,1} = ['- Sito: ' Sito];
message_LV4_Cliente{4,1} = ['- Centralina: ' IDcentralina];
message_LV4_Cliente{5,1} = ['- Catena: ' DTcatena];
message_LV4_Cliente_ENG{1,1} = 'Dear Client,';
message_LV4_Cliente_ENG{2,1} = 'The automatic software Tilt has detected an increment of the displacements acceleration recorded on the monitored slope: ';
message_LV4_Cliente_ENG{3,1} = ['- Site: ' Sito];
message_LV4_Cliente_ENG{4,1} = ['- Data Logger: ' IDcentralina];
message_LV4_Cliente_ENG{5,1} = ['- Array: ' DTcatena];
end
[dim,~] = size(rLV4_Loc);
if dim ~= 0
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV4_Loc(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV4_Loc(I),3)));
data = datestr(DataFuK_local(rLV4_Loc(I),cLV4_Loc(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_mail(rLV4_Loc(I),cLV4_Loc(I))+Date(rLV4_Loc(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf_Loc(rLV4_Loc(I),cLV4_Loc(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_Loc(rLV4_Loc(I),cLV4_Loc(I)),'dd-mm-yyyy HH:MM');
message_LV4{nW,1} = ['Pre-Allarme sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK_local(rLV4_Loc(I),cLV4_Loc(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local(rLV4_Loc(I),cLV4_Loc(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local(rLV4_Loc(I),cLV4_Loc(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #4 activated for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
[dim_S,~] = size(rLV4_Loc_S);
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV4_Loc_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV4_Loc_S(I),3)));
data = datestr(DataFuK_local_S(rLV4_Loc_S(I),cLV4_Loc_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_S(rLV4_Loc_S(I),cLV4_Loc_S(I))+DateGiorno(rLV4_Loc_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Loc_Inf_S(rLV4_Loc_S(I),cLV4_Loc_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Loc_Sup_S(rLV4_Loc_S(I),cLV4_Loc_S(I)),'dd-mm-yyyy HH:MM');
message_LV4{nW,1} = ['Pre-Allarme sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'];
Data_Img = datestr(DataFuK_local_S(rLV4_Loc_S(I),cLV4_Loc_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local_S(rLV4_Loc_S(I),cLV4_Loc_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local_S(rLV4_Loc_S(I),cLV4_Loc_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #4 activated by Daily IVM analysis for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
%% Mail di Livello 3
[rLV3,cLV3] = find(Level==3);
[rLV3_S,cLV3_S] = find(Level_Storico==3);
[rLV3_Loc,cLV3_Loc] = find(Level_Local==3);
[rLV3_Loc_S,cLV3_Loc_S] = find(Level_Local_Storico==3);
message_LV3 = [];
nW = 1;
% --- Cumulati ---
if isempty(rLV3) ~= 1 || isempty(rLV3_S) ~= 1
[dim,~] = size(rLV3);
[dim_S,~] = size(rLV3_S);
if dim ~= 0 % Criterio Real Time
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV3(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV3(I),3)));
data = datestr(DataFuK(rLV3(I),cLV3(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_mail(rLV3(I),cLV3(I))+Date(rLV3(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf(rLV3(I),cLV3(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup(rLV3(I),cLV3(I)),'dd-mm-yyyy HH:MM');
message_LV3{nW,1} = ['Allerta di Livello 3 sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK(rLV3(I),cLV3(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK(rLV3(I),cLV3(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK(rLV3(I),cLV3(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #3 activated by IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV3_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV3_S(I),3)));
data = datestr(DataFuK_S(rLV3_S(I),cLV3_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_S(rLV3_S(I),cLV3_S(I))+DateGiorno(rLV3_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf_S(rLV3_S(I),cLV3_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_S(rLV3_S(I),cLV3_S(I)),'dd-mm-yyyy HH:MM');
message_LV3{nW,1} = ['Allerta di Livello 3 sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK_S(rLV3_S(I),cLV3_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_S(rLV3_S(I),cLV3_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_S(rLV3_S(I),cLV3_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #3 activated by Daily IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
% --- Locali ---
if isempty(rLV3_Loc) ~= 1 || isempty(rLV3_Loc_S) ~= 1
[dim,~] = size(rLV3_Loc);
if dim ~= 0 % Criterio Real Time
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV3_Loc(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV3_Loc(I),3)));
data = datestr(DataFuK_local(rLV3_Loc(I),cLV3_Loc(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_mail(rLV3_Loc(I),cLV3_Loc(I))+Date(rLV3_Loc(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf_Loc(rLV3_Loc(I),cLV3_Loc(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_Loc(rLV3_Loc(I),cLV3_Loc(I)),'dd-mm-yyyy HH:MM');
message_LV3{nW,1} = ['Allerta di Livello 3 sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK_local(rLV3_Loc(I),cLV3_Loc(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local(rLV3_Loc(I),cLV3_Loc(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local(rLV3_Loc(I),cLV3_Loc(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #3 activated for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
[dim_S,~] = size(rLV3_Loc_S); % Criterio Storico
if dim_S ~= 0
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV3_Loc_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV3_Loc_S(I),3)));
data = datestr(DataFuK_local_S(rLV3_Loc_S(I),cLV3_Loc_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_S(rLV3_Loc_S(I),cLV3_Loc_S(I))+DateGiorno(rLV3_Loc_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Loc_Inf_S(rLV3_Loc_S(I),cLV3_Loc_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Loc_Sup_S(rLV3_Loc_S(I),cLV3_Loc_S(I)),'dd-mm-yyyy HH:MM');
message_LV3{nW,1} = ['Allerta di Livello 3 sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''. '''];
Data_Img = datestr(DataFuK_local_S(rLV3_Loc_S(I),cLV3_Loc_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local_S(rLV3_Loc_S(I),cLV3_Loc_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local_S(rLV3_Loc_S(I),cLV3_Loc_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #3 activated by Daily IVM analysis for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
%% Mail di Livello 2
[rLV2,cLV2] = find(Level==2);
[rLV2_S,cLV2_S] = find(Level_Storico==2);
[rLV2_Loc,cLV2_Loc] = find(Level_Local==2);
[rLV2_Loc_S,cLV2_Loc_S] = find(Level_Local_Storico==2);
message_LV2 = [];
nW = 1;
% --- Cumulati ---
if isempty(rLV2) ~= 1 || isempty(rLV2_S) ~= 1
[dim,~] = size(rLV2);
[dim_S,~] = size(rLV2_S);
if dim ~= 0 % Criterio Real Time
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV2(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV2(I),3)));
data = datestr(DataFuK(rLV2(I),cLV2(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_mail(rLV2(I),cLV2(I))+Date(rLV2(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf(rLV2(I),cLV2(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup(rLV2(I),cLV2(I)),'dd-mm-yyyy HH:MM');
message_LV2{nW,1} = ['Allerta di Livello 2 sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK(rLV2(I),cLV2(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK(rLV2(I),cLV2(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK(rLV2(I),cLV2(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #2 activated by IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV2_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV2_S(I),3)));
data = datestr(DataFuK_S(rLV2_S(I),cLV2_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_S(rLV2_S(I),cLV2_S(I))+DateGiorno(rLV2_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf_S(rLV2_S(I),cLV2_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_S(rLV2_S(I),cLV2_S(I)),'dd-mm-yyyy HH:MM');
message_LV2{nW,1} = ['Allerta di Livello 2 sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK_S(rLV2_S(I),cLV2_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_S(rLV2_S(I),cLV2_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_S(rLV2_S(I),cLV2_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #2 activated by Daily IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
% --- Locali ---
if isempty(rLV2_Loc) ~= 1 || isempty(rLV2_Loc_S) ~= 1
[dim,~] = size(rLV2_Loc);
if dim ~= 0
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV2_Loc(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV2_Loc(I),3)));
data = datestr(DataFuK_local(rLV2_Loc(I),cLV2_Loc(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_mail(rLV2_Loc(I),cLV2_Loc(I))+Date(rLV2_Loc(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Inf_Loc(rLV2_Loc(I),cLV2_Loc(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Sup_Loc(rLV2_Loc(I),cLV2_Loc(I)),'dd-mm-yyyy HH:MM');
message_LV2{nW,1} = ['Allerta di Livello 2 sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo dell''Inverso della Velocita''. '''];
Data_Img = datestr(DataFuK_local(rLV2_Loc(I),cLV2_Loc(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local(rLV2_Loc(I),cLV2_Loc(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local(rLV2_Loc(I),cLV2_Loc(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #2 activated for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
[dim_S,~] = size(rLV2_Loc_S);
if dim_S ~= 0
for I = 1:dim_S
NodeNum = num2str(cell2mat(NodoTilt(cLV2_Loc_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV2_Loc_S(I),3)));
data = datestr(DataFuK_local_S(rLV2_Loc_S(I),cLV2_Loc_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_S(rLV2_Loc_S(I),cLV2_Loc_S(I))+DateGiorno(rLV2_Loc_S(I),1);
if Data_Crollo-now >= 0 % Il dato <20> significativo solo se nel futuro
Collasso_Inf = datestr(Tr_Loc_Inf_S(rLV2_Loc_S(I),cLV2_Loc_S(I)),'dd-mm-yyyy HH:MM');
Collasso_Sup = datestr(Tr_Loc_Sup_S(rLV2_Loc_S(I),cLV2_Loc_S(I)),'dd-mm-yyyy HH:MM');
message_LV2{nW,1} = ['Allerta di Livello 2 sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Possibile collasso stimato nella finestra temporale tra ' Collasso_Inf...
' e ' Collasso_Sup ' ! Analisi eseguita con Metodo Storico dell''Inverso della Velocita''. '''];
Data_Img = datestr(DataFuK_local_S(rLV2_Loc_S(I),cLV2_Loc_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local_S(rLV2_Loc_S(I),cLV2_Loc_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local_S(rLV2_Loc_S(I),cLV2_Loc_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
end
text = ['Alarm of Level #2 activated by Daily IVM analysis for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
%% Mail di Livello 1.5
[rLV15,cLV15] = find(Level==1.5);
[rLV15_S,cLV15_S] = find(Level_Storico==1.5);
[rLV15_Loc,cLV15_Loc] = find(Level_Local==1.5);
[rLV15_Loc_S,cLV15_Loc_S] = find(Level_Local_Storico==1.5);
message_LV15 = [];
nW = 1;
% --- Cumulati ---
if isempty(rLV15) ~= 1 || isempty(rLV15_S) ~= 1
[dim,~] = size(rLV15);
[dim_S,~] = size(rLV15_S);
if dim ~= 0 % Criterio Real Time
for I = 1:dim
if DataFuK(rLV15(I),cLV15(I)) > A(1,1) || DataFuK(rLV15(I),cLV15(I)) > A(2,1)
NodeNum = num2str(cell2mat(NodoTilt(cLV15(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV15(I),3)));
data = datestr(DataFuK(rLV15(I),cLV15(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_mail(rLV15(I),cLV15(I))+Date(rLV15(I),1);
message_LV15{nW,1} = ['Falso Allarme per data di collasso nel passato sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Data di collasso stimata il ' datestr(Data_Crollo,'dd-mm-yyyy HH:MM')...
'. Analisi eseguita con Metodo dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK(rLV15(I),cLV15(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK(rLV15(I),cLV15(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel.jpg');
%%% REPORT DI ALLERTAMENTO %%%
DataNum = Number(rLV15(I),cLV15(I)); % numero punti nel dataset
LVL = 1.5; % livello raggiunto
TipoDisp = 2; % spostamenti cumulati
[checkALRPT,nomeALRPT_PDF] = AlertReport(IDcentralina,DTcatena,Sito,...
NodeNum,Depth,data,DataNum,LVL,TipoDisp,conn,FileName);
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK(rLV15(I),cLV15(I));
D = D+1;
nW = nW+1;
if checkALRPT == 1
attachments{nA+2,1} = nomeALRPT_PDF;
nA = nA+3;
else
nA = nA+2;
end
text = ['False Alarm for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
if dim_S ~= 0 % Criterio Storico
for I = 1:dim_S
if DataFuK_S(rLV15_S(I),cLV15_S(I)) > A(1,1) || DataFuK_S(rLV15_S(I),cLV15_S(I)) > A(2,1)
NodeNum = num2str(cell2mat(NodoTilt(cLV15_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV15_S(I),3)));
data = datestr(DataFuK_S(rLV15_S(I),cLV15_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_S(rLV15_S(I),cLV15_S(I))+DateGiorno(rLV15_S(I),1);
message_LV15{nW,1} = ['Falso Allarme per data di collasso nel passato sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Data di collasso stimata il ' datestr(Data_Crollo,'dd-mm-yyyy HH:MM')...
'. Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK_S(rLV15_S(I),cLV15_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_S(rLV15_S(I),cLV15_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_S(rLV15_S(I),cLV15_S(I));
D = D+1;
nW = nW+1;
nA = nA+2;
text = ['False Alarm activated by Daily IVM analysis for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
end
% --- Locali ---
if isempty(rLV15_Loc) ~= 1 || isempty(rLV15_Loc_S) ~= 1
[dim,~] = size(rLV15_Loc);
if dim ~= 0
for I = 1:dim
if DataFuK_local(rLV15_Loc(I),cLV15_Loc(I)) > A(1,1) || DataFuK_local(rLV15_Loc(I),cLV15_Loc(I)) > A(2,1)
NodeNum = num2str(cell2mat(NodoTilt(cLV15_Loc(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV15_Loc(I),3)));
data = datestr(DataFuK_local(rLV15_Loc(I),cLV15_Loc(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_mail(rLV15_Loc(I),cLV15_Loc(I))+Date(rLV15_Loc(I),1);
message_LV15{nW,1} = ['Falso Allarme per data di collasso nel passato sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Data di collasso stimata il ' datestr(Data_Crollo,'dd-mm-yyyy HH:MM')...
'. Analisi eseguita con Metodo dell''Inverso della Velocita''.'''];
Data_Img = datestr(DataFuK_local(rLV15_Loc(I),cLV15_Loc(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local(rLV15_Loc(I),cLV15_Loc(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
Data_Text(D,1) = DataFuK_local(rLV15_Loc(I),cLV15_Loc(I));
D = D+1;
nW = nW+1;
nA = nA+2;
text = ['False Alarm for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
[dim_S,~] = size(rLV15_Loc_S);
if dim_S ~= 0
for I = 1:dim_S
if DataFuK_local_S(rLV15_Loc_S(I),cLV15_Loc_S(I)) > A(1,1) || DataFuK_local_S(rLV15_Loc_S(I),cLV15_Loc_S(I)) > A(2,1)
NodeNum = num2str(cell2mat(NodoTilt(cLV15_Loc_S(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV15_Loc_S(I),3)));
data = datestr(DataFuK_local_S(rLV15_Loc_S(I),cLV15_Loc_S(I)),'dd-mm-yyyy HH:MM');
Data_Crollo = Tr_Loc_S(rLV15_Loc_S(I),cLV15_Loc_S(I))+DateGiorno(rLV15_Loc_S(I),1);
message_LV15{nW,1} = ['Falso Allarme per data di collasso nel passato sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Data di collasso stimata il ' datestr(Data_Crollo,'dd-mm-yyyy HH:MM')...
'. Analisi eseguita con Metodo Storico dell''Inverso della Velocita''. '''];
Data_Img = datestr(DataFuK_local_S(rLV15_Loc_S(I),cLV15_Loc_S(I)),'dd-mm-yyyy');
Tempo_Img = datestr(DataFuK_local_S(rLV15_Loc_S(I),cLV15_Loc_S(I)),'HH-MM-SS');
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Storico.jpg');
filename2 = strcat(IDcentralina,'-',DTcatena,'-Node_',NodeNum,'-',Data_Img,'_',Tempo_Img,'-Local_Vel_Storico.jpg');
attachments{nA,1} = filename;
attachments{nA+1,1} = filename2;
nW = nW+1;
nA = nA+2;
Data_Text(D,1) = DataFuK_local_S(rLV15_Loc_S(I),cLV15_Loc_S(I));
D = D+1;
text = ['False Alarm activated by Daily IVM analysis for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
end
%% Mail di Livello 1
[rLV1,cLV1] = find(Level==1);
[rLV1_Loc,cLV1_Loc] = find(Level_Local==1);
nW = 1;
message_LV1 = [];
% --- Cumulati ---
if isempty(rLV1) ~= 1
[dim,~] = size(rLV1);
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV1(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV1(I),3)));
data = datestr(Date(rLV1(I)-3,1),'dd-mm-yyyy HH:MM');
message_LV1{nW,1} = ['Allerta di Livello 1 sui dati cumulati del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '.'''];
nW = nW+1;
Data_Text(D,1) = Date(rLV1(I)-3,1);
D = D+1;
text = ['Alert of Level #1 activated for cumulated values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
% --- Locali ---
if isempty(rLV1_Loc) ~= 1
[dim,~] = size(rLV1_Loc);
for I = 1:dim
NodeNum = num2str(cell2mat(NodoTilt(cLV1_Loc(I),2)));
Depth = num2str(cell2mat(NodoTilt(cLV1_Loc(I),3)));
data = datestr(Date(rLV1_Loc(I)-3,1),'dd-mm-yyyy HH:MM');
message_LV1{nW,1} = ['Allerta di Livello 1 sui dati locali del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '.'''];
nW = nW+1;
Data_Text(D,1) = Date(rLV1_Loc(I)-3,1);
D = D+1;
text = ['Alert of Level #1 activated for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
%% Mail Celle Elettrolitiche
[rHR_Loc,cHR_Loc] = size(Tr_Loc_HR);
nW = 1;
message_HR = [];
if isempty(find(Tr_Loc_HR)) ~= 0 % Criterio Real Time
for i=1:rHR_Loc
for j=1:cHR_Loc
if Tr_Loc_HR(i,j) > 0
NodeNum = num2str(cell2mat(NodoTiltHR(j,2)));
Depth = num2str(cell2mat(NodoTiltHR(j,3)));
data = datestr(DataFuK_local_HR(i,j,'dd-mm-yyyy HH:MM'));
message_HR{nW,1} = ['ALLARME sui dati locali del sensore elettrolitico del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Analisi eseguita con Metodo dell''Inverso della Velocita''.'''];
nW = nW+1;
text = ['Alert on Electrolytic Cell data activated for local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
end
[rHR_Loc_S,cHR_Loc_S] = size(Tr_Loc_HR_S);
if isempty(find(Tr_Loc_HR_S)) ~= 0 % Criterio Storico
for i=1:rHR_Loc_S
for j=1:cHR_Loc_S
if Tr_Loc_HR_S(i,j) > 0
NodeNum = num2str(cell2mat(NodoTiltHR(j,2)));
Depth = num2str(cell2mat(NodoTiltHR(j,3)));
data = datestr(DataFuK_local_HR_S(i,j,'dd-mm-yyyy HH:MM'));
message_HR{nW,1} = ['ALLARME sui dati locali del sensore elettrolitico del nodo numero ' NodeNum...
' alla profondita'' di ' Depth ' della centralina ' IDcentralina...
', catena ' DTcatena ' nel sito di ' Sito '. Possibile inizio dell''accelerazione in data ' ...
data '. Analisi eseguita con Metodo Storico dell''Inverso della Velocita''.'''];
nW = nW+1;
text = ['Alert on Electrolytic Cell data activated for Daily analysis of local values of node ' NodeNum ' with acceleration date equal to ' data '.'];
fprintf(fileID,fmt,text);
end
end
end
end
%% Email
setpref('Internet','E_mail','alert@aseltd.eu');
setpref('Internet','SMTP_Server','smtps.aruba.it');
setpref('Internet','SMTP_Username','alert@aseltd.eu');
setpref('Internet','SMTP_Password','Ase#2013!20@bat');
props=java.lang.System.getProperties;
pp=props.setProperty('mail.smtp.auth','true'); %#ok
pp=props.setProperty('mail.smtp.socketFactory.class','javax.net.ssl.SSLSocketFactory'); %#ok
pp=props.setProperty('mail.smtp.socketFactory.port','465'); %#ok
% --- Mail ASE ---
recipients = cell(5,1);
recipients{1,1} = 'andrea.carri@aseltd.eu';
recipients{2,1} = 'alessandro.valletta@aseltd.eu';
recipients{3,1} = 'roberto.savi@aseltd.eu';
recipients{4,1} = 'andrea.segalini@aseltd.eu';
recipients{5,1} = 'luca.chiapponi@aseltd.eu';
if isempty(message_LV5) == 0
subject = 'ALLARME di Livello 5!';
elseif isempty(message_LV4) == 0
subject = 'Pre-Allarme di Livello 4!';
elseif isempty(message_LV3) == 0
subject = 'Allerta di Livello 3!';
elseif isempty(message_LV2) == 0
subject = 'Allerta di Livello 2!';
elseif isempty(message_LV15) == 0
subject = 'Falso Allarme';
elseif isempty(message_LV1) == 0
subject = 'Allerta di Livello 1';
end
message = [];
attiva = 0;
if isempty(message_LV5) == 0
message = [message; message_LV5];
attiva = 5;
end
if isempty(message_LV4) == 0
message = [message; message_LV4];
if attiva == 0
attiva = 4;
end
end
if isempty(message_LV3) == 0
message = [message; message_LV3];
if attiva == 0
attiva = 3;
end
end
if isempty(message_LV2) == 0
message = [message; message_LV2];
if attiva == 0
attiva = 2;
end
end
if isempty(message_LV15) == 0
message = [message; message_LV15];
if attiva == 0
attiva = 1.5;
end
end
if isempty(message_LV1) == 0
message = [message; message_LV1];
if attiva == 0
attiva = 1;
end
end
if isempty(message_HR) == 0
message = [message; message_HR];
end
% Parte di email ad ASE e SMS
fileID = fopen(FileName,'a');
fmt = '%s \r';
Data_LV5 = [];
if attiva == 5
sendmail(recipients(1:5), subject, message, attachments)
text = 'Email of Level 5 sent.';
fprintf(fileID,fmt,text);
Criterio = 'Fukuzono';
Data_LV5 = now;
if sms == 1
if now > A(4,1)+1 % SMS se si <20> superato di 24 h la data di invio dell'ultimo SMS
fclose(fileID);
SMS(IDcentralina,DTcatena,Sito,Users_SMS,Criterio,FileName);
end
end
elseif attiva == 4
sendmail(recipients(1:4), subject, message, attachments)
text = 'Email of Level 4 sent.';
fprintf(fileID,fmt,text);
elseif attiva == 3
sendmail(recipients(1:3), subject, message, attachments)
text = 'Email of Level 3 sent.';
fprintf(fileID,fmt,text);
elseif attiva == 2 || attiva == 1.5
sendmail(recipients(1:2), subject, message, attachments)
text = 'Email of Level 1.5 or 2 sent.';
fprintf(fileID,fmt,text);
elseif attiva == 1
sendmail(recipients(1:2), subject, message)
text = 'Email of Level 1 sent.';
fprintf(fileID,fmt,text);
end
% Parte di Email al cliente
if Mail == 1
recipients_ITA = cell(1);
recipients_ENG = cell(1);
% A chi mando la mail
nI = 1;
nE = 1;
[rU,cU] = size(Users_Alert);
if ini_CoV <= rU
rU = ini_CoV;
end
if cU >1 % sono presenti utenti a cui inviare la mail
for i = 1:rU
if Users_Alert{i,4} == 2
recipients_ITA{nI,1} = Users_Alert(i,3);
nI = nI+1;
else
recipients_ENG{nE,1} = Users_Alert(i,3);
nE = nE+1;
end
end
end
% - Definisco la mail
if isempty(message_LV5_Cliente) ~= 1
codice_mail = 5;
elseif isempty(message_LV4_Cliente) ~= 1
codice_mail = 4;
else
codice_mail = 0;
end
if codice_mail >= 4
if codice_mail == 4
if activeIT == 1
subject_ITA = 'Allerta - Incremento delle accelerazioni rilevato!';
message_LV4_Cliente{8,1} = 'Si raccomanda di controllare con attenzione i prossimi dati in arrivo, consultabili nella nostra piattaforma web, in modo da seguire l''evoluzione del fenomeno in atto.';
message_LV4_Cliente{9,1} = '';
message_LV4_Cliente{10,1} = 'Cordiali saluti,';
message_LV4_Cliente{11,1} = 'il Team di ASE S.r.l.';
message_LV4_Cliente{12,1} = '';
message_LV4_Cliente{13,1} = 'Messaggio inviato automaticamente dal sistema di allertamento di ASE S.r.l.';
message_ITA = message_LV4_Cliente;
if now > A(1,1) + 1 && attiva == A(3,1) || attiva > A(3,1) % email a partire da 24 h dopo la precedente attivazione di uguale livello o solo se il livello <20> aumentato
sendmail(recipients_ITA, subject_ITA, message_ITA)
end
end
if activeEN == 1
subject_ENG = 'Alert - Accelerations increase detected!';
message_LV4_Cliente_ENG{8,1} = 'We recommend to carefully check the following monitoring data available through our web platform, in order to control the evolution of the ongoing event';
message_LV4_Cliente_ENG{9,1} = '';
message_LV4_Cliente_ENG{10,1} = 'Best regards,';
message_LV4_Cliente_ENG{11,1} = 'ASE Ltd Team';
message_LV4_Cliente_ENG{12,1} = '';
message_LV4_Cliente_ENG{13,1} = 'This is an automatic message sent by ASE Ltd Alert System.';
message_ENG = message_LV4_Cliente_ENG;
if now > A(1,1) + 1 && attiva == A(3,1) || attiva > A(3,1)
sendmail(recipients_ENG, subject_ENG, message_ENG)
end
end
elseif codice_mail == 5
Criterio = 'Fukuzono';
Data_LV5 = now;
if now > A(4,1)+1 % SMS se si <20> superato di 24 h la data di invio dell'ultimo SMS
fclose(fileID);
SMS(IDcentralina,DTcatena,Sito,Users_Alert,Criterio,FileName);
end
if activeIT == 1
subject_ITA = 'Allarme - Rilevata accelerazione potenzialmente critica!';
if isempty(char(message_LV5_Cliente{6,1})) == 1 % Ho solo il criterio storico
message_ITA = message_LV5_Cliente{:,2};
[rM,~] = size(message_ITA);
message_ITA{rM+1,1} = '';
message_ITA{rM+2,1} = ['Data di inizio accelerazione: ' datestr(min(Finestra_Storico(:,3)),'dd-mm-yyyy HH:MM')];
message_ITA{rM+3,1} = ['Possibile collasso stimato nella finestra compresa tra ' datestr(min(Finestra_Storico(:,1)),'dd-mm-yyyy HH:MM') ' e ' datestr(max(Finestra_Storico(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ITA{rM+4,1} = 'Stima eseguita con il Metodo dell''Inverso della Velocita'' - Dataset medio giornaliero';
elseif isempty(char(message_LV5_Cliente{6,2})) == 1 % Ho solo il criterio real time
message_ITA = message_LV5_Cliente{:,1};
[rM,~] = size(message_ITA);
message_ITA{rM+1,1} = '';
message_ITA{rM+2,1} = ['Data di inizio accelerazione: ' datestr(min(Finestra_RealTime(:,3)),'dd-mm-yyyy HH:MM')];
message_ITA{rM+3,1} = ['Possibile collasso stimato nella finestra compresa tra ' datestr(min(Finestra_RealTime(:,1)),'dd-mm-yyyy HH:MM') ' e ' datestr(max(Finestra_RealTime(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ITA{rM+4,1} = 'Stima eseguita con il Metodo dell''Inverso della Velocita'' ';
else % Ho entrambi
[rM,~] = size(message_LV5_Cliente);
for m = 6:rM
if isempty(message_LV5_Cliente{m,1}) == 1 && isempty(message_LV5_Cliente{m-1,1}) == 1
fine = m-2;
break
end
end
message_ITA{1:fine,1} = message_LV5_Cliente{m,1};
message_ITA{fine+1,1} = '';
message_ITA{fine+2,1} = ['Data di inizio accelerazione: ' datestr(min(Finestra_RealTime(:,3)),'dd-mm-yyyy HH:MM')];
message_ITA{fine+3,1} = ['Possibile collasso stimato nella finestra compresa tra ' datestr(min(Finestra_RealTime(:,1)),'dd-mm-yyyy HH:MM') ' e ' datestr(max(Finestra_RealTime(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ITA{fine+4,1} = 'Stima eseguita con il Metodo dell''Inverso della Velocita'' ';
message_ITA{fine+5,1} = '';
for m = 6:rM
if isempty(message_LV5_Cliente{m,2}) == 1 && isempty(message_LV5_Cliente{m-1,2}) == 1
fine = m-2;
break
end
end
message_ITA{fine+1,1} = ['Data di inizio accelerazione: ' datestr(min(Finestra_Storico(:,3)),'dd-mm-yyyy HH:MM')];
message_ITA{fine+2,1} = ['Possibile collasso stimato nella finestra compresa tra ' datestr(min(Finestra_Storico(:,1)),'dd-mm-yyyy HH:MM') ' e ' datestr(max(Finestra_Storico(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ITA{fine+3,1} = 'Stima eseguita con il Metodo dell''Inverso della Velocita'' - Dataset medio giornaliero';
message_ITA{fine+4,1} = '';
end
[rM,~] = size(message_ITA);
message_ITA{rM+1,1} = 'Si consiglia di seguire con la massima attenzione l''evoluzione del fenomeno in atto e, laddove si ritenga necessario, predisporre un sopralluogo in sito per accertare le condizioni del versante.';
message_ITA{rM+2,1} = 'Cordiali saluti, il Team di ASE S.r.l.';
message_ITA{rM+3,1} = 'Messaggio inviato automaticamente dal sistema di allertamento di ASE S.r.l.';
if strcmp(char(Users_Alert{i,5}),'EWS')
sendmail(recipients_ITA, subject_ITA, message_ITA, allegati_cliente)
elseif now > A(4,1)+1 % email a partire da 24 h dopo la precedente attivazione e solo se il livello <20> aumentato
sendmail(recipients_ITA, subject_ITA, message_ITA, allegati_cliente)
end
end
if activeEN == 1
subject_ENG = 'Alarm - potentially critical acceleration detected!';
if isempty(char(message_LV5_Cliente_ENG{6,1})) == 1 % Ho solo il criterio storico
message_ENG = message_LV5_Cliente_ENG{:,2};
[rM,~] = size(message_ENG);
message_ENG{rM+1,1} = '';
message_ENG{rM+2,1} = ['Onset-of-acceleration date: ' datestr(min(Finestra_Storico(:,3)),'dd-mm-yyyy HH:MM')];
message_ENG{rM+3,1} = ['Time of failure estimated in a time window between ' datestr(min(Finestra_Storico(:,1)),'dd-mm-yyyy HH:MM') ' and ' datestr(max(Finestra_Storico(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ENG{rM+4,1} = 'Analisys performed with Inverse Velocity Method - Daily average dataset ';
elseif isempty(char(message_LV5_Cliente_ENG{6,2})) == 1 % Ho solo il criterio real time
message_ENG = message_LV5_Cliente_ENG{:,1};
[rM,~] = size(message_ENG);
message_ENG{rM+1,1} = '';
message_ENG{rM+2,1} = ['Onset-of-acceleration date: ' datestr(min(Finestra_RealTime(:,3)),'dd-mm-yyyy HH:MM')];
message_ENG{rM+3,1} = ['Time of failure estimated in a time window between ' datestr(min(Finestra_RealTime(:,1)),'dd-mm-yyyy HH:MM') ' and ' datestr(max(Finestra_RealTime(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ENG{rM+4,1} = 'Analisys performed with Inverse Velocity Method ';
else % Ho entrambi
[rM,~] = size(message_LV5_Cliente_ENG);
for m = 6:rM
if isempty(message_LV5_Cliente_ENG{m,1}) == 1 && isempty(message_LV5_Cliente_ENG{m-1,1}) == 1
fine = m-2;
break
end
end
message_ENG{1:fine,1} = message_LV5_Cliente_ENG{m,1};
message_ENG{fine+1,1} = '';
message_ENG{fine+2,1} = ['Onset-of-acceleration date: ' datestr(min(Finestra_RealTime(:,3)),'dd-mm-yyyy HH:MM')];
message_ENG{fine+3,1} = ['Time of failure estimated in a time window between ' datestr(min(Finestra_RealTime(:,1)),'dd-mm-yyyy HH:MM') ' and ' datestr(max(Finestra_RealTime(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ENG{fine+4,1} = 'Analisys performed with Inverse Velocity Method ';
message_ENG{fine+5,1} = '';
for m = 6:rM
if isempty(message_LV5_Cliente_ENG{m,2}) == 1 && isempty(message_LV5_Cliente_ENG{m-1,2}) == 1
fine = m-2;
break
end
end
message_ENG{fine+1,1} = ['Onset-of-acceleration date: ' datestr(min(Finestra_Storico(:,3)),'dd-mm-yyyy HH:MM')];
message_ENG{fine+2,1} = ['Time of failure estimated in a time window between ' datestr(min(Finestra_Storico(:,1)),'dd-mm-yyyy HH:MM') ' and ' datestr(max(Finestra_Storico(:,2)),'dd-mm-yyyy HH:MM') ' '];
message_ENG{fine+3,1} = 'Analisys performed with Inverse Velocity Method - Daily average dataset ';
message_ENG{fine+4,1} = '';
end
[rM,~] = size(message_ENG);
message_ENG{rM+1,1} = 'We highly suggest to follow very closely the progressive evolution of the ongoing phenomenon and, if necessary, to arrange for an on-site investigation in order to assess the slope conditions. ';
message_ENG{rM+2,1} = 'Kind regards, the ASE Ltd Team';
message_ENG{rM+3,1} = 'This is an automatic message sent by ASE Ltd Alert System. ';
var = char(Users_Alert(i,5));
[~,cV] = size(var);
if cV > 2
if strcmp(var(1,1:3),'EWS')
sendmail(recipients_ENG, subject_ENG, message_ENG, allegati_cliente)
end
elseif now > A(4,1)+1 % email a partire da 24 h dopo la precedente attivazione e solo se il livello <20> aumentato
sendmail(recipients_ENG, subject_ENG, message_ENG, allegati_cliente)
end
end
end
end
end
DATA = max(Data_Text);
check = isempty(DATA);
if check == 1
DATA = A(1,1);
end
FileNameFuk = ['' IDcentralina '-' DTcatena '-Fuk.txt'];
outdat = fopen(FileNameFuk,'wt+');
fileID = fopen(FileNameFuk,'a');
fmt = '%.10f \r';
fprintf(fileID,fmt,DATA);
fmt = '%.10f \r';
if attiva > 1
fprintf(fileID,fmt,now);
else
fprintf(fileID,fmt,A(2,1));
end
fmt = '%.1f \r';
fprintf(fileID,fmt,attiva);
if isempty(Data_LV5) == 0
fmt = '%.10f \r';
fprintf(fileID,fmt,Data_LV5);
end
fclose(fileID);
end
fileID = fopen(FileName,'a');
text = 'Time_Of_Failure function worked correctly';
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end