Répétition dans le temps

thierryMCT89 Messages postés 3 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 décembre 2007 - 26 déc. 2007 à 11:47
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 - 26 déc. 2007 à 16:50
Bonjour à tous,
Je tiens tout d'abord à dire que je suis plus que novice dans le VB...

J'ai une appli en VB qui permet de pinger une adresse IP public d'un serveur et qui m'envoi un mail et un SMS en cas de non réponse (cela fonctionne bien). J'ai fais une tâche planifié qui lance cette appli toutes les x minutes, jusque là tout va bien.

Donc si le routeur distant où ce trouve ce fameux serveur perd la connexion internet à un instant donné, l'appli va m'envoyer un mail et un SMS.

Le soucis est que vu que ma tâche planifié se répéte toutes les 5 minutes, si je n'ai pas rétabli la connexion internet du serveur distant dans les 5min, l'appli va refaire son test de ping et me renvoyer un mail et un SMS (à la limite le mial pas trop grave c'est gratuit mais le SMS ça peut revenir cher au bout d'un moement !).

Donc je voudrais que quand le ping ne répond pas l'appli m'envoi un 1er mail et SMS et qu'ensuite elle ne m'en envoi plus pendant x minutes...

Je pense déjà qu'il ne faut plus passer par le planificateur de tâches et donc programmer pour que mon appli fasse le test à intervalle régulier en temps et que si la requete ping echoue le ping ne s"execute plus pendant un temps donné...

J'éspere avoir été assez clair dans mes explications et que vous pourrez m'apportez vos suggestions.

Merci d'avance 

4 réponses

pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
26 déc. 2007 à 12:06
salut
le plus simple pour toi, tout en gardant le principe de la tache planifiée, serait de stocker dans le dossier de l'appli un fichier
ini contenant la date et l'heure du dernier envoi de sms
ton Ini pourrait etre comme ci-dessous
[SMS]
LastAlertDate=26/12/2007
LastAlertTIME=17:47

Si le ping ne répond toujours pas, si le dernier sms envoyer est de moins de 10 min, par exemple, tu laisses l'envoi du mail se faire mais tu bloques l'envoi du sms.

Pourquoi un .INI, car en tant que novice en vb il te sera très simple d'utiliser les api GetPrivateProfileString pour lire le .INI
et WritePrivateProfileString

voilà
en espérant que tout cela t'apportera une petite aide

Pat

 Don't Worry , Be Happy

<hr />lorsque le problème est résolu, pensez Réponse Acceptée
0
thierryMCT89 Messages postés 3 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 décembre 2007
26 déc. 2007 à 12:12
Voici mon code de test de ping avec envoi d'e-mail et SMS en cas de non réponse :








Module



 Module1
         

Public
 strComputer, objWMIService, objComputer, objEmail, colPingedComputers

                  

Sub
 Main()
                           strComputer = 

"."

                           objWMIService = GetObject(

"winmgmts:"
 _&amp; 

"{impersonationLevel=impersonate}!\"
 &amp; strComputer &amp; 

"\root\cimv2"
)
                           colPingedComputers = objWMIService.ExecQuery _(

"Select * from Win32_PingStatus Where Address = 'Adresse_IP_Public'"
)


                           For



Each
 objComputer 

In
 colPingedComputers
                                    

If
 objComputer.StatusCode = 0 

Then
                                    
Else
                                                
objEmail = CreateObject(

"CDO.Message"
)
                                                objEmail.From = 

"Adresse_Mail_Expediteur"
                                                
objEmail.To = 

"Adresse_Mail_Destinataire"
                                                
objEmail.Subject = 

"Sujet_Du_Message"
                                                
objEmail.Textbody = 

"Corps_Du_Message"
                                                
objEmail.Configuration.Fields.Item _(

"http://schemas.microsoft.com/cdo/configuration/sendusing"
) = 2
                                                objEmail.Configuration.Fields.Item _(

"http://schemas.microsoft.com/cdo/configuration/smtpserver"
) = _

"Serveur_SMTP"
                                                
objEmail.Configuration.Fields.Item _(

"http://schemas.microsoft.com/cdo/configuration/smtpserverport"
) = 25
                                                objEmail.Configuration.Fields.Update()
                                                objEmail.Send()                                                Shell(


"explorer http://Adresse_Mail_Et_Parametres_Envoi_SMS
")






                                    End



If

                          Next

                  End



Sub
End



Module
0
thierryMCT89 Messages postés 3 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 décembre 2007
26 déc. 2007 à 15:57
Merci de ta réponse.
Comme je l'ai dit je suis PLUS que novice, je ne suis pas du tout développeur, le code pour le ping et l'envoi de mail je l'ai recopié (et changé certaines valeurs et fonctions) mais je suis incapable de faire ce que tu m'a dit.

J'ai fais quelque recherche sur la lecture et l'écriture d'un fichier INI mais il y a aussi le soucis de comparer les dates et heures afin de lui dire que si inf. à 10min on ne renvoi pas de SMS et là ben je m'en sort pas !!!
A l'aide !!! (lol)

Merci beaucoup d'avance, je pense que c'est pas bien compliqué quand on connais un peu mais là je ne connais pas du tout le langage...
0
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
26 déc. 2007 à 16:50
re salut

bon, c'est noel donc j'ai passé un peu de temps sur ton cas...
regardes le code ci dessous et teste le...
ensuites tu me diras
n'oublie pas de rajouter les déclarations des api en haut de ton module
'Déclaration des api de gestion du .ini
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As Any, ByVal lpString As String, ByVal lpFileName As String) As Boolean

Sub Main()
Dim sLastAlerteSMS  As String
Dim lret                As Long
Dim bSendSms            As Boolean
strComputer = "."
objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
colPingedComputers = objWMIService.ExecQuery _
                     ("Select * from Win32_PingStatus Where Address = 'Adresse_IP_Public'")
For Each objComputer In colPingedComputers
   If objComputer.StatusCode = 0 Then
   Else
      'Je suppose que si on passe ici c'est que le ping n'a pas marché...
      'Ci dessous le code pour l'envoi du mail... on le garde, car systématique
      objEmail = CreateObject("CDO.Message")
      objEmail.From = "Adresse_Mail_Expediteur"
      objEmail.To = "Adresse_Mail_Destinataire"
      objEmail.Subject = "Sujet_Du_Message"
      objEmail.Textbody = "Corps_Du_Message"
      objEmail.Configuration.Fields.Item _
               ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      objEmail.Configuration.Fields.Item _
               ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
               "Serveur_SMTP"
      objEmail.Configuration.Fields.Item _
               ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
      objEmail.Configuration.Fields.Update
      objEmail.Send
      'ci dessous le code pour l'envoi du SMS
      'c'est ici qu'on rajoute le controle lié au dernier envoi du sms
      'Récupération de la derniere date et de la derniere heure d'envoi du sms
      'initialisation des variables
      sLastAlerteSMS = String(255, 0)
      lret = GetPrivateProfileString("SMS", "LastAlert", "", sLastAlerteSMS, 255, App.Path & "\Sms.ini")
      If lret <> 0 Then
         'on a récupéré une valeur
         sLastAlerteSMS = Left(sLastAlerteSMS, lret)
            'test que l'interval (en minute) depuis le dernier sms est supérieur à 10
            If DateDiff("n", Now, sLastAlerteSMS) > 10 Then
               'l'envoi du dernier sms est vieux de plus de 10 minutes donc on en renvoie un
               bSendSms = True
            Else
               'on a déjà envoyer un sms récemment , on ne va pas en renvoyer un ce coup ci
               bSendSms = False
            End If
           
      Else
         'le .ini n'existe pas ou bien il ne contient pas l'info recherchée donc on enverra un sms
         bSendSms = True
      End If
      If bSendSms Then
         'initialisation des valeurs du .ini pour la prochaine fois
         lret = WritePrivateProfileString("SMS", "LastAlert", Now, App.Path & "\SMS.ini")
         'Envoi du SMS
         Shell ("explorer http://Adresse_Mail_Et_Parametres_Envoi_SMS ")
      End If
   End If
Next


End Sub


@+

Pat

 Don't Worry , Be Happy





<hr />
lorsque le problème est résolu, pensez Réponse Acceptée
0
Rejoignez-nous