Gå til innhold
  • Bli medlem
Moskus

SCRIPT: CloneDevice.vb - Kopier devicestatus fra en til andre

Anbefalte innlegg

CloneDevice.vb

Speiler status fra en device over på flere andre. Praktisk for å f.eks. kunne skru av/på/dimme et helt rom samtidig.

 

Parameter: 100|200+201+202

... hvor 100 er master device (typisk taklampe) og 200-202 er andre devicer,

 

Trigges typisk av master device set to any status.

    Sub Main(ByVal parms As String)
        '© Moskus
        Dim input() As String = Split(parms.ToString, "|")
        Dim control As String = input(0).ToString
        Dim devs() As String = Split(input(1).ToString, "+")
        Dim devicevalue As Double = hs.DeviceValueEx(control)

        Dim CAPIcontrol As HomeSeerAPI.CAPIControl = Nothing
        For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(control)
            If devicevalue = cc.ControlValue Then
                CAPIcontrol = cc
                Exit For
            End If
        Next

        For Each d as String In devs
            Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(d)
            If CAPIcontrol.Label.ToLower.Contains("dim") Then
                If dev.Can_Dim(Nothing) Then
                    Dim capi As HomeSeerAPI.CAPIControl = Nothing
                    For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d)
                        If cc.Label = CAPIcontrol.Label Then
                            capi = cc
                            Exit For
                        End If
                    Next
                    hs.CAPIControlHandler(capi)
                Else
                    Dim off As HomeSeerAPI.CAPIControl = Nothing
                    For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d)
                        If cc.Label.ToLower = "off" Then
                            off = cc
                            Exit For
                        End If
                    Next
                    hs.CAPIControlHandler(off)
                End If
            Else
                Dim capi As HomeSeerAPI.CAPIControl = Nothing
                For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d)
                    If cc.Label = CAPIcontrol.Label Then
                        capi = cc
                        Exit For
                    End If
                Next
                hs.CAPIControlHandler(capi)
            End If

        Next
    End Sub

 

Del dette innlegget


Lenke til innlegg
Del på andre sider

Feilmelding 

Error 1	Running script C:\Program Files (x86)\HomeSeer HS3\scripts\StuaLysVindu.vb :Målet forårsaket et unntak under aktivering.Objektreferanse er ikke satt til en objektforekomst.

kopiert script, satt master og tre lys som jeg vil klone.

Skjermbilde 2017-05-03 kl. 19.43.11.png

Del dette innlegget


Lenke til innlegg
Del på andre sider

Jeg kan ikke se noen åpenbare feil (utenom at du ikke trenger å gi scriptet et nytt navn, du endrer jo innstillingene i parameteren, så navnet kan være CloneDevice.vb. Men det spiller egentlig ingen rolle he).

 

Hva om du putter "Main" (uten hermetegn) i tekstfeltet for Sub/Function?

Finnes devicene 29, 401, 431 og 440? Har 401, 431 og 440 de samme CAPI-kommandoene som device 29 (ikke at det heller spiller noen rolle).

Del dette innlegget


Lenke til innlegg
Del på andre sider

Msin ga litt mer omstendig feilmelding(endret navnet, koblet ikke at det ikke er parameter i scriptet)

Running script C:\Program Files (x86)\HomeSeer HS3\scripts\CloneDevice.vb :Målet forårsaket et unntak under aktivering.->Does entry point Main exist in script? ved System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) ved System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) ved System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) ved A.c17b105f989efe61e5979e67bec1ef734.cffd66cb0782c50126727e3fa75582d7a()

Men 29 er en Joweihueenhet. Endret Main til en z-wave, og da forsvant feilmeldingen, og skriptet fungerer. 

Tenkte at jeg var så heldig at jeg kunne skru på Hue-pæra med Huebryter/event. dimme, og så fulgte lampene i vinduene samt vitrineskapet etter(skjermen er så lav, så det går ikke med Lightify/Hue E-14 pærer(montert en fibaro-dimmer inni soklene).

Om det er automatikk på stuelysene så blir ikke generalen så fornøyd.

590a24be045a5_Skjermbilde2017-05-03kl_20_39_10.png.68fa1d72130219bccb3cb92154c406af.png590a24be4f574_Skjermbilde2017-05-03kl_20_39_41.png.b36f8bad98ef7d54b5bf9fba9f601596.png590a24be8bf1b_Skjermbilde2017-05-03kl_20_40_14.png.d5a7391183f76ec8d78289a3d97f6864.png590a24bebfa60_Skjermbilde2017-05-03kl_20_41_09.png.8ca64e43054a696c80b46e47524b5314.png

Tusen takk for hjelpen!

Del dette innlegget


Lenke til innlegg
Del på andre sider

Vel, dessverre ser det ut som om dette ikke vil fungere siden Hue bruker en skala mellom 0-254, og vanlige Z-wave-lamper bruker 0-100.

Hvis du dimmer en Hue-pære til 154 finnes ikke den samme verdien på Z-wave lampene.

 

Men er det ikke en innstilling i JowiHue hvor man kan endre dette?

Del dette innlegget


Lenke til innlegg
Del på andre sider
Vel, dessverre ser det ut som om dette ikke vil fungere siden Hue bruker en skala mellom 0-254, og vanlige Z-wave-lamper bruker 0-100.
Hvis du dimmer en Hue-pære til 154 finnes ikke den samme verdien på Z-wave lampene.
 
Men er det ikke en innstilling i JowiHue hvor man kan endre dette?

Takk, skal sjekke senere

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 Moskus
      Dette scriptet lar deg hente inn trafikkinformasjon fra EnTur.  
       
      Finne reiseruter, IDer for "StopPlace" og "Quay"
      Å bruke scriptet er ikke så vanskelig. Det vanskelige er å finne IDene til stasjonene du vil spore. 
       
      La oss si at jeg vil finne alle busser som går fra "Tasta Senter" (og mot Stavanger sentrum, men det kommer vi tilbake til)
      Gå til en-tur.no Tast inn stoppesteder til og fra Kopier URL'en fra nettleseren etter søket (f.eks. som denne) inn URLdecoder.org for å gjøre den lettere å lese. Finn "startID" og kopier ut strengen som begynner med "NSR:". For Tasta Senter er denne "NSR:StopPlace:28163"
       
       
      Vel og bra!  Nå vet vi at busstoppet ved Tasta Senter heter "NSR:StopPlace:28163". Men et busstopp kan faktisk ha flere plattformer, f.eks. en på hver side av veien. Det heter visst "Quay" på engelsk.
       
      Jeg er ikke interessert i begge sider av veien for kun en av dem har vanligvis trafikk mot sentrum. For å finne Quay, må vi bruke GraphQL-exploreren til EnTur (som dessverre ikke er like forseggjort som Tibber sin). Vi er interessert i denne spørringen som finner alle avganger for et stoppested, og vi må endre id: "NSR:StopPlace:28163" og avgangstiden (startTime:"2018-06-19T09:00:00+0200") til det riktige. I skrivende stund ser min spørring slik ut. 
       
      Så går vi gjennom resultatene, vi skal prøve å finne riktig "Quay".
       
      Det første treffet er inneholder denne teksten:
      "destinationDisplay": { "frontText": "Tasta - Vardeneset" }, "quay": { "id": "NSR:Quay:48450" }, ... men en buss med "Tasta - Vardeneset" tar meg i feil retning! Ergo er "NSR:Quay:48450" ikke riktig.
       
      Det neste treffet inneholder dette:
      "destinationDisplay": { "frontText": "Stavanger" }, "quay": { "id": "NSR:Quay:48449" }, Jepp! Riktig! Altså kan vi filtrere på "NSR:Quay:48449" for å finne avganger fra "NSR:StopPlace:28163" som kun går mot Stavanger.
       
       
       
      Installasjon
      Du trenger en referanse til Newtonsoft.Json.dll for at scriptet skal fungere. Json er mye i bruk i dag, og siden jeg har oppdaget at Webclient nå er innebygget i HS3 (og superenkel å bruke), så er det bare å legge inn Json-støtte for scripting også.
       
      Lukk HS3. Åpne settings.ini Finn linjen som begynner med ScriptingReference= Vanligvis står det kun System.Core;System.Core.dll. Vi skal legge til Newtonsoft bak der. Hos meg (på Windows) skal linjen da se slik ut:  
      ScriptingReferences=System.Core;System.Core.dll,Newtonsoft.Json;C:\Program Files (x86)\HomeSeer HS3\Bin\homeseer\Newtonsoft.Json.dll Lagre og start HS3 igjen. For Linux skal den muligens se slik ut, men du må sjekke plasseringen på /bin/homeseer/Newtonsoft.Json.dll selv.
      ScriptingReferences=System.Core;System.Core.dll,Newtonsoft.Json;/usr/local/HomeSeer/bin/homeseer/Newtonsoft.Json.dll  
       
      Kopier scriptet under og lagre det som EnTur.vb. Etter massiv testing fra @Tor-Erik er vi ganske sikre på at det også kjører på Linux.  
       
      EnTur.vb:
       
       
      Du må også lage deg noen devicer selv for å faktisk vise data. Dette gjør foreløpig ikke scriptet for deg. Den trenger ingen status values, men kanskje en enkel status Graphics for å ha et ikon (istedenfor Off/Dim/On-ikoner)
        

       

       
       
       
      Så trenger vi et event for å oppdatere teksten. Dette kan f.eks. kjøre hvert minutt.
      Parametre for funksjonen "CallsFromStopplace" er deviceID, stopplaceID, quayID (optional), antall_avganger (optional).
       

       
      Du kan ha flere script-kall i et event, hvis du har flere stopp, avganger, etc du vil kontrollere.  
       

       
       
      Parametre for funksjonen "TripsBetweenStops" er deviceID, stopplaceID (fra), stopplaceID (til), antall_avganger (optional). Det er et enkelt ruteoppslag, fint fra større stasjoner (f.eks. "Stavanger") til et bestemt stoppested.
       
      DeviceValue i hver device er antall minutter til neste avgang. Kan brukes til automasjon.  
       

       
       
    • Av ZoRaC
      Vi har HSTouch på mobilene våre og jeg har lenge tenkt jeg skulle legge inn noen av de grafene jeg har tilgang på fra Device History.
      Startet med det i dag og da innså jeg at det var veldig begrenset hvor mye man kunne tilpasse grafene via vanlig event, mens man kunne gjøre mye mer tilpassninger via script. Med script ble det også en fordel at man bare trenger å endre ett sted om jeg vil endre noe på designet på grafene, i stedet for å måtte endre mange events.
       
      Sub Main(ByVal params as Object) ' @Author: ZoRaC ' @Version: 1.1 (2019-01-09) ' @Syntax: dvRef|time in hours|Y1-label ' SETTINGS Dim parameters() as String = params.ToString.Split("|") Dim dvRef As String = parameters(0) Dim hours As Integer = parameters(1) Dim y1Lbl As String = parameters(2) Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(dvRef) Dim dvName As String = dv.Name(Nothing) Dim filename As String = Nothing Dim seconds As Integer = hours*60*60 Dim timeString As String = parameters(1) & " timer" If hours > 24 Then timeString = "1 dag" End If If hours > 48 Then timeString = TimeSpan.FromSeconds(seconds).Days & " dager" End If ' CREATE GRAPH filename = hs.PluginFunction("Device History", "", "CreateChartEx",New Object(){dvRef,"{'Title': '" & dvName & " (" & timeString & ")', 'Y1Label': '" & y1Lbl & "','Y2Label': '','XLabel': 'Dato/Tid', 'ShowLegend': false, 'DurationType': 2, 'PeriodType': 1, 'Periods': " & hours & ", 'Style': 2, 'UseMarkers': false, 'Width': 460, 'Height': 310, 'RotateDegrees': 270}", "", ""}) End Sub I manualen til Device History finnes det mange flere parametere man kan putte inn for å tilpasse utseendet på grafen.
       
      Scriptet gir f.eks dette (med parametere: "789|24|% RH"):

       
      I HSTouch har jeg laget egne screens:
       
       
      Jeg har laget 3 events pr rom:

       
      På de 3 tekst-knappene over grafen har jeg satt "IgnorePresses=false" og lagt inn dette i "ActionWhenPressed":

       
      Vent i 1000ms, slik at den rekker å generere bildet.
       
      Deretter tvinger den den til å laste bildet på nytt - setter bare URL til det samme som den opprinnelig er (PNG-URLen):

       
      Slik ble resultatet:

    • Av Moskus
      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.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  
       
       
      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.
    • 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  
×