ThingSpeak.com - loggning av värden externt!

Generell info kring Z-Wave
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

För en tid sedan hittade jag en tråd på Fibaro's egna forum, som nämnde något som heter ThingSpeak.com. Det är en site man kan skapa "kanaler" på som man kan fylla på med information, t.ex. temperatur/luftfuktighet/ljusstyrka osv. Och sedan får man ett enkelt sätt att få ut diagram över tiden. En enkel och rak lösning för loggning av värden alltså.

Nu är det säkert någon som opponerar sig att det är ju inbyggt i Fibaro, framförallt i v4. Japp, du kan logga energiförbrukningen, och temperatur (från v4) - men jag känner inte till att man kan logga luftfuktighet eller ljusstyrka - någon får gärna rätta mig om jag har fel ;-)

Så jag skapade i alla fall två "kanaler" (varje kanal kan hålla 8 värden), och hackade en liten VD:

Code: Select all

thingspeak = Net.FHttp("api.thingspeak.com") 
local field1 = fibaro:getValue(40, "value")
local field2 = fibaro:getValue(49, "value")
local field3 = fibaro:getValue(31, "value") 
local field4 = fibaro:getValue(20, "value") 
local field5 = fibaro:getValue(41, "value")
local field6 = fibaro:getValue(50, "value")
local field7 = fibaro:getValue(32, "value") 
local field8 = fibaro:getValue(21, "value") 
payload = "key=<your key>&field1="..field1.."&field2="..field2.."&field3="..field3.."&field4="..field4.."&field5="..field5.."&field6="..field6.."&field7="..field7.."&field8="..field8
response, status, errorCode = thingspeak:POST('/update', payload)

local field1 = fibaro:getValue(96, "value") 
local field2 = fibaro:getValue(97, "value") 
payload = "key=<your key>&field1="..field1.."&field2="..field2
response, status, errorCode = thingspeak:POST('/update', payload)
Mycket enkelt alltså, och observera att man alltså inte kan ändra namnen på "field1" osv - men man kan ändra det på sina grafer, så det har ingen direkt betydelse rent praktiskt. I mitt fall ser t.ex. grafen för de tre första sensorernas temperatur ut såhär (nu när jag fått igång min HC2 igen):
Image

Det går att dela ut sina "kanaler" till public om man vill, men jag kör dom privat än så länge. Det jag framförallt gillar är att jag har tillgång till kurvor och data utan att logga på min HC2 - det är helt fristående helt enkelt. ThingSpeak klarar av anrop var 15e sekund om jag minns rätt, jag loggade faktiskt varje minut först, men har numera ändrat till var 15e minut. Eller så kan logga på förändring av värde då - men det kräver såklart mera kod...

I det stora så ser jag detta som en bättre lösning än den inbyggda helt enkelt.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Kul nu har jag fått till min första graf, lite tråkig nu när det bra är en väldigt jämn temperatur men det blir kul det här.
Loggar annars mycket till MySQl och gör grafer utifrån det, men helt klart kul med nya loggningsmetoder :)
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Hur kul som helst :)
Attachments
Hall.PNG
Hall.PNG (11.19 KiB) Viewed 96410 times
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
larron
Ny medlem
Posts: 24
Joined: 15 Oct 2013, 21:41
11
Location: Halmstad
Contact:

Hej Bamsefar. Du har inte lust att lägga ut skärmdump på din VD eller om du har möjlighet - snabb steg för steg instr? Fick inte till det riktigt ;-(

I VDn ovan - värde 96-96, vad står de för? Förekommer ju inte i fields 1-8?

Hälsningar


Skickas via Tapatalk
Fibaro Home Center 2 with door/window sensors and motion sensors, also some D-Link 932L cams. LUA-Newbie...
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Kodexemplet jag gett är hela den koden jag har i min VD. Det behövs inte mera. Det som är viktigt att förstå är att jag har TVÅ kanaler, där första använder alla 8 värden som tillåts i en kanal, och kanal två har just två värden. Det enda man gör är alltså att hämta värdet från sin sensor:

Code: Select all

fibaro:getValue(<sensorns enhetsID>, "value")
Och sedan gör detta för varje värde som man vill logga. Jag loggar alltså 8+2 värden (dvs rent praktiskt är det alltså 4 inomhussensorer som jag tar två värden från vardera, och då varje sensor uppträder som flera enhetsIDn så blir det rent praktiskt 8 olika sensorer, plus då en yttersensor som jag hämtar temperatur och luftfuktighet).

Alltså rätt rakt och enkelt - lista vilka sensorer du avser logga, och sedan skapa det antal kanaler du behöver - kopiera varje kanals "API nyckel" så man kan identifiera kanalen - och fyll i med upp till 8 värden per kanal.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
larron
Ny medlem
Posts: 24
Joined: 15 Oct 2013, 21:41
11
Location: Halmstad
Contact:

Tack :-)
Styr du loggningens intervall via Thingspeak eller schemaläggning?
Hälsningar
Fibaro Home Center 2 with door/window sensors and motion sensors, also some D-Link 932L cams. LUA-Newbie...
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Loggningsintervallet sker i HC2, ThingSpeak.com lagrar (och presenterar) bara informationen. Varje anrop är således en loggning. Observera att du bara tillåts lagra var 15e sekund, såvida du inte betala....
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
larron
Ny medlem
Posts: 24
Joined: 15 Oct 2013, 21:41
11
Location: Halmstad
Contact:

Skärmavbild 2015-04-15 kl. 15.39.34.png
Skärmavbild 2015-04-15 kl. 15.39.34.png (156.41 KiB) Viewed 87426 times
Hej och tack Bamsefar. Har dessvärre inte lyckats och uppskattar om du har möjlighet att bistå?
Har skapat en VD med kod enligt din samt lagt in 7 stycken egna värden och API koden för kanalen. Har också skapat en scen som trycker på VD en gång i timmen.
Får dock inte någon statistik!

Min fundering - ska VD se ut enligt bilden? Ska checkruta bockas för string eller luakod? Koden kanske ska ligga som main loop?
Hälsningar!
Fibaro Home Center 2 with door/window sensors and motion sensors, also some D-Link 932L cams. LUA-Newbie...
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Bocka i Lua,

Här kommer en kod för bara 1 enhet så kan du kanske få till en, så går det lättare sen.
Ersätt min enhet 28 men någon som du har.
Som du ser så la jag in lite debug i denna för att du ska kunna se vad du får för svar.

Code: Select all

thingspeak = Net.FHttp("api.thingspeak.com") 
local field1 = fibaro:getValue(28, "value")
fibaro:debug(field1)

payload = "din key från ThingSpeak"..field1
response, status, errorCode = thingspeak:POST('/update', payload)

fibaro:debug(status)
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

@larron hur har det gått gör dig?
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
larron
Ny medlem
Posts: 24
Joined: 15 Oct 2013, 21:41
11
Location: Halmstad
Contact:

Hyggligt att du frågar:-) Inte haft möjlighet att testa men ska sätta fart nu. Ny bebis in da house :-) Återkommer.
Fibaro Home Center 2 with door/window sensors and motion sensors, also some D-Link 932L cams. LUA-Newbie...
Rasmussen
Medlem
Posts: 36
Joined: 04 Dec 2014, 17:00
9

Fick tummen ur igår och knåpade lite med detta, riktigt skoj och inte allt för avancerat.
Men då slog det mig, att det hade varit läckert om det bara skickats en uppdatering till thingspeak när och om temperaturen ändrats med säg 0,5 grader.

Måste väl gå att lagra tempen som en variabel globalt eller lokalt och via en if sats få den att bara uppdatera värdet vid förändring och tex en gång i timmen.

Ska klura lite och se vad jag kan knåpa ihop med mina baskunskaper :)



edit
klurat lite men får bara skäll, kompetensbrist... men jag antar att ni förstår vart jag är på väg iaf
[ERROR] 09:52:05: line 23: 'end' expected (to close 'while' at line 1) near ''

Code: Select all

--[[ 
%% properties 
%% autostart 
%% globals 
--]] 

while true do 
local lasttemp = fibaro:getGlobalValue("lasttemp_nere")
local newtemp = fibaro:getGlobalValue("newtemp_nere")
fibaro:debug(lasttemp)
fibaro:debug(newtemp)
if (lasttemp ~= newtemp)  
    then
fibaro:call( 102,"pressButton", "1") 
fibaro:setGlobal("lasttemp_nere", newtemp)
fibaro:sleep(20*60000);
else
fibaro:setGlobal("lasttemp_nere", newtemp)
fibaro:sleep(20*60000);
end

Nu blir det ut och bära möbler, får knåpa vidare sen.


//andreas
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
11

Får bara svar 400 från ThingSpeak :)

min kod är följande:

Code: Select all

thingspeak = Net.FHttp("api.thingspeak.com") 
local field1= fibaro:getValue(302, "value")
fibaro:debug(field1)

payload = 0000 ..field1
response, status, errorCode = thingspeak:POST('/update', payload)

fibaro:debug(status)
Tacksam för hjälp...
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Rasmussen: Om du skriver en scen som triggar på value på den sensor du vill logga på, och antingen talar om för sensorn om minsta värdeförändring innan sensorn sänder nytt värde (enklast) eller så gör man som du tänkte med en global variabel som håller senast sända värde, och jämför med det varje gång som sensorn triggar för nytt värde. Ja och så deltat då på 0,5 grader såklart...

jens: Du sänder inte korrekt kod till ThingSpeak, du borde skicka något i stil med:

Code: Select all

payload = "key=<your key>&field1="..field1
Observer hanteringen kring field1 - dels måste du tala om det i URL strängen som du sänder och dels värdet. Det enda du skickar är 0000 (vilket jag antar är din nyckel som du raderat och ersatt med nollor) + värdet av field1 - men som sagt, du måste skickar mera info...
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
Rasmussen
Medlem
Posts: 36
Joined: 04 Dec 2014, 17:00
9

Tack för tipset Bamsefar

Får se vad jag tar mig till där och om jag nu lyckas, vore snyggt rent grafmässigt men om det tillför någonting annat vete tusan :)
Skam för den som ger sig!

//a
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
11

Får fortfarande fel cod:400

min kod ser nu ut så här:

Code: Select all

thingspeak = Net.FHttp("api.thingspeak.com") 
local field1= fibaro:getValue(302, "value")
fibaro:debug(field1)

payload = "key=<00000>&field1="..field1
response, status, errorCode = thingspeak:POST('/update', payload)

fibaro:debug(status)
:? :?
Rasmussen
Medlem
Posts: 36
Joined: 04 Dec 2014, 17:00
9

Prova att ändra
payload = "key=<00000>&field1="..field1
till
payload = "key=nyckeländetutanandratecken&field1="..field1


mvh
Andreas
larron
Ny medlem
Posts: 24
Joined: 15 Oct 2013, 21:41
11
Location: Halmstad
Contact:

Sonnyboy och Bamsefar- tack för hjälp. Rullar på bra här nu, kul.
Hade "råkat" lägga in key i den övre raden där api ska stå, klantigt ;-)
Allt gott!
Fibaro Home Center 2 with door/window sensors and motion sensors, also some D-Link 932L cams. LUA-Newbie...
dadid
Medlem
Posts: 88
Joined: 29 Jan 2013, 16:32
11

Har skapat en VD.
Angivit vilka enheter som skall läsas av.
Testat med såväl kanal ID som API Write key. Vilket är det som gäller?

Kanalerna syns, men ingen mätdata. Tips på vad jag gjort för fel?
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Behöver nog se LUA koden för att förstå ditt problem.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
Post Reply