Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Julius

Medlemmer
  • Innlegg

    28
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Julius

  1. Ja, jeg forsøkte å legge in ranger som skulle dekke det meste. Jeg antok først at dette måtte være problemet pga den feilen jeg fikk i loggen, men den gang ei. Var ikke noe forskjell... 

     

    Om jeg legger in 6 i lista får jeg statusen, men ikke pin index.

  2. Hei,

     

    Har endelig fått meg smartlås :D ID Lock 150. Fikk inkludert den i HS greit, og har nå en event som heter Access Control Notification, og jeg får disse eventene nå døren låses igjen og opp. Men hvor er pin indexen som skal komme med (fra z-wave docen til id lock);

    The value of para1 refers to User ID of User PIN (User PIN 1 ~ 10 = 0x3C ~ 0x45)

    I loggen til HS ser jeg:

     

    Access Control Notification Set to NOTIFICATION for type Access Control Notification, Event: Notification Event Exception: Index was outside the bounds of the array.

     

    Da tenker jeg at noe er satt opp feil her:

    image.thumb.png.09475812ad13626c8d23aa71dd53a814.png

     

    Burde ikke den range entrien plukket dette eventet opp?

  3. Hei, hvordan får man egentlig lagt den inn som plugin, altså plugin manager. Om jeg kjører .exe fila manuelt så dukker den opp, men vil jo helst ha plugin mangeren til å starte den opp.

  4. Nei, om du kompilerer mot mono i stedet, kan det godt hende det går. Harikke  forsøkt det selv. Alt blir vel enklere når vi kan kompilere mot .net standard....

  5. 2 hours ago, torhaala said:

    Ser da meget bra ut Julius.

     

    Sliter du forresten fortsatt med timeouts? Jeg har hatt det en gang, etter at NAS'en som kjører InfluxDB restartet. Selv etter at DB'en var oppe å kjørte fortsatte dette. Det ble løst ved å ha DB kjørende og så restarte HS. Utover dette har det fungert upåklagelig i ca 3 måneder nå (HS på en HomeTroller SEL og InfluxDB i en docker container på Synology NAS). Mulig noen eldre versjoner av Mono lager litt krøll hvis dette kjøres på linux?

     

    Jeg kjører windows, men jeg fant nettopp ut at jeg muligens hadde en deffekt switch i nettverket mitt. Det kan ha vært årsaken til mine timeouts.

  6. 'VB.Net script to write Homeseer 3 values to InfluxDB
    'Created by Brian based on code found on the Homeseer forums. No warranty. Use at your own risk.
    'Uncomment the log statements if you're having problems to try to track down the error.
    
    'Installation Instrustions: 
    '	0: Install InfluxDB & get it running
    '	1: Modify the variables below to fit your system.
    '	2: Add this line to Homeseer\Scripts\Startup.vb
    '    hs.RegisterStatusChangeCB("L2DB-influxdb.vb","Main")
    '	3: Restart Homeseer
    
    Imports System.Core
    Imports System.Web
    Imports System.Net
    Imports System.IO
    Imports System.Text
    
    Public Sub Main(ByVal Parms As Object)
    	'==========================================================
    	'Modify these to fit your system
    	dim INFLUX_DB_SERVER_IP = "127.0.0.1"
    	dim INFLUX_DB_SERVER_PORT = "8086"
    	dim INFLUX_DB_DATABASE_NAME = "homeseer"
    	dim SKIP_LIST = "" 'comma separated list of device references to skip logging
    	'==========================================================
    
    	dim device_name, device_location, device_location2, deviceObj, device_type, problem
    	dim dev_address as string
        Dim device_value As Double
        Dim devRef As Integer	
    	
    	'Get device info from Homeseer
        dev_address = Parms(1) 'address of device. 
        device_value = Parms(2) 'new value of device
        devRef = Parms(4) 'Device reference of the device 
        deviceObj = hs.GetDeviceByRef(devRef)
        device_name = deviceObj.name(hs)
        device_location = deviceObj.location(hs)
        device_location2 = deviceObj.location2(hs)
        device_type = deviceObj.Device_Type_String(hs)
    
    	If device_type = "Timer" Then 'Don't log timers
    		Exit Sub
    	End If
    	
    	If SKIP_LIST <> "" Then 
    		Dim skips = SKIP_LIST.split(New Char() {","c})
    		Dim skip as String
    		For Each skip in Skips
    			If devref = skip
    				Exit Sub
    			End If
    		Next
    	End If
    	
    	'Build the post data string
    	Dim postdata as String = ""
    	If device_location2 <> "" Then 
    		postdata = postdata & device_location2
    	End If
    	If device_location <> "" Then 
    		postdata = postdata & "_" & device_location
    	End If
    	If device_name <> "" Then 
    		postdata = postdata & "_" & device_name
    	End If
    	
    	postdata = postdata.Replace(" ", "_")
    	postdata = postdata & " value=" & device_value
    	
    '	hs.WriteLog("L2DB-InfluxDB", postdata)
    	
    	'Set up the Webrequest
    	Dim url = "http://" & INFLUX_DB_SERVER_IP & ":" & INFLUX_DB_SERVER_PORT & "/write?db=" & INFLUX_DB_DATABASE_NAME
    	Dim httpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
    
    	'Dim httpWebRequest = DirectCast(WebRequest.Create("https://requestb.in/XXXXXXX"), HttpWebRequest)  'For testing- to see what the request contains
    	
    	httpWebRequest.ContentType = "application/x-www-form-urlencoded"
    	httpWebRequest.Method = "POST"
    	Dim encoding As New System.Text.UTF8Encoding
    
    	'Make the request to the database
    	Try
    		hs.WriteLog("L2DB-InfluxDB", "Logging to Database: Reference: " & devref & " Address: " & dev_address & ", Device Name: " & device_name & ", New Value: " & device_value & ", Server: " & INFLUX_DB_SERVER_IP & ", post: " & postdata)
    		Dim data As Byte() = encoding.GetBytes(postdata)
    		httpWebRequest.ContentLength = data.Length
    		httpWebRequest.Timeout = 1000
    		Dim myStream As Stream = httpWebRequest.GetRequestStream()
            
    		If data.Length > 0 Then
    			myStream.Write(data, 0, data.Length)
    			myStream.Close()
    		End If
    
    		Try
    			Dim httpResponse = DirectCast(HttpWebRequest.GetResponse(), HttpWebResponse) 
    			dim myReader As StreamReader 
    			dim responseStream as Stream
    			responseStream = httpResponse.GetResponseStream()
    			myReader = New StreamReader(responseStream) 
    			Dim responseText = myReader.ReadToEnd() 
    	'		hs.WriteLog("L2DB-InfluxDB", "Response: " & responseText) 
    
    		Catch ex As Exception
    			hs.WriteLog("L2DB-InfluxDB", "Error: " & ex.ToString())
    			hs.WriteLog("L2DB-InfluxDB", "Request was: " & postdata)
    		End Try
    	Catch ex As Exception
    		hs.WriteLog("L2DB-InfluxDB", "Error: " & ex.ToString())
    	End Try
    	
    
    End Sub
    
    

    Litt mod, men ikke mye. Liker best floor_room_name som id slik at det blir lettere å finne i grafana. Jeg starta også på skratch med ny db.

  7. 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: 

    Quote

    Iif you need to add references to other DLL files, use the following syntax to reference a file, this example references the visualbasic DLL:

    The ScriptingReferences INI entry is for vb.net only.

    //css_reference Microsoft.VisualBasic.dll;

    Note that you need the entire string even though it looks like its commented out.

     

    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

     

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.