Gå til innhold

Hjelp til programmering i HomeSeer og andre programmer


Anbefalte innlegg

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.

 

post-40214-0-75704100-1412501276.jpg

post-40214-0-75704100-1412501276_thumb.jpg

Lenke til kommentar
Videoannonse
Annonse

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

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

 

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...