Blodstrupmoen Skrevet 26. desember 2019 Skrevet 26. desember 2019 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? Siter
psv021 Skrevet 26. desember 2019 Skrevet 26. desember 2019 (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 26. desember 2019 av psv021 Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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. Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 Prøver script metoden igjen, her er feilmeldingene jeg får, se også MQTT sender data som forventet fra HS. Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 (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 27. desember 2019 av psv021 Litt ekstra info Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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() Siter
Moskus Skrevet 27. desember 2019 Skrevet 27. desember 2019 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... 1 Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 GitHub alene har 37 millioner brukere og mer enn 100 millioner repoer, så SÅ jævlig kan det ikke være... https://en.wikipedia.org/wiki/GitHub 1 Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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. Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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... Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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å... Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 Da tror jeg jeg følger MQTT sportet videre. Forstår ikke hvorfor jeg ikke får bruke verdiene som tydeligvis kommer inn i influx og dermed Grafana. Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 Kanskje det er komma-problematikk, som du var inne på. Komma brukes kanskje som en felt-separator i API-kallet, ikke som desimaltegn. Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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? Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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. Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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. Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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? Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 Jeg ser det som sendes over MQTT fra Homeseer, og det er samme data jeg ser komme inn i Grafana, begge steder er komma desimalseparator: Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 "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? Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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. Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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. Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 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. Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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. Siter
Blodstrupmoen Skrevet 27. desember 2019 Forfatter Skrevet 27. desember 2019 Ok, men bruker du komma eller punktum som desimalskille på disse dataene? Siter
psv021 Skrevet 27. desember 2019 Skrevet 27. desember 2019 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 Siter
Anbefalte innlegg
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.