function alert_Levels(rLL,rCrL,DatiLoad,DatiCrack,ARRAYdate_LL,ARRAYdate_CrL,...
    ErrLoadLink,~,NodoLoadLink,NodoCrackLink,IDcentralina,DTcatena,...
    sms,date,time,conn,FileName) 

fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'alert_Levels function started';
fprintf(fileID,fmt,text);
fclose(fileID);

alert = 0;
alarm = 0;
if strcmp(IDcentralina,'ID0081') && strcmp(DTcatena,'DT0009') % Varazze - Casanova - Via Fossello
    [numDate,~] = size(ARRAYdate_LL);
    indexALA = zeros(1,2);
    indexALE = zeros(1,2);
    cI = 1;
    cI2 = 1;
    for s = 1:rLL
        for n = 1:numDate
            if DatiLoad(n,s) > 588.4 % kN
                if ErrLoadLink(n,s) == 0 || ErrLoadLink(n,s) == 0.5 % Il nodo non � in errore
                    alarm = 1;
                    indexALA(cI,1) = n; % Data
                    indexALA(cI,2) = s; % sensore
                    cI = cI+1;
                end
%             elseif DatiLoad(n,s)-DatiLoad(n-1,s) > 0.3 % mm
%                 if ErrLoadLink(n,s) == 0 || ErrLoadLink(n,s) == 0.5 % Il nodo non � in errore
%                     alert = 1;
%                     indexALE(cI2,1) = n; % Data
%                     indexALE(cI2,2) = s; % fessurimetro
%                     cI2 = cI2+1;
%                 end
            end
        end
    end
elseif strcmp(IDcentralina,'ID0082') && strcmp(DTcatena,'DT0010') % Riva di Tures
    [numDate,~] = size(ARRAYdate_CrL);
    indexALA = zeros(1,2);
    indexALE = zeros(1,2);
    cI = 1;
    cI2 = 1;
    fuoriSoglia1 = zeros(numDate,rCrL); % Sensore 1 > 50 mm
    fuoriSoglia2 = zeros(numDate,rCrL); % Sensore 2 > 5 mm
    fuoriSoglia3 = zeros(numDate,rCrL); % Sensore 1 > 20 mm per 10 letture
    fuoriSoglia4 = zeros(numDate,rCrL); % Sensore 1 > 10 mm per 10 letture
    RIF = zeros(1,rCrL);
    for s = 1:rCrL
        NodeNumCrL = num2str(cell2mat(NodoCrackLink(s,2))); % scarico i dati del primo nodo Crack Link
        comando = ['select XShift from ElabDataView where EventDate = ''' ...
            date ''' and EventTime >= ''' time ''' and UnitName = ''' IDcentralina ...
            ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ' NodeNumCrL ' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        Data_LastElab = curs.Data;
        RIF(1,s) = cell2mat(Data_LastElab(1,1));
        for n = 1:numDate
            if DatiCrack(n,s) - RIF(1,s) > 50 % mm
                fuoriSoglia1(n,s) = 1;
            end
            if DatiCrack(n,s) - RIF(1,s) > 5 % mm
                fuoriSoglia2(n,s) = 1;
            end
            if n >= 10
                cont = 0;
                cont2 = 0;
                for aa = n-9:n
                    if DatiCrack(aa,s) - RIF(1,s) > 20 % mm
                        cont = cont+1;
                    end
                    if DatiCrack(aa,s) - RIF(1,s) > 10 % mm
                        cont2 = cont2+1;
                    end
                end
                if cont >= 10
                    fuoriSoglia3(n,s) = 1;
                end
                if cont2 >= 10
                    fuoriSoglia4(n,s) = 1;
                end
            end
        end
    end
    for s = 1:rCrL
        for n = 10:numDate
            if fuoriSoglia1(n,s) == 1
                if fuoriSoglia3(n,s) == 1
                    if s == 1
                        if fuoriSoglia2(n,2) == 1 || fuoriSoglia2(n,3) == 1 || fuoriSoglia2(n,4) == 1
                            alarm = 1;
                            indexALA(cI,1) = n; % Data
                            indexALA(cI,2) = s; % sensore
                            cI = cI+1;
                        end
                    elseif s == 2
                        if fuoriSoglia2(n,1) == 1 || fuoriSoglia2(n,3) == 1 || fuoriSoglia2(n,4) == 1
                            alarm = 1;
                            indexALA(cI,1) = n; % Data
                            indexALA(cI,2) = s; % sensore
                            cI = cI+1;
                        end
                    elseif s == 3
                        if fuoriSoglia2(n,1) == 1 || fuoriSoglia2(n,2) == 1 || fuoriSoglia2(n,4) == 1
                            alarm = 1;
                            indexALA(cI,1) = n; % Data
                            indexALA(cI,2) = s; % sensore
                            cI = cI+1;
                        end
                    elseif s == 4
                        if fuoriSoglia2(n,1) == 1 || fuoriSoglia2(n,2) == 1 || fuoriSoglia2(n,3) == 1
                            alarm = 1;
                            indexALA(cI,1) = n; % Data
                            indexALA(cI,2) = s; % sensore
                            cI = cI+1;
                        end
                    end
                end
            end
            if fuoriSoglia4(n,s) == 1
                alert = 1;
                indexALE(cI2,1) = n; % Data
                indexALE(cI2,2) = s; % sensore
                cI2 = cI2+1;
            end
        end
    end
end
                
if alert == 1 || alarm == 1
            
    %% Controllo la data
    if alarm == 1
        if strcmp(IDcentralina,'ID0081') && strcmp(DTcatena,'DT0009') % Varazze - Casanova - Via Fossello
            dateALA = ARRAYdate_LL(indexALA(:,1));
            nodeALA = NodoLoadLink(indexALA(:,2),2);
            valALA = round(DatiLoad(indexALA(:,1),indexALA(:,2)),2);
            desc = 'kN';
            sms = 1;
        elseif strcmp(IDcentralina,'ID0082') && strcmp(DTcatena,'DT0010') % Riva di Tures
            dateALA = ARRAYdate_CrL(indexALA(:,1));
            nodeALA = NodoCrackLink(indexALA(:,2),2);
            valALA = round(DatiCrack(indexALA(:,1),indexALA(:,2)),2);
            desc = 'mm';
            sms = 1;
        end
        DataALA = dateALA(end);
    end
    if alert == 1
        if strcmp(IDcentralina,'ID0081') && strcmp(DTcatena,'DT0009') % Varazze - Casanova - Via Fossello
           dateALE = ARRAYdate_LL(indexALE(:,1));
           nodeALE = NodoLoadLink(indexALE(:,2),2);
           valALE = round(DatiLoad(indexALA(:,1),indexALA(:,2)),2);
           desc = 'kN';
           sms = 0;
        elseif strcmp(IDcentralina,'ID0082') && strcmp(DTcatena,'DT0010') % Riva di Tures
            dateALE = ARRAYdate_CrL(indexALE(:,1));
            nodeALE = NodoCrackLink(indexALE(:,2),2);
            valALE = round(DatiCrack(indexALA(:,1),indexALA(:,2)),2);
            desc = 'mm';
            sms = 0;
        end
        DataALE = dateALE(end);
    end
    
    FileNameALA = ['' IDcentralina '-' DTcatena '-Alarm.txt'];
    if isfile(FileNameALA) == 1
        A = importdata(FileNameALA);
        [rA,~] = size(A);
        if rA == 0
            DataRifALE = 0;
            DataRifALA = 0;
        elseif rA == 1
            DataRifALA = A(1,1);
            DataRifALE = 0;
        else
            DataRifALA = A(1,1);
            DataRifALE = A(2,1);
        end
    else
        DataRifALE = 0;
        DataRifALA = 0;
    end
    DATA_rif = max(DataRifALA,DataRifALE); % Data della mail
    
    if alert == 1 || alarm == 1
        if alert == 1 && alarm == 1
            DATA = max(DataALA,DataALE);
            DataWriteALA = DataALA;
            DataWriteALE = DataALE;
        elseif alert == 1
            DATA = DataALE;
            DataWriteALE = DataALE;
            DataWriteALA = DataRifALA;
        elseif alarm == 1
            DATA = DataALA;
            DataWriteALA = DataALA;
            DataWriteALE = DataRifALE;
        end
        
        if DATA_rif >= DATA % Mail gi� inviata
            Mail = 0;
        else
            Mail = 1;
        end
    else
        DataWriteALA = DataRifALA;
        DataWriteALE = DataRifALE;
    end
    
    if Mail == 1
        allarme = 0;
        DATAinsert = cell(1,9);
        AL = 1;
        for ii = 1:cI-1 % numero di allarmi
            if DATA_rif < dateALA(ii) % Allarme non ancora uscito
                Data = datestr(dateALA(ii),'yyyy-mm-dd HH:MM:SS');
                Valore = valALA(ii);
                Nodo = cell2mat(nodeALA(ii));
                Livello = 2;
                DATAinsert{AL,1} = 3; % Soglie tradizionali
                DATAinsert{AL,2} = IDcentralina;
                DATAinsert{AL,3} = DTcatena;
                DATAinsert{AL,4} = Nodo;
                DATAinsert{AL,5} = Data;
                DATAinsert{AL,6} = Valore;
                DATAinsert{AL,7} = Livello;
                DATAinsert{AL,8} = sms;
                DATAinsert{AL,9} = desc;
                allarme = 1;
                AL = AL+1;
            end
        end
        for ii = 1:cI2-1 % numero di allerte
            if DATA_rif < dateALE(ii) % Allerta non ancora uscita
                Data = datestr(dateALE(ii),'yyyy-mm-dd HH:MM:SS');
                Valore = valALE(ii);
                Nodo = cell2mat(nodeALE(ii));
                Livello = 1;
                DATAinsert{AL,1} = 3; % Soglie tradizionali
                DATAinsert{AL,2} = IDcentralina;
                DATAinsert{AL,3} = DTcatena;
                DATAinsert{AL,4} = Nodo;
                DATAinsert{AL,5} = Data;
                DATAinsert{AL,6} = Valore;
                DATAinsert{AL,7} = Livello;
                DATAinsert{AL,8} = sms;
                DATAinsert{AL,9} = desc;
                allarme = 1;
                AL = AL+1;
            end
        end
        
        if allarme == 1
            AL = AL-1; % Numero totale di allarmi
            for a = 1:AL
                % Cerco se il dato � gi� presente
                Data = DATAinsert{a,5};
                nNodo = num2str(DATAinsert{a,4}); % Numero nodo
                type = num2str(DATAinsert{a,1}); % tipologia
                level = num2str(DATAinsert{a,7}); % livello allarme
                value = num2str(DATAinsert{a,6}); % Valore
                desc = DATAinsert{a,9}; % Descrizione
                comando = ['select id, type_id, date_time from alarms where unit_name = ''' ...
                    IDcentralina ''' and tool_name = ''' DTcatena ''' and node_num = ''' ...
                    nNodo ''' and date_time = ''' Data ''' and type_id = ''' type ...
                    ''' and alarm_level = ''' level ''' and registered_value = ''' value ...
                    ''' and description like ''' desc ''' order by date_time'];
                curs = exec(conn,comando);
                curs = fetch(curs);
                idDate = curs.Data;
                if  idDate == 0 || strcmp(idDate,'No Data') == 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','node_num','date_time',...
                    'registered_value','alarm_level','send_sms','description'};
                data = [DATAinsert(a,1),DATAinsert(a,2),DATAinsert(a,3),DATAinsert(a,4),...
                    DATAinsert(a,5),DATAinsert(a,6),DATAinsert(a,7),DATAinsert(a,8),DATAinsert(a,9)];
                if idElabData == 0 % Scrivo
                    fastinsert(conn,tablename,colnames,data);
                end                
            end
        end
        
        fileID = fopen(FileNameALA,'a');
        outdat = fopen(FileNameALA,'wt+');
        fmt = '%.10f \r';
        fprintf(fileID,fmt,DataWriteALA);
        fmt = '%.10f \r';
        fprintf(fileID,fmt,DataWriteALE);
        fclose(fileID);
    
    end
end

text = ('alert_Levels function worked correctly');
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);

end
