abraxa Skrevet 5. oktober 2014 Del Skrevet 5. oktober 2014 Jeg har noen spørsmål om programmering av scripts i HomeSeer, og tenker at det kunne være greit å opprette en ressurstråd der alle som ønsker kan stille spørsmål, og forhåpentligvis kan vi hjelpe hverandre fremover. For min egen del så har jeg lite programmeringserfaring, jeg har programmert noe i Java i studiene men har ikke praktisert siden den gang. Jeg skjønner oppbygging og en del av logikken, men er veldig dårlig på det "formelle" rundt programmeringen, altså sy dette sammen slik at det kompilerer. I første omgang ønsker jeg å lage et enkelt script som fungerer som en termostat. Basert på et eksempel fra Moskus forsøker jeg å nøste meg fremover en linje om gangen (med VB.NET). I føste omgang har jeg problemer med å koble mine variable til de reelle devices i HS. F.eks. hente ut en temperatur fra en sensor og sette denne som en String. Const tempStue As String = Hvordan kan jeg sette romtemperaturen ("Ambient temperature") på tempStue? Adressen A2 har jeg tilordnet manuelt, det feltet var opprinnelig tomt. Vil foretrekke å bruke adressen som referanse, ikke navnet. Lenke til kommentar
abraxa Skrevet 5. oktober 2014 Forfatter Del Skrevet 5. oktober 2014 Fant nå ut av dette til slutt, måtte først hente "id-nummeret" via "Address": Const tempStueAdr As String = "A2" Dim tempStueRef As Integer = hs.GetDeviceRef(tempStueAdr) Dim tempStue = hs.DeviceValueEx(tempStueRef) 'Denne henter da temperaturen i stua. Mulig det kan gjøres enklere, men skitt au. Har nesten kommet i mål med termostaten etter mange timer, men tror ikke den timer-funksjonen fungerer på samme måten i HS3. Skal gjøre et nytt forsøk i morgen! Lenke til kommentar
Moskus Skrevet 6. oktober 2014 Del Skrevet 6. oktober 2014 Jeg har noen spørsmål om programmering av scripts i HomeSeer, og tenker at det kunne være greit å opprette en ressurstråd der alle som ønsker kan stille spørsmål, og forhåpentligvis kan vi hjelpe hverandre fremover. Det er mest ressurser på board.homeseer.com... Fant nå ut av dette til slutt, måtte først hente "id-nummeret" via "Address": Const tempStueAdr As String = "A2" Dim tempStueRef As Integer = hs.GetDeviceRef(tempStueAdr) Dim tempStue = hs.DeviceValueEx(tempStueRef) 'Denne henter da temperaturen i stua. i morgen! Du trenger ikke bruke Address-feltet, faktisk er det enklere uten. Alle "devicer" i homeseer har en device referanse. Den finner du øverst under "Advanced"-tab'en etter at du har trykket på en device. Bruk den direkte i scriptet som du har gjort over, så sparer du noen linjer med kode. Dim tempStue as Double = hs.DeviceValueEx(1234) ... vil du gjøre det unødvendig avansert, kan du jo like greit gjøre det slik: Dim tempStue as Double = hs.DeviceValueEx(hs.GetDeviceRef("A2")) Lenke til kommentar
abraxa Skrevet 6. oktober 2014 Forfatter Del Skrevet 6. oktober 2014 Jeg har noen spørsmål om programmering av scripts i HomeSeer, og tenker at det kunne være greit å opprette en ressurstråd der alle som ønsker kan stille spørsmål, og forhåpentligvis kan vi hjelpe hverandre fremover. Det er mest ressurser på board.homeseer.com... Du har nok rett i det, det er vel en del her som holder på i andre programmer, men mange av funksjonene ser ut til å være unike for HomeSeer, dvs. starter med "hs."? Jeg er nok i mål for denne gangen, i stedet for å bruke en timer så kjører jeg scriptet som en Event hver gang stuetemperaturen endres fra Nest. Det ser ikke ut til å være så hyppig at det blir noe problem. Har lagt inn med støtte for egen temp. sensor kjøkken, men den er ikke aktiv foreløpig. Kode: Imports System.Threading Sub Main(parms as object) 'Public WithEvents tmr As Timers.Timer Dim bolIsRunning as Boolean = False Dim tempUte as Double = hs.DeviceValueEx(89) Dim tempStue as Double = hs.DeviceValueEx(100) Dim termostatStue = hs.DeviceValueEx(144) Dim settpStue As Double = hs.DeviceValueEx(101) Dim ovnStue = hs.DeviceValueEx(17) Dim ovnKjokken = hs.DeviceValueEx(119) 'tempKjokken = hs.ControlThermostat("B1","GetTemp",0) 'hs.WriteLog("Thermostat","Temperatur kjokken er " & tempKjokken & "°C") 'hs.writeLog("Thermostat","Oppvarming er aktiv (0): " & oppvarmingPaa) hs.WriteLog("Thermostat","Status termostat stue er (100 = på): " & termostatStue) hs.WriteLog("Thermostat","Status ovn stue er (255 = på): " & ovnStue) hs.WriteLog("Thermostat","Status ovn kjokken er (255 = på): " & ovnKjokken) hs.WriteLog("Thermostat","Temperatur stue er " & tempStue & "°C") hs.WriteLog("Thermostat","Settpunkt temperatur stue er " & settpStue & "°C") hs.WriteLog("Thermostat","Utetemperatur er " & tempUte & "°C") 'hs.WriteLog("Thermostat","Temperatur stue er " & tempStue & "°C") If hs.IsOn(144) Then '144 = referanse til termostat stue hs.WriteLog("Info","Termostat er aktivert") 'If bolIsRunning = False Then Start(Nothing) Else Stopp(Nothing) End If hs.WriteLog("Info","CheckTemp kjører") Dim tmpHigh as Double = settpStue Dim tmpLow as Double = tmpHigh - 0.5 hs.WriteLog("Info","TmpHigh " & tmpHigh) hs.WriteLog("Info","TmpLow " & tmpLow) If tempStue <= tmpLow Then CallCAPI(17, "On") 'Referansen til ovn stue CallCAPI(119, "On") 'Referansen til ovn kjøkken hs.WriteLog("Info", "Heating ON - Temp: " & tempStue & "°C - Termostat: " & tmpHigh & "°C") ElseIf tempStue > tmpHigh Then CallCAPI(17, "Off") 'Referansen til ovn stue CallCAPI(119, "Off") 'Referansen til ovn kjøkken hs.WriteLog("Info", "Heating OFF - Temp: " & tempStue & "°C - Termostat: " & tmpHigh & "°C") Else hs.WriteLog("Info", "Heating status unchanged - Temp: " & settpStue & "°C - Termostat: " & tmpHigh & "°C") End If If hs.IsOff(termostatStue) Then hs.Writelog("Heating Timer", "This should NEVER has happened") Stopp(Nothing) End if End Sub Public Sub Stopp(ByVal p_params As String) 'bolIsRunning = False CallCAPI(17, "Off") 'Referansen til ovn stue CallCAPI(119, "Off") 'Referansen til ovn kjøkken hs.WriteLog("Info","Termostat er av, panelovner deaktivert") End Sub Function CallCAPI(ByVal intDevRef As Integer, ByVal strDevCmd As String) As CAPIControlResponse hs.writelog("CallCAPI", "Device Reference: " & intDevRef & " strDevCmd: " & strDevCmd) CallCAPI = CAPIControlResponse.Indeterminate For Each objCAPIControl As CAPIControl In hs.CAPIGetControl(intDevRef) If LCase(objCAPIControl.Label) = LCase(strDevCmd) Then CallCAPI = hs.CAPIControlHandler(objCAPIControl) Exit For End If Next End Function Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå