Script:Lib Util

Un article de MacodaWiki.

Jump to: navigation, search

lib_util.vbs : Contient un ensemble de fonctions (surtout pour les dates)


'*-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-*

'* LIBRAIRIE                                                                                             *
'*                                                                                                       *
'*   Voir l'entete de lib_log !!!                                                 *
'*                                                                                                       *
'*                                                                                                       *
'*                                                                                                       *
'*                                                                                                       *
'*                                                                                                       *
'*                                                                                                       *
'*  2006/08/01                                                                                           *
'*-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-**-*-*-*-*-*-*-*
'*****************************************************************************
' Efface une variable globale de la mémoire de Homeseer
'
Sub gUTIL_Delete_Variable(sItem)
	giNiveau_Librairie = giNiveau_Librairie + 1
	hs.DeleteVar sItem
	giNiveau_Librairie = giNiveau_Librairie - 1
end Sub


'*****************************************************************************
' Met à blanc une valeur (int ou double) globale dans la mémoire de Homeseer
'
Sub  gUTIL_Init_Valeur(sItem)
dim iValeur
	giNiveau_Librairie = giNiveau_Librairie + 1
	hs.CreateVar (sItem)
	iValeur = 0
	hs.SaveVar sItem,iValeur
	giNiveau_Librairie = giNiveau_Librairie - 1
end Sub

'*****************************************************************************
' Met à blanc une string globale dans la mémoire de Homeseer
'
Sub  gUTIL_Init_String(sItem)
Dim sValeur
	giNiveau_Librairie = giNiveau_Librairie + 1
	hs.CreateVar (sItem)
	sValeur = ""
	hs.SaveVar sItem,sValeur
	giNiveau_Librairie = giNiveau_Librairie - 1
end Sub


'*****************************************************************************
' Stocke une valeur (int ou double) globale dans la mémoire de Homeseer
'
Sub gUTIL_Stocke_Variable(sItem,sValeur)
	giNiveau_Librairie = giNiveau_Librairie + 1
	hs.SaveVar sItem,sValeur
	giNiveau_Librairie = giNiveau_Librairie - 1
end Sub


'*****************************************************************************
' Récupère une valeur (int ou double) globale dans la mémoire de Homeseer
'
function gUTIL_Recup_Valeur(sItem)
dim iValeur
	giNiveau_Librairie = giNiveau_Librairie + 1
	iValeur = hs.GetVar(sItem)
	if (iValeur = "Name not found") or (iValeur = "") then 	
		gFct_Log_LIB LOG_NORMAL,"** ERREUR ** : PB pour retrouver "&sItem&" ("&iValeur&")#################################"		
		hs.CreateVar (sItem)
		iValeur = 0
		hs.SaveVar sItem,iValeur
	end if	
	gUTIL_Recup_Valeur = iValeur
	giNiveau_Librairie = giNiveau_Librairie - 1
end function 


'*****************************************************************************
' Récupère une valeur (string) globale dans la mémoire de Homeseer
'
function gUTIL_Recup_String(sItem)
dim sValeur
	giNiveau_Librairie = giNiveau_Librairie + 1
	sValeur = hs.GetVar(sItem)
	if (sValeur = "Name not found") or (sValeur = "") then 	
		gFct_Log_LIB LOG_NORMAL,"** ERREUR ** : PB pour retrouver "&sItem&" ("&sValeur&")#################################"

		hs.CreateVar (sItem)
		sValeur = ""
		hs.SaveVar sItem,sValeur
	end if	
	gUTIL_Recup_String = sValeur
	giNiveau_Librairie = giNiveau_Librairie - 1
end function 


'*****************************************************************************
' Récupère une valeur (Date) globale dans la mémoire de Homeseer
'
function gUTIL_Recup_Date(sItem)
dim dValeur
	giNiveau_Librairie = giNiveau_Librairie + 1
	dValeur = hs.GetVar(sItem)
	if (dValeur = "Name not found") or (dValeur = "") then 	
		gFct_Log_LIB LOG_NORMAL,"** ERREUR ** : PB pour retrouver "&sItem&" ("&dValeur&")#################################"

		hs.CreateVar (sItem)
		dValeur = now
		hs.SaveVar sItem,dValeur
	end if	
	gUTIL_Recup_Date = dValeur
	giNiveau_Librairie = giNiveau_Librairie - 1
end function 


'*****************************************************************************
' gUTIL_Attente_secondes
'------------------------
' Remplaçant de HS.wait qui m'a posé parfois des problèmes.
' L'argument est un nombre de secondes
'
sub gUTIL_Attente_secondes(iNb_Second)
   Dim StartTime, EndTime, TimeIt
   Dim bFin
   
   giNiveau_Librairie = giNiveau_Librairie + 1
   
   If (iNb_Second > 5) Then 
	gFct_Log_LIB LOG_NORMAL,"Attente de "&CStr(iNb_Second)&" secondes (avec hs.waitsecs)"
   	hs.waitsecs iNb_Second
   Else
	   gFct_Log_LIB LOG_NORMAL,"Attente de "&CStr(iNb_Second)&" secondes (avec boucle)"
	   StartTime = Timer
	   bFin = False
	   do while (bFin = False) 
	   	hs.WaitEvents  ' est censé redonner la main aux autres programmes Homeseer
	   	EndTime = Timer
	        TimeIt = EndTime - StartTime
	  	if (TimeIt > iNb_Second) then
		     bFin = True
		end if
	   loop
   End If 
   gFct_Log_LIB LOG_NORMAL,"Fin de l'attente de "&CStr(iNb_Second)&" secondes"
   giNiveau_Librairie = giNiveau_Librairie - 1
End sub

'*****************************************************************************
' gUTIL_SemaphorePose
'------------------------
' Pose une semaphore pour que le script soit le seul à) faire une action donnée..
'
sub gUTIL_SemaphorePose (sAction)
   Dim bFin
   Dim iNb, iCpt
   Dim sNom_prog
   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_NORMAL, "Entree de SemaphorePose sAction = >"&sAction&"<"

      
   bFin = False
   
   iCpt = 1
   Do While (bFin = False)
	   gFct_Log_LIB LOG_BAVARD, "Début de boucle"

	   ' On récupère la sémaphore (si elle existe)
	   sNom_prog = gUTIL_Recup_String("sVAR_Semaphore_"&sAction)
	   If (sNom_prog = "") Then
	   	gFct_Log_LIB LOG_BAVARD, "La sémaphore n'existe pas, on doit la créer"
	   	' On crée donc une sémpahore sur cette action, en indiquant le programme l'ayant créé
		hs.CreateVar ("sVAR_Semaphore_"&sAction)
		hs.SaveVar "sVAR_Semaphore_"&sAction,NOM_PROG
		' Et on indique qu'il l'a posé une seule fois
		hs.CreateVar ("sVAR_Semaphore_"&sAction&"_Nb")
		hs.SaveVar "sVAR_Semaphore_"&sAction&"_Nb",1
	
	
	   ElseIf (sNom_prog = NOM_PROG) Then
	   	 gFct_Log_LIB LOG_BAVARD, "La sémaphore existe et elle a déjà été posée par le programme"
		 iNb = gUTIL_Recup_Valeur("sVAR_Semaphore_"&sAction&"_Nb")
		 ' On indique que la sémaphore a été placée plusieurs fois
		 iNb = iNb + 1
		 hs.SaveVar "sVAR_Semaphore_"&sAction&"_Nb",iNb
		 gFct_Log_LIB LOG_BAVARD, "La sémaphore a été posée "&CStr(iNb)&" fois"
	
	   Else
	   	 gFct_Log_LIB LOG_BAVARD, "La sémaphore existe et posée par un autre =>"&sNom_prog&"< et pas >"&NOM_PROG&"<"
	   End If
	   
	   gFct_Log_LIB LOG_BAVARD, "On va vérifier que la sémaphore est bien à nous "
	   If (gUTIL_Recup_String("sVAR_Semaphore_"&sAction) = NOM_PROG) Then
		bFin = True
	   Else
		   gFct_Log_LIB LOG_BAVARD, "NON, nous ne sommes pas les proprios !!! =>"&gUTIL_Recup_String("sVAR_Semaphore_"&sAction)&"< et pas >"&NOM_PROG&"<"
		   iCpt = iCpt + 1
		   If (iCpt > 5) Then
			bFin = True
			gFct_Log_LIB LOG_BAVARD, "Trop de temps à attendre => On sort de la boucle!"
			hs.SendEmail "domotique@macoda.com","domotique@macoda.com","UTIL - Semaphore attendue trop longtemps >"&sAction&"<","Rien"
		   Else
			gFct_Log_LIB LOG_BAVARD, "On boucle une nouvelle fois iCpt = "&CStr(iCpt)
		   End If
	   End If
	
	   
	   If (not bFin) Then
	   	' On attent quelques secondes
	   	gFct_Log_LIB LOG_BAVARD, "Attente de 5 secondes"
		gUTIL_Attente_secondes (5)
	   End If
	   
   loop 
	
'hs.SaveVar "dVAR_Ref_heure",dVAR_Ref_heure
   
   

   gFct_Log_LIB LOG_NORMAL, "Sortie de SemaphorePose"   
   giNiveau_Librairie = giNiveau_Librairie - 1
end sub

'*****************************************************************************
' gUTIL_SemaphoreLibere
'------------------------
' Libère une sémaphore précédemment posé afin que de permettre aux autres de réaliser une action
'
sub gUTIL_SemaphoreLibere (sAction)   
Dim iNb
   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_NORMAL, "Entree de SemaphoreLibere sAction = >"&sAction&"<"
	iNb = gUTIL_Recup_Valeur("sVAR_Semaphore_"&sAction&"_Nb")
	iNb = iNb - 1
	If (iNb > 0) Then
		hs.SaveVar "sVAR_Semaphore_"&sAction&"_Nb",iNb
		gFct_Log_LIB LOG_BAVARD, "Décrémente l'utilisation de la sémaphore iNb = >"&CStr(iNb)&"<"
	Else
		gFct_Log_LIB LOG_BAVARD, "Libération de la sémaphore"
		hs.DeleteVar ("sVAR_Semaphore_"&sAction)
		hs.DeleteVar ("sVAR_Semaphore_"&sAction&"_Nb")   
	End If
	
   gFct_Log_LIB LOG_NORMAL, "Sortie de SemaphoreLibere"   
   giNiveau_Librairie = giNiveau_Librairie - 1
end sub

'*****************************************************************************
' gFct_Lance_Script
'------------------------
' Lance un script (fonction mail exclusivement)
'
'*************************************
Sub gFct_Lance_Script (sScript)
   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"Lancement du script >"&sScript&"<"
   hs.Run sScript
   gFct_Log_LIB LOG_BAVARD,"Le script ("&sScript&") est terminé"
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub 'gFct_Lance_Script 



'*****************************************************************************
' gFct_Lance_Script_Action
'------------------------
' Lance un script (fonction mail exclusivement)
'
'*************************************
Sub gFct_Lance_Script_Action (sScript)
   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"Lancement du script >"&sScript&"<"
   hs.RunEx sScript,"Fct_Action",""

   gFct_Log_LIB LOG_BAVARD,"Le script ("&sScript&") est terminé"
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub 'gFct_Lance_Script 


'*****************************************************************************
' gFct_Mois_prec
'------------------------
' Donne le mois actuel et le mois précédent
'
'*************************************
Sub gFct_Mois_prec(iMois_act,iAnnee_act,iMois_prec,iAnnee_prec)

   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"GFct_Mois_Prec"
   
  	gFct_Mois_act iMois_act,iAnnee_act 	
 	If (iMois_Act=1) Then
  	  	iAnnee_prec = iAnnee_act - 1
	  	iMois_prec  = 12
  	Else
  	  	iAnnee_prec = iAnnee_act
	  	iMois_prec  = iMois_act - 1
	End If  
   gFct_Log_LIB LOG_BAVARD,"Date Act : "&CStr(iMois_act)&"/"&CStr(iAnnee_act)&" - Date prec : "&CStr(iMois_prec)&"/"&CStr(iAnnee_prec)
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub ' gFct_Mois_prec


'*****************************************************************************
' gFct_Mois_suiv
'------------------------
' Donne le mois actuel et le mois suivant
'
'*************************************
Sub gFct_Mois_suiv(iMois_act,iAnnee_act,iMois_suiv,iAnnee_suiv)

   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"GFct_Mois_Suiv"

  	gFct_Mois_act iMois_act,iAnnee_act 	
 	If (iMois_Act=12) Then
  	  	iAnnee_suiv = iAnnee_act + 1
	  	iMois_suiv  = 1
  	Else
  	  	iAnnee_suiv = iAnnee_act
	  	iMois_suiv  = iMois_act + 1
	End If  
	
   gFct_Log_LIB LOG_BAVARD,"Date Act : "&CStr(iMois_act)&"/"&CStr(iAnnee_act)&" - Date suiv : "&CStr(iMois_suiv)&"/"&CStr(iAnnee_suiv)
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub ' gFct_Mois_suiv


'*****************************************************************************
' gFct_Mois_act
'------------------------
' Donne le mois actuel 
'
'*************************************
Sub gFct_Mois_act(iMois_act,iAnnee_act)
Dim dDate_act

   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"GFct_Mois_act"

  	dDate_act = Now
  	iAnnee_act = Year(dDate_act)
  	iMois_act  = Month(dDate_act)
  		
   gFct_Log_LIB LOG_BAVARD,"Date Act : "&CStr(iMois_act)&"/"&CStr(iAnnee_act)
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub ' gFct_Mois_act


'*****************************************************************************
' gFct_Jour_act
'------------------------
' Donne le jour actuel 
'
'*************************************
Sub gFct_Jour_act(iJour_act,iMois_act,iAnnee_act)
Dim dDate_act

   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"GFct_Jour_act"

  	dDate_act = Now
  	iAnnee_act = Year(dDate_act)
  	iMois_act  = Month(dDate_act)
  	iJour_act  = Day(dDate_act)
  		
   gFct_Log_LIB LOG_BAVARD,"Date Act : "&CStr(iJour_act)&"/"&CStr(iMois_act)&"/"&CStr(iAnnee_act)
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub ' gFct_Jour_act


'*****************************************************************************
' gFct_Jour_prec
'------------------------
' Donne le Jour actuel et le jour précédent
'
'*************************************
Sub gFct_Jour_prec(iJour_act,iMois_act,iAnnee_act,iJour_prec,iMois_prec,iAnnee_prec)

   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"GFct_Jour_Prec"
   
  	gFct_Jour_act iJour_act,iMois_act,iAnnee_act  	
  	If (iJour_act=1) Then 
		iJour_prec = 31
	 	If (iMois_Act=1) Then
	  	  	iAnnee_prec = iAnnee_act - 1
		  	iMois_prec  = 12
	  	Else
	  	  	iAnnee_prec = iAnnee_act
		  	iMois_prec  = iMois_act - 1
		End If  
	Else
		iJour_prec = iJour_act - 1
	  	iAnnee_prec = iAnnee_act
		iMois_prec  = iMois_act	
	End If

   gFct_Log_LIB LOG_BAVARD,"Date Act : "&CStr(iJour_act)&"/"&CStr(iMois_act)&"/"&CStr(iAnnee_act)&" - Date prec : "&CStr(iJour_prec)&"/"&CStr(iMois_prec)&"/"&CStr(iAnnee_prec)
   giNiveau_Librairie = giNiveau_Librairie - 1
End Sub ' gFct_Jour_prec



'*****************************************************************************
' gFctRajoute_Zero
'------------------------
' Rajoute des zéros pour que le chiffre commence par des zéros 
'
'*************************************
Function gFctRajoute_Zero(iChiffre,iNb_zero)

   giNiveau_Librairie = giNiveau_Librairie + 1
   gFct_Log_LIB LOG_BAVARD,"gFctRajoute_Zero"
   
   gFctRajoute_Zero = Right("0000000000000"+CStr(iChiffre),iNb_zero)  
   
   giNiveau_Librairie = giNiveau_Librairie - 1
End Function ' gFctRajoute_Zero
Récupérée de « http://www.macoda.com/index.php/Script:Lib_Util »