Fungerar endast för dig som är nördig, har Tibber och en Watty eller Pulse-enhet.
Här kommer ett supernörderi som jag hade som fredagsnöje igårkväll. Vi använder ju Tibber som elbolag och använder deras Watty som är en elmätare i realtid som är kopplad till deras app. Det fungerar bra och vi har mycket glädje av den, men har inte den uppe hela tiden. Därför ville jag ha den funktionen i webbläsaren istället. Typ så här:
Bättre icke-rörlig bild:
Jag lajvar ju utvecklare från tid till annan - och jag vet att en hel del av er här på forumet också är det - så kommer här en kort beskrivning och lite kod. Kanske någon kan ha glädje av det. Kanske kan sätta upp ett GitHub-projekt vid tillfälle.
Tyvärr är ju inlärningströskeln hög. Men så här tror jag att jag gjorde.
- Installera Node
- Installera Socket.io + express-ramverket
- Lägg till ett npm-paketet
tibber-pulse-connector
- Kopiera kod från
index.js
+ `index.html - Kopia Token från Tibber
Steg 1. Installera NodeJS på datorn om du inte redan har det.
Finns mycket guider på nätet.
Steg 2. Sätt upp miljön
I en egen mapp kör:
npm init
för att få en package.json. Kör därefter (var för sig):
npm install express@4
npm install socket-io
npm install tibber-pulse-connector
Så här ser min package.json ut när det är klart:
{
"name": "tibber2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.18.1",
"socket.io": "^4.5.1",
"tibber-pulse-connector": "^3.0.8"
}
}
Steg 3. Kopiera följande till de olika filerna:
index.js
const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
io.on("connection", (socket) => {
const tibber = require('tibber-pulse-connector');
const ws = require('ws'); // Remember to add this dependency, doh
// Test tokens
const token = `___REPLACE_WITH_TIBBER_PERSONAL_ACCESS_TOKEN___`;
const homeId = `___REPLACE_WITH_TIBBER_HOME_ID___`;
// const connector = new tibber({token, homeId, ws, onData: (data, homeId) => { console.log(data, homeId) }});
const connector = new tibber({token, homeId, ws, onData: test});
connector.start();
function test(data, homeId){
socket.emit('liveMeasurement',data['data']['liveMeasurement'])
}
});
http.listen(port, () => {
console.log(`Socket.IO server running at http://localhost:${port}/`);
});
samt
index.html
<!DOCTYPE html>
<html>
<head>
<title>Elförbrukning</title>
<script src="https://cdn.plot.ly/plotly-2.12.1.min.js"></script>
</head>
<body>
<h1>Förbrukning i realtid <span id="power_consumption"></span> kWh</h1>
<div id="tester" style="width:100%;height:800px;"></div>
<script src="/socket.io/socket.io.js"></script>
<script>
TESTER = document.getElementById('tester');
var layout = {
// title: 'Förbrukning (kWh) i Realtid',
showlegend: false,
yaxis: {
title: ' kWh'
}
};
Plotly.newPlot( TESTER, [{
y: [],
x: [],
mode: 'lines',
line: {color: '#80CAF6'}
}], layout, {responsive: true});
let cnt = 0;
</script>
<script>
var socket = io();
// client-side
socket.on("liveMeasurement", (data)=>{
// console.log(data)
document.getElementById('power_consumption').innerText = data.power
Plotly.extendTraces(TESTER, {
x: [[data.timestamp]],
y: [[data.power]]
}, [0])
});
</script>
</body>
</html>
Steg 4. Kör.
Därefter är det bara att köra node index.js
och öppna http://localhost:3000/
Få token och homeid från Tibber
Du kan få en egen access token via:
För att sedan se homeId så är det enklaste att gå till:
Där kan du testa API:et med realtidsförbrukning m.m.