VB et mémoire

La section pour partager vos scripts et demander de l'aide dans vos scénarios.

Modérateur: HoMIDoM

VB et mémoire

Messagede cirdec007 » 07 DĂ©c 2015, 14:17

Bonjour,

J'exécute un script vb toutes les minutes qui lit un fichier XML et récupère plusieurs valeurs.
Au fur et à mesure de l'exécution de ce script, le mémoire du service HOMISERVICE.exe augmente jusqu'à saturer celle-ci après plusieurs jours.

Il semblerait que le script VB ne libère pas entièrement la mémoire utilisée lors de son exécution.

Que puis-je faire/tester pour palier à ce problème
cirdec007
Membre Actif
 
Messages: 30
Inscription: 08 Sep 2015, 10:38

Re: VB et mémoire

Messagede MathPan » 07 DĂ©c 2015, 19:23

Bonjour,
Peux tu nous envoyer ton script, stp, pour voir si il y a quelque chose Ă  faire.
@+
HoMIDoM- Le système complet et gratuit de domotique pour la maison
ModbusTCP avec automates WAGO pour gestion Ă©clairage, prise, VMCDF, Chauffage elec, volet de toute la maison
RFXtrx pour gestion des télécommandes, des sondes et pinces ampèremétrique
Téléinfo EDF - Station Netatmo - Thermostat et détecteur Nest
Client Imperihome - HoMIWpf - SARAH - IFTTT - RPI avec KODI - GoogleCalendar
Avatar de l’utilisateur
MathPan
Guru de domotique
 
Messages: 124
Inscription: 16 AoĂ» 2012, 16:14

Re: VB et mémoire

Messagede cirdec007 » 18 DĂ©c 2015, 14:38

Voici mais surement à améliorer :-)

' Pince 10A la valeur devra-t’être multiplié par 0.00323
' Pince 20A la valeur devra-t’être multiplié par 0.00646
' Pince 50A la valeur devra-t’être multiplié par 0.01615



Imports System
Imports System.Xml
Imports System.IO
Imports System.Net
' Imports System.Windows.Forms
' Imports Microsoft.VisualBasic
Imports Homidom
' Imports Homidom.homidom
' Imports HoMIDom.HoMIDom.Device
' Imports HoMIDom.HoMIDom.Api
' Imports System.Threading



Namespace Dynam


'Ne pas supprimer cette class
Public Class DynamicCode

' Fonctions
' ----------

' Fonction Ecriture des valeurs dans un fichier pour historisation
' ----------------------------------------------------------------
Function EcritureFichier(NomDuComposant as string,ValeurDuComposant as string, TypeDuComposant as string)
Dim sw As StreamWriter
Dim strFile As String = "C:\Homidom\Historique\data.csv"
sw = File.AppendText(strFile)
sw.WriteLine(DateTime.Today.ToString("yyyyMMdd") & ";" & DateTime.Now.ToString("HH:mm:ss") & ";" & NomDuComposant & ";" & ValeurDuComposant & ";" & TypeDuComposant)
sw.Close()
return sw
End Function

' Fonction envoi requĂŞte http
' ---------------------------
Public Sub Sendhttp(ByVal Commande As String)
Try
Dim reader As StreamReader = Nothing
Dim str As String = ""
Dim request As WebRequest = WebRequest.Create(Commande)
Dim response As WebResponse = request.GetResponse()
reader = New StreamReader(response.GetResponseStream())
str = reader.ReadToEnd
reader.Close()
Catch ex As Exception
' _Server.Log(Server.TypeLog.ERREUR, Server.TypeSource.SCRIPT, "Sendhttp", "Erreur lors de l'envoi de la commande http: " & ex.Message)
End Try
End Sub


' --------------------------------
' --------------------------------
' --------------------------------


'Ne pas supprimer cette function
Public Function ExecuteCode(paramarray prmParameters() as object) as object





Dim Serveur as Homidom.Homidom.server

Serveur=prmParameters(0)





Dim Composant As String
Composant = "Empty"
Dim ComposantValue As String
' Dim ValeurRefresh as Integer

Dim ComposantValueTest

Dim HomidomServer = "123456789"
Dim IN1 = "9925c7e9-c7c0-435a-a38d-947414fb6155"
Dim IN2 = "0e9b396a-6cf8-4e78-8939-990d60f384a8"
Dim IN3 = "60e221eb-b890-4ff3-8d7d-810b87087404"
Dim IN4 = "25e6c121-54ed-4d36-81a4-f7127b9e547e"
Dim IN5 = "0f904982-e70a-478c-b74d-642e2bed9c7c"
Dim IN6 = "1fe2c264-822c-40e9-a824-f994a10b3a4a"
Dim IN7 = "55a090e0-b190-451b-b8df-a39c8b4f95ca"
Dim IN8 = "8e90d9dc-9330-477d-bfc1-c392b8a56cbe"

Dim OUT1 = "d8a69eb9-8ebc-4e85-851b-901ad081ca7a"
Dim OUT2 = "0af5c0c7-9bba-4e2b-a3aa-a9c1fd8eee04"
Dim OUT3 = "d941ed33-c9ac-40b5-bdb5-018e49429eaf"
Dim OUT4 = "0d6f469c-f2b8-448a-9d3f-bd0e7c8d5109"
Dim OUT5 = "92eb6dff-357c-4893-8c55-c826442d90cc"
Dim OUT6 = "b086fb02-52bb-447e-8612-67075cbef547"
Dim OUT7 = "169a4419-d7c9-4d5d-b13c-b41e9659fc6e"
Dim OUT8 = "b6d85d65-cdf2-4535-a6a0-16c429f7f37d"

Dim Analog1 = "8571b37d-f037-41cd-b6a7-4f44bf21e9b4"
Dim Analog2 = "1f450138-066d-4f5c-8119-d6b9189862d0"
Dim Analog3 = "95cf226f-675e-4990-86cf-193b42eaf1df"
Dim Analog4 = "08e758dc-4197-4498-8a2d-1b33a256a9b5"
Dim Analog5 = "81b6d096-3735-469a-a657-682425dd5e42"
Dim Analog6 = "251ed683-e8c0-4eb8-ba7a-31761e7d1e7c"
Dim Analog7 = "5dd3e41e-829e-424d-9abd-7fd9f90e68cb"
Dim Analog8 = "3333cbd0-4ae4-4aa2-8ecc-6907bb39c981"

Dim Count0 = "5cdecb20-8442-4a19-8473-c753fc5c374a"
Dim Count1 = ""

Dim TemperatureExterieure = "46b529fe-edca-421c-bd44-9bf645433852"
Dim PiscineTemperatureArrivee = "0ea6f269-8d15-44df-a498-7af02c3a3060"
Dim PiscineTemperatureDepart = "002c45e4-7b39-4a08-9e4e-a616570169a5"
Dim PiscineConsomationEau = "70c649fb-31e3-467f-b967-e7e0a7469933"
Dim PiscineEtatFiltration = "f6136f77-036f-48e4-acfa-27f077abff38"
Dim PiscineEtatPompeAChaleur = "5c579462-eade-4954-bb92-4d311fd02b0d"
Dim PiscineEtatSpotPiscine = "7aa196dc-1d2f-475c-a90e-d98246c050c3"
Dim GelExterieurEtat = "6d5e5ce0-f78e-44cb-8ab3-cdd4632856c9"

Dim ComposantIPX800AbrisDeJardinReceptionPush = "c5a38fee-df86-435f-8294-82b94ae57e38"

Dim TimerCompteur1 = "34bb7278-7507-4be9-8fcb-084791f71168"
Dim TimerCompteur2 = "3f3679b6-8eef-4beb-86a6-ebbdf09ec3d4"

Dim ConsommationElectriqueAbrisDeJardin = "31bea5d1-5cff-4976-93f4-1ab0ff824c9e"
Dim ConsommationElectriqueFiltration = "d80bf7a2-aba6-44b7-99a9-4a0a69804f9d"
Dim ConsommationElectriquePompeAChaleur = "9d951a7b-7a5b-43e9-b0a5-b6d0078f3995"

Dim EtatOut1 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,PiscineEtatFiltration )
Dim EtatOut2 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,PiscineEtatPompeAChaleur )
Dim EtatOut6 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,PiscineEtatSpotPiscine )
Dim EtatOut8 as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,GelExterieurEtat )
Dim EtatOut1Value = EtatOut1.Value
Dim EtatOut2Value = EtatOut2.Value
Dim EtatOut6Value = EtatOut6.Value
Dim EtatOut8Value = EtatOut8.Value


Dim x as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ComposantIPX800AbrisDeJardinReceptionPush )
Dim TimerCompteur1Value as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,TimerCompteur1 )
Dim TimerCompteur2Value as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,TimerCompteur2 )
Dim ConsommationElectriqueAbrisDeJardinValue as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ConsommationElectriqueAbrisDeJardin )
Dim ConsommationElectriqueFiltrationValue as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ConsommationElectriqueFiltration )
Dim ConsommationElectriquePompeAChaleurValue as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,ConsommationElectriquePompeAChaleur )

Dim Counter1Composant as Homidom.Homidom.TemplateDevice=Serveur.ReturnDeviceById(HomidomServer,Count0 )
' ValeurRefresh=x.VariablesOfDevice("Refresh")
' x.VariablesOfDevice("Refresh")=ValeurRefresh + 1

Dim Tensionsecteur = "245"


const URLString as String = "http://192.168.25.21/globalstatus.xml"

Dim reader As XmlTextReader = New XmlTextReader (URLString)
Do While reader.Read
Select Case reader.NodeType
Case XmlNodeType.Element
Composant = (reader.name)
Case XmlNodeType.Text
ComposantValue = (reader.value)
Select Case Composant
Case "analog0"
If ((TimerCompteur1Value.value = "30") and (ComposantValue <> "0")) then
Serveur.ChangeValueOfDevice(HomidomServer,TemperatureExterieure,(String.Format("{0:0.00}", (ComposantValue*0.323-50))) )
Serveur.ChangeValueOfDevice(HomidomServer,Analog1,ComposantValue)
EcritureFichier ("TemperatureExterieure", (String.Format("{0:0.00}", (ComposantValue*0.323-50))), "Temperature")
' x.VariablesOfDevice("Refresh") = 0
End If
Case "analog1"
If ((TimerCompteur1Value.value = "30") and (ComposantValue <> "0")) then
Serveur.ChangeValueOfDevice(HomidomServer,PiscineTemperatureArrivee,(String.Format("{0:0.00}", (ComposantValue*0.323-50))) )
Serveur.ChangeValueOfDevice(HomidomServer,Analog2,ComposantValue)
EcritureFichier ("TemperatureAbrisDeJardin", (String.Format("{0:0.00}", (ComposantValue*0.323-50))), "Temperature" )
End If
Case "analog2"
If ((TimerCompteur1Value.value = "30") and (ComposantValue <> "0")) then
Serveur.ChangeValueOfDevice(HomidomServer,PiscineTemperatureDepart,(String.Format("{0:0.00}", (ComposantValue*0.323-50))) )
Serveur.ChangeValueOfDevice(HomidomServer,Analog3,ComposantValue)
EcritureFichier ("PiscineTemperatureDepart", (String.Format("{0:0.00}", (ComposantValue*0.323-50))) , "Temperature")
End If
Case "analog3"

Case "analog4"
Serveur.ChangeValueOfDevice(HomidomServer,Analog5,ComposantValue)
If (ComposantValue > "25") then
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueAbrisDeJardin,(ComposantValue+ConsommationElectriqueAbrisDeJardinValue.Value))
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("ConsommationAbrisDeJardin", (String.Format("{0:0.00}",((ComposantValue+ConsommationElectriqueAbrisDeJardinValue.Value)*0.00646/60*Tensionsecteur))) , "ConsommationElectrique" )
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueFiltration,"0")
End if
Case "analog5"
Serveur.ChangeValueOfDevice(HomidomServer,Analog6,ComposantValue)
If (ComposantValue > "25") then
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueFiltration,(ComposantValue+ConsommationElectriqueFiltrationValue.Value))
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("ConsommationPiscineFiltration", (String.Format("{0:0.00}",((ComposantValue+ConsommationElectriqueFiltrationValue.Value)*0.00323/60*Tensionsecteur))) , "ConsommationElectrique")
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriqueFiltration,"0")
End if

Case "analog6"
Serveur.ChangeValueOfDevice(HomidomServer,Analog7,ComposantValue)
If (ComposantValue > "25") then
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriquePompeAChaleur,(ComposantValue+ConsommationElectriquePompeAChaleurValue.Value))
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("ConsommationPiscinePompeaChaleur", (String.Format("{0:0.00}",((ComposantValue+ConsommationElectriquePompeAChaleurValue.Value)*0.00323/60*TensionSecteur))) , "ConsommationElectrique")
Serveur.ChangeValueOfDevice(HomidomServer,ConsommationElectriquePompeAChaleur,"0")
End if

Case "analog7"


Case "count0"
If (TimerCompteur1Value.value >= "30") then
'and (ComposantValue <> Counter1Composant.value)) then
Serveur.ChangeValueOfDevice(HomidomServer,PiscineConsomationEau,ComposantValue)
Serveur.ChangeValueOfDevice(HomidomServer,Count0,ComposantValue)
EcritureFichier ("ConsommationEau", ComposantValue, "ConsommationEau")
Sendhttp ("http://192.168.25.21/protect/assignio/counter1.htm?num=0&counter=0")
End If
Case "btn0"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN1,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN1,"false")
Case "btn1"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN2,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN2,"false")
Case "btn2"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN3,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN3,"false")
Case "btn3"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN4,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN4,"false")
Case "btn4"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN5,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN5,"false")
Case "btn5"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN6,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN6,"false")
Case "btn6"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN7,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN7,"false")
Case "btn7"
If ComposantValue = "dn" then Serveur.ChangeValueOfDevice(HomidomServer,IN8,"true")
If ComposantValue = "up" then Serveur.ChangeValueOfDevice(HomidomServer,IN8,"false")

Case "led0"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT1,"true")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatFiltration,"true")
ComposantValueTest = "True"
End If
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT1,"false")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatFiltration,"false")
ComposantValueTest = "False"
End If
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("Filtration", ComposantValue, "Etat" )
End If
If (EtatOut1Value <> ComposantValueTest) then
EcritureFichier ("Filtration", ComposantValue, "Etat" )
End If
Case "led1"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT2,"True")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatPompeAChaleur,"True")
ComposantValueTest = "True"
End if
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT2,"false")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatPompeAChaleur,"False")
ComposantValueTest = "False"
end if
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("Chauffage", ComposantValue, "Etat")
End If
If (EtatOut2Value <> ComposantValueTest) then
EcritureFichier ("Chauffage", ComposantValue, "Etat")
End If
Case "led2"
If ComposantValue = "1" then Serveur.ChangeValueOfDevice(HomidomServer,OUT3,"true")
If ComposantValue = "0" then Serveur.ChangeValueOfDevice(HomidomServer,OUT3,"false")
Case "led3"
If ComposantValue = "1" then Serveur.ChangeValueOfDevice(HomidomServer,OUT4,"true")
If ComposantValue = "0" then Serveur.ChangeValueOfDevice(HomidomServer,OUT4,"false")
Case "led4"
If ComposantValue = "1" then Serveur.ChangeValueOfDevice(HomidomServer,OUT5,"true")
If ComposantValue = "0" then Serveur.ChangeValueOfDevice(HomidomServer,OUT5,"false")
Case "led5"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT6,"true")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatSpotPiscine,"true")
ComposantValueTest = "True"
End if
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT6,"false")
Serveur.ChangeValueOfDevice(HomidomServer,PiscineEtatSpotPiscine,"false")
ComposantValueTest = "False"
End if
If (EtatOut6Value <> ComposantValueTest) then
EcritureFichier ("SpotPiscine", ComposantValue, "Etat")
End If
Case "led6"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT7,"true")
End If
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT7,"false")
End if
Case "led7"
If ComposantValue = "1" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT8,"true")
Serveur.ChangeValueOfDevice(HomidomServer,GelExterieurEtat,"true")
ComposantValueTest = "True"
End If
If ComposantValue = "0" then
Serveur.ChangeValueOfDevice(HomidomServer,OUT8,"false")
Serveur.ChangeValueOfDevice(HomidomServer,GelExterieurEtat,"false")
ComposantValueTest = "False"
End if
If (TimerCompteur1Value.value >= "30") then
EcritureFichier ("GelExterieur", ComposantValue, "Etat")
End If
If (EtatOut8Value <> ComposantValueTest) then
EcritureFichier ("GelExterieur", ComposantValue, "Etat")
End If


End Select
End Select

Loop

' Remise à zéro du composant TimerCompteur1 pour une plage de 30min.
If (TimerCompteur1Value.value >= "30") then Serveur.ChangeValueOfDevice(HomidomServer,TimerCompteur1,"0")
If (TimerCompteur2Value.value >= "6") then Serveur.ChangeValueOfDevice(HomidomServer,TimerCompteur2,"0")

' Set Serveur = Nothing
End Function
End Class
End Namespace
cirdec007
Membre Actif
 
Messages: 30
Inscription: 08 Sep 2015, 10:38


Retourner vers Scripts VB

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique