Script:Lib Util
Un article de MacodaWiki.
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
