Gå til innhold
  • Bli medlem
Moskus

SCRIPT: MotionLog.vb - Logg bevegelser til en device

Anbefalte innlegg

Dette scriptet lar deg logge alle bevegelser til en device, slik at det blir enklere å se på web eller HStouch. Bevegelser (eller enhver hendelse) blir da logget slik.

 

motionlog.png

 

 MotionLog.vb (ny)

    Public Sub Main(ByVal input As Object)
        Dim logDeviceRef As Integer = 1081 ' Update this
        Dim count As Integer = 9 'Maximum number of lines shown on the device - 1. 9 means 10 lines are shown

        Dim currentText As String = hs.DeviceString(logDeviceRef)
        currentText = currentText.Replace("<br>", "|")
        Dim lines() As String = currentText.Split("|")
        If lines.GetLength(0) < count Then count = lines.GetLength(0)
        Dim oldLines(count - 1) As String
        Array.Copy(lines, oldLines, count)

        'Creating the device text
        Dim newText As String = Now.Date & " " & Now.ToLongTimeString & " - " & input.ToString
        If lines.GetLength(0) > 0 And lines(0) <> "" Then newText &= "<br>"

        'Adding the previous lines
        newText &= String.Join("<br>", oldLines)

        'Updating the device string
        hs.SetDeviceString(logDeviceRef, newText, True)
        'hs.TriggerEvent("Restart SisteBeveglse timer")

        lines = Nothing
        oldLines = Nothing
    End Sub

 

 

Spoiler

 

MotionLog.vb (gammel)


Public Sub Main(ByVal input As Object)
    Dim logDeviceRef As Integer = 1081 ' Update this

    Dim currentText As String = hs.DeviceString(logDeviceRef)
    Dim lines As System.Collections.Generic.List(Of String)

    If currentText.Contains("<br/>") Then
        lines = currentText.Split("<br/>").ToList
    Else
        lines = currentText.Split("<br>").ToList
    End If

    'Removing empty lines and cleaing up strings
    For i As Integer = lines.Count - 1 To 0 Step -1
        If lines(i).Trim = "" Then lines.RemoveAt(i)
        If lines(i).Contains("br/>") Then lines(i) = lines(i).Replace("br/>", "")
        If lines(i).Contains("br>") Then lines(i) = lines(i).Replace("br>", "")
    Next

    'Remove the bottom entry if needed
    If lines.Count = 10 Then lines.RemoveAt(lines.Count - 1)

    'Creating the device text
    Dim newText As String = Now.Date & " " & Now.ToLongTimeString & " - " & input.ToString
    If lines.Count > 0 Then newText &= "<br>"

    If lines.Count > 2 Then
        For i As Integer = 0 To lines.Count - 2
            newText &= lines(i) & "<br>"
        Next
    ElseIf lines.Count = 2 Then
        newText &= lines(0) & "<br>"
    End If

    'Adding the last lines without the HTML break
    newText &= lines(lines.Count - 1)

    'Updating the device string
    hs.SetDeviceString(logDeviceRef, newText, True)
    'hs.TriggerEvent("Restart SisteBeveglse timer")
End Sub

 

 

For hver bevegelsessensor har jeg da et event som blir trigget ved bevegelse (selvfølgelig! ;)), som i tillegg til å styre lys der det er nødvendig, kjører dette scriptet med sub Main og parameter med navnet på sensoren, som "Kjøkken" eller "Stue".

 

I tillegg har jeg en timer som he ter "SisteBevegelse", som jeg resetter når dette skjer. Hvis du også vil bruke dette, må du opprette den timeren, lage et Event (som jeg har kalt "Restart SisteBevegelse timer" fordi det ikke finnes kode for å restarte den), og fjerne fnutten foran den nest siste linjen i koden.

 

 

EDIT: Oppdatert slik at det blir penere i HStouch. :) 

EDIT2:  Bruker arrays for å gjøre scriptet enklere. Burde nå kjøre på Linux uten problemer.

  • Thanks 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Har du prøvd å vise infoen fra motion log devicen i HSTouch? Hvordan har du eventuelt fått det til på en pen måte? Får ikke linjeskift til å fungere.

Del dette innlegget


Lenke til innlegg
Del på andre sider

Nei, jeg har faktisk ikke prøvd HStouch enda. Men det er bare HTML-formatert (kun < br/>), har du prøvd vis som HTML i HStouch?

Del dette innlegget


Lenke til innlegg
Del på andre sider
4 hours ago, Moskus said:

Nei, jeg har faktisk ikke prøvd HStouch enda. Men det er bare HTML-formatert (kun < br/>), har du prøvd vis som HTML i HStouch?


Det funker ikke med html nei :(

 

 

Del dette innlegget


Lenke til innlegg
Del på andre sider

Jeg har en versjon av dette scriptet hjemme hvor jeg deler opp hver event til en virtual device. Gjør det lettere å få det pent i HSTouch. Skal poste det når jeg er ferdig på jobb.

Del dette innlegget


Lenke til innlegg
Del på andre sider

Det er en modifisert utgave av den du skrev til meg for en stund siden. Poster det senere i kveld.

Del dette innlegget


Lenke til innlegg
Del på andre sider
Den 5/29/2016 klokken 19.52, Moskus skrev:

... skrev jeg det til deg, eller har du modifisert det selv? :)

 

Rettelse; det var ikke en modifisert utgave av scriptet ditt, men heller en overkomplisert metode som sikkert kan gjøres lettere med et script. ?

 

Slik gjorde jeg det:

 

1. Start med å lage en Virtual Device for hver bevegelsessensor du vil ha historie på.

 

#618 = 01 - Bevegelse historie

#619 = 02 - Bevegelse historie

#620 = 03 - Bevegelse historie

 

HomeSeer Web Control.png

 

 

2. Lag en ny gruppe i Events med navn "Bevegelsessensor historie" og opprett følgende eventer i denne gruppen:

  • Bevegelsessensor - Gang
  • Bevegelsessensor - Stue
  • Bevegelsessensor - Soverom

 

HomeSeer Web Control   Events.png

 

 

3. Event Bevegelsessensor - Gang ser slik ut:

 

HomeSeer Web Control   Events2.png

 

Script1:

&hs.SetDeviceString(620, hs.DeviceString(619), True)

Script2:

&hs.SetDeviceString(619, hs.DeviceString(618), True)

Script3:

&hs.SetDeviceString(618, hs.DeviceLastChangeRef(621) & " " & "- Bevegelse i gang", True)

 

4. Event Bevegelsessensor - Stue ser slik ut:

 

HomeSeer Web Control   Stue.png

 

Script1: Ingen forandring

 

Script2: Ingen forandring

 

Script3:

&hs.SetDeviceString(618, hs.DeviceLastChangeRef(622) & " " & "- Bevegelse i stue", True)

 

 

5. Event Bevegelsessensor - Soverom ser slik ut:

 

HomeSeer Web Control   Soverom.png

 

Script1: Ingen forandring

 

Script2: Ingen forandring

 

Script3:

&hs.SetDeviceString(618, hs.DeviceLastChangeRef(623) & " " & "- Bevegelse i soverom", True)

 

6. Hver gang en bevegelsessensor trigger så kjøres eventene og resultatet blir som dette:

 

HomeSeer Web historie.png

 

De 3 VDene kan du nå plassere i riktig rekkefølge hvor du måtte ønske i HSTouch. :)

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider
Den 1.6.2016 klokken 11.16, Moskus skrev:

Hjælp!

 

Tenker jeg oppdaterer scriptet mitt istedenfor, jeg. ;)

Er det bare å kopiere å bruke scriptene dere lager?

Dette er en jeg vil låne om det er mulig, og den blir oppdatert.

Del dette innlegget


Lenke til innlegg
Del på andre sider
2 minutter siden, TomasV skrev:

Er det bare å kopiere å bruke scriptene dere lager?

Dette er en jeg vil låne om det er mulig, og den blir oppdatert.

 

Ja, her er det bare å kopiere og bruke scriptene som du vil. Bare husk på å forandre på Reference IDen slik at de passer ditt system. :) 

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Jepp, lån i vei! :)

 

Men hvis du legger til noe som gjør det enda bedre, så hadde det vært kjekt om du postet den nye versjonen. Kanskje ditt er bedre enn mitt?

Del dette innlegget


Lenke til innlegg
Del på andre sider

Hei,

 

Jeg får denne erroren når jeg prøver å kjøre scriptet:

Running script C:\Program Files (x86)\HomeSeer HS3\scripts\MotionLog.vb :Exception has been thrown by the target of an invocation.->Does entry point Main exist in script? at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at A.c17b105f989efe61e5979e67bec1ef734.cffd66cb0782c50126727e3fa75582d7a()

 

Slik ser eventen ut:

Yklsb0Vn.jpeg

 

Har byttet DeviceRef til ny opprettet VD.

 

Noen som ser åpenbar feil jeg har gjort?

Del dette innlegget


Lenke til innlegg
Del på andre sider

Prøv å kjør denne under Tools -> Control Panel -> Immediate Script Command.

 

hs.SetDeviceString(DINDEVICEREF, "Linje 1<br/>Linje 2<br/>Linje 3", True)

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

OK, tror jeg får lage en egen Setup-funksjon som gjør dette her. Lager en device og setter den opp riktig.

Del dette innlegget


Lenke til innlegg
Del på andre sider
On 7/6/2016 at 11:23, GeneralVirus said:

Prøv å kjør denne under Tools -> Control Panel -> Immediate Script Command.

 

hs.SetDeviceString(DINDEVICEREF, "Linje 1<br/>Linje 2<br/>Linje 3", True)

 

Det virker. Hva kan da være feil?

Del dette innlegget


Lenke til innlegg
Del på andre sider
45 minutter siden, Archos skrev:

 

Det virker. Hva kan da være feil?

Hvis det virker kan det vel ikke være feil... ;)

Del dette innlegget


Lenke til innlegg
Del på andre sider

OK, da kan det være at du trenger å oppdatere fra mono 3 til mono 4, eller noe sånt. Jeg er dessverre ikke rette personen å spørre.

Mono er .NET på Linux. Men versjon 3 har ikke alle de kule funksjonene som den siste versjonen har.

 

EDIT: Det kan være at det hjelper å skrive "Imports System.Linq" på en egen linje helt, helt øverst i scriptet.

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider
16 minutter siden, Moskus skrev:

OK, da kan det være at du trenger å oppdatere fra mono 3 til mono 4, eller noe sånt. Jeg er dessverre ikke rette personen å spørre.

Mono er .NET på Linux. Men versjon 3 har ikke alle de kule funksjonene som den siste versjonen har.

 

EDIT: Det kan være at det hjelper å skrive "Imports System.Linq" på en egen linje helt, helt øverst i scriptet.

Ser ikke ut som det hjalp å legge til Imports System.Linq, så da skal jeg se om jeg får oppdatert til mono 4 (eller så får jeg børste støv av en win pc).

Del dette innlegget


Lenke til innlegg
Del på andre sider

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å

  • Lignende innhold

    • Av Jonnyhar
      Hei.
       
      Jeg har laget et script for å starte og parkere Gardena Smart Sileno gressklippere. Testet og fungerer på min Gardena Smart Sileno R100Li.
      Legg inn e-postadressen, passordet, og navnet på klipperen på linje 12->14 i skriptet.
      Sett logJson = True for å se alt i json-responsen fra Gardena. Det ligger mye nyttig informasjon i responsen fra get_device_id.
       
      Kall scriptet med parameter start eller stop.
      Disse parametrene blir så brukt lenger nede i scriptet til:
       
          'Available start commands:
          'Start according to schedule: "{""name"":""start_resume_schedule"", ""parameters"":{}}"
          'Start overriding schedule. Run for 1440 minutes: "{""name"":""start_override_timer"", ""parameters"":{""duration"": 1440}}"
          
          'Available stop commands:
          'Park and pause all schedules: "{""name"":""park_until_further_notice""}"
          'Park and start again at next schedule: "{""name"":""park_until_next_timer""}"
      Imports System.IO Imports System.Net '*** Choose if json-responces should get written to the log *** Const logJson As Boolean = False '************************************************************** Public Sub Main(ByVal command As String) '*** Put in e-mailadress and password and lawnmover-name *** '*** They must be exactly as entered into the Gardena app *** Dim email As String = "myemail@gmail.com" Dim password As String = "Mypassword" Dim mower_name As String = "Name_of_lawnmower_in_gardena_app" '************************************************* '*** NO NEED TO EDIT BEHIND THIS POINT! *** '************************************************* 'Get token and username Dim jsonGetToken As String = "{""sessions"":{""email"":""" & email & """,""password"":""" & password & """}}" Dim tokenAndUser() As String = getToken(jsonGetToken) 'Get location Dim location As String = getLocation(tokenAndUser) 'Get device-id for lawnmover set in mower_name Dim locationAndToken(3) as String locationAndToken(0) = tokenAndUser(0) locationAndToken(1) = location locationAndToken(2) = mower_name Dim deviceId As String = getdeviceId(locationAndToken) 'Send start or stop command to mower Dim data(4) as String data(0) = tokenAndUser(0) data(1) = location data(2) = deviceId data(3) = command sendCommand(data) End Sub Public Function getToken(json As string) As String() 'Get token and user ID based on e-mail and password Dim strURL As String = "https://sg-api.dss.husqvarnagroup.net/sg-1/sessions" Dim myWebReq As HttpWebRequest Dim myWebResp As HttpWebResponse Dim encoding As New System.Text.UTF8Encoding Dim sr As StreamReader Dim result(2) As String Try Dim data As Byte() = encoding.GetBytes(json) myWebReq = DirectCast(WebRequest.Create(strURL), HttpWebRequest) myWebReq.ContentType = "application/json" myWebReq.ContentLength = data.Length myWebReq.Method = "POST" Dim myStream As Stream = myWebReq.GetRequestStream() If data.Length > 0 Then myStream.Write(data, 0, data.Length) myStream.Close() End If myWebResp = DirectCast(myWebReq.GetResponse(), HttpWebResponse) sr = New StreamReader(myWebResp.GetResponseStream()) Dim responseText As String = sr.ReadToEnd() if logJson Then hs.WriteLog("Gardena", "Response getToken: " & responseText) End If 'Search json for token Dim sSource As String = responseText 'String that is being searched Dim sDelimStart As String = """token"":""" 'First delimiting word Dim sDelimEnd As String = """,""user_id" 'Second delimiting word Dim nIndexStart As Integer = sSource.IndexOf(sDelimStart) 'Find the first occurrence of f1 Dim nIndexEnd As Integer = sSource.IndexOf(sDelimEnd) 'Find the first occurrence of f2 If nIndexStart > -1 AndAlso nIndexEnd > -1 Then '-1 means the word was not found. Dim token As String = Strings.Mid(sSource, nIndexStart + sDelimStart.Length + 1, nIndexEnd - nIndexStart - sDelimStart.Length) 'Crop the text between hs.WriteLog("Gardena", "Token: " & token) 'We got the token, continue to get the user id sDelimStart = "user_id"":""" 'First delimiting word sDelimEnd = """,""refresh_token" 'Second delimiting word nIndexStart = sSource.IndexOf(sDelimStart) 'Find the first occurrence of f1 nIndexEnd = sSource.IndexOf(sDelimEnd) 'Find the first occurrence of f2 If nIndexStart > -1 AndAlso nIndexEnd > -1 Then '-1 means the word was not found. Dim user As String = Strings.Mid(sSource, nIndexStart + sDelimStart.Length + 1, nIndexEnd - nIndexStart - sDelimStart.Length) 'Crop the text between hs.WriteLog("Gardena", "User: " & user) result(0) = token result(1) = user return result Else hs.WriteLog("Gardena", "Error: Did not receive user ID") End If Else hs.WriteLog("Gardena", "Error: Did not receive token") End If Catch ex As Exception : hs.writelog("Gardena", "Error: " & ex.Message.ToString) End Try End Function Public Function getLocation(tokenAndUser() As String) As String 'Get location based on token and user id Dim token As String = tokenAndUser(0) Dim user As String = tokenAndUser(1) Dim strURL As String = "https://sg-api.dss.husqvarnagroup.net/sg-1/locations/?user_id=" & user Dim myWebReq As HttpWebRequest Dim myWebResp As HttpWebResponse Dim sr As StreamReader Try myWebReq = DirectCast(WebRequest.Create(strURL), HttpWebRequest) myWebReq.ContentType = "application/json" myWebReq.Method = "GET" myWebReq.Headers.Add("X-session", token) myWebResp = DirectCast(myWebReq.GetResponse(), HttpWebResponse) sr = New StreamReader(myWebResp.GetResponseStream()) Dim responseText As String = sr.ReadToEnd() if logJson Then hs.WriteLog("Gardena", "Response getLocation: " & responseText) End if 'Search json for location Dim sSource As String = responseText 'String that is being searched Dim sDelimStart As String = """id"":""" 'First delimiting word Dim sDelimEnd As String = """,""name" 'Second delimiting word Dim nIndexStart As Integer = sSource.IndexOf(sDelimStart) 'Find the first occurrence of f1 Dim nIndexEnd As Integer = sSource.IndexOf(sDelimEnd) 'Find the first occurrence of f2 If nIndexStart > -1 AndAlso nIndexEnd > -1 Then '-1 means the word was not found. Dim location As String = Strings.Mid(sSource, nIndexStart + sDelimStart.Length + 1, nIndexEnd - nIndexStart - sDelimStart.Length) 'Crop the text between hs.WriteLog("Gardena", "Location: " & location) return location Else hs.WriteLog("Gardena", "Error: Did not receive location") End If Catch ex As Exception : hs.writelog("Gardena", "Error: " & ex.Message.ToString) End Try End Function Public Function getdeviceId(tokenAndLocation() As String) As String 'Get device id for lawnmover based on location and mower_name Dim token As String = tokenAndLocation(0) Dim location As String = tokenAndLocation(1) Dim mower_name As String = tokenAndLocation(2) Dim strURL As String = "https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=" & location Dim myWebReq As HttpWebRequest Dim myWebResp As HttpWebResponse Dim sr As StreamReader Try myWebReq = DirectCast(WebRequest.Create(strURL), HttpWebRequest) myWebReq.ContentType = "application/json" myWebReq.Method = "GET" myWebReq.Headers.Add("X-session", token) myWebResp = DirectCast(myWebReq.GetResponse(), HttpWebResponse) sr = New StreamReader(myWebResp.GetResponseStream()) Dim responseText As String = sr.ReadToEnd() if logJson Then hs.WriteLog("Gardena", "Response getLocation: " & responseText) End If 'Finn Device ID Dim sSource As String = responseText 'String that is being searched Dim sDelimEnd As String = """,""name"":""" & mower_name & """,""category"":""mower""" 'Second delimiting word Dim nIndexStart As Integer = sSource.IndexOf(sDelimEnd) - 36 Dim nIndexEnd As Integer = sSource.IndexOf(sDelimEnd) 'Find the first occurrence of f2 If nIndexStart > -1 AndAlso nIndexEnd > -1 Then '-1 means the word was not found. Dim deviceId As String = Strings.Mid(sSource, nIndexStart + 1, nIndexEnd - nIndexStart) 'Crop the text between hs.WriteLog("Gardena", "Device ID: " & deviceId) return deviceId Else hs.WriteLog("Gardena", "Error: Did not receive device ID") End If Catch ex As Exception : hs.writelog("Gardena", "Error: " & ex.Message.ToString) End Try End Function Public Function sendCommand(data() As String) 'Send start or stop to the mower. Dim token As String = data(0) Dim location As String = data(1) Dim device As String = data(2) Dim command As String = data(3) Dim json As String '*** Here you can change what start and stop does.*** 'Available start commands: 'Start according to schedule: "{""name"":""start_resume_schedule"", ""parameters"":{}}" 'Start overriding schedule. Run for 1440 minutes: "{""name"":""start_override_timer"", ""parameters"":{""duration"": 1440}}" 'Available stop commands: 'Park and pause all schedules: "{""name"":""park_until_further_notice""}" 'Park and start again at next schedule: "{""name"":""park_until_next_timer""}" if command = "start" Then json = "{""name"":""start_resume_schedule"", ""parameters"":{}}" else if command = "stop" Then json = "{""name"":""park_until_further_notice""}" else hs.writelog("Gardena", "Error: Angi start eller stop som parameter") End If Dim strURL As String = "https://sg-api.dss.husqvarnagroup.net/sg-1/devices/" & device & "/abilities/mower/command?locationId=" & location Dim myWebReq As HttpWebRequest Dim myWebResp As HttpWebResponse Dim encoding As New System.Text.UTF8Encoding Dim sr As StreamReader Try Dim data As Byte() = encoding.GetBytes(json) myWebReq = DirectCast(WebRequest.Create(strURL), HttpWebRequest) myWebReq.ContentType = "application/json" myWebReq.ContentLength = data.Length myWebReq.Headers.Add("X-session", token) myWebReq.Method = "POST" Dim myStream As Stream = myWebReq.GetRequestStream() If data.Length > 0 Then myStream.Write(data, 0, data.Length) myStream.Close() End If myWebResp = DirectCast(myWebReq.GetResponse(), HttpWebResponse) sr = New StreamReader(myWebResp.GetResponseStream()) Dim responseText As String = sr.ReadToEnd() hs.WriteLog("Gardena", "Sent command: " & command) Catch ex As Exception : hs.writelog("Gardena", "Error: " & ex.Message.ToString) End Try End Function  
    • Av Julius
      Hei, har nettopp startet med homeseer og ønsker å lage noen enkle skript i c#. Men det er vist ikke like enkelt...
       
      Scenario: Har skrevet data til en influxdb og vil lese disse igjen (med en mean aggregering). Problemet er at jeg vil bruke Newtonsoft.Json.Net til å parse JSON resultatet. See hele koden under. 
       
      Problemet er hvordan refererer jeg til Newtonsoft.Json.dll? I følge dokumentasjonen jeg fant her (under c# scripting) så står det: 
       
      Så det gjorde jeg... Jeg ser at Newtonsoft.Json.dll ligger i bin\Homeseer folderen og tenkte der for at det ikke var nødvending å legge til noe path. Har prøvd mye men får feil hele tiden. Det virker ikke som //css_reference har noen effekt.
       
      Kode:
      //css_reference Newtonsoft.Json.dll; using Newtonsoft.Json; using Newtonsoft.Json.Linq; public object Main(object param) { var sensitivity = double.Parse((string)param); var deviceId = 271; var INFLUX_DB_SERVER_IP = "10.0.0.104"; var INFLUX_DB_SERVER_PORT = "8086"; var INFLUX_DB_DATABASE_NAME = "homeseer"; var query = "q=select mean(value) from Downstairs_Bathroom_Humidity where time > now() - 1d"; var url = "http://" + INFLUX_DB_SERVER_IP + ":" + INFLUX_DB_SERVER_PORT + @"/query?db=" + INFLUX_DB_DATABASE_NAME; var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; try { request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; var data = System.Text.Encoding.ASCII.GetBytes(query); request.ContentLength = data.Length; request.Timeout = 5000; var stream = request.GetRequestStream(); try { stream.Write(data, 0, data.Length); } finally { stream.Close(); } var response = (System.Net.HttpWebResponse)request.GetResponse(); var responseString = new System.IO.StreamReader(response.GetResponseStream()).ReadToEnd(); var result = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString); var meanValue = (double) ((Newtonsoft.Json.Linq.JValue)((Newtonsoft.Json.Linq.JContainer)result)["results"].First["series"].First["values"].First.Last).Value; var value = hs.DeviceValue(deviceId); if((value - sensitivity) > meanValue) { hs.TriggerEvent("Run Ventilator for 10 minuttes"); hs.WriteLog("Julius-Ventilation", "Info: Triggered Ventilation"); } } catch (System.Exception ex) { hs.WriteLog("Julius-Ventilation", "Error: " + ex.Message); } return 0; } Feil medling:
      Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\CSharpTest.cs: {interactive}(93,30): error CS0103: The name `Newtonsoft' does not exist in the current context {interactive}(93,41): error CS0023: The `.' operator cannot be applied to operand of type `' {interactive}(93,17): error CS0825: The contextual keyword `var' may only appear within a local variable declaration {interactive}(95,106): error CS0841: A local variable `result' cannot be used before it is declared {interactive}(95,74): error CS0246: The type or namespace name `Newtonsoft' could not be found. Are you missing a using directive or an assembly reference? {interactive}(95,17): error CS0825: The contextual keyword `var' may only appear within a local variable declaration {interactive}(101,44): error CS0841: A local variable `meanValue' cannot be used before it is declared {interactive}(11,17): warning CS0414: The private field `Script.hs' is assigned but its value is never used  
    • Av ZoRaC
      Scriptet er basert på @Moskus sitt "Fridager.vb":

      Tar derfor bare "kortversjonen" av oppsettet her:
      * Lag en virtuell device "Flaggdag" med verdiene "Ja" (On) og "Nei" (Off)
      * Noter deg devID
      * Lag "Flaggdag.vb":
      Sub Main(ByVal deviceReference As String) 'Moskus 2017 Dim devRef As Integer = Integer.Parse(deviceReference.ToString) Dim isCurrentDateFlagday As Boolean = IsFlagday(Now) If isCurrentDateFlagday Then hs.CAPIControlHandler(hs.CAPIGetSingleControlByUse(devRef, HomeSeerAPI.ePairControlUse._On)) Else hs.CAPIControlHandler(hs.CAPIGetSingleControlByUse(devRef, HomeSeerAPI.ePairControlUse._Off)) End If End Sub Public Function IsFlagday(ByVal _date As Date) As Boolean 'translated php script form xibriz: https://www.diskusjon.no/index.php?showtopic=1084239 _date = _date.Date 'in case time was added Dim easterDate As Date = GetEasterDate(_date.Year) 'Sjekker om datoen er 1. Januar If _date = New Date(_date.Year, 1, 1) Then Return True 'Sjekker om datoen er 21. Januar (Prinsesse Ingrid Alexandra) If _date = New Date(_date.Year, 1, 21) Then Return True 'Sjekker om datoen er 6. februar (samefolkets dag) If _date = New Date(_date.Year, 2, 6) Then Return True 'Sjekker om datoen er 21. februar (Kong Haralds bursdag) If _date = New Date(_date.Year, 2, 21) Then Return True 'Sjekker om datoen er 1. påskedag If _date = easterDate Then Return True 'Sjekker om datoen er 1. mai (offentlig høytidsdag) If _date = New Date(_date.Year, 5, 1) Then Return True 'Sjekker om datoen er 8. mai (frigjøringsdag) If _date = New Date(_date.Year, 5, 8) Then Return True 'Sjekker om datoen er 17. mai (grunnlovsdag) If _date = New Date(_date.Year, 5, 17) Then Return True 'Sjekker om datoen er 7. juni (unionsoppløsning) If _date = New Date(_date.Year, 6, 7) Then Return True 'Sjekker om datoen er 1. pinsedag (50. påskedag) If _date = easterDate.AddDays(49) Then Return True 'Sjekker om datoen er 4. juli (Dronning Sonja) If _date = New Date(_date.Year, 7, 4) Then Return True 'Sjekker om datoen er 20. juli (Kronprins Haakon) If _date = New Date(_date.Year, 7, 20) Then Return True 'Sjekker om datoen er 29. juli (Olsok) If _date = New Date(_date.Year, 7, 29) Then Return True 'Sjekker om datoen er 19. august (Mette-Marit) If _date = New Date(_date.Year, 8, 19) Then Return True 'Sjekker om datoen er 1. juledag (25. desember) If _date = New Date(_date.Year, 12, 25) Then Return True Return False End Function Public Function GetEasterDate(ByVal Year As Integer) As Date 'Originally taken from: http://www.thoughtproject.com/Snippets/Easter/Easter.vb.txt Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer Dim f As Integer Dim g As Integer Dim h As Integer Dim i As Integer Dim k As Integer Dim l As Integer Dim m As Integer Dim n As Integer Dim p As Integer If Year < 1583 Then Return Nothing Else ' Step 1: Divide the year by 19 and store the ' remainder in variable A. Example: If the year ' is 2000, then A is initialized to 5. a = Year Mod 19 ' Step 2: Divide the year by 100. Store the integer ' result in B and the remainder in C. b = Year \ 100 c = Year Mod 100 ' Step 3: Divide B (calculated above). Store the ' integer result in D and the remainder in E. d = b \ 4 e = b Mod 4 ' Step 4: Divide (b+8)/25 and store the integer ' portion of the result in F. f = (b + 8) \ 25 ' Step 5: Divide (b-f+1)/3 and store the integer ' portion of the result in G. g = (b - f + 1) \ 3 ' Step 6: Divide (19a+b-d-g+15)/30 and store the ' remainder of the result in H. h = (19 * a + b - d - g + 15) Mod 30 ' Step 7: Divide C by 4. Store the integer result ' in I and the remainder in K. i = c \ 4 k = c Mod 4 ' Step 8: Divide (32+2e+2i-h-k) by 7. Store the ' remainder of the result in L. l = (32 + 2 * e + 2 * i - h - k) Mod 7 ' Step 9: Divide (a + 11h + 22l) by 451 and ' store the integer portion of the result in M. m = (a + 11 * h + 22 * l) \ 451 ' Step 10: Divide (h + l - 7m + 114) by 31. Store ' the integer portion of the result in N and the ' remainder in P. n = (h + l - 7 * m + 114) \ 31 p = (h + l - 7 * m + 114) Mod 31 ' At this point p+1 is the day on which Easter falls. ' n is 3 for March or 4 for April. Return DateSerial(Year, n, p + 1) End If End Function * Lag disse eventene:

      (parameters er devID til devicen du laget)
       
      Påminnelse om å flagge:

      (jeg bruker et script som sender meg pushvarsel via Pushover, hvis jeg er hjemme, men du kan bruke hva du vil som "action")

      Påminnelse om å ta ned:

      Her er "cannot re-run for" en fordel, for man skal ta ned flagget enten kl 2100 eller ved solnedgang. Ønsker ikke påminnelse på begge de tidspunktene.  
    • Av mpdei
      Jeg ønsker å få til trinnvis belysning av trappetrinn på samme måte som her: https://kreativbelysning.no/butikk/trappebelysning/automatisk-trappebelysning
      Tenker følgende:
      - Bevegelsesdetektor i topp og bunn
      - 4 stk Fibaro rgbw hvor hver utgang er koblet til ett trinn
      - Lage et script som styrer rekkefølgen og tidsintervall på når hvert trinn tennes (hsp.WaitMS?)
       
      Utfordringen er at jeg aldri har laget et script før, og vet knapt nok hvordan det fungerer. Så mitt spørsmål er: hvordan skal et slikt script skrives?
       
       
      Setter stor pris på tips i riktig retning
       
       
    • Av Moskus
      Jeg har lurt litt på hvordan jeg kan bruke RGB-lys og en MiCube fra Xiaomi (lett integrerbart i HomeSeer med deCONZ/JowiHue). Har laget et par scripts til det. Se bloggen for en video.
       
      Det første justerer lysstyrken med å vri på kuben. Hvilket farge (eller lys) den styrer er avhengig av hvilken side som vender opp.
      Settes opp slik:

       
      ... og i eksempelet over er 2566 er rotasjon-devicen, 2565 er side-devicen. 900, 901 og 902 er devicer for hhv. rød, grønn og blå. Den oppmerksomme leser vil legge merke til at det er mulig å styre flere lys samtidig (greenID1+greenID2+....). F.eks. ville 990+1045+1077 styre tre forskjellige lys. Praktisk hvis man har flere RGB-lenker i samme rom. Jeg bruker den muligheten i stua.
       
      MiCube_RGB.vb
       
      Du trenger selvfølgelig ikke bruke rød, grønn og blå, du kan bruke andre devicer så lenge de bruker vanlige 0-99-nivåer. Med en liten endring kan du styre opp til 6 forskjellige lys fra en kube.
       
       

       
       
       
       
      Det andre scriptet skal skru av og på med et "dobbelt tap", men kan også brukes til å styre noe når siden flippes over.

       
      Her trengs kun side-rotasjonen, men har et ekstra tillegg for å skru av alle lys. Device 989 er "all colors" på en Fibaro RGBW modul.
       
      MiCube_side.vb
       
       
       
×