HSTOUCH et Thermostat Virtuel

iPad, Android, Archos, toutes les tablettes et écrans tactiles sont discutés dans cette section

HSTOUCH et Thermostat Virtuel

Messagede jfla » 09 Mai 2009, 08:39

Bonjour,

J'utilise depuis longtemps le thermostat virtuel de YCSimon.

Je recupere mes temperatures via XapMcs1wire et McsXAP.

J'utilise DEUX thermostats.

J'ai modifié le script comme suit:

Code: Tout sélectionner
' =================================================================================================

' =================================================================================================
' Création d'un thermostat virtuel dans Homeseer avec la temperature d'une sonde ou station météo
' ycsimon@free.fr
' =================================================================================================
' =================================================================================================

' =================================================================================================
' Polling (obtention régulière des données du thermostat) en minutes de 10 à 1440 (24h), 1mn si 0
' =================================================================================================
' pas d'obtention si >1440, y compris lors de l'initialisation si la ligne est supprimée
' L'apostrophe d'annotation ne doit pas être supprimé pour fonctionner
' [pollrate=1]

' =================================================================================================
' Le thermostat supporte le mode eco? Rq: comme il est virtuel on peut choisir... donc oui
' =================================================================================================
Function SupportsCoolSetPoint (device)
' 1 Le thermostat supporte le CoolSetPoint (Enregistrement de la valeur du mode eco)
' 0 Le thermostat ne supporte pas le CoolSetPoint
   SupportsCoolSetPoint = 1
End Function

' =================================================================================================
' Renvoi la température et Gère les modules
' =================================================================================================
Function GetTemp (device)
   device = Trim (hs.StringItem (device,1,":"))

' Création des variables au démarrage de Homeseer
   If hs.CreateVar (device & "Affichage") = "" Then
      hs.CreateVar (device & "Mode")
      hs.CreateVar (device & "SetPoint")
      hs.CreateVar (device & "CoolSetPoint")
      hs.CreateVar (device & "OffSetPoint")
      hs.CreateVar (device & "AuxSetPoint")
      hs.CreateVar (device & "WaterSetPoint")
      hs.CreateVar (device & "Devices")
      hs.CreateVar (device & "IntSensor")
      hs.CreateVar (device & "IntFactor")
      hs.CreateVar (device & "ExtSensor")
      hs.CreateVar (device & "ExtFactor")
      hs.CreateVar (device & "WatSensor")
      hs.CreateVar (device & "WatFactor")
      hs.CreateVar (device & "RegTemp")
      hs.CreateVar (device & "RegWatTemp")
      hs.CreateVar (device & "MinWatTemp")
      hs.CreateVar (device & "MaxWatTemp")
      hs.CreateVar (device & "Delta")
      hs.CreateVar (device & "Clim")
      hs.CreateVar (device & "BtnSup")

      IniExists = false
      Set fs = CreateObject("Scripting.FileSystemObject")
      If fs.FileExists (hs.GetAppPath & "\config\VThermostat.ini") Then
         Set f = fs.OpenTextFile (hs.GetAppPath & "\config\VThermostat.ini")
            Do While Not f.AtEndOfStream
               ThermoData = f.ReadLine
               If hs.StringItem (ThermoData,1,",") = device Then
                  IniExists = true
                  Exit Do
               End If
            Loop
         f.close
         Set f = Nothing
      End If
      Set fs = Nothing
      
      If IniExists Then
         hs.SaveVar device & "Affichage", hs.StringItem (ThermoData,2,",")
         hs.SaveVar device & "Mode", hs.StringItem (ThermoData,3,",")
         hs.SaveVar device & "SetPoint", hs.StringItem (ThermoData,4,",")
         hs.SaveVar device & "CoolSetPoint", hs.StringItem (ThermoData,5,",")
         hs.SaveVar device & "OffSetPoint", hs.StringItem (ThermoData,6,",")
         hs.SaveVar device & "AuxSetPoint", hs.StringItem (ThermoData,7,",")
         hs.SaveVar device & "Devices", hs.StringItem (ThermoData,8,",")
         hs.SaveVar device & "IntSensor", hs.StringItem (ThermoData,9,",")
         hs.SaveVar device & "IntFactor", hs.StringItem (ThermoData,10,",")
         hs.SaveVar device & "ExtSensor", hs.StringItem (ThermoData,11,",")
         hs.SaveVar device & "ExtFactor", hs.StringItem (ThermoData,12,",")
         hs.SaveVar device & "WatSensor", hs.StringItem (ThermoData,13,",")
         hs.SaveVar device & "WatFactor", hs.StringItem (ThermoData,14,",")
         hs.SaveVar device & "RegTemp", hs.StringItem (ThermoData,15,",")
         hs.SaveVar device & "RegWatTemp", hs.StringItem (ThermoData,16,",")
         hs.SaveVar device & "MinWatTemp", hs.StringItem (ThermoData,17,",")
         hs.SaveVar device & "MaxWatTemp", hs.StringItem (ThermoData,18,",")
         hs.SaveVar device & "Delta", hs.StringItem (ThermoData,19,",")
         hs.SaveVar device & "Clim", hs.StringItem (ThermoData,20,",")
         hs.SaveVar device & "BtnSup", hs.StringItem (ThermoData,21,",")
      Else
         IniThermo (device)
      End If

' Création des boutons supplémentaires au démarrage de Homeseer
      hs.GetDeviceByRef (hs.GetDeviceRef (device)).buttons = ""
      hs.DeviceButtonAdd device, "VThermostat.thm (""ResetThermo"", " & device & ")", "Reset"
      BtnSup = hs.GetVar (device & "BtnSup")
      If BtnSup = "1" or BtnSup = "2" Then
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP1"", " & device & ")", "<br>H+1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM1"", " & device & ")", "H-1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP01"", " & device & ")", "H+0.1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM01"", " & device & ")", "H-0.1"
      End If
      If BtnSup ="1" or BtnSup = "3" Then
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP1"", " & device & ")", "<br>C+1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM1"", " & device & ")", "C-1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP01"", " & device & ")", "C+0.1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM01"", " & device & ")", "C-0.1"
      ElseIf BtnSup = "4" Then
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP1"", " & device & ")", "<br>H+1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM1"", " & device & ")", "H-1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP1"", " & device & ")", "C+1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM1"", " & device & ")", "C-1"
      ElseIf BtnSup = "5" Then
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP01"", " & device & ")", "H+0.1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM01"", " & device & ")", "H-0.1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP01"", " & device & ")", "C+0.1"
         hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM01"", " & device & ")", "C-0.1"
      End If
   End If

' DĂ©fintion du seuil et de la string du mode
   m = hs.GetVar (device & "Mode")
   s = hs.GetVar (device & "SetPoint")
   c = hs.GetVar (device & "CoolSetPoint")
   o = hs.GetVar (device & "OffSetPoint")
   a = hs.GetVar (device & "AuxSetPoint")
      
      
   astring = "-" & a
   If hs.GetVar (device & "Clim") = "1" Then
      astring = "+" & a
      a = 0 - a
   End If
   Select Case m
      Case 00, 01
         sp = o
         m = "Hors-gel"
      Case 10, 11, 30
         sp = s
         If m = 30 Then m = "Auto(Confort)" Else m = "Confort" End If
      Case 20, 21, 31
         sp = c
         If m = 31 Then m = "Auto(Eco)" Else m = "Eco" End If
      Case 40
         sp = s - a
         m = "Aux(Confort" & astring & ")"
      Case 41
         sp = c - a
         m = "Aux(Eco" & astring & ")"
   End Select

' DĂ©fintion de la commande de chauffe
   delta = 0
   If hs.GetVar (device & "ExtSensor") <> "" and hs.GetVar (device & "WatSensor") <> "" Then
      tint = sp
      text = GetExteriorTemp (device)
      twat = GetWaterTemp (device)
      tr =  CInt (hs.GetVar (device & "RegTemp"))
      trwat =  CInt (hs.GetVar (device & "RegWatTemp"))
      w = ((trwat - 20) / (20 - tr)) * (sp - text) + 20
      tstring = twat & "°"
      If hs.GetVar (device & "IntSensor") <> "" Then
         tint = GetInteriorTemp (device)
         w = w + 0.25 * (trwat - 20) * Sgn (sp - tint) * Sin ((pi / 4) * Min (2, Abs (sp - tint)))
         tstring = tint & "°(" & tstring & ")"
      End If
      w = Round (w, 1)
      wstring = w & "° "
      hs.SaveVar device & "WaterSetPoint", w
      If hs.GetVar (device & "Delta") <> "" Then
         delta = (CInt (hs.GetVar (device & "Delta")) / 200) * ((trwat - 20) / (20 - tr)) * Max (0, tint - text)
         dstring = "±" & Round (delta, 1) & "° "
      End If
      If twat > w + delta Then
         commande = "Off"
      ElseIf twat <= w - delta Then
         commande = "On"

      End If
   Else
      tint = GetInteriorTemp (device)

' hs.writelog "Info_2", "temp Sonde "& tint &" "& device
' hs.writelog "Info_3", "temp BASE "& sp

      If hs.GetVar (device & "Delta") <> "" Then
         delta = CInt (hs.GetVar (device & "Delta")) / 10
         dstring = "±" & Round (delta, 1) & "° "
      End If
      If tint > sp + delta Then
         commande = "Off"
      ElseIf tint <= sp - delta Then
         commande = "On"
      End If

' hs.writelog "Info_4", "Commande "& commande

      tstring = tint & "°"
      If hs.GetVar (device & "WatSensor") <> "" Then
         twat = GetWaterTemp (device)
         tstring = tstring & "(" & twat & "°)"
      End If
   End If

' Inversion de la commande en cas de clim
   If hs.GetVar (device & "Clim") = "1" Then
      If commande = "On" Then
         commande = "Off"
      ElseIf commande = "Off" Then
         commande = "On"
      End If
   End If

' Respect des limites de la température d'eau
   If hs.GetVar (device & "WatSensor") <> "" Then
      If hs.GetVar (device & "MinWatTemp") <> "" Then
         If twat <= CInt (hs.GetVar (device & "MinWatTemp")) Then commande = "On" End If
      End If
      If hs.GetVar (device & "MaxWatTemp") <> "" Then
         If twat >= CInt (hs.GetVar (device & "MaxWatTemp")) Then commande = "Off" End If
      End If
   End If

' Envoi de la commande aux modules de chauffage
   i=1
   Do
      module = Trim (hs.StringItem (hs.GetVar (device & "Devices"), i, "-"))
      If module = "" Then Exit Do
      If (commande = "On" and hs.IsOff(module)) or (commande = "Off" and hs.IsOn(module)) Then
         hs.ExecX10 "" & module, commande, 0, 0
hs.WriteLog "info", "commande du module " & module & " Ă  " & commande
         hs.SetDeviceLastChange device, Now
      End If
      i = i + 1
   Loop

' Mise Ă  jour du status du thermostat

   Select Case hs.GetVar (device & "Affichage")
      Case 1 hs.SetDeviceString device, tstring & " [ " & m & " ]</small>"
      Case 2 hs.SetDeviceString device, tstring & " [ " & wstring & s & "° " & c & "° " & m & " ]</small>"
      Case 3 hs.SetDeviceString device, tstring & " [ " & wstring & dstring & s & "° " & c & "° " & o & "° " & a & "° " & m & " ]</small>"
      
   End Select
   ' -----------------------------------------------------
      ' Modification JF LAGARDE 08/05/2009
   '   hs.WriteLog "info1", tstring
   '   hs.WriteLog "info2", wstring
   '   hs.WriteLog "info3", dstring
   '   hs.WriteLog "info4", s
   '   hs.WriteLog "info5", c
   '   hs.WriteLog "info6", o
   '   hs.WriteLog "info7", a
   '   hs.WriteLog "info8", m   
      
   'm = Mode du chauffage / type
   'hs.WriteLog "Info_m" , m
   Mode_1 = InStr(1 , m ,"(")
   'hs.writelog "info_mode1" , Mode_1
   Mode1Len = len(m)
   'hs.writelog "info_mode1len" , Mode1Len
   'Type1 = left(m,Mode_1)    
   'hs.writelog "info_Type1" , Type1'
   
   If Mode_1 > 0  then
      Type1 = left(m,Mode_1-1)
         If Type1 <> "Aux" Then
         hs.SetDeviceString device&"1", Mid(m ,Mode_1+1,Mode1Len-Mode_1-1)
         hs.SetDeviceLastChange device&"1", Now
         hs.SetDeviceString device&"9", Type1
         Else
         hs.SetDeviceString device&"1", Mid(m ,Mode_1+1,Mode1Len-Mode_1-3)
         hs.SetDeviceLastChange device&"1", Now
         hs.SetDeviceString device&"9", Type1
         End if
   Else
         hs.SetDeviceString device&"1", Mid(m ,Mode_1+1,Mode1Len-Mode_1)
         hs.SetDeviceString device&"9", "None"
   End If
   's = HeatSetPoint
   hs.SetDeviceString device&"2", s
   'c = CoolsetPoint
   hs.SetDeviceString device&"3", c
   'o = OffSetPoint
   hs.SetDeviceString device&"4", o
   'a = AuxSetPoint
   hs.SetDeviceString device&"5", a
   'wstring = Watersetpoint
   hs.SetDeviceString device&"6", wstring
   'dstring = Deltasetpoint
   hs.SetDeviceString device&"7", dstring
   'tstring = Temperature
         'hs.WriteLog "info5", tstring
   tstring_l = len(tstring)
         'hs.WriteLog "info6", tstring_l
   hs.SetDeviceString device&"8", left(tstring,tstring_l-1)
   hs.SetDeviceValue device&"8", left(tstring,tstring_l-1)   * 10
   ' Fin de modifications
   ' -----------------------------------------------------   
' Renvoi de la température intérieure ou de la consigne
   GetTemp = tint
End Function

' =================================================================================================
' Renvoi la température intérieure
' =================================================================================================
Function GetInteriorTemp (device)
   device = Trim (device)

   i=1
   tint=0
   Do
      sensor = Trim (hs.StringItem (hs.GetVar (device & "IntSensor"), i, "+"))

      If sensor = "" Then Exit Do
      If hs.GetVar (device & "IntFactor") = 0 Then
' -----------------------------------------------------
' Modification JF LAGARDE 15/02/2009
'         tint = tint + Trim (Replace (Replace (Replace (hs.DeviceString (sensor), "°", ""), "C", ""), "F", ""))
' -----------------------------------------------------
' Modification JF LAGARDE 15/02/2009
         tint = tint + text2
' -----------------------------------------------------         
      Else
      text1 = hs.DeviceString (sensor)
         'hs.writelog "info_6" , hs.DeviceValue (sensor)
      position1 = InStr(1 , Text1 ,"left'>")
         'hs.writelog "info_7" , position1
         position2 = InStr(1 , Text1 ,"C<")
         'hs.writelog "info_8" , position2
         longueur = position2-12-position1
         'hs.writelog "info_9" , longueur
      text2 = mid(Text1 , position1 +6 , longueur)
         'hs.writelog "info_sensor_text2" , text2   
      
' -----------------------------------------------------
' Modification JF LAGARDE 15/02/2009
'         tint = tint + (hs.DeviceValue (sensor) / hs.GetVar (device & "IntFactor")*10)
'
' tint = tint + text2 / hs.GetVar (device & "IntFactor")   
         tint = tint + text2
'   hs.writelog "info_TINT_1", "valeur tint du sensor text "& text2
' -----------------------------------------------------
      End If
      i = i + 1
   Loop
   If i > 1 Then tint = Round ((tint / (i - 1)), 2) Else tint = Round (tint, 2) End If   
   GetInteriorTemp = tint
'   hs.writelog "info_TINT", "valeur tint du sensor "& tint
End Function

' =================================================================================================
' Renvoi la température extérieure
' =================================================================================================
Function GetExteriorTemp (device)
   device = Trim (device)
   i=1
   text=0
   Do
      sensor = Trim (hs.StringItem (hs.GetVar (device & "ExtSensor"), i, "+"))
      If sensor = "" Then Exit Do
      If hs.GetVar (device & "ExtFactor") = 0 Then
         text = text + Trim (Replace (Replace (Replace (hs.DeviceString (sensor), "°", ""), "C", ""), "F", ""))
      Else
         text = text + (hs.DeviceValue (sensor) / hs.GetVar (device & "ExtFactor"))
      End If
      i = i + 1
   Loop
   If i > 1 Then text = Round ((text / (i - 1)), 1) Else text = Round (text, 1) End If   
   GetExteriorTemp = text
End Function

' =================================================================================================
' Renvoi la température d'eau
' =================================================================================================
Function GetWaterTemp (device)
   device = Trim (device)
   i=1
   twat=0
   Do
      sensor = Trim (hs.StringItem (hs.GetVar (device & "WatSensor"), i, "+"))
      If sensor = "" Then Exit Do
      If hs.GetVar (device & "WatFactor") = 0 Then
         twat = twat + Trim (Replace (Replace (Replace (hs.DeviceString (sensor), "°", ""), "C", ""), "F", ""))
      Else
         twat = twat + (hs.DeviceValue (sensor) / hs.GetVar (device & "WatFactor"))
      End If
      i = i + 1
   Loop
   If i > 1 Then twat = Round ((twat / (i - 1)), 1) Else twat = Round (twat, 1) End If
   GetWaterTemp = twat
End Function

' =================================================================================================
' Renvoi le SetPoint
' =================================================================================================
Function GetSetPoint (device)
   device = Trim (device)
   GetSetPoint = hs.GetVar (device & "SetPoint")
End Function

' =================================================================================================
' Renvoi le CoolSetPoint
' =================================================================================================
Function GetCoolSetPoint (device)
   device = Trim (device)
   GetCoolSetPoint = hs.GetVar (device & "CoolSetPoint")
End Function

' =================================================================================================
' Renvoi le OffSetPoint
' =================================================================================================
Function GetOffSetPoint (device)
   device = Trim (device)
   GetOffSetPoint = hs.GetVar (device & "OffSetPoint")
End Function

' =================================================================================================
' Renvoi le AuxSetPoint
' =================================================================================================
Function GetAuxSetPoint (device)
   device = Trim (device)
   GetAuxSetPoint = hs.GetVar (device & "AuxSetPoint")
End Function

' =================================================================================================
' Renvoi le WaterSetPoint
' =================================================================================================
Function GetWaterSetPoint (device)
   device = Trim (device)
   GetWaterSetPoint = hs.GetVar (device & "WaterSetPoint")
End Function

' =================================================================================================
' Renvoi le mode de fonctionnement: 0/1/2/3/4 pour Hors-gel/Confort/Eco/Auto/Aux
' =================================================================================================
Function GetMode (device)
   device = Trim (device)
   GetMode = Left (hs.GetVar (device & "Mode"), 1)
End Function

' =================================================================================================
' Renvoi le mode de fonctionnement Auto: 0/1 pour Auto(Confort/Eco)
' =================================================================================================
Function GetFan (device)
   device = Trim (device)
   GetFan = Right (hs.GetVar (device & "Mode"), 1)
End Function

' =================================================================================================
' Change et renvoi le SetPoint
' =================================================================================================
Function SetSetPoint (params)               ' params = device:SetPoint
   device = Trim (hs.StringItem (params, 1, ":"))
   SetSetPoint = Trim (hs.StringItem (params, 2, ":"))

   If SetSetPoint <> hs.GetVar (device & "SetPoint") Then
      hs.SaveVar device & "SetPoint", SetSetPoint
      hs.SetDeviceLastChange device, Now
      SaveThermo (device)
      GetTemp (device)
   End If
End Function

' =================================================================================================
' Change et renvoi le SetPoint +1
' =================================================================================================
Function SetSetPointP1 (device)
   device = Trim (device)
   SetSetPoint (device & ":" & hs.GetVar (device & "SetPoint") + 1)
End Function

' =================================================================================================
' Change et renvoi le SetPoint -1
' =================================================================================================
Function SetSetPointM1 (device)
   device = Trim (device)
   SetSetPoint (device & ":" & hs.GetVar (device & "SetPoint") - 1)
End Function

' =================================================================================================
' Change et renvoi le SetPoint +0.1
' =================================================================================================
Function SetSetPointP01 (device)
   device = Trim (device)
   SetSetPoint (device & ":" & hs.GetVar (device & "SetPoint") + 1 / 10)
End Function

' =================================================================================================
' Change et renvoi le SetPoint -0.1
' =================================================================================================
Function SetSetPointM01 (device)
   device = Trim (device)
   SetSetPoint (device & ":" & hs.GetVar (device & "SetPoint") - 1 / 10)
End Function

' =================================================================================================
' Change et renvoi le CoolSetPoint
' =================================================================================================
Function SetCoolSetPoint (params)            ' params = device:CoolSetPoint
   device = Trim (hs.StringItem (params, 1, ":"))
   SetCoolSetPoint = Trim (hs.StringItem (params, 2, ":"))

   If SetCoolSetPoint <> hs.GetVar (device & "CoolSetPoint") Then
      hs.SaveVar device & "CoolSetPoint", SetCoolSetPoint
      hs.SetDeviceLastChange device, Now
      SaveThermo (device)
      GetTemp (device)
   End If
End Function

' =================================================================================================
' Change et renvoi le CoolSetPoint +1
' =================================================================================================
Function SetCoolSetPointP1 (device)
   device = Trim (device)
   SetCoolSetPoint (device & ":" & hs.GetVar (device & "CoolSetPoint") + 1)
End Function

' =================================================================================================
' Change et renvoi le CoolSetPoint -1
' =================================================================================================
Function SetCoolSetPointM1 (device)
   device = Trim (device)
   SetCoolSetPoint (device & ":" & hs.GetVar (device & "CoolSetPoint") - 1)
End Function

' =================================================================================================
' Change et renvoi le CoolSetPoint +0.1
' =================================================================================================
Function SetCoolSetPointP01 (device)
   device = Trim (device)
   SetCoolSetPoint (device & ":" & hs.GetVar (device & "CoolSetPoint") + 1 / 10)
End Function

' =================================================================================================
' Change et renvoi le CoolSetPoint -0.1
' =================================================================================================
Function SetCoolSetPointM01 (device)
   device = Trim (device)
   SetCoolSetPoint (device & ":" & hs.GetVar (device & "CoolSetPoint") - 1 / 10)
End Function

' =================================================================================================
' Change et renvoi le OffSetPoint
' =================================================================================================
Function SetOffSetPoint (params)            ' params = device:OffSetPoint
   device = Trim (hs.StringItem (params, 1, ":"))
   SetOffSetPoint = Trim (hs.StringItem (params, 2, ":"))

   If SetOffSetPoint <> hs.GetVar (device & "OffSetPoint") Then
      hs.SaveVar device & "OffSetPoint", SetOffSetPoint
      hs.SetDeviceLastChange device, Now
      SaveThermo (device)
      GetTemp (device)
   End If
End Function

' =================================================================================================
' Change et renvoi le AuxSetPoint
' =================================================================================================
Function SetAuxSetPoint (params)            ' params = device:AuxSetPoint
   device = Trim (hs.StringItem (params, 1, ":"))
   SetAuxSetPoint = Trim (hs.StringItem (params, 2, ":"))

   If SetAuxSetPoint <> hs.GetVar (device & "AuxSetPoint") Then
      hs.SaveVar device & "AuxSetPoint", SetAuxSetPoint
      hs.SetDeviceLastChange device, Now
      SaveThermo (device)
      GetTemp (device)
   End If
End Function

' =================================================================================================
' Change et renvoi le mode de fonctionnement: 0/1/2/3/4 pour Hors-gel/Confort/Eco/Auto/Aux
' =================================================================================================
Function SetMode (params)               ' params = device:mode
   device = Trim (hs.StringItem (params, 1, ":"))
   mode = hs.GetVar (device & "Mode")
   SetMode = CInt (Left (Trim (hs.StringItem (params, 2, ":")), 1))

   If SetMode <> CInt (Left (mode, 1)) and SetMode <= 4 Then
      hs.SaveVar device & "Mode", SetMode & Right (mode, 1)
      hs.SetDeviceLastChange device, Now
      SaveThermo (device)
      GetTemp (device)
   End If
End Function

' =================================================================================================
' Change et renvoi le mode de fonctionnement Auto: 0/1 pour Auto(Confort/Eco)
' =================================================================================================
Function SetFan (params)               ' params = device:mode
   device = Trim (hs.StringItem (params, 1, ":"))
   mode = hs.GetVar (device & "Mode")
   SetFan = CInt (Right (Trim (hs.StringItem (params, 2, ":")), 1))

   If SetFan <> CInt (Right (mode, 1)) and SetFan <= 1 Then
      hs.SaveVar device & "Mode", Left (mode, 1) & SetFan
      hs.SetDeviceLastChange device, Now
      SaveThermo (device)
      GetTemp (device)
   End If
End Function

' =================================================================================================
' Sauvegarde des paramètres du thermostat
' =================================================================================================
Function SaveThermo (device)
   device = Trim (device)
   ThermoData = ""
   ecrit = false

   Set fs = CreateObject ("Scripting.FileSystemObject")
   If fs.FileExists (hs.GetAppPath & "\config\VThermostat.ini") Then
      Set f = fs.OpenTextFile (hs.GetAppPath & "\config\VThermostat.ini")
         Do While Not f.AtEndOfStream
            temp = f.ReadLine
            If hs.StringItem (temp,1,",") = device Then
               ThermoData = Thermodata & device & "," & _
                  hs.GetVar (device & "Affichage") & "," & _
                  hs.GetVar (device & "Mode") & "," & _
                  hs.GetVar (device & "SetPoint") & "," & _
                  hs.GetVar (device & "CoolSetPoint") & "," & _
                  hs.GetVar (device & "OffSetPoint") & "," & _
                  hs.GetVar (device & "AuxSetPoint") & "," & _
                  hs.GetVar (device & "Devices") & "," & _
                  hs.GetVar (device & "IntSensor") & "," & _
                  hs.GetVar (device & "IntFactor") & "," & _
                  hs.GetVar (device & "ExtSensor") & "," & _
                  hs.GetVar (device & "ExtFactor") & "," & _
                  hs.GetVar (device & "WatSensor") & "," & _
                  hs.GetVar (device & "WatFactor") & "," & _
                  hs.GetVar (device & "RegTemp") & "," & _
                  hs.GetVar (device & "RegWatTemp") & "," & _
                  hs.GetVar (device & "MinWatTemp") & "," & _
                  hs.GetVar (device & "MaxWatTemp") & "," & _
                  hs.GetVar (device & "Delta") & "," & _
                  hs.GetVar (device & "Clim") & "," & _
                  hs.GetVar (device & "BtnSup") & VbCrLf
               ecrit = true
            Else
               ThermoData = Thermodata & temp & VbCrLf
            End If
         Loop
      f.close
   End If

   If ecrit = false Then
      ThermoData = Thermodata & device & "," & _
         hs.GetVar (device & "Affichage") & "," & _
         hs.GetVar (device & "Mode") & "," & _
         hs.GetVar (device & "SetPoint") & "," & _
         hs.GetVar (device & "CoolSetPoint") & "," & _
         hs.GetVar (device & "OffSetPoint") & "," & _
         hs.GetVar (device & "AuxSetPoint") & "," & _
         hs.GetVar (device & "Devices") & "," & _
         hs.GetVar (device & "IntSensor") & "," & _
         hs.GetVar (device & "IntFactor") & "," & _
         hs.GetVar (device & "ExtSensor") & "," & _
         hs.GetVar (device & "ExtFactor") & "," & _
         hs.GetVar (device & "WatSensor") & "," & _
         hs.GetVar (device & "WatFactor") & "," & _
         hs.GetVar (device & "RegTemp") & "," & _
         hs.GetVar (device & "RegWatTemp") & "," & _
         hs.GetVar (device & "MinWatTemp") & "," & _
         hs.GetVar (device & "MaxWatTemp") & "," & _
         hs.GetVar (device & "Delta") & "," & _
         hs.GetVar (device & "Clim") & "," & _
         hs.GetVar (device & "BtnSup") & VbCrLf
   End If

   Set f = fs.CreateTextFile (hs.GetAppPath & "\config\VThermostat.ini", true)
      f.Write (ThermoData)
   f.Close
   Set f = Nothing
   Set fs = Nothing
End Function

' =================================================================================================
' Remise à zero des paramètres du thermostat
' =================================================================================================
Function ResetThermo (device)
   device = Trim (device)

' Effacement des boutons
   hs.GetDeviceByRef (hs.GetDeviceRef (device)).buttons = ""

' Création du bouton Reset
   hs.DeviceButtonAdd device, "VThermostat.thm (""ResetThermo"", " & device & ")", "Reset"

' Effacement des variables
   hs.DeleteVar (device & "Affichage")
   hs.DeleteVar (device & "Mode")
   hs.DeleteVar (device & "SetPoint")
   hs.DeleteVar (device & "CoolSetPoint")
   hs.DeleteVar (device & "OffSetPoint")
   hs.DeleteVar (device & "AuxSetPoint")
   hs.DeleteVar (device & "WaterSetPoint")
   hs.DeleteVar (device & "Devices")
   hs.DeleteVar (device & "IntSensor")
   hs.DeleteVar (device & "IntFactor")
   hs.DeleteVar (device & "ExtSensor")
   hs.DeleteVar (device & "ExtFactor")
   hs.DeleteVar (device & "WatSensor")
   hs.DeleteVar (device & "WatFactor")
   hs.DeleteVar (device & "RegTemp")
   hs.DeleteVar (device & "RegWatTemp")
   hs.DeleteVar (device & "MinWatTemp")
   hs.DeleteVar (device & "MaxWatTemp")
   hs.DeleteVar (device & "Delta")
   hs.DeleteVar (device & "Clim")
   hs.DeleteVar (device & "BtnSup")

' Création des variables
   hs.CreateVar (device & "Affichage")
   hs.CreateVar (device & "Mode")
   hs.CreateVar (device & "SetPoint")
   hs.CreateVar (device & "CoolSetPoint")
   hs.CreateVar (device & "OffSetPoint")
   hs.CreateVar (device & "AuxSetPoint")
   hs.CreateVar (device & "WaterSetPoint")
   hs.CreateVar (device & "Devices")
   hs.CreateVar (device & "IntSensor")
   hs.CreateVar (device & "IntFactor")
   hs.CreateVar (device & "ExtSensor")
   hs.CreateVar (device & "ExtFactor")
   hs.CreateVar (device & "WatSensor")
   hs.CreateVar (device & "WatFactor")
   hs.CreateVar (device & "RegTemp")
   hs.CreateVar (device & "RegWatTemp")
   hs.CreateVar (device & "MinWatTemp")
   hs.CreateVar (device & "MaxWatTemp")
   hs.CreateVar (device & "Delta")
   hs.CreateVar (device & "Clim")
   hs.CreateVar (device & "BtnSup")

' Attribution des valeurs
   IniThermo (device)

' Création du bouton suplémentaires
   BtnSup = hs.GetVar (device & "BtnSup")
   If BtnSup = "1" or BtnSup = "2" Then
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP1"", " & device & ")", "<br>H+1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM1"", " & device & ")", "H-1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP01"", " & device & ")", "H+0.1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM01"", " & device & ")", "H-0.1"
   End If
   If BtnSup ="1" or BtnSup = "3" Then
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP1"", " & device & ")", "<br>C+1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM1"", " & device & ")", "C-1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP01"", " & device & ")", "C+0.1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM01"", " & device & ")", "C-0.1"
   ElseIf BtnSup = "4" Then
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP1"", " & device & ")", "<br>H+1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM1"", " & device & ")", "H-1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP1"", " & device & ")", "C+1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM1"", " & device & ")", "C-1"
   ElseIf BtnSup = "5" Then
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointP01"", " & device & ")", "<br>H+0.1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetSetPointM01"", " & device & ")", "H-0.1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointP01"", " & device & ")", "C+0.1"
      hs.DeviceButtonAdd device, "VThermostat.thm (""SetCoolSetPointM01"", " & device & ")", "C-0.1"
   End If

   hs.WriteLog "Thermostat virtuel", "Vous avez initilalisĂ© le thermostat de code " & device

   GetTemp (device)
End Function

Function IniThermo (device)
   device = Trim (device)
   IniExists = false
   
   Set fs = CreateObject("Scripting.FileSystemObject")
   If fs.FileExists (hs.GetAppPath & "\config\VThermostat.ini") Then
      Set f = fs.OpenTextFile (hs.GetAppPath & "\config\VThermostat.ini")
         Do While Not f.AtEndOfStream
            ThermoData = f.ReadLine
            If hs.StringItem (ThermoData,1,",") = device Then
               IniExists = true
               Exit Do
            End If
         Loop
      f.close
      Set f = Nothing
   End If
   Set fs = Nothing
      
   If IniExists Then
      Ini2 = hs.StringItem (ThermoData,2,",")
      Ini3 = hs.StringItem (ThermoData,3,",")
      Ini4 = hs.StringItem (ThermoData,4,",")
      Ini5 = hs.StringItem (ThermoData,5,",")
      Ini6 = hs.StringItem (ThermoData,6,",")
      Ini7 = hs.StringItem (ThermoData,7,",")
      Ini8 = hs.StringItem (ThermoData,8,",")
      Ini9 = hs.StringItem (ThermoData,9,",")
      Ini10 = hs.StringItem (ThermoData,10,",")
      Ini11 = hs.StringItem (ThermoData,11,",")
      Ini12 = hs.StringItem (ThermoData,12,",")
      Ini13 = hs.StringItem (ThermoData,13,",")
      Ini14 = hs.StringItem (ThermoData,14,",")
      Ini15 = hs.StringItem (ThermoData,15,",")
      Ini16 = hs.StringItem (ThermoData,16,",")
      Ini17 = hs.StringItem (ThermoData,17,",")
      Ini18 = hs.StringItem (ThermoData,18,",")
      Ini19 = hs.StringItem (ThermoData,19,",")
      Ini20 = hs.StringItem (ThermoData,20,",")
      Ini21 = hs.StringItem (ThermoData,21,",")
   Else
      Ini2 = "1"
      Ini3 = "30"
      Ini4 = "20"
      Ini5 = "16"
      Ini6 = "8"
      Ini7 = "1"
   End If

   hs.SaveVar device & "Affichage", InputBox ("Entrez le type d'affichage du status du thermostat:" & Chr(13) & Chr(13)_
      & "1 simple" & Chr(13)_
      & "2 dĂ©taillĂ©" & Chr(13)_
      & "3 complet" & Chr(13)_
      , "Thermostat virtuel Setup", Ini2)
   hs.SaveVar device & "Mode", Ini3
   hs.SaveVar device & "SetPoint", Ini4
   hs.SaveVar device & "CoolSetPoint", Ini5
   hs.SaveVar device & "OffSetPoint", InputBox ("Entrez le seuil en mode Hors-gel:" & Chr(13), "Thermostat virtuel Setup", Ini6)
   hs.SaveVar device & "AuxSetPoint", InputBox ("Entrez l'abaissement du mode Aux:" & Chr(13)_
      & "En mode Aux, le thermostat fonctionne comme en mode Auto mais avec un seuil abaissĂ© de cette valeur." & Chr(13) & Chr(13)_
      & "Ce mode est fait pour les courtes abscences, une fois de retour il suffit de repasser sur Auto." & Chr(13)_
      , "Thermostat virtuel Setup", Ini7)
   hs.SaveVar device & "Devices", InputBox ("Entrez le(s) module(s) de chauffage Ă  controller:" & Chr(13)_
      & "exemple: A1" & Chr(13) & Chr(13)_
      & "Pour plusieurs modules, sĂ©parez-les par '-'." & Chr(13)_
      & "exemple: A1-B2-C3" & Chr(13) & Chr(13)_
      & "Pour plusieurs modules d'un mĂŞme code maison, sĂ©parez-les par '+' pour une mise en marche synchronisĂ©e." & Chr(13)_
      & "exemple: A1+2+3" & Chr(13) & Chr(13)_
      & "Vous pouvez combiner les deux." & Chr(13)_
      & "exemple: A1+2+3-B2-C3" & Chr(13)_
      , "Thermostat virtuel Setup", Ini8)
   If MsgBox ("Voulez-vous utiliser ce thermostat en mode clim?" & Chr(13) & Chr(13)_
      & "En mode clim le thermostat fonctionnera de la mĂŞme façon sauf que la mise en marche/arrĂŞt de vos appareils sera inversĂ©e." & Chr(13)_
      , vbYesNo + vbQuestion, "Thermostat virtuel Setup") = vbYes Then
      hs.SaveVar device & "Clim", "1"
   End If
   hs.SaveVar device & "BtnSup", InputBox ("Voulez-vous des boutons suplĂ©mentaires?:" & Chr(13) & Chr(13)_
      & "Cette valeur est optionelle, laissez vide pour ne pas l'utiliser." & Chr(13)_
      & "Ces boutons permettent de faire varier les consignes au degrès ou/et au dixième par l'interface." & Chr(13)_
      & "1 Tous les boutons" & Chr(13)_
      & "2 Tous ceux du mode Confort" & Chr(13)_
      & "3 Tous ceux du mode Eco" & Chr(13)_
      & "4 Ceux du mode Confort et Eco mais au degrès" & Chr(13)_
      & "5 Ceux du mode Confort et Eco mais au dixième" & Chr(13)_
      , "Thermostat virtuel Setup", Ini21)
   MsgBox "Vous allez maintenant indiquer quelles sondes vous allez utiliser." & Chr(13) & Chr(13)_
      & "En fonction de la combinaison intĂ©rieure/extĂ©rieure/eau le thermostat va fonctionner suivant un mode diffĂ©rent." & Chr(13) & Chr(13)_
      & "int + ext + eau : Loi d'eau avec auto-correction" & Chr(13)_
      & "ext + eau : Loi d'eau sans auto-correction" & Chr(13)_
      & "int : Fonctionnement normal" & Chr(13)_
      & "int + eau : Fonctionnement normal avec limites de tempĂ©ratures d'eau" & Chr(13)_
      , 64, "Thermostat virtuel Setup"
   hs.SaveVar device & "IntSensor", InputBox ("Entrez le code de votre sonde intĂ©rieure:" & Chr(13)_
      & "exemple: w1" & Chr(13) & Chr(13)_
      & "Pour plusieurs sondes, sĂ©parez-les par '+'." & Chr(13)_
      & "exemple: w1+w2+w3" & Chr(13) & Chr(13)_
      & "Pour utilser une moyenne pondĂ©rĂ©e, repetez chaque sonde un nombre de fois egal Ă  sa pondĂ©ration." & Chr(13)_
      & "exemple: w1+w1+w1+w2+w3+w3" & Chr(13) & Chr(13)_
      & "Si vous n'utilisez pas de sonde intĂ©rieure, laissez vide." & Chr(13)_
      , "Thermostat virtuel Setup", Ini9)
   If hs.GetVar (device & "IntSensor") <> "" Then
      hs.SaveVar device & "IntFactor", InputBox ("Entrez le muliplicateur appliquĂ© Ă  la valeur des sondes Int:" & Chr(13) & Chr(13)_
         & "1 si la sonde affiche 20 et sa valeur est 20" & Chr(13)_
         & "10 si  la sonde affiche 20,2 et sa valeur est 202" & Chr(13)_
         & "etc." & Chr(13) & Chr(13)_
         & "Souvent 10 pour les stations mĂ©tĂ©o, 10000 pour du 1-Wire" & Chr(13) & Chr(13)_
         & "Entrez 0 si vous utilisez la chaine de caractères et non la valeur." & Chr(13)_
         & "Dans ce cas la chaine ne doit pas contenir de caractères spĂ©ciaux autres que °CT" & Chr(13)_
         , "Thermostat virtuel Setup", Ini10)
   End If
   hs.SaveVar device & "ExtSensor", InputBox ("Entrez le code de votre sonde extĂ©rieure:" & Chr(13)_
      & "exemple: w1" & Chr(13) & Chr(13)_
      & "Pour plusieurs sondes, sĂ©parez-les par '+'." & Chr(13)_
      & "exemple: w1+w2+w3" & Chr(13) & Chr(13)_
      & "Pour utilser une moyenne pondĂ©rĂ©e, repetez chaque sonde un nombre de fois egal Ă  sa pondĂ©ration." & Chr(13)_
      & "exemple: w1+w1+w1+w2+w3+w3" & Chr(13) & Chr(13)_
      & "Si vous n'utilisez pas de sonde intĂ©rieure, laissez vide." & Chr(13)_
      , "Thermostat virtuel Setup", Ini11)
   If hs.GetVar (device & "ExtSensor") <> "" Then
      hs.SaveVar device & "ExtFactor", InputBox ("Entrez le muliplicateur appliquĂ© Ă  la valeur des sondes Ext:" & Chr(13) & Chr(13)_
         & "1 si la sonde affiche 20 et sa valeur est 20" & Chr(13)_
         & "10 si  la sonde affiche 20,2 et sa valeur est 202" & Chr(13)_
         & "etc." & Chr(13) & Chr(13)_
         & "Souvent 10 pour les stations mĂ©tĂ©o, 10000 pour du 1-Wire" & Chr(13) & Chr(13)_
         & "Entrez 0 si vous utilisez la chaine de caractères et non la valeur." & Chr(13)_
         & "Dans ce cas la chaine ne doit pas contenir de caractères spĂ©ciaux autres que °CT" & Chr(13)_
         , "Thermostat virtuel Setup", Ini12)
   End If
   hs.SaveVar device & "WatSensor", InputBox ("Entrez le code de votre sonde d'eau:" & Chr(13)_
      & "exemple: w1" & Chr(13) & Chr(13)_
      & "Pour plusieurs sondes, sĂ©parez-les par '+'." & Chr(13)_
      & "exemple: w1+w2+w3" & Chr(13) & Chr(13)_
      & "Pour utilser une moyenne pondĂ©rĂ©e, repetez chaque sonde un nombre de fois egal Ă  sa pondĂ©ration." & Chr(13)_
      & "exemple: w1+w1+w1+w2+w3+w3" & Chr(13) & Chr(13)_
      & "Si vous n'utilisez pas de sonde intĂ©rieure, laissez vide." & Chr(13)_
      , "Thermostat virtuel Setup", Ini13)
   If hs.GetVar (device & "WatSensor") <> "" Then
      hs.SaveVar device & "WatFactor", InputBox ("Entrez le muliplicateur appliquĂ© Ă  la valeur des sondes d'eau:" & Chr(13) & Chr(13)_
         & "1 si la sonde affiche 20 et sa valeur est 20" & Chr(13)_
         & "10 si  la sonde affiche 20,2 et sa valeur est 202" & Chr(13)_
         & "etc." & Chr(13) & Chr(13)_
         & "Souvent 10 pour les stations mĂ©tĂ©o, 10000 pour du 1-Wire" & Chr(13) & Chr(13)_
         & "Entrez 0 si vous utilisez la chaine de caractères et non la valeur." & Chr(13)_
         & "Dans ce cas la chaine ne doit pas contenir de caractères spĂ©ciaux autres que °CT" & Chr(13)_
         , "Thermostat virtuel Setup", Ini14)
   End If
   If hs.GetVar (device & "ExtSensor") <> "" and hs.GetVar (device & "WatSensor") <> "" Then
      hs.SaveVar device & "RegTemp", InputBox ("Entrez votre tempĂ©rature minimale rĂ©gionale:" & Chr(13), "Thermostat virtuel Setup", Ini15)
      hs.SaveVar device & "RegWatTemp", InputBox ("Entrez votre tempĂ©rature d'eau minimale rĂ©gionale:" & Chr(13) & Chr(13)_
         & "C'est la tempĂ©rature d'eau qu'il faut pour maintenir 20° Ă  l'intĂ©rieur avec une tempĂ©rature extĂ©rieure Ă©gale Ă  la tempĂ©rature minimale rĂ©gionale." & Chr(13) & Chr(13)_
         & "Si votre système est bien dimensionĂ© elle devrait ĂŞtre proche du maximum, de l'ordre de 45° pour un plancher chauffant et 70° pour des radiateurs." & Chr(13) & Chr(13)_
         & "Si vous utilisez des tempĂ©ratures de retour d'eau pensez Ă  abaisser cette valeur en fonction des pertes de tempĂ©ratures." & Chr(13)_
         , "Thermostat virtuel Setup", Ini16)
      hs.SaveVar device & "Delta", InputBox ("Entrez le delta:" & Chr(13) & Chr(13)_
         & "Cette valeur est optionelle, laissez vide pour ne pas l'utiliser." & Chr(13)_
         & "Sinon entrez une valeur de 0 Ă  100." & Chr(13) & Chr(13)_
         & "Plus ce chiffre est haut et moins votre chaudière ou pac sera solicitĂ©e mais vous augmentez l'hysteresis, doĂą une perte de confort." & Chr(13)_
         & "Cette valeur baisse le seuil de mise en marche et augmente le seuil d'arrĂŞt pour espacer les dĂ©clanchements dans le temps." & Chr(13)_
         , "Thermostat virtuel Setup", Ini19)
   Else
      hs.SaveVar device & "Delta", InputBox ("Entrez le delta:" & Chr(13) & Chr(13)_
         & "Cette valeur est optionelle, laissez vide pour ne pas l'utiliser." & Chr(13)_
         & "Sinon entrez une valeur de 1 pour chaque dixième de degrès." & Chr(13) & Chr(13)_
         & "Plus ce chiffre est haut et moins vos appareils seront solicitĂ©s mais vous augmentez l'hysteresis, doĂą une perte de confort." & Chr(13)_
         & "Cette valeur est ajoutĂ©e/retirĂ©e au seuil de mise en arrĂŞt/marche pour espacer les dĂ©clanchements dans le temps." & Chr(13)_
         , "Thermostat virtuel Setup", Ini19)
   End If
   If hs.GetVar (device & "WatSensor") <> "" Then
      hs.SaveVar device & "MinWatTemp", InputBox ("Entrez votre tempĂ©rature minimale du circuit d'eau:" & Chr(13)_
         & "Cette valeur est optionelle, laissez vide pour ne pas l'utiliser." & Chr(13)_
         & "Peut ĂŞtre utile par exemple pour une chaudière ou ballon tampon pour maintenir l'eau au dessus d'une certaine tempĂ©rature." & Chr(13)_
         , "Thermostat virtuel Setup", Ini17)
      hs.SaveVar device & "MaxWatTemp", InputBox ("Entrez votre tempĂ©rature maximale du circuit d'eau:" & Chr(13)_
         & "Cette valeur est optionelle, laissez vide pour ne pas l'utiliser." & Chr(13)_
         & "Peut ĂŞtre utile par exemple pour un plancher chauffant pour ne pas dĂ©passer la tempĂ©rature de condensation." & Chr(13)_
         , "Thermostat virtuel Setup", Ini18)
   End If

   SaveThermo (device)
End Function

Function Min(a,b)
   if a<b Then Min=a Else Min=b
End Function

Function Max(a,b)
   if a<b Then Max=b else Max=a
End function


Surtout la partie "Mise Ă  jour du Thermostat"

J'ai créer des devices supplementaires pour chaque fonction à visualiser dans les thermostats sous HSTOUCH (puisque celui-ci ne voit pas le thermostat virtuel)

J'ai créer un event pour chaque fonction , et un script pour la fonction AUX

Je suis partie sur la base RCS Thermostat.xml du skin par default.

J'ai mis le status des differents mode sur le thermostat

J'ai dupliqué le bouton MODE et appliqué un event pour chaque bouton.
J'ai rajouté un petit voyant pour le device commandé par le thermostat

La mise Ă  jour du mode est immediate

Image

Jean-Francois.
Portable ACER V3-771G , I7, 4Gb, SSD 256GB + 750GB de disk

Homesser HS3 Pro 3.0.0.435
Plugin enabled:
2.0.40.0: BLLAN, 1.0.3.0: BLShutdown, 2.0.10.0: BLUSBUIRT, 4.8.6.0: BULLET
0.0.0.31: drhsIpPlugIn, 3.3.2.0: mcsMQTT, 3.0.0.69: mcsXap, 3.0.0.14: NetCAM
3.0.1.109: PHLocation, 30.0.0.36: RFXCOM, 5.0.2.0: SCREPOSITORY, 3.0.0.44: X10
0.0.0.11: Yeelight 3P, 3.0.1.210: Z-Wave,
CM11A, 20 SW10,
35 nodes ZWAVE
Reseau 1-Wire 11 DS1920
3 MS13E, 1 RFXCOM RFXTRX433E
Ethernet Livebox4
Nabaztag-Tag
jfla
Dieu de domotique
 
Messages: 346
Inscription: 07 Mar 2004, 16:57
Localisation: Normandie (France)

Messagede Thufir » 11 Mai 2009, 18:40

Bonjour Jean-François,

Tellement occupé avec xapmcs1Wire ces derniers jours (au passage, je te remercie encore pour ton aide) que je n'avais pas vu ce fil

J'avais créé quelques thermostats virtuel pour la future gestion du chauffage et ça marchait plutôt bien avec le module read1wire. Maintenant que je me suis mis au Xap, mes thermostats de fonctionnent plus.
Je vais regarder de près le script modifié et voir si je peux l'utiliser

Aller ... encore quelques maux de tĂŞte en perspective :D

A+
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Messagede Thufir » 12 Mai 2009, 17:32

Bonsoir,

Maintenant que mon 1wire est ok, je m'attaque Ă  la partie thermostats

J'ai déjà une question à te poser :oops:

J'ai supprimé tous les thermostats que j'avais créer ainsi que les devices virtuels et events qui leur étaient rattachés pour repartir à zéro.

J'ai donc mis ton script modifié, et créé un thermostat virtuel. Message d'erreur :
Code: Tout sélectionner
12/05/2009 18:30:35  - Error - Running script, script run or compile error in file: VThermostat.thm5:Argument ou appel de procĂ©dure incorrect: 'Mid' in line 335 More info: Argument ou appel de procĂ©dure incorrect: 'Mid'


J'ai regardé dans un éditeur, la ligne 335 est la suivante :
Code: Tout sélectionner
text2 = mid(Text1 , position1 +6 , longueur)


Ce script fonctionne chez toi, je suppose. Alors pourquoi j'ai cette erreur ?

Merci pour ton aide :wink:

A+
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Messagede Thufir » 12 Mai 2009, 18:02

J'essaie de comprendre un peu cette partie de code :
Code: Tout sélectionner
' -----------------------------------------------------
' Modification JF LAGARDE 15/02/2009
         tint = tint + text2
' -----------------------------------------------------         
      Else
      text1 = hs.DeviceString (sensor)
         'hs.writelog "info_6" , hs.DeviceValue (sensor)
       position1 = InStr(1 , Text1 ,"left'>")
         'hs.writelog "info_7" , position1
         position2 = InStr(1 , Text1 ,"C<")
         'hs.writelog "info_8" , position2
         longueur = position2-12-position1
         'hs.writelog "info_9" , longueur
       text2 = mid(Text1 , position1 +6 , longueur)
         'hs.writelog "info_sensor_text2" , text2   
     
' -----------------------------------------------------


J'ai décommenté les lignes d'affichage et voilà ce que j'ai :
info_6 = 25
info_7 = 0
info_8 = 0
info_9 = -12

Il y a un problème dans les recherche de chaine InStr. J'ai rajouté une ligne pour afficher la variable texte1, et le résultat est : 25,4

hs.DeviceString (sensor) correspond donc à la T° donnée par mcsXap (j'ai vérifié, j'ai bien 25.4 °)
hs.DeviceValue (sensor) correspond Ă  cette valeur convertie en entier

Je ne comprend pas comment tes modifs fonctionnent chez toi
:?

Si tu as une idée :idea:

Merci
A+
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Messagede jfla » 13 Mai 2009, 10:23

Bonjour,

as tu modifié dans le panneau de config de windows , dans les parametres regionaux la virgule en point pour le decimal symbole des nombres ?

McsXap1wire te donne 25 point 4 et tu vois 25 virgule 4 dans la valeur de sensor

De plus, si tu ne fais pas cette modification, ta chaine dans Vthermostat.ini n'est pas valide si tu travailles au 0.1 °C

Tu devrais avoir ceci:

T1,3,00,19.3,20.3,16,2,P14,[2,10,,,,,,,,,,,5

J'utilise notepad++ pour editer les fichier de code, c'est vraiement plus facile pour faire des recherches dans les lignes.

Je suis sous WIN2K (plus leger, tous les patchs Ă  jour , + .net 2.0
JF.
Portable ACER V3-771G , I7, 4Gb, SSD 256GB + 750GB de disk

Homesser HS3 Pro 3.0.0.435
Plugin enabled:
2.0.40.0: BLLAN, 1.0.3.0: BLShutdown, 2.0.10.0: BLUSBUIRT, 4.8.6.0: BULLET
0.0.0.31: drhsIpPlugIn, 3.3.2.0: mcsMQTT, 3.0.0.69: mcsXap, 3.0.0.14: NetCAM
3.0.1.109: PHLocation, 30.0.0.36: RFXCOM, 5.0.2.0: SCREPOSITORY, 3.0.0.44: X10
0.0.0.11: Yeelight 3P, 3.0.1.210: Z-Wave,
CM11A, 20 SW10,
35 nodes ZWAVE
Reseau 1-Wire 11 DS1920
3 MS13E, 1 RFXCOM RFXTRX433E
Ethernet Livebox4
Nabaztag-Tag
jfla
Dieu de domotique
 
Messages: 346
Inscription: 07 Mar 2004, 16:57
Localisation: Normandie (France)

Messagede jfla » 13 Mai 2009, 10:54

Re:
pour ceci
Thufir a Ă©crit:J'essaie de comprendre un peu cette partie de code :
Code: Tout sélectionner
' -----------------------------------------------------
' Modification JF LAGARDE 15/02/2009
         tint = tint + text2
' -----------------------------------------------------         
      Else
      text1 = hs.DeviceString (sensor)
         'hs.writelog "info_6" , hs.DeviceValue (sensor)
       position1 = InStr(1 , Text1 ,"left'>")
         'hs.writelog "info_7" , position1
         position2 = InStr(1 , Text1 ,"C<")
         'hs.writelog "info_8" , position2
         longueur = position2-12-position1
         'hs.writelog "info_9" , longueur
       text2 = mid(Text1 , position1 +6 , longueur)
         'hs.writelog "info_sensor_text2" , text2   
     
' -----------------------------------------------------


J'ai décommenté les lignes d'affichage et voilà ce que j'ai :
info_6 = 25
info_7 = 0
info_8 = 0
info_9 = -12

Il y a un problème dans les recherche de chaine InStr. J'ai rajouté une ligne pour afficher la variable texte1, et le résultat est : 25,4

hs.DeviceString (sensor) correspond donc à la T° donnée par mcsXap (j'ai vérifié, j'ai bien 25.4 °)
hs.DeviceValue (sensor) correspond Ă  cette valeur convertie en entier

Je ne comprend pas comment tes modifs fonctionnent chez toi
:?

Si tu as une idée :idea:

Merci
A+


Modification JF LAGARDE 15/02/2009
tint = tint + text2 (cette ligne est bidon )
Il faut mettre une valeur au multiplicateur de ta sonde interieur

If hs.GetVar (device & "IntFactor") = 0 then

je recupere la string qui affiche l'icone de temperature dans la page web d'homeseer (pour ton device McsXap1Wire que tu vas utiliser dans ton thermostat),

Code: Tout sélectionner
=<table><td><img alt='Temperature' src='/images/temperatures/19.gif' height='16' width='16'><img alt=' ' src='/images/sensors/blank3.gif'></td><td valign='middle' align='left'>19.5°C</td></table>


Sauf que °C s'ecrit &#176C

DONC: je cherche la position du mot 'left'>
PUIS le caractere C
Et je fait une operation pour retrouver ma temperature.

c'est ce qui passe sur le reseau Xap

un autre utilitaire de YCSimon : Run script: SuissKnife.vbh

http://domotics.free.fr/upload/SuissKnife.vbh

JF.
Portable ACER V3-771G , I7, 4Gb, SSD 256GB + 750GB de disk

Homesser HS3 Pro 3.0.0.435
Plugin enabled:
2.0.40.0: BLLAN, 1.0.3.0: BLShutdown, 2.0.10.0: BLUSBUIRT, 4.8.6.0: BULLET
0.0.0.31: drhsIpPlugIn, 3.3.2.0: mcsMQTT, 3.0.0.69: mcsXap, 3.0.0.14: NetCAM
3.0.1.109: PHLocation, 30.0.0.36: RFXCOM, 5.0.2.0: SCREPOSITORY, 3.0.0.44: X10
0.0.0.11: Yeelight 3P, 3.0.1.210: Z-Wave,
CM11A, 20 SW10,
35 nodes ZWAVE
Reseau 1-Wire 11 DS1920
3 MS13E, 1 RFXCOM RFXTRX433E
Ethernet Livebox4
Nabaztag-Tag
jfla
Dieu de domotique
 
Messages: 346
Inscription: 07 Mar 2004, 16:57
Localisation: Normandie (France)

Messagede Thufir » 13 Mai 2009, 12:20

jfla a Ă©crit:Modification JF LAGARDE 15/02/2009
tint = tint + text2 (cette ligne est bidon )
Il faut mettre une valeur au multiplicateur de ta sonde interieur

If hs.GetVar (device & "IntFactor") = 0 then


Je ne saisi pas tout, désolé


tint = tint + text2 (cette ligne est bidon )

OK, je vais donc la supprimer

Il faut mettre une valeur au multiplicateur de ta sonde interieur

J'ai bien mis un coefficient multiplicateur dans le paramétrage de VThermostat qu'il faut faire à la création du thermostat virtuel

If hs.GetVar (device & "IntFactor") = 0 then

LĂ , je comprend pas ce que tu veux dire


je recupere la string qui affiche l'icone de temperature dans la page web d'homeseer (pour ton device McsXap1Wire que tu vas utiliser dans ton thermostat),
Code: Tout sélectionner
=<table><td><img alt='Temperature' src='/images/temperatures/19.gif' height='16' width='16'><img alt=' ' src='/images/sensors/blank3.gif'></td><td valign='middle' align='left'>19.5°C</td></table>

Ah !! je ne savais pas qu'il était possible de récupérer comme ça des données sur la page de HS. Intéressant.
Mais je n'ai pas vu cette ligne de code dans tes modification du script. C'est Ă  quelle ligne ?

Merci encore pour ton aide, je regarderai ça chez moi demain soir
Ce soir, suis pas Ă  la maison

A+
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Messagede jfla » 13 Mai 2009, 13:04

Salut

Citation:
tint = tint + text2 (cette ligne est bidon )

OK, je vais donc la supprimer



SUTRTOUT PAS sinon la boucle ne sera plus bonne

jfla a Ă©crit:

Modification JF LAGARDE 15/02/2009
tint = tint + text2 (cette ligne est bidon )
Il faut mettre une valeur au multiplicateur de ta sonde interieur
If hs.GetVar (device & "IntFactor") = 0 then


Je ne saisi pas tout, désolé



Quand tu construit ton thermostat, il te demande par combien il faut multiplier la valeur de ta sonde:
Code: Tout sélectionner
InputBox ("Entrez le muliplicateur appliqué à la valeur des sondes Int:" & Chr(13) & Chr(13)_
         & "1 si la sonde affiche 20 et sa valeur est 20" & Chr(13)_
         & "10 si  la sonde affiche 20,2 et sa valeur est 202"


J'ai mis 10 par defaut.

Citation:
If hs.GetVar (device & "IntFactor") = 0 then

LĂ , je comprend pas ce que tu veux dire


Ceci se trouve en ligne 318 du script

Si le multiplicateur est different de 0, alors on extrait la valeur du string de la sonde.

Citation:
je recupere la string qui affiche l'icone de temperature dans la page web d'homeseer (pour ton device McsXap1Wire que tu vas utiliser dans ton thermostat),
Code:
=<table><td><img alt='Temperature' src='/images/temperatures/19.gif' height='16' width='16'><img alt=' ' src='/images/sensors/blank3.gif'></td><td valign='middle' align='left'>19.5°C</td></table>


Ah !! je ne savais pas qu'il était possible de récupérer comme ça des données sur la page de HS. Intéressant.
Mais je n'ai pas vu cette ligne de code dans tes modification du script. C'est Ă  quelle ligne ?


Cette ligne n'existe pas dans le script , elle fait partie de la string de ta sonde 1wire , elle est construite par McsXap1wire .

tu pourra la voir avec le couteau suisse de mon precedent message .
Pour cela, il faut creer un event MANUEL pour exectuter ce script
Prendre l'option 4 et entrer le N° de ton device , tu pourra voir toutes ses caracteristiques.

JF
Portable ACER V3-771G , I7, 4Gb, SSD 256GB + 750GB de disk

Homesser HS3 Pro 3.0.0.435
Plugin enabled:
2.0.40.0: BLLAN, 1.0.3.0: BLShutdown, 2.0.10.0: BLUSBUIRT, 4.8.6.0: BULLET
0.0.0.31: drhsIpPlugIn, 3.3.2.0: mcsMQTT, 3.0.0.69: mcsXap, 3.0.0.14: NetCAM
3.0.1.109: PHLocation, 30.0.0.36: RFXCOM, 5.0.2.0: SCREPOSITORY, 3.0.0.44: X10
0.0.0.11: Yeelight 3P, 3.0.1.210: Z-Wave,
CM11A, 20 SW10,
35 nodes ZWAVE
Reseau 1-Wire 11 DS1920
3 MS13E, 1 RFXCOM RFXTRX433E
Ethernet Livebox4
Nabaztag-Tag
jfla
Dieu de domotique
 
Messages: 346
Inscription: 07 Mar 2004, 16:57
Localisation: Normandie (France)

Messagede DJMaboul » 13 Mai 2009, 18:58

@ Thufir

Télécharge le thermostat virtueld'origine dans un premier temps.

fait un reset de ton thermostat et reprend tous les paramètres pour le facteur essais avec 10 à la question
Code: Tout sélectionner
Entrez le multiplicateur appliqué à la valeur des sondes Int:


regarde mon post pour la mise à jour des valeurs en temps réel ICI et ajoute les devices.

C'est ce que j'utilise avec mon ecrans tactille mais en flash pas avec HSTouch mais le principe reste le meme.
Serveur
Microsoft Win7 32bit, Apache, PHP, Mysql, Juliette AT&T
Intel Dual Core 2.6Mhz, 2Go Ram, 300Go
Homeseer 2.4.0.6, PLCBUS, 1-Wire(USB), SIP, HSFlash, RFXCOM, Nabaztag tag
Avatar de l’utilisateur
DJMaboul
Dieu de domotique
 
Messages: 515
Inscription: 09 Sep 2007, 06:24
Localisation: Tours

Messagede Thufir » 14 Mai 2009, 12:16

Bonjour
Merci pour vos réponses.

Pas eu le temps de regarder hier (j'Ă©tais pas chez moi)
je verrai tout ça ce soir

A+ et merci encore
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Messagede Thufir » 14 Mai 2009, 22:42

re

J'ai donc pu me pencher un peu sur la question

@DJMaboul
- Pour le multiplicateur : c'est bon, je l'avais déjà fait
- pour la mise à jour des valeurs : j'utilisais déjà (avec le module read1wire, avant de passer sur Xap) le code que tu m'avais proposé dans le post que tu indiques et qui allait très bien d'ailleurs (je t'en remercie à nouveau au passage)

@jfla
- j'ai changé le séparateur de décimales (j'ai mis le point à la place de la virgule). J'ai donc bien maintenant les valeurs des T° avec des points
Donc, ça c'est réglé
- J'ai par contre toujours la mĂŞme erreur Ă  la ligne 335

J'ai bien compris ton explication sur la partie de code en question :
Code: Tout sélectionner
text1 = hs.DeviceString (sensor)
         'hs.writelog "info_6" , hs.DeviceValue (sensor)
       position1 = InStr(1 , Text1 ,"left'>")
         'hs.writelog "info_7" , position1
         position2 = InStr(1 , Text1 ,"C<")
         'hs.writelog "info_8" , position2
         longueur = position2-12-position1
         'hs.writelog "info_9" , longueur
       text2 = mid(Text1 , position1 +6 , longueur)
         'hs.writelog "info_sensor_text2" , text2



Ce qui ne dois pas aller chez moi est Ă  ce niveau :

Code: Tout sélectionner
=<table><td><img alt='Temperature' src='/images/temperatures/19.gif' height='16' width='16'><img alt=' ' src='/images/sensors/blank3.gif'></td><td valign='middle' align='left'>19.5°C</td></table>

Cette ligne n'existe pas dans le script , elle fait partie de la string de ta sonde 1wire , elle est construite par McsXap1wire .

tu pourra la voir avec le couteau suisse de mon precedent message .
Pour cela, il faut creer un event MANUEL pour exectuter ce script
Prendre l'option 4 et entrer le N° de ton device , tu pourra voir toutes ses caracteristiques.


Voilà ce que me donne le couteau suisse avec mon device "\1" qui correspond à ma 1ère sonde 1wire
Image
La string de la sonde est : 24.8
Ce qui est confirmé quand je demande de m'afficher texte1 dans le log d'HS. Texte1 est bien : 24.8

D'où message d'erreur dans le traitement de la chaine où on recherche des caractères qui n'existent pas

Le problème reste donc toujours là!

Une remarque :
J'arrive bien à faire fonctionner mes thermostats virtuels dans HStouch, avec réglage des consignes, affichage des modes etc... avec la version de Vthermostat que j'avais (légèrement modifié) pour fonctionner avec le module read1wire.
Le seul problème est que je n'arrive pas à avoir (dans mes devices thermostats virtuels) la température mesurée par les sondes en dizièmes. J'ai systématiquement un entier arrondi (avec un multiplicateur mis à 1).

Je pense savoir d'où ça vient :
C'est la string qui contient la T° avec décimale, mais c'est la value (avec la la T° arrondie) qui est transmise à Vthermostat
Mais comment faire pour que Vthermotsat prenne en compte la string Ă  la place de la value ?

Si j'arrive à obtenir ça, je n'en demande pas plus. Mais comment le faire ?

Merci d'avance pour ton aide
:wink:
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Messagede Thufir » 15 Mai 2009, 08:00

Je me répond à moi même, tout au moins pour la dernière partie :

Il suffit me mettre le multiplicateur à 0 pour avoir ta T° complète avec les dizièmes.
ça me semble quand même bizzard, mais en tout cas ça fonctionne comme ça chez moi

Je vais quand mĂŞme surveiller le fonctionnement des thermostats durant quelques temps

A+
PC : P4 3Ghz - 1Go RAM (le mien)
: Athlon 2200 - 512 Mo RAM (celui de madame)
: un vieux PIII 1Ghz - 512 Mo RAM pour le serveur domotique
: un portable P4 3Ghz - 512 Mo RAM
: un tabletPC Motion computing M1400

Matériel domotique: Passage en Z-Wave
Logiciel : HS 2.3.0.19
Thufir
Dieu de domotique
 
Messages: 278
Inscription: 12 Mar 2009, 18:05
Localisation: Bourgogne

Suivante

Retourner vers Les Ă©crans tactiles pour la maison

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

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