After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Ik heb dit script proberen aan te passen om m'n eigen data (om de 5 min uitlezen van een 1-wire teller met absolute waardes)CurlyMo schreef op vrijdag 26 juli 2013 @ 14:38:
Voor de geïnteresseerden, mijn uitvoer van mijn energie log:
[afbeelding]
Allemaal lokaal
De electricity.php geeft een mooie json weer van bv (natuurlijk meer datapunten)
[{"x": 1384467602000, "y": 0, "color": "#2f7ed8"},{"x": 1384467303000, "y": 106, "color": "#2f7ed8"}]
Bij het plaatsen in de charts (via de index.html) gaat er precies toch iets mis:
- ik krijg enkel een beeld als ik op "all" druk (bovenste deel), het onderste geeft wel iets weer(de golvende layout). De info die je normaal gezien krijgt door over de bars te hooveren staat vast aan een van de eerste (reageert niet). Als ik zoom met het onderste deel, dan gaat het bovenste deel van de grafiek blanco (geen bars)
- vanaf een bepaald aantal datapunten (hoeveelheid afhankelijk van de browser - bv IE 164) dumt hij in het bovenste deel van de grafiek alles in 1 kolom die het totale verbruik bevat, de onderste niks meer
Ik heb al de voorbeelden op de site van highcharts bekeken, maar zelfs met hun code en mijn json krijg ik hetzelfde probleem
(post verplaatst uit GPIO)
De code die ik gebruik is:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| header('Content-Type: text/html; charset=utf-8'); $rConnect = mysql_connect('KNIP', 'KNIP', 'KNIP'); $rDatabase = mysql_select_db('verbruik'); $rHourElec = mysql_query("SELECT * FROM elekalles ORDER BY ROWID DESC LIMIT 0 , 100"); $x = 0; $iNrRows = mysql_num_rows($rHourElec); $sJson = '['; while($aHourElec = mysql_fetch_assoc($rHourElec)) { if ($x == 0){$vorige = $aHourElec['teller'];$x=1;} // om de eerste waarde op nul te zetten $aHourElec2 = $vorige-$aHourElec['teller']; $sJson .= '{"x": '.strtotime($aHourElec['datum'].' '.$aHourElec['tijd']).'000, "y": '.$aHourElec2.', "color": "#2f7ed8"},'; $vorige = $aHourElec['teller']; } $sJson = substr($sJson, 0, -1); echo $sJson .= ']'; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
| <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Energy Logging</title> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> $(function() { $.getJSON('electricity.php', function(data) { // create the chart $('#electricity').highcharts('StockChart', { chart: { alignTicks: false }, rangeSelector: { selected: 1, buttons: [{ type: 'hour', count: 12, text: '12h' }, { type: 'day', count: 1, text: '1d' }, { type: 'week', count: 1, text: '1w' }, { type: 'month', count: 1, text: '1m' }, { type: 'month', count: 6, text: '6m' }, { type: 'year', count: 1, text: '1y' }, { type: 'all', text: 'All' }], }, title: { text: 'Electricity Usage' }, credits: { enabled: false }, exporting: { enabled: false }, series: [{ type: 'column', name: 'Watt', data: data, turboThreshold: 10000000, dataGrouping: { units: [[ 'minute', [15, 60] ], [ 'hour', [24] ], [ 'day', [7] ], [ 'week', [4] ], [ 'month', [12] ], [ 'year', null ]] } }] }); }); }); </script> </head> <body> <script src="js/highstock.js"></script> <script src="js/modules/exporting.js"></script> <div id="electricity" style="height: 400px"></div> </body> </html> |
Hiermee meet ik een spanning van ±0.25V bij het witte deel van de schijf, en springt dat naar ±1.6V als het rode streepje langskomt :-) Ik ben superblij dat ik een resultaat heb, maar loop er tegenaan dat het heel nauw luistert qua plaatsing.
hebben anderen die problemen ook qua plaatsen/richten? Een paar mm te hoog en ik zie niks, dan een klein beetje bijstellen en ineens werkt het super....
Nu wachten op m'n arduino;s uit china en dan kan ik verder
Ik heb trouwens een 47k weerstand (niet pot) bij mijn CNY70, misschien dat je daarmee het verschil nog wat groter kan maken bij je TCRT5000?
Aparte voedingsspanning trouwens, 6v? Schakelingen gebruiken hier meestal 5v.
[ Voor 17% gewijzigd door Raven op 15-11-2013 15:57 ]
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Sinds de 2 dagen regel reageer ik hier niet meer
Ja ik heb die CNY70s idd snel binnen, kwamen uit Spanje in een dag of vijf. De TCRT5000 heb ik bij de lokale elektroboer gehaald (A) daarom heb ik die al. Ik zal eens proberen met een hogere weerstand nog.Raven schreef op vrijdag 15 november 2013 @ 15:55:
Wow, die had je snel binnenBij mij duurde het wel even voor de TCRT5000's en CNY70's er waren
Ik heb trouwens een 47k weerstand (niet pot) bij mijn CNY70, misschien dat je daarmee het verschil nog wat groter kan maken?
Moet jij jouw setup ook heel precies uitrichten Raven of niet?
(is er ook een app/tapatalk voor dit forum trouwens, search leverde niks op..0)
Hier in Enschede hebben we voor zover ik weet geen lokale elektroboer die dat soort spul heeft.
edit: En ik heb voor een paar € een stel logic level converters voor I2C, al werken ze blijkbaar ook met UART en SPI, die waren best snel binnen, kwamen uit Polen. 2 dagen terug besteld, vandaag binnen
[ Voor 47% gewijzigd door Raven op 15-11-2013 16:03 ]
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
beste steeringwheel, klinkt gaaf, heb je een schema van je circuitje misschien?SteeringWheel schreef op zondag 10 november 2013 @ 20:47:
Heb het uitlezen van een draaischijf nu goed werkend met een raspberry + cny70 + mcp3008. Volgend projectje wordt de gasmeter (met een reflecterende 0). Heb oa de volgende bronnen gebruikt:
Uitlezen draaischijf:
https://www.circuitlab.co...u/raspberry-pi-kwh-meter/
http://juerd.nl/site.plp/kwh
Website voor de grafieken (van CurlyMoo):
https://github.com/CurlyMoo/RaspberryPi-P1-port
Heb het schema uit de link die ik postte naar circuitlabs gebruikt (https://www.circuitlab.co...u/raspberry-pi-kwh-meter/). Maar dan alleen het gedeelte van 1 sensor en de mcp3008.Wietman!!! schreef op vrijdag 15 november 2013 @ 22:00:
[...]
beste steeringwheel, klinkt gaaf, heb je een schema van je circuitje misschien?
Zie voor mijn output http://tny.cz/c323f7b1Promy schreef op zaterdag 16 november 2013 @ 11:59:
@CurlyMo: is het mogelijk om eens die Json (of een deel ervan) te bezorgen, dan kan ik deze effectief vergelijken? Ik vermoed immers dat het daarin zit, want met een json van de site van highcharts (http://www.highcharts.com...me=aapl-v.json&callback=?) lukt het wel?
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.
Is die schakeling wel compleet? R11+R12 zitten bij de ADC's niet helemaal aangesloten lijkt het?SteeringWheel schreef op zaterdag 16 november 2013 @ 12:41:
[...]
Heb het schema uit de link die ik postte naar circuitlabs gebruikt (https://www.circuitlab.co...u/raspberry-pi-kwh-meter/). Maar dan alleen het gedeelte van 1 sensor en de mcp3008.
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Ik wilde de laatste x gegevens erin steken en gebruik hier voor
1
| SELECT * FROM elekalles ORDER BY ROWID DESC LIMIT 0 , 1000 |
Dit geeft echter de gegevens in omgekeerde volgorde (laatste eerst), en daar lijkt het mis te gaan.
Als ik alle gegvens erin dump (zonder order en limit), dan werkt het wel...(maar duurt het lang want er zijn nu al bijna 100.000 rows)
update: wijzigen naar volgende en hij werkt wel!
1
| (SELECT * FROM elekalles ORDER BY ROWID DESC LIMIT 1000) ORDER BY ROWID ASC |
[ Voor 13% gewijzigd door Promy op 16-11-2013 13:19 ]
Die heb ik achterwege gelaten, hier en hier doen ze het ook niet.Raven schreef op zaterdag 16 november 2013 @ 13:12:
[...]
Is die schakeling wel compleet? R11+R12 zitten bij de ADC's niet helemaal aangesloten lijkt het?
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.
maak je in het script een berekening die het aantal pulsen per minuut telt en daarna uitrekend hoeveel gas of stroom per minuut verbruikt wordt en daarna naar de database wegschrijft met een datum en tijd?
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
- consumption: 60.042
- electricity: 11.974
- electricity_buffer: 11.223
- gas: 982
- gas_buffer: 963
Totale omvang van de database op mijn HDD
1
2
3
| [root@server /data/mysql]# du -ch log 149k log 149k total |
Ligt er dus maar net aan wat je groot noemt
Sinds de 2 dagen regel reageer ik hier niet meer
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Sinds de 2 dagen regel reageer ik hier niet meer
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde

Ik doe dit sinds begin oktober 2012, en mijn pulse tabel heeft nu meer dan een half miljoen records en heeft een grootte van 36,6mb. (mysql op mijn raspberry pi met 256mb geheugen)
Je moet alleen geen query's willen doen die alle records bij langs gaat. Ik heb cronjobs lopen die elk uur/dag totalen telt en in aparte dag en maand tabellen zet. Op die manier kun je snel overzichten laten weergeven.

Ik heb ook andere tabellen waaruit de grafieken worden opgebouwd. Het maken van een grafiek vanuit mijn ruwe data kost nu zo'n 30 seconde
[ Voor 24% gewijzigd door CurlyMo op 22-11-2013 11:07 ]
Sinds de 2 dagen regel reageer ik hier niet meer
van 30 seconden naar 3
[ Voor 9% gewijzigd door Dogooder op 22-11-2013 12:19 ]
150k per jaar? Als ik elke puls van de draaischijfmeter vast wil leggen zit ik met het huidige verbruik en toeren/kWh op ~900k per jaar.CurlyMo schreef op vrijdag 22 november 2013 @ 11:06:
Nee, dat is praktisch ongelimiteerd. Het valt nu ook wel mee; +/- 150.000 per jaar. Een 32-bit unsigned int auto increment kan 4.000.000.000.000 rijen bevatten. Niks om me zorgen over te maken dus. En dan hebben we het over mysql.
Ik heb ook andere tabellen waaruit de grafieken worden opgebouwd. Het maken van een grafiek vanuit mijn ruwe data kost nu zo'n 30 seconde
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Als je de pulsen per minuut optelt kom je op 525600 records.Raven schreef op vrijdag 22 november 2013 @ 12:13:
[...]
150k per jaar? Als ik elke puls van de draaischijfmeter vast wil leggen zit ik met het huidige verbruik en toeren/kWh op ~900k per jaar.
Dat gaan we proberen! Als extra index, of ipv mijn huidige index?Dogooder schreef op vrijdag 22 november 2013 @ 12:01:
Als je de timestamp als index opgeeft in MySQL kan je al een flinke tijdwinst halen bij het bouwen van grafieken uit ruwe data.
van 30 seconden naar 3
Kijk wel uit met extra indexen op zo'n tabel; die maken je tabel fors groter en inserts en updates worden duurder.
Ik heb op geen enkele manier expertise voor MySQL maar ik denk dat partitioning beter geschikt is als query snelheden op ruwe data een probleem worden:
http://dev.mysql.com/doc/...artitioning-overview.html
http://dev.mysql.com/doc/...n/partitioning-range.html
Hiermee beperk je ook de hoeveelheid rows die de db moet doorvlooien als je tussen datums zoekt en heb je niet de overhead van indexen.
(mocht bovenstaande onzin zijn: enlighten me, ik leer graag bij
Het ik-wil-een-warmtepomp FAQ topic- '23 MG5, douchen met wtw en Auer Edel Eau, verwarming met Vaillant Arotherm Plus.
bedankt voor de tips
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Mijn tabellen zien er zo uit:
Ruw:
1
2
3
4
5
6
7
8
9
| log_id dev_id rate_id usage datetime direction 1 1 2 1148.430 2013-07-22 19:59:34 0 2 1 3 1119.170 2013-07-22 19:59:34 0 3 2 1 541.360 2013-07-22 19:59:34 0 4 1 3 1119.180 2013-07-22 20:01:24 0 5 1 3 1119.190 2013-07-22 20:03:34 0 6 1 3 1119.200 2013-07-22 20:05:35 0 7 2 1 541.460 2013-07-22 20:07:25 0 8 1 3 1119.210 2013-07-22 20:07:55 0 |
Stap 1:
1
2
3
4
5
| hour datetime usage max min rate_id 20 1374523200 50 1119.230 1119.180 3 20 1374524100 40 1119.280 1119.240 3 20 1374525000 50 1119.340 1119.290 3 20 1374525900 40 1119.390 1119.350 3 |
Stap 2:
1
2
3
4
5
| hour datetime watt prev_hour prev_max 20 1374523200 50 20 1119.230 20 1374524100 50 20 1119.280 20 1374525000 60 20 1119.340 20 1374525900 50 20 1119.390 |
Vanuit die laatste tabel maak ik mijn grafiek.
[ Voor 80% gewijzigd door CurlyMo op 22-11-2013 19:21 ]
Sinds de 2 dagen regel reageer ik hier niet meer
ik kwam dit tegen op internet. geen while lus die constant je channel polst maar een interrupt.Koffie schreef op zondag 06 oktober 2013 @ 10:25:
@19roland70 je leest die opmerking wel meer als het om pulsen tellen gaat, maar aan de andere kant zijn er ook genoeg die aantonen dat het wel lukt.
Omdat ik toch het vermoeden had dat de plastic kap onderdeel van het probleem zou zijn, heb ik deze afgeplakt.
Eerst heb ik de LDR met een streepje tape vastgeplakt op de behuizing, daarna een stuk karton over de kap heen:
[afbeelding]
Als ik dan de volgende code uitvoer:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import RPi.GPIO as GPIO import time import datetime GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.IN) while True: input_value = GPIO.input(18) if input_value == 0: now = datetime.datetime.now() hour = now.hour minute = now.minute second = now.second print hour,minute,second," puls detected?" time.sleep(0.1)
https://code.google.com/p/raspberry-gpio-python/wiki/Inputs
is dit niet makkelijker?
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Voor iedereen die mijn oplossing wilt gebruiken. Sinds vandaag heb ik een kant en klare image gemaakt. Die kan je gewoon op een SD kaart zetten van tenminste 32mb, paar instellingen instellen in de cmdline.txt en de rest gaat vanzelf.
https://github.com/CurlyMoo/RaspberryPi-P1-port/
http://sourceforge.net/projects/rpip1reader/files/
Sinds de 2 dagen regel reageer ik hier niet meer
bv gpio wfi 17 both ==> deze wacht op een interrupt op pin 17 en let zowel op rising als falling.
(heb wel ondervonden dat er soms false positives tussenzitten...maar die kan je makkelijk in je script ondervangen)
heb je die scripts ook ergens los staan? ik keek op je website maar zag het niet staan.
ik moet even een voorbeeld hebben om op weg te komen denk ik
[ Voor 28% gewijzigd door Speedfightserv op 26-11-2013 15:38 ]
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
ik zoek dat scriptje om een interrupt uit te lezen. Of heb ik je verkeerd begrepen en had je daar nog niets mee gedaan?
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Voor mijn implementatie van interrupts kan je in deze bestanden terecht:
https://github.com/piligh...master/libs/pilight/irq.c
https://github.com/piligh...r/libs/pilight/wiringPi.c
https://github.com/piligh...ter/libs/hardwares/gpio.c
[ Voor 6% gewijzigd door CurlyMo op 26-11-2013 17:39 ]
Sinds de 2 dagen regel reageer ik hier niet meer
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
[ Voor 28% gewijzigd door CurlyMo op 27-11-2013 11:48 ]
Sinds de 2 dagen regel reageer ik hier niet meer
Ik ben van plan met een (goedkope) webcam gewoon een foto te maken en dan via OCR de meterstand aflezen. Dus Raspberry Pi + Tesseract + Webcam.Speedfightserv schreef op woensdag 27 november 2013 @ 09:29:
ah, ok. ik heb geen slimme meter. ik moet pulsen gaan tellen die een reedswitch (gasmeter) en een photosensor (stroom) uitlezen.
Webcam kost nog geen 5 euro.
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
Ik gebruik D3.js.Speedfightserv schreef op donderdag 28 november 2013 @ 20:30:
welke tool gebruiken jullie om de graphs te maken?
Het begint al ergens op te lijken. Ik heb nu een oude iPad1 in de gang hangen als monitor
Uiteindelijke doel is niet alleen energieverbruik weergeven, maar afhankelijk van het tijdstip van de dag ook andere informatie te tonen.
s'ochtends: Vertragingen van het station dat ik altijd gebruik
s'middags/begin van de avond: Series die vannacht zijn binnengekomen
eind van de avond: Energieverbruik

Onze excuses voor het ontbreken van de ondertiteling.
Ik heb het volgende getest:
Arduino Uno met uitlezen van ADC op mn laptop, eerst CNY70 geprobeerd volgens:

hier geen resultaat dus geprobeerd met een TCRT5000 (die zou wat meer range moeten hebben). zelfde weerstanden gebruikt (op basis van datasheet nagerekend en zou moeten kunnen).
Mijn resulaten op mijn PC lijken veelbelovend, als er niks voor de sensor krijg ik een waarde van circa 680 terug van mijn arduino/adc. Als ik er iets wits tegenaanhoud dan een waarde van ~20. objecten op verschillende afstanden geven mooi verschillende meetwaardes tussen de 20 en 680. Zowel voor CNY als TCRT werkt dit.
Nu plak ik eht voor mijn kWh-meter en .... niks
Wie zet me op het goede spoor, wat gaat hier fout?
edit: heb ik nou gewoon supereflecterend plexiglas of richt ik die sensor steeds niet goed uit? Was dit bij anderen erg kritiek?
[ Voor 6% gewijzigd door Fr33z op 01-12-2013 14:36 ]

het kan zijn dat je glasplaat voor de meter te veel spiegeld.
probeer het eens met een sticker op je meter met een vakje wat open is recht voor je meter. plaats daar je sensoren.
is het infrarood lampje helemaal afgeschermd of straalt hij vrij alle kanten op?
[ Voor 88% gewijzigd door Speedfightserv op 02-12-2013 12:02 ]
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.
Omdat ik het nog steeds niet aan de praat heb, ga ik het op een andere manier proberen.
Ik wil de LDR aan een MCP3008 ADC hangen, en later wellicht zelfs via een attinyu (mooi projectje om eens te leren hoe dat werkt).
De MCP3008 heb ik al, de attiny staat in bestelling. Een fotodiode wil ik ook nog bestellen, gewoon om te kijken wat het fijnste werkt.
Tijd voor een nieuwe sig..
mss nog een tip, zet even een ledje tussen je schakeling zodat je kunt zien wanneer de transistor open/dicht gaat.
@anderen: foto staat in mijn post genoemd, ik ga vanavond even proberen met een grotere weerstand zodat de led minder fel brand, wellicht verblind ik de sensor nu wel. Ik ga voor een 100ohm bij 3.3V voeding ipv 47ohm nu, dat moet me ongeveer 25mA geven door de led van de CNY70 ipv 50mA nu.
ik laat het weten hoe het gaat
update:
AAaaargh... dit is echt een frustrerende oefening aan 't worden. Ik heb vanavond nog een paar dingen geprobeerd:
1. CNY70 met een kleine "divider" van karton tussen led en ontvanger zoals beschreven hier http://www.aaamc.nl/softio/cny/
helaas maakte niks uit voor mijn CNY70 projecten (ook niet nadat ik de weerstand voor de LED verving van 47ohm naar 120 ohm, led blijft verblind door t glaasje lijkt t.
2. LDR plus een felblauwe led met een redelijke weerstand (560ohm bij Vcc 5V), gekozen voor blauw omdat het streepje op de schijf rood is. Dit gaf me na veel richten/prutsen een klein beetje resultaat, namelijk een meetwaarde die verspringt van ~770-780 tot 840-850 en daarna weer zakt naar ~770. Dit lijkt aardig, maar het uitrichten is erg moeilijk en ik twijfel of dit verschil groot genoeg is.
3. Phototransistor (BP103) met een IR led geprobeerd. Dit gaf me niks, maar kan aan de uitlijning liggen, das lastig met IR-licht ;-)
all-in-all vrij onbevredigend... Heb hier nu al zolang mee geprutst, ik snap niet hoe het bij anderen schijnbaar simpel werkt. Wat kan ik verbeteren/proberen? Blijkbaar heb ik een super-shiny raampje op mn meter zitten en is de schijf niet goed te detecteren.
[ Voor 57% gewijzigd door Fr33z op 02-12-2013 21:07 ]
Had hier een vraag over gesteld.

Oke, kreeg antwoord op een andere manier. Via een Delta medewerker. De nul ( 0 ) is een spiegel. Echter bij mij is de nul pikzwart.

In ieder geval misschien interessant voor een ander persoon.
Terzijde
Kreeg ook zojuist te horen dat ze bij ons volgend jaar in de wijk nieuwe meters komen plaatsen.
Dus effe wachten dan maar.

Alhoewel kan natturlijk al voorbereidingen treffen.
/terzijde
[ Voor 65% gewijzigd door Lord Anubis op 03-12-2013 09:53 ]
Heeft iemand een idee wat voor weerstand er tussen de LDR moet in zo'n situatie?
Het ontbreekt mij net even aan kennis om daar iets zinnigs over te zeggen. Ik zat vrijwel elke keer op een waarde van 1020 oid.
Ik heb de LDR in een stukje PVC zitten, Het pijpje zit op een kartonnen cover die volledig om de unit heen zit, zodat er geen licht van andere bronnen bij kan komen.
Tijd voor een nieuwe sig..
ik gebruik een 20k weerstand (Vcc 5V), maar 10k kan ook wel. Ik heb getest met weerstanden tussen 1-50kOhm, maakt niet heel veel uit. Die pijp is misschien wat overkill, ik heb gemerkt met mijn LDRs dat ze echt alleen op licht "recht van voren" reageren. Als ik hem dus gewoon strak/plat op het glaasje plak vang ik geen achtergrondlicht op.Koffie schreef op dinsdag 03 december 2013 @ 08:13:
Gisteravond even zitten prutsen met een LDR aan de MCP3008, maar dat was geen succes
Heeft iemand een idee wat voor weerstand er tussen de LDR moet in zo'n situatie?
Het ontbreekt mij net even aan kennis om daar iets zinnigs over te zeggen. Ik zat vrijwel elke keer op een waarde van 1020 oid.
Ik heb de LDR in een stukje PVC zitten, Het pijpje zit op een kartonnen cover die volledig om de unit heen zit, zodat er geen licht van andere bronnen bij kan komen.
succes!
edit: deze LDR bedoel ik

Probleem is (zie TS) dat de kast waar de LED voor de pulse in zit een doorzichtige kap heeft, waardoor er aan alle kanten licht op valt.
Voor de zekerheid heb ik net op ebay ook zo'n kan en klare fotodiode met potmeter besteld.
Als het goed is krijg ik vandaag mijn Rpasberry Pi noir camera binnen, misschien dat ik die ga inzetten om de GJ meter van stadswarmte uit te lezen, deze heeft namelijk alleen maar een display en geen enkele pulse of wat dan ook.
Tijd voor een nieuwe sig..
ik heb zojuist de 2de besteld. 1tje is gewoon niet aangekomenKoffie schreef op dinsdag 03 december 2013 @ 08:57:
Voor de zekerheid heb ik net op ebay ook zo'n kan en klare fotodiode met potmeter besteld.
Als het goed is krijg ik vandaag mijn Rpasberry Pi noir camera binnen, misschien dat ik die ga inzetten om de GJ meter van stadswarmte uit te lezen, deze heeft namelijk alleen maar een display en geen enkele pulse of wat dan ook.
t geld gelukkig wel gewoon terug gekregen.
[ Voor 4% gewijzigd door Speedfightserv op 03-12-2013 09:04 ]
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Ik heb het nu al 2 keer met mijn relais via ebay. Wel gled terug gekregen, maar de 2e zending lijkt ook weer niet aan te komen
Tijd voor een nieuwe sig..
ik snap wat je bedoeld. Toch denk ik uit eigen ervaring dat het met die LDR zonder afscherming ook wel lukt. Heb dat bij mijn ouders gebruikt om een knipperende led te detecteren, als je de LDR gewoon recht boven/voor de led plakt is het (bij mij iig) zo'n duidelijk verschil in weerstand dat detectie een eitje is (heck, ik heb die bij mijn ouders zonder ADC gemaakt en gewoon een BC547 transistor laten schakelen).Koffie schreef op dinsdag 03 december 2013 @ 08:57:
Die LDR heb ik idd ook
Probleem is (zie TS) dat de kast waar de LED voor de pulse in zit een doorzichtige kap heeft, waardoor er aan alle kanten licht op valt.
Voor de zekerheid heb ik net op ebay ook zo'n kan en klare fotodiode met potmeter besteld.
Als het goed is krijg ik vandaag mijn Rpasberry Pi noir camera binnen, misschien dat ik die ga inzetten om de GJ meter van stadswarmte uit te lezen, deze heeft namelijk alleen maar een display en geen enkele pulse of wat dan ook.
TL:DR: bij mij viel strooilicht (bijna) volledig in het niet bij het wel/niet aangaan van de led, detectie daarvan was simpel.
[ Voor 5% gewijzigd door Fr33z op 03-12-2013 10:44 ]
dezeKoffie schreef op dinsdag 03 december 2013 @ 09:29:
Welke heb je bij wie besteld ?
http://www.ebay.nl/itm/310651562172
heb hem voor de 2de keer wel weer hier besteld. denk dat er gewoon bij de post iets mis is gegaan.
edit:
ik ben bang dat ik er nu zometeen 2 heb...

[ Voor 31% gewijzigd door Speedfightserv op 11-12-2013 10:35 ]
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sommigen hebben een te klein bereik omdat ik meet per minuut.
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
Mocht je er eentje overhouden houd ik me aanbevolen
Tijd voor een nieuwe sig..
pghraphCurlyMo schreef op woensdag 11 december 2013 @ 15:04:
Welke heb je geprobeerd?
D3.js
highstock
ook nog gekeken naar de rddtool
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
daarna wat statische php graph's maar dan moet je weer data om gaan zetten etc. en dan nog heb je het niet netjes.
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
ga ik nog even bekijken.
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
het is gelukt!CurlyMo schreef op woensdag 11 december 2013 @ 15:10:
Je hoeft ook geen javascript kennis te hebben, je moet gewoon de API volgen en de data juist aanleveren.
had inderdaad de documentatie niet goed gelezen.

30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
highstock is in de map highstock in rootwebfolder geinstalleerd.
datum formaat die ik in de database heb staan staat in de tijdelijke mysql_query (gebruikte ik om niet meteen heel veel results te hebben met testen)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| <?php echo '<html>'; echo '<head>'; echo '<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>'; echo '<script src="http://code.highcharts.com/stock/highstock.js"></script>'; echo '<script src="js/highstock.js"></script>'; echo '</head>'; $link = mysql_connect('localhost', 'user', 'pass'); if (!$link) { die('Could not connect: ' . mysql_error()); } //echo 'Connected successfully'; mysql_select_db("gasoutput"); //$result = mysql_query("SELECT datetime, pulsepermin from gasusage where datetime >= '2013-12-15 08:30:00' and datetime < '2013-12-16 08:45:00'"); $result = mysql_query("SELECT datetime, pulsepermin from gasusage"); mysql_close($link); while ($row = mysql_fetch_array($result, MYSQL_NUM)) { $date = date_create($row[0]); $format = $date->format('Y, m-1, d, H, i, s'); $data[] = "[Date.UTC($format), $row[1]]"; } ?> <script> $(function () { $('#container').highcharts('StockChart', { chart: { }, xAxis: { type: 'datetime', //ensures that xAxis is treated as datetime values }, series: [{ name : 'Data', data: [<?php echo join($data, ',') ?>], }] }); }); </script> <div id="container" style="width:100%; height:500px;"></div> </html> |
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Je kunt het zo proberen, uitlezen met een webcam:Lord Anubis schreef op dinsdag 03 december 2013 @ 08:09:
Het betrefd een gasmeter UGI Meters londen 20730 1991.
Had hier een vraag over gesteld.
[afbeelding]
Oke, kreeg antwoord op een andere manier. Via een Delta medewerker. De nul ( 0 ) is een spiegel. Echter bij mij is de nul pikzwart.Zou dus nu op volledig geen signaal kunnen testen. ;-p
In ieder geval misschien interessant voor een ander persoon.
Terzijde
Kreeg ook zojuist te horen dat ze bij ons volgend jaar in de wijk nieuwe meters komen plaatsen.
Dus effe wachten dan maar.![]()
Alhoewel kan natturlijk al voorbereidingen treffen.![]()
/terzijde







Vandaag mijn kan en klare fotodiode binnen (zo eentje: http://www.ebay.nl/itm/31..._trksid=p3984.m1423.l2649) en eens aan de gang gegaan.
Wat ik ook doe, ik krijg simpelweg geen pulsedetectie.
Er zit een klein rood LEDje op de sensor welke brand als hij licht ziet. Zelfs met een lampje op de gang aan kan ik diverse LEDjes in de meterkast detecteren met de sensor, maar niet die van de energiemeter.
Ik ben er van overtuigd dat dit komt omdat de plastic kap niet rechtstreeks op de LED zelf zit; zie hiervoor ook mijn topicstart,
Bij dergelijke plastic behuizingen willen ze het nog wel eens zo maken dat er op de LED een soort plastic buisje zit om zo het licht beter te geleiden. Bij mij is dat niet zo. Eerst een LED welke dieper in de behuizing zit, dan een behuizing er op en dan nog eens een doorzichtige kap.
Ook een stukje PVC met daarin wat aluminiumfolie versterkt niet genoeg om de puls op te vangen.
Uiteraard heb ik ook al met het potmeterje zitten spelen, maar daar waar ik wel andere LEDs in de meterkast kan 'zien' reageert hij gewoonweg niet op de pulse.

Hier zie je goed dat de LED al dieper in de behuizing zit en dan een diepe doorzichtige kap er overheen.
Iemand nog ideeën ?
Tijd voor een nieuwe sig..
nadeel is natuurlijk dat je de cijfers van je meter niet kan zien.
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
is het nog gelukt?
had jij trouwens een weerstand tussen de pulspoort van de kant en klare photodiode gezet?
volgens mij hoeft dat niet toch? ik ga hem denk ik aankomend weekend plaatsen.
[ Voor 74% gewijzigd door Speedfightserv op 31-12-2013 10:49 ]
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Hallo Koffie,Koffie schreef op dinsdag 03 december 2013 @ 08:57:
Die LDR heb ik idd ook
Probleem is (zie TS) dat de kast waar de LED voor de pulse in zit een doorzichtige kap heeft, waardoor er aan alle kanten licht op valt.
Voor de zekerheid heb ik net op ebay ook zo'n kan en klare fotodiode met potmeter besteld.
Als het goed is krijg ik vandaag mijn Rpasberry Pi noir camera binnen, misschien dat ik die ga inzetten om de GJ meter van stadswarmte uit te lezen, deze heeft namelijk alleen maar een display en geen enkele pulse of wat dan ook.
Ik werk met de software van Harold65 van het forum "wij willen zon". Hij heeft ook een schema toegevoegd voor het uitlezen van de ferraris meter. Hij gebruikt een blauwe led van 5mm om de draaischijf te belichten. Deze werkt goed, was alleen moeilijk uit te richten. Ik heb deze weer aangepast door een led toe te voegen waardoor uitrichten super makkelijk wordt. Lichten beide leds op dan zit ie goed.


mooie aanpassing! ik heb dit ook geprobeerd maar werd geen succes. Uiteindelijk heb ik nu (na weken prutsen) eindelijk een werkende opstelling! :-D :-D :-DManS-H schreef op vrijdag 03 januari 2014 @ 21:35:
[...]
Hallo Koffie,
Ik werk met de software van Harold65 van het forum "wij willen zon". Hij heeft ook een schema toegevoegd voor het uitlezen van de ferraris meter. Hij gebruikt een blauwe led van 5mm om de draaischijf te belichten. Deze werkt goed, was alleen moeilijk uit te richten. Ik heb deze weer aangepast door een led toe te voegen waardoor uitrichten super makkelijk wordt. Lichten beide leds op dan zit ie goed.[afbeelding] [afbeelding]
Ik heb na gepruts met een LDR, een TCRT5000, een CNY5000 en verschillende kleuren leds nu mijn oude ferraris-meter uitgelezen met een Ir-led en phototransistor zoals hierboven genoemd. Deze zijn aan en MCP3008 ADC gekoppeld die ik weer aan mijn raspberry pi heb hangen (communicatie via SPI).
Ik lees de ADC uit met een python script, als er een puls gemeten is dan schrijf ik dat in een sqlite3-database weg. Daarna lees ik dit uit met een php-script om de data te laten zien.
Na een dag prutsen ziet het er zo uit:
http://gj.hopto.org/
Meer info volgt, ik heb ook nog wat vragen omtrent wat handig is qua datetime-format in de verschillende talen (python-->sqlite3-->php-->javascript) maar die komen binnenkort wel even.
Voorlopig ben ik even erg blij met alles wat ik mede op basis van jullie ideeen heb kunnen maken
Kartonnen doosje gebruik al vanaf het begin.Speedfightserv schreef op dinsdag 31 december 2013 @ 10:46:
@Koffie.
is het nog gelukt?
had jij trouwens een weerstand tussen de pulspoort van de kant en klare photodiode gezet?
volgens mij hoeft dat niet toch? ik ga hem denk ik aankomend weekend plaatsen.
Vanwege teleurstellende resultaten (en genoeg andere projectjes) ligt het even op een lager pitje,
Tijd voor een nieuwe sig..
Voor de gas en KWH is genoeg info over maar ik heb wat vraagjes over de water meter icm een HAL sensor:
De 2e water meter (lees: niet de Vitens meter, maar is vergelijkbaar) heeft een telwerk die magnetisch wordt aangedreven door een rotor waar een magneet aan vast zit (kwam ik achter toe ik 'm uit elkaar moest halen (zegel verbroken) omdat de rotor vast zat door wat rommel
In mijn geval, heb ik een HALL-sensor nodig die 1300rpm kan registreren (=37,1L/min max.)
De watermeter heeft ~15mtr kabel nodig om bij de meterkast te komen waar de rest ook is.
Is er een manier om deze afstand te overbruggen zodat de RBpi/MCP3008 er ook wat aan heeft? HALL signaal versterken? HALL-sensor met SPI? HALL-sensor met hogere werkspanning, andere manier?
Ah, oke. gebruik je trouwens een weerstand tussen de pulspoort van de photodiode en de rpi?Koffie schreef op zondag 05 januari 2014 @ 08:46:
[...]
Kartonnen doosje gebruik al vanaf het begin.
Vanwege teleurstellende resultaten (en genoeg andere projectjes) ligt het even op een lager pitje,
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Ik heb er voor gekozen om mij MCP3008 vlakbij de sensor te plaatsen en de kabel tussen de MCP3008 en de RPi 15m lang te maken (moest ook een stukje overbruggen...). Dit werkte in tests beter dan een lange kabel tussen de MCP3008 en de sensor. Dit kan in mijn geval wel komen door slecht afgeschermde kabels, ik heb 6-aderig telefoonsnoer (extra plat!) gebruikt, misschien gaat het met afgeschermde kabels beter. Mijn resultaat was dat mijn meetwaarden heen-en-weer gingen tussen erg hoog/erg laag, ik vermoed door inductie in de (lange) kabel.ThaHandy schreef op zondag 05 januari 2014 @ 22:26:
Ik ben ook van plan het een en ander te loggen dmv een Rpi en een MCP3008 te gebruiken voor gas / kwh meter en een HAL-sensor voor de gas meter.
Voor de gas en KWH is genoeg info over maar ik heb wat vraagjes over de water meter icm een HAL sensor:
De 2e water meter (lees: niet de Vitens meter, maar is vergelijkbaar) heeft een telwerk die magnetisch wordt aangedreven door een rotor waar een magneet aan vast zit (kwam ik achter toe ik 'm uit elkaar moest halen (zegel verbroken) omdat de rotor vast zat door wat rommel)
In mijn geval, heb ik een HALL-sensor nodig die 1300rpm kan registreren (=37,1L/min max.)
De watermeter heeft ~15mtr kabel nodig om bij de meterkast te komen waar de rest ook is.
Is er een manier om deze afstand te overbruggen zodat de RBpi/MCP3008 er ook wat aan heeft? HALL signaal versterken? HALL-sensor met SPI? HALL-sensor met hogere werkspanning, andere manier?
Al een tijdje ben ik bezig met energiemeting op basis van een Raspberry Pi.
Toch nog niet mijn oplossing gevonden. Wat ik minimaal wil is uitlezen van mijn smartmeter en mijn omnik inverter en deze doorzetten naar pvoutput.org en www.bidgely.com.
Voor het uitlezen van de omnik inverter heeft Wouter een zeer goed werkend script geschreven
https://github.com/Woutrrr/Omnik-Data-Logger, dit werkt goed.
Voor het uitlezen van de meter gebruik ik de informatie van http://gejanssen.com/howto/Slimme-meter-uitlezen/index.html i.c.m. een USB P1 kabel (https://sites.google.com/site/nta8130p1smartmeter/webshop)
Nu mijn probleem met cu -l /dev/ttyUSB0 -s 9600 --parity=none kan ik het hele telegram zien en met python niet.
Nu probeer ik het zelfde met
while p1_line != "!":
p1_line=''
#Read 1 line van de seriele poort
try:
p1_raw = ser.readline()
except:
sys.exit ("Seriele poort %s kan niet gelezen worden. Aaaaaaaaarch." % ser.name )
p1_str=str(p1_raw)
p1_line=p1_str.strip()
print (p1_line)
Dan ontbreken de gas regels, zie mijn output, de eerste is met CU
/ISk5\2ME382-1003
0-0:96.1.1(4B414C37303035303936383335313132)
1-0:1.8.1(01588.796*kWh)
1-0:1.8.2(01533.423*kWh)
1-0:2.8.1(00033.608*kWh)
1-0:2.8.2(00088.127*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(0000.19*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(0999.00*kW)
0-0:96.3.10(1)
0-0:96.13.1()
0-0:96.13.0()
0-1:24.1.0(3)
0-1:96.1.0(3338303034303031323138333039333132)
0-1:24.3.0(140112150000)(00)(60)(1)(0-1:24.2.1)(m3)
(01771.237~)
0-1:24.4.0(1)
!
Dat is dus goed, nu met het python script;
/ISk5\2ME382-1003
0-0:96.1.1(4B414C37303035303936383335313132)
1-0:1.8.1(01588.791*kWh)
1-0:1.8.2(01533.423*kWh)
1-0:2.8.1(00033.608*kWh)
1-0:2.8.2(00088.127*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(0000.19*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(0999.00*kW)
Wie heeft er nog een tip?
Hans
hoe schrijven jullie de pulsen van je stroom meter weg in de database? pulsen per minuut? aantal watt per minuut?
ik zit namelijk een beetje met de betrouwbaarheid van de data..
stel je doet pulsen per minuut, en je hebt een keer een minuut geen pulsen wil niet zeggen dat je 0 watt verbruikt hebt in die minuut..
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
Sinds de 2 dagen regel reageer ik hier niet meer
ik zat ook met je dilemma, heb het zo opgelost dat ik elke puls met een datum+tijd wegschrijf. Tevens onthoud het script de tijd van de vorige puls. Hiermee reken ik dan het vermogen uit (door P(W) = joules in een puls (afhankelijk van je meter) / tijd in seconden tussen twee pulsen).
Dit schrijf ik weg in een kolom die ik 'rate' genoemd heb,waarden zijn in watt. Ik gebruik een python script, mijn database heeft deze opbouw:
ID, date_time (in RFC33339 formaat, dus "2014-01-05T12:23:44+01:00" ), pulse_count (sinds begin van tellen met de sensor), rate (in W)
in een php-script waarmee ik de data laat uitlezen plot ik date_time versus rate, zie http://gj.hopto.org
@CurlyMo: hoe bedoel je precies elke 100 watt (J/s)? Dit kun je toch niet 1 op 1 uitlezen? bedoel je elke 100 wattuur, oftewel elke 66 pulsen bijvoorbeeld (is in mijn geval zo dat 66 pulsen 100Wh (3600J)
Sinds de 2 dagen regel reageer ik hier niet meer
Dat is ook een idee. Ben je trouwens dan niet bang dat je grafiek naar nul gaat plotten met verbruik(soms kan er best wel wat tijd tussen een puls zitten)Fr33z schreef op dinsdag 14 januari 2014 @ 09:43:
@speedfightserv:
ik zat ook met je dilemma, heb het zo opgelost dat ik elke puls met een datum+tijd wegschrijf. Tevens onthoud het script de tijd van de vorige puls. Hiermee reken ik dan het vermogen uit (door P(W) = joules in een puls (afhankelijk van je meter) / tijd in seconden tussen twee pulsen).
Dit schrijf ik weg in een kolom die ik 'rate' genoemd heb,waarden zijn in watt. Ik gebruik een python script, mijn database heeft deze opbouw:
ID, date_time (in RFC33339 formaat, dus "2014-01-05T12:23:44+01:00" ), pulse_count (sinds begin van tellen met de sensor), rate (in W)
in een php-script waarmee ik de data laat uitlezen plot ik date_time versus rate, zie http://gj.hopto.org
ik ga even kijken of ik het in een python script kan gieten.
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
nou ja, dat heb ik wel gedacht maar tot nu toe valt het mee. Ik heb nog niks ingebouwd om te zorgen dat als het script herstart ik geen nul krijg (omdat de vorige meting qua tijd onbekend is). Nu is dat gewoon een nul qua verbruik maar maakt me niet uit, herstart het toch bijna nooit. Die ene waarde is trouwens ook niet zo'n probleem in de grafiek.Speedfightserv schreef op woensdag 15 januari 2014 @ 09:04:
[...]
Dat is ook een idee. Ben je trouwens dan niet bang dat je grafiek naar nul gaat plotten met verbruik(soms kan er best wel wat tijd tussen een puls zitten)
ik ga even kijken of ik het in een python script kan gieten.
Wil je mijn python-source anders zien?
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
| #!/usr/bin/python import spidev import time import os import datetime as dt import sqlite3 # Open SPI bus DEBUG=0 spi = spidev.SpiDev() spi.open(0,0) # Kanaal van de ADC, in dit geval 0 light_channel=0 #decectiethresshold thresshold=250 # Function to read SPI data from MCP3008 chip # Channel must be an integer 0-7 def ReadChannel(channel): adc = spi.xfer2([1,(8+channel)<<4,0]) data = ((adc[1]&3) << 8) + adc[2] return data # Define delay between readings delay = 0.05 pulse_detected = False #variabele om puls-detectie te doen #define variables pulse_max=None #read max previous pulse-count and continue from there (maybe pickup timestamp also?) db1 = sqlite3.connect('kwh.db') cursor = db1.cursor() cursor.execute('''SELECT pulse_count FROM electric WHERE pulse_count=(SELECT MAX(pulse_count) FROM electric) LIMIT 1''') for row in cursor: pulse_max=row[0] db1.commit() db1.close if(pulse_max>=1): pulse_count=pulse_max else: pulse_count=0 first_run=True while True: # Read the light sensor data light_level = ReadChannel(light_channel) if(light_level>=thresshold): pulse_detected=True if(light_level<150 and pulse_detected == True): #nu is er een puls met falling edge gedetecteerd pulse_count+=1 consumption=pulse_count*(10/float(6)) #Wh van 1 puls print('Puls!!!') print pulse_count t = dt.datetime.now() #timestamp van detectie! year=t.strftime("%Y") month=t.strftime("%m") day=t.strftime("%d") hour=t.strftime("%H") min=t.strftime("%M") sec=t.strftime("%S") if(first_run): rate=0 else: delta_t=t-t_prev #current timestamp minus previous delta_t_sec=delta_t.microseconds/float(1e6)+delta_t.seconds #seconds between two pulses, used for rate rate=6000/float(delta_t_sec) #datetimeformat voor sql-db time_format=t.strftime('%Y:%m:%d %H:%M:%S.%f') #(van een datetime-object input1=[year,month,day,hour,min,sec,time_format,consumption,rate,pulse_count] #database openen db = sqlite3.connect('kwh.db') cursor = db.cursor() cursor.execute('''INSERT INTO electric(year,month,day,hour,min,sec,time_date,consumption,rate,pulse_count) VALUES(?,?,?,?,?,?,?,?,?,?)''', (input1)) db.commit() db.close #flip variables pulse_detected=False first_run=False t_prev=t #save this datetime for use in next one to calculate timedifference # Wait before repeating loop time.sleep(delay) |
hierin was ik nog niet zo handig met timestamps. Ik heb besloten mijn timestamps als strings in iso8601/rfc3339 format op te slaan, dat wordt dan "2014-01-20T15:56:23+01:00" bijvoorbeeld. Dit kan je in php/python weer goed gebruiken,werkt in sqlite ook met het datetime("2014....") commando zodat je makkelijk gister, morgen etc kan selecteren.
Dit stukje heb ik verbeterd in mijn python door de library arrow (http://crsmithdev.com/arrow/ ) te gebruiken. Een nieuw script (deze logt temperatuur) doet timestamps als volgt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #!/usr/bin/python #script to read DS18B(of S)20 sensor connect to 1-wire stuff #don't forget to modprobe w1-gpio and w1-temp #created 8-1-2014 GJ de Vries #based on http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/temperature/ import datetime as dt import time import arrow import sqlite3 import requests import json #STUK ERUIT GEKNIPT, leest een DS18B20 uit #get time-date in rfc3339 format (string) tijdstamp=arrow.now() gj2=tijdstamp.format('YYYY-MM-DDTHH:mm:ssZZ') #format in rcf3339 formaat in een string zodat die in de tabel kan |
om het leuker te maken, met arrow kun je verschil tussen twee tijden doen door bijvoorbeeld:
1
2
3
4
5
6
7
8
9
| import arrow ts1=arrow.utcnow() sleep(20) ts2=arrow.now() timedif_millis=ts2.float_timestamp-ts1.float_timestamp #Arrow-objecten hebben een float_timestamp optie :-) |
30 x Trina 390wp Op SE en Solis. | MHI 3,5kw
mooi zo :-) ik kan je aanraden voor de tijd/datum-dingen (mits je python gebruikt) om arrow te installeren, op mijn linux-systeem ging dat via "pip install arrow", hoe het op andere platforms gaat weet ik niet maar staat vast op de site
Koffie schreef op donderdag 19 december 2013 @ 22:22:
Pfff .. ik begin er nu echt moedeloos van te worden
Vandaag mijn kan en klare fotodiode binnen (zo eentje: http://www.ebay.nl/itm/31..._trksid=p3984.m1423.l2649) en eens aan de gang gegaan.
Hoe hebben jullie de photo diodes aangesloten op de RPI. Ik heb nu 2 van die sensors besteld maar vraag me alleen nog even af op welke GPIO poort ik ze moet aansluiten?Speedfightserv schreef op dinsdag 31 december 2013 @ 10:46:
@Koffie.
is het nog gelukt?
had jij trouwens een weerstand tussen de pulspoort van de kant en klare photodiode gezet?
volgens mij hoeft dat niet toch? ik ga hem denk ik aankomend weekend plaatsen.
Hebben jullie trouwens ook een werkend script die de poorten vervolgens uitleest?

http://www.elecrow.com/se...-sensor-module-p-677.html
Gevonden door te zoeken op raspberry pi Photo Diode Sensor Module bij Google afbeeldingen
[ Voor 59% gewijzigd door Raven op 31-01-2014 11:28 ]
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Dat helpt zeker, dank je wel :-) Nu maar wachten totdat de sensor binnen is.Raven schreef op vrijdag 31 januari 2014 @ 11:22:
Helpt dit? Daar staat op aangegeven welke pin wat is:
Gevonden door te zoeken op raspberry pi Photo Diode Sensor Module bij Google afbeeldingen
Werkt deze sensor op de led van deze meter icm de Pi?Raven schreef op vrijdag 31 januari 2014 @ 11:22:
Helpt dit? Daar staat op aangegeven welke pin wat is: [afbeelding]
http://www.elecrow.com/se...-sensor-module-p-677.html
Gevonden door te zoeken op raspberry pi Photo Diode Sensor Module bij Google afbeeldingen

Verwijderd
Verwijderd
Ik heb dankzij dit topic een Kwh monitor in elkaar geknutseld.
Als sensor gebruik ik

Deze lees ik uit dmv interrupts en schrijf de boel weg naar een Mysql database.
Omdat hier nog geen Interupt gebasseerd opzetje stond heb ik besloten mijn knip en plakwerk hier te posten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| import RPi.GPIO as GPIO import time import arrow import datetime import MySQLdb GPIO.setmode(GPIO.BCM) tijd2= arrow.now() tijd3= arrow.now() count= 0 count1=0 GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP) def elektra_callback(channel): global tijd2 global count tijd1 = arrow.now() now = datetime.datetime.now() timedif_sec=tijd1.float_timestamp-tijd2.float_timestamp count=count+1 # 1 impuls=3600w/s => 3600x seconden= watt watt= 3600 / timedif_sec watt2=round(watt) print "Elektra",watt2,"watt" , now,count #verbinding met Db maken db = MySQLdb.connect("localhost","user","pass","db" ) cursor = db.cursor() sql = "INSERT INTO `elektra` (`watt`,`count`) VALUES (%s,%s)" try: cursor.execute(sql,(watt2,count)) db.commit() except: db.rollback() db.close() tijd2 = tijd1 #interupt activeren GPIO.add_event_detect(18, GPIO.FALLING, callback=elektra_callback, bouncetime=20) #GPIO.add_event_detect(24, GPIO.FALLING, callback=gas_callback, bouncetime=20) try: print "start" GPIO.wait_for_edge(19, GPIO.RISING) print " end" except KeyboardInterrupt: GPIO.cleanup() GPIO.cleanup() |
Het is niet het mooiste stukje code maar het werkt.
Mijn idee is om bij elke ledpuls een record in de database op te slaan met daarin een timestamp en het huidige verbruik in watt. Dit huidige verbruik bepaal ik met de tijd die verstreken is sinds de laatste puls. Dit zal waarschijnlijk goed gaan maar bij het plotten van mijn grafiekje denk ik een probleem tegen te gaan komen.
Stel dat ik een laag verbruik heb (idle toestand). Er komt dan zo nu en dan een pulsje binnen en de tijd hiertussen kan makkelijk 60 seconde zijn. Als ik dan een verbruiker van een paar kW inschakel zal er bijna direct een pulsje komen. Het vorige record in de database had een laag verbruik en het volgende record (een seconde later) heeft een hoog verbruik. Als ik dit verbruik in een grafiek plot dan krijg ik een stijle flank te zien.
Als de grote verbruiker dan weer uitgezet wordt, dan wordt het verbruik weer laag en zullen de pulsjes weer om de 60 seconde binnenkomen. Het vorige record in de database had een hoog verbruik en het volgende record (60 seconde later) heeft een laag verbruik. Als ik dit weer in een grafiek plot, dan krijg ik lijn te zien die in 60 seconde van een hoog verbruik naar een laag verbruik loopt. In de werkelijkheid wordt het hoge verbruik direct uitgeschakeld en is het niet de bedoeling dat dit verbruik in 60 seconde naar "laag" toeloopt.
Hebben jullie hier een creatieve oplossing voor bedacht of gaat dit verschijnsel nauwelijks zichtbaar zijn?
Volgens mij is dit geen probleem. Ik doe hetzelfde (maar dan zonder rpi). Ik doe het zo dat als er geen pulsjes binnenkomen er toch elke minuut data met de laatste waarde naar de DB geschreven wordt, Voor de grafiek gebruik ik highcharts en krijg er netjes "stijle" grafieken uit. Verder verstuur ik niet elke puls maar tel ik 10 pulsjes en stuur dan een melding draadloos naar het centrale punt (dit spaart de batterijen een beetje). Enige nadeel is dat de meting niet 100% nauwkeurig is bij korte fluctuaties in het stroom verbruik. Totaal getelde verbruik per dag klopt wel perfect.somers1234 schreef op maandag 16 juni 2014 @ 11:19:
Alle RaspberryPi projecten hier hebben ook mijn interesse gewekt. Ik ben begonnen met het meten van de ledpulsjes op mijn kWh-meter maar zit met het volgende probleem:
Mijn idee is om bij elke ledpuls een record in de database op te slaan met daarin een timestamp en het huidige verbruik in watt. Dit huidige verbruik bepaal ik met de tijd die verstreken is sinds de laatste puls. Dit zal waarschijnlijk goed gaan maar bij het plotten van mijn grafiekje denk ik een probleem tegen te gaan komen.
Stel dat ik een laag verbruik heb (idle toestand). Er komt dan zo nu en dan een pulsje binnen en de tijd hiertussen kan makkelijk 60 seconde zijn. Als ik dan een verbruiker van een paar kW inschakel zal er bijna direct een pulsje komen. Het vorige record in de database had een laag verbruik en het volgende record (een seconde later) heeft een hoog verbruik. Als ik dit verbruik in een grafiek plot dan krijg ik een stijle flank te zien.
Als de grote verbruiker dan weer uitgezet wordt, dan wordt het verbruik weer laag en zullen de pulsjes weer om de 60 seconde binnenkomen. Het vorige record in de database had een hoog verbruik en het volgende record (60 seconde later) heeft een laag verbruik. Als ik dit weer in een grafiek plot, dan krijg ik lijn te zien die in 60 seconde van een hoog verbruik naar een laag verbruik loopt. In de werkelijkheid wordt het hoge verbruik direct uitgeschakeld en is het niet de bedoeling dat dit verbruik in 60 seconde naar "laag" toeloopt.
Hebben jullie hier een creatieve oplossing voor bedacht of gaat dit verschijnsel nauwelijks zichtbaar zijn?