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

Anbefalte innlegg

Skrevet

Prøver å få over data fra Homeseer til Grafana, kjører Homeseer på en virtuell windows, og bruker MQTT plugin. Har en RPI med MQTT broker og en virtuell ubuntu som kjører telegraf, influxdb og grafana. Leser på MQTTFx på pc. at HS gir ut verdier på MQTT, og ser i grafana under Explore/logs at verdier kommer inn, det viser antall forekomster ikke verdier her, får heller ikke satt opp noen grafer. Noen som har tips, har stått fast noen dager med dette. Ser det bruke komma som desimalskille, mulig det skaper problemer?

512958164_Merknad2019-12-26153727.thumb.png.65dd09ea6d296c4d86250fb2fc301aba.png

Skrevet (endret)

Har ingen konkrete forslag til ditt konkrete problem, men dersom du vil forsøke en ny vei til Rom, så har jeg brukt et VB-script for å eksportere verdier av utvalgte enheter i HS til InfluxDB (og derfra visualisere dem med Grafana).

 

Scriptet er en variant av det som står i denne tråden: https://forums.homeseer.com/forum/homeseer-products-services/system-software-controllers/hs3-hs3pro-software/hs3-hs3pro-discussion/107992-a-script-to-log-device-changes-to-influxdb-for-use-with-grafana?p=1308494#post1308494

 

(Hjemmeautomasjonsmiljøer verden over burde ha "bruke Git" som nyttårsforsett)

 

Jeg kjører scriptet som en event hver X minutter. Enklere å debugge når man kan trykke play selv i starten.

 

I forhold til debugging av ditt eksisterende problem, får du noen meldinger fra influxdb eller telegraf når kallene går? Hva ser du i Grafana når du forsøker å sette opp en query for en graf?

Endret av psv021
Skrevet

Jeg prøvde script metoden først, men fikk masse feilmeldinger i Homeseer, derfor gikk jeg over til MQTT. 

 

Jeg ser jo dataene som kommer inn i grafana, så regner med det imellom fungerer, men formater osv. kan kanskje være feil. Her er ett forsøk på å lage en graf/visning.

 

1522062812_Merknad2019-12-27100129.thumb.png.189ef060bb9fa957deadfffebf4efa12.png

Skrevet (endret)

Jeg er IKKE god på Windows-programmering og VB, men her er hva jeg tror noe av dette betyr:

DEVICE_LIST not declared: Enten er den skrevet inne i en Sub, eller så er den ikke definert skikkelig. Senere feilmeldinger tyder på det. Mangler nok komma etter et par av referansene. Eller det er komma etter siste tall som heller ikke virker å være OK i VB. Ser ut som om listen også mangler en avsluttende }.

 

Jeg hadde problemer med devicer som hadde komma i navnet, så jeg la inn en sjekk for det. Jeg har også lagt inn device-navn i ID'en, slik at jeg ikke trenger å sitte i Grafana å gjette hvilken device et spesifikt tall tilhører. Her er det nok bedre måter å gjøre ting på. Kan ikke InfluxDB godt nok. F.eks. ser jeg at andre har mer standardiserte navn, slik at f.eks. alle temperatursensorer heter "Temperature", men skilles via location og location2, osv.

 

Legger ved scriptet slik jeg står hos meg:

 

'Call this script by running &hs.runScriptFunc("l2db-influxdb.vb","Main",0,False,False)
'VB.Net script to write Homeseer 3 values to InfluxDB
'Originally from this post of the Homeseer forums: https://forums.homeseer.com/showthread.php?t=194145
'Use at your own risk. Edited by Marty. Edited by psv021.
'Uncomment (hs.WriteLog) the log statements if you're having problems to try to track down the error.


Imports System.Core
Imports System.Web
Imports System.Net
Imports System.IO
Imports System.Text

Sub Main(ByVal Parms As Integer)

    '==========================================================
    'Modify these to fit your system
    Dim INFLUX_DB_SERVER_IP = "localhost"
    Dim INFLUX_DB_SERVER_PORT = "8086"
    Dim INFLUX_DB_DATABASE_NAME = "homeseer"

    'Comma separated list of device references to log
    Dim DEVICE_LIST = {
        927,
        228,
        772,
        803,
        762,
        601,
        634,
        942,
        425,
        428,
        417,
        420,
        194,
        245,
        246,
        938,
        939,
        914,
        915,
        891,
        886,
        395,
        396,
        365,
        366,
        344,
        345,
        324,
        325,
        204,
        209,
        196,
        201,
        300,
        302,
        308,
        310,
        801,
        802,
       1048,
       1049,
       1040,
       1041,
       1086,
       1087,
       1091,
       1092,
       1096,
       1097,
       534,
       533,
       575,
       574,
       290,
       240,
       166,
       476,
       477,
       162,
       214,
       215,
       216,
       161,
       163,
       578,
       579,
       580,
       164,
       165,
       166,
       231,
       232,
       235,
       475,
       476,
       477,
       592,
       586,
       587,
       588,
       159,
       244,
       243,
       242,
       217,
       218,
       219,
       590,
       591,
       592,
       578,
       579,
       580,
       582,
       583,
       584,
       286,
       255,
       465,
       133,
       132,
       216,
       211, 
       212, 
       231, 
       232, 
       235, 
       213, 
       242, 
       243, 
       244, 
       217, 
       218, 
       219,
       475,
       1180,
       1182,
       1175,
       1177,
       1170,
       1172
       }

    '==========================================================

    Dim device_name, device_location, device_location2, deviceObj, device_type
    Dim device_value As Double

    'hs.WriteLog("L2DB-InfluxDB", "Script running L2DB-influxdb.")

    'Build the post data string
    Dim postdata As String = ""

    For Each devRef As Integer In DEVICE_LIST

        Try
            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)
            device_value = hs.DeviceValueEx(devRef)
            postdata = postdata & devRef

            If device_name <> "" Then 
                device_name = device_name.Replace(",", "_")
                postdata = postdata & "_" & device_name & ",name=" & device_name
            End If

            If device_location <> "" Then 
                device_location = device_location.Replace(",", "_")
                postdata = postdata & ",location=" & device_location
            End If

            If device_location2 <> "" Then 
                device_location2 = device_location2.Replace(",", "_")
                postdata = postdata & ",location2=" & device_location2
            End If

            If device_type <> "" Then 'Types are optional and not all devices have them
                device_type = device_type.Replace(",", "_")
                postdata = postdata & ",type=" & device_type
            End If

            postdata = postdata & "~value=" & device_value    '~ will be changed to a space later
            postdata = postdata & Chr(10)     'insert line feed for next set of values

        Catch ex As Exception
            hs.WriteLog("L2DB-InfluxDB", "Error1: " & ex.ToString())
            hs.WriteLog("L2DB-InfluxDB", "DeviceRef: " & devRef)
        End Try
    Next


    'Strip invalid characters and change ~ to a space
    postdata = postdata.Replace(" ", "_")
    postdata = postdata.Replace("[", "")
    postdata = postdata.Replace("]", "")
    postdata = postdata.Replace("~", " ")

    'hs.WriteLog("L2DB-InfluxDB", "Postdata: " & 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)

    httpWebRequest.ContentType = "application/x-www-form-urlencoded"
    httpWebRequest.Method = "POST"
    ServicePointManager.DefaultConnectionLimit = 20
    Dim encoding As New System.Text.UTF8Encoding

    'Make the request to the database
    Try
        Dim data As Byte() = encoding.GetBytes(postdata)
        httpWebRequest.ContentLength = data.Length
        Dim myStream As Stream = httpWebRequest.GetRequestStream()

        If data.Length > 0 Then
            myStream.Write(data, 0, data.Length)
            myStream.Close()
        End If

    Catch ex As Exception
        hs.WriteLog("L2DB-InfluxDB", "Error1: " & ex.ToString())
    End Try

    'Declare responseText to be filled later
    Dim responseText as String = ""

    Try
        Dim httpResponse = DirectCast(HttpWebRequest.GetResponse(), HttpWebResponse) 
        dim myReader As StreamReader 
        dim myStream As Stream
        myStream = httpResponse.GetResponseStream()
        myReader = New StreamReader(myStream) 
        responseText = myReader.ReadToEnd() 
        If responseText <> "" Then
            hs.WriteLog("L2DB-InfluxDB", "Response: " & responseText) 
        End If

    Catch ex As Exception
        hs.WriteLog("L2DB-InfluxDB", "Error2: " & ex.ToString())
        hs.WriteLog("L2DB-InfluxDB", "Response was: " & responseText)
        hs.WriteLog("L2DB-InfluxDB", "Request was: " & postdata)
    End Try


End Sub

 

Endret av psv021
Litt ekstra info
Skrevet

Da har jeg lagt inn scriptet ditt, og rettet feilene med komma som du påpekte, sitter da igjen med følgende feilmelding som jeg ikke forstår mye av:

Running script C:\Program Files (x86)\HomeSeer HS3\scripts\l2db-influxdb.vb :Object of type 'System.String' cannot be converted to type 'System.Int32'.->Does entry point Main exist in script? at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Scheduler.clsRunVBNetScript.ExecuteScript()

Skrevet
13 timer siden, psv021 skrev:

(Hjemmeautomasjonsmiljøer verden over burde ha "bruke Git" som nyttårsforsett)

Enig. Og det hadde nok fungert bedre hvis ikke det å "bruke Git" var så jævlig... :(

 

Git

  • Like 1
Skrevet

Ser at ved bruk av dette scriptet, vil man sende over alle data ved ett fast intervall selv om de ikke er endret, ved bruk av MQTT vil man kun sende over data ved endringer, man får altså ett mye riktigere bilde ved å sende over mindre data. Stemmer ikke det? Derfor hadde det vært kjekt å fått til MQTT metoden.

Skrevet
38 minutter siden, Blodstrupmoen skrev:

Da har jeg lagt inn scriptet ditt, og rettet feilene med komma som du påpekte, sitter da igjen med følgende feilmelding som jeg ikke forstår mye av:

Running script C:\Program Files (x86)\HomeSeer HS3\scripts\l2db-influxdb.vb :Object of type 'System.String' cannot be converted to type 'System.Int32'.->Does entry point Main exist in script? at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Scheduler.clsRunVBNetScript.ExecuteScript()

Selve feilmeldingen er selvforklarende (en string kan ikke settes til en Int). Altså en tekststreng som VB ikke klarer å gjøre om til et tall. Men akkurat hvor det skjer er jo litt verre...

 

Brute-force feilsøking: Ta bort alle devicene, bortsett fra et par-tre stk. Se om det sviver da. I så fall er feilen relatert til en eller flere spesifikke devicer. I tillegg ligger det noen try/catch'er i koden der du kan kommentere inn igjen linjene som printer ting til loggen. Kanskje det kan gi noen tips. Mulig andre har gode tips til debugging. Jeg er bortskjemt med Python der man stort sett får oppgitt nøyaktig hvor i koden feilen skjer...

Skrevet
Akkurat nå, Blodstrupmoen skrev:

Ser at ved bruk av dette scriptet, vil man sende over alle data ved ett fast intervall selv om de ikke er endret, ved bruk av MQTT vil man kun sende over data ved endringer, man får altså ett mye riktigere bilde ved å sende over mindre data. Stemmer ikke det? Derfor hadde det vært kjekt å fått til MQTT metoden.

Jo, slik jeg har satt det opp sender det i faste intervaller. Så ja, fra InfluxDB-perspektivet er det umulig å se om en device faktisk har endret seg, eller om den bare har samme verdi.

 

Jeg oppdaget nå at mange av mine RFXCOM-devicer faktisk ikke gir reelle verdier. Har fungert fint i flere år, men tydeligvis begynt å fuske tidligere i høst. Så risikoen for å faktisk ha helt 100% feil data er absolutt til stede også...

Skrevet

Men ut fra bildet mitt i første innlegg, kommer jo verdiene inn i Grafana, og de ser riktig ut, men får ikke laget grafer basert på disse.

20 timer siden, Blodstrupmoen skrev:

Prøver å få over data fra Homeseer til Grafana, kjører Homeseer på en virtuell windows, og bruker MQTT plugin. Har en RPI med MQTT broker og en virtuell ubuntu som kjører telegraf, influxdb og grafana. Leser på MQTTFx på pc. at HS gir ut verdier på MQTT, og ser i grafana under Explore/logs at verdier kommer inn, det viser antall forekomster ikke verdier her, får heller ikke satt opp noen grafer. Noen som har tips, har stått fast noen dager med dette. Ser det bruke komma som desimalskille, mulig det skaper problemer?

512958164_Merknad2019-12-26153727.thumb.png.65dd09ea6d296c4d86250fb2fc301aba.png

 

Skrevet

Men hvordan ser det ut i Grafane når du forsøke å lage en query for et dashboard?

 

+

Create Dashboard

Add query

Select measurement

 

Fikk ikke til å screenshotte det, men hos meg får jeg da opp en liste over alle devicer jeg eksporterer data for fra HS3. Når jeg velger en av dem, blir grafen synlig.

Skrevet

Det ser slik ut, får opp valgene med output fra homeseer, men ingen graf.

2 timer siden, Blodstrupmoen skrev:

Jeg prøvde script metoden først, men fikk masse feilmeldinger i Homeseer, derfor gikk jeg over til MQTT. 

 

Jeg ser jo dataene som kommer inn i grafana, så regner med det imellom fungerer, men formater osv. kan kanskje være feil. Her er ett forsøk på å lage en graf/visning.

 

1522062812_Merknad2019-12-27100129.thumb.png.189ef060bb9fa957deadfffebf4efa12.png

 

Skrevet

Ja... nei, da tror jeg også at formateringen er feil. Sendes det et "value"-felt? Har du noen mulighet for å se det som faktisk sendes over til InfluxDB?

Skrevet

"Må" jo være det som kødder det til, men hvordan man løser det uten å skape masse nye problemer vet jeg ikke. Sette punktum som globalt desimaltegn på maskinen som kjører HS3? 

 

Ellers "må" jo dette være et kjent problem - hva sier Google? 

Skrevet

Finner ingen info, men det må jo gjelde de fleste som driver med dette i Norge.

Har nå flyttet MQTT brokeren på samme server som telegraf/influx/grafana for å sikre at alle har samme "locale" innstillinger, uten at det gjorde noen endring.

Skrevet

Hva skjer dersom du velger noe annet enn "value" i SELECT field(value)? Jeg sender data til InfluxDB via telegraf, men her får jeg ikke opp noe på "value". Må velge andre ting.

Skrevet

Men bruker scriptet telegraf? Legger ikke dette dataene rett inn i Influx? Jeg har ikke noe annet enn  Value i dette valget.

 

Men ser at jeg ikke får opp noe data når jeg går inn i influx via Chronograf heller. Derfor er det rart at verdier vises i explore/logs i grafana. Mistenker det er noe med data format på output /input fra telegraf som er feil.

Skrevet

Scriptet bruker ikke telegraf nei. Der sendes det direkte til REST API'et. Men parallelt med alt dette har jeg telegraf gående for å eksportere livsdata fra serveren HS3 kjører fra. Her er ikke HS3 involvert i det hele tatt. Direkte telegraf --> InfluxDB.

Skrevet

Punktum, styrt av globale innstillinger i Windows. Vet ikke hvordan HS3 gjør det dersom komma er satt opp som desimalskilletegn.

 

Lite utdrag av dataene som går fra HS3 til InfluxDB:

927_Power,name=Power,location=TV_i_stue,location2=WallPlug,type=Z-Wave_Power value=211.8 228_StatusTVStue,name=StatusTVStue,location=Virtuell,location2=WallPlug value=1 772_Power,name=Power,location=Kjøkken_kaffetrakter,location2=WallPlug,type=Z-Wave_Power value=0 803_Status_kaffetrakter_kjøkken,name=Status_kaffetrakter_kjøkken,location=Virtuell,location2=WallPlug value=0 762_Power,name=Power,location=TV_i_kjellerstue,location2=WallPlug,type=Z-Wave_Power value=166.1 601_StatusTVKjellerstue,name=StatusTVKjellerstue,location=Virtuell,location2=WallPlug value=1 

 

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

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