Eenvoudige logging met Raspberry

Kijk hier voor datalog programma's en handleidingen.
Plaats reactie
Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Eenvoudige logging met Raspberry

Bericht door janus » 31 jul 2015, 23:42

Ik ben bezig om een zeer eenvoudige logging mbv een Raspberry Pi te maken.

Niet zozeer bedoelt om continu te loggen maar meer voor bv storingen en onderbrekingen te ontdekken.
Of de boel in de gaten te houden tijdens afwezigheid.

Benodigdheden Raspberry, kwh meter met so contacten, voeding, sd card, wat kabel.
Als alles aangeschaft moet worden zijn de kosten +/- 50€
Als je al een rpi hebt en een gsc meter met so contacten kost het niets.

Edit april 2019
code verbetert.
Edit mei 2019
LCD scherm togevoegd
email functie toegevoegd
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
honk
Senior lid
Berichten: 290
Lid geworden op: 16 mei 2013, 21:50
Installatie Land: België
Locatie: Poperinge
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door honk » 01 aug 2015, 13:44

Ik zou dit ook graag doen, ik heb een B-type van de PI en een GSC met SO contact.
Enkel nog een SD kaartje en de nodige soft.
Bedoeling is om logging naast Sunny Beam te laten werken en eerst te vergelijken om dan SB weg te doen.
16 panelen IBC PolySol 230TE
Sunny Boy SB3300TL omvormer
oriëntatie :195° ,dakhelling 30° te Poperinge ,nov 2009

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 01 aug 2015, 13:55

Momenteel heb ik alleen de "watt meter" nog maar werken op een website van de rpi

En bij een andere versie worden de totalen weggeschreven in een csv file

Nu dat nog bij elkaar krijgen ;-)
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 01 aug 2015, 17:12

Update:

Beide scripts samen gevoegd
Dus ik heb een txt file die geschreven wordt en waar meter op de website zijn gegevens uitleest
Verder een csv file met een log om de 2 minuten

Code: Selecteer alles

Jaar                maand     dag            uur            min           sec            Watt                 Wh
"2015	/	08	/	01	/	17	:	04	:	04	 	01500	 	00025"
"2015	/	08	/	01	/	17	:	06	:	04	 	00000	 	00025"
Ik weet niet of het nu al zin heeft om het volledige script hier te plaatsen.
Maar belangstellende mogen uiteraard al contact opnemen.
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
honk
Senior lid
Berichten: 290
Lid geworden op: 16 mei 2013, 21:50
Installatie Land: België
Locatie: Poperinge
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door honk » 02 aug 2015, 17:03

janus schreef:Update:

Ik weet niet of het nu al zin heeft om het volledige script hier te plaatsen.
Maar belangstellende mogen uiteraard al contact opnemen.
Ik zou graag dat script al eens proberen (uittesten).
16 panelen IBC PolySol 230TE
Sunny Boy SB3300TL omvormer
oriëntatie :195° ,dakhelling 30° te Poperinge ,nov 2009

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 02 aug 2015, 18:09

Het script voor de pulsen te meten:

ZonstraalPi.py

Code: Selecteer alles

#!/usr/bin/env python2.7  
"""
Zeer simpele logging voor kwh meter met so contact door J.Bakker
Meer info zie zonstraalbe/forum
Zie ook http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio
Thanks to Erwin for help :-)
"""
import RPi.GPIO as GPIO 
import time
import csv
import datetime 
import sys


GPIO.setmode(GPIO.BCM) 
minute_puls = 0 

# GPIO 17 set up as input. It is pulled up to stop false signals  
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
time_stamp = time.time()

# variable 
power = 0  # pulsen
watt = 0   # Watt  (pulsen * 60)
totaal = 0 # totaal aantal pulsen.

# the call back function 
def cb(channel):
	global power
	power = power + 1
	global totaal
	totaal = totaal + 1



# schrijf log naar een txt file	
#w' for only writing (an existing file will be erased)
#'a' opens the file for appending; any data written to the file is automatically added to the end.	
def Write_log_txt():
	cf = open("/home/pi/zonstraal/log.txt","w")	
	cf.writelines("P=%05.0f" %watt + "\n"+ "Wh=%05.0f" %totaal)	
	cf.close()

# schrijf log naar een CSV file		
def Write_log_csv():
	cf = open("/home/pi/zonstraal/datalog.csv","a")	
	writer = csv.writer(cf,dialect='excel-tab')	
	writer.writerow((today.year,"/",format ("%.2d" %today.month),"/",format ("%.2d" %today.day),"-",
	format ("%.2d" %currentHour),":",format ("%.2d" %currentMinute),":", format ("%.2d" %currentSecond), " ",
	format ("W= %05.0f" %watt)," ", format("Wh= %05.0f" %totaal)))
	cf.close()	
	#print ("log geschreven")  # Uncomment for debugging.

# toont iedere minuut data in terminal 
def Toon_data():
	print ("Watt: %iW") % watt  # Uncomment for debugging.
	print ("Watthour: %iW") % totaal
	
# register the call back for pin interrupts
GPIO.add_event_detect(17, GPIO.FALLING, callback=cb, bouncetime=300)
	
while True:
	
	today = datetime.date.today()
	currentTime = time.asctime()
	currentSecond = time.localtime().tm_sec
	currentMinute = time.localtime().tm_min
	currentHour = time.localtime().tm_hour


	

	if not currentMinute % 2 == 0:       # voorkomt meerdere log writings zolang de minuut loopt
		minute_puls = 0	
	if currentMinute % 2 == 0 and minute_puls == 0: 
	  	line = "%i, %.0f" % (time.time(), power)
		watt = power * 60   # this line calculates a power value in watts from the number of pulses, my meter is 1000 pulses per kWh.
		Write_log_txt()	    # comment for only csv.
		Write_log_csv()     # comment for only txt.
		Toon_data()         # comment for not displaying data in terminal.
		minute_puls = 1
		power = 0
	else :	
		time.sleep(10) # tegen overbelasting van de cpu
	
try: 
    trigger()
         
      
except KeyboardInterrupt:
  print "  Quit" 
  # Reset GPIO settings
  GPIO.cleanup()
Het start vanuit de terminal, dat zal je zelf aan moeten passen.

Volgende 4 files in de www folder zetten.

De php files op de data uit de "log.txt" te halen.
temp.php

Code: Selecteer alles

<?php
//File to read
$file = '/home/pi/zonstraal/log.txt';

//Read the file line by line
$lines = file($file);

//Get the temp from  line .... 1 = line 2
$temp = explode('=', $lines[0]);

//Setup some nice formatting (i.e. 21,3)
$temp = number_format($temp[1] /1 , 1, '.', '');


//And echo that temp
echo $temp . " ";
?>
watthour.php

Code: Selecteer alles

<?php
//File to read
$file = '/home/pi/zonstraal/log.txt';

//Read the file line by line
$lines = file($file);

//Get the Watthour from  line .... 1 = line 2
$wh = explode('=', $lines[1]);

//Setup some nice formatting (i.e. 21,3)
$wh = number_format($wh[1] /1 , 0, '', '');


//And echo the Watthour
echo $wh . " ";
?>

De "gauge.php" pagina waar de meter in staat.

Code: Selecteer alles

<?php
include('watt.php');
if (isset($_GET['dailypeakpower_t'])){
exit;
}
?>
<!DOCTYPE html>
<!-- noem deze file geen index !!!-->
<html lang="nl">
<head>
<title>Verbruik</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="gauge.min.js"></script>
<script type="text/javascript" >
function isset ( strVariableName ) { 
    try { 
        eval( strVariableName );
    } catch( err ) { 
        if ( err instanceof ReferenceError ) 
           return false;
    }
    return true;
 }
if((isset(dailypeakpower_t))){
	var dailypeakpower_t = parseInt(dailypeakpower_t);
}
function setDU(){
	el = document.querySelector('#gauge1');
	el.dataset.units = dailypeakpower_t; 
}
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
   <script>
 function autoRefresh_div()
 {
      $("#refresh").load("watthour.php");// a function which will load data from other file after x seconds
  }
 
  setInterval('autoRefresh_div()', 5000); // refresh div after 5 secs
            </script>

</head>
<body>
<canvas  class="test" id="test" width="60" height="40" style="position: absolute;top:0px; left: 0px" ></canvas>
<script>
var c = document.getElementById("test");
var ctx = c.getContext("2d");
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0,0,150,75);
</script>
<div id="meter" style="text-align:center">
    <canvas  class="meterGroot" id="gauge1" width="600" height="600" 
            data-type="canv-gauge"
            data-title="Verbruik"
            data-min-value="0"
            data-max-value="5000"
            data-major-ticks="0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000"
            data-minor-ticks="5"
            data-stroke-ticks="true"
            data-units="Watt"
            data-value-format="4.0"
            data-glow="true"
            data-animation-delay="10"
            data-animation-duration="200"
            data-animation-fn="bounce"
            data-colors-needle="#f00 #00f"
	        data-colors-major-ticks="#fff #fff"
		    data-colors-plate="#fb0 #aaf"
		    data-highlights="0 1000 #000080, 1000 2000 #66CCFF, 2000 2500 #00FF00, 2500 3000 #FFCC00, 3000 4000 #ff8C00, 4000 5000 #FF0000"
            data-onready="setInterval( function() { Gauge.Collection.get('gauge1').setValue(dailypeakpower_t)}, 1000); "
    ></canvas>

<script type="text/javascript" >
	setInterval(function(){
		setDU();
		document.getElementById('test').innerHTML=dailypeakpower_t;
		console.log(dailypeakpower_t+' dailypeakpower_t');
	}, 1 * 1000);
</script>
<script type="text/javascript" >
$(function(){
    setInterval(function(){	
		$.get('<?php echo $_SERVER['REQUEST_URI']; ?>?dailypeakpower_t',function(num){dailypeakpower_t = num;});
    }, 1 * 1000);
}); 
</script>
</div>
<div style="text-align:center">
<h2>Totaal is er verbruikt (Wh)
<div id="refresh"
<?php
include('watthour.php');
?></div> 
</h2>
</div>
</body>
</html>
En als laatste de "gauge.min.js" voor de meter

Code: Selecteer alles

/*
 HTML5 Canvas Gauge implementation
 This code is subject to MIT license.
 Copyright (c) 2012 Mykhailo Stadnyk <[email protected]>
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to use,
 copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 Software, and to permit persons to whom the Software is furnished to do so,
 subject to the following conditions:
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 @authors: Mykhailo Stadnyk <[email protected]>
           Chris Poile <[email protected]>
           Luca Invernizzi <http://www.lucainvernizzi.net>
           Robert Blackburn <http://www.rwblackburn.com>
*/
var Gauge=function(b){function l(a,b){for(var c in b)"object"==typeof b[c]&&"[object Array]"!==Object.prototype.toString.call(b[c])&&"renderTo"!=c?("object"!=typeof a[c]&&(a[c]={}),l(a[c],b[c])):a[c]=b[c]}function q(){z.width=b.width;z.height=b.height;A=z.cloneNode(!0);B=A.getContext("2d");C=z.width;D=z.height;t=C/2;u=D/2;f=t<u?t:u;A.i8d=!1;B.translate(t,u);B.save();a.translate(t,u);a.save()}function v(a){var b=new Date;G=setInterval(function(){var c=(new Date-b)/a.duration;1<c&&(c=1);var f=("function"==
typeof a.delta?a.delta:M[a.delta])(c);a.step(f);1==c&&clearInterval(G)},a.delay||10)}function k(){G&&clearInterval(G);var a=I-n,h=n,c=b.animation;v({delay:c.delay,duration:c.duration,delta:c.fn,step:function(b){n=parseFloat(h)+a*b;E.draw()}})}function e(a){return a*Math.PI/180}function g(b,h,c){c=a.createLinearGradient(0,0,0,c);c.addColorStop(0,b);c.addColorStop(1,h);return c}function p(){var m=93*(f/100),h=f-m,c=91*(f/100),e=88*(f/100),d=85*(f/100);a.save();b.glow&&(a.shadowBlur=h,a.shadowColor=
"rgba(0, 0, 0, 0.5)");a.beginPath();a.arc(0,0,m,0,2*Math.PI,!0);a.fillStyle=g("#ddd","#aaa",m);a.fill();a.restore();a.beginPath();a.arc(0,0,c,0,2*Math.PI,!0);a.fillStyle=g("#fafafa","#ccc",c);a.fill();a.beginPath();a.arc(0,0,e,0,2*Math.PI,!0);a.fillStyle=g("#eee","#f0f0f0",e);a.fill();a.beginPath();a.arc(0,0,d,0,2*Math.PI,!0);a.fillStyle=b.colors.plate;a.fill();a.save()}function w(a){var h=!1;a=0===b.majorTicksFormat.dec?Math.round(a).toString():a.toFixed(b.majorTicksFormat.dec);return 1<b.majorTicksFormat["int"]?
(h=-1<a.indexOf("."),-1<a.indexOf("-")?"-"+(b.majorTicksFormat["int"]+b.majorTicksFormat.dec+2+(h?1:0)-a.length)+a.replace("-",""):""+(b.majorTicksFormat["int"]+b.majorTicksFormat.dec+1+(h?1:0)-a.length)+a):a}function d(){var m=81*(f/100);a.lineWidth=2;a.strokeStyle=b.colors.majorTicks;a.save();if(0===b.majorTicks.length){for(var h=(b.maxValue-b.minValue)/5,c=0;5>c;c++)b.majorTicks.push(w(b.minValue+h*c));b.majorTicks.push(w(b.maxValue))}for(c=0;c<b.majorTicks.length;++c)a.rotate(e(45+c*(270/(b.majorTicks.length-
1)))),a.beginPath(),a.moveTo(0,m),a.lineTo(0,m-15*(f/100)),a.stroke(),a.restore(),a.save();b.strokeTicks&&(a.rotate(e(90)),a.beginPath(),a.arc(0,0,m,e(45),e(315),!1),a.stroke(),a.restore(),a.save())}function J(){var m=81*(f/100);a.lineWidth=1;a.strokeStyle=b.colors.minorTicks;a.save();for(var h=b.minorTicks*(b.majorTicks.length-1),c=0;c<h;++c)a.rotate(e(45+c*(270/h))),a.beginPath(),a.moveTo(0,m),a.lineTo(0,m-7.5*(f/100)),a.stroke(),a.restore(),a.save()}function s(){for(var m=55*(f/100),h=0;h<b.majorTicks.length;++h){var c=
F(m,e(45+h*(270/(b.majorTicks.length-1))));a.font=20*(f/200)+"px Arial";a.fillStyle=b.colors.numbers;a.lineWidth=0;a.textAlign="center";a.fillText(b.majorTicks[h],c.x,c.y+3)}}function x(a){var h=b.valueFormat.dec,c=b.valueFormat["int"];a=parseFloat(a);var f=0>a;a=Math.abs(a);if(0<h){a=a.toFixed(h).toString().split(".");h=0;for(c-=a[0].length;h<c;++h)a[0]="0"+a[0];a=(f?"-":"")+a[0]+"."+a[1]}else{a=Math.round(a).toString();h=0;for(c-=a.length;h<c;++h)a="0"+a;a=(f?"-":"")+a}return a}function F(a,b){var c=
Math.sin(b),f=Math.cos(b);return{x:0*f-a*c,y:0*c+a*f}}function N(){a.save();for(var m=81*(f/100),h=m-15*(f/100),c=0,g=b.highlights.length;c<g;c++){var d=b.highlights[c],r=(b.maxValue-b.minValue)/270,k=e(45+(d.from-b.minValue)/r),r=e(45+(d.to-b.minValue)/r);a.beginPath();a.rotate(e(90));a.arc(0,0,m,k,r,!1);a.restore();a.save();var l=F(h,k),p=F(m,k);a.moveTo(l.x,l.y);a.lineTo(p.x,p.y);var p=F(m,r),n=F(h,r);a.lineTo(p.x,p.y);a.lineTo(n.x,n.y);a.lineTo(l.x,l.y);a.closePath();a.fillStyle=d.color;a.fill();
a.beginPath();a.rotate(e(90));a.arc(0,0,h,k-0.2,r+0.2,!1);a.restore();a.closePath();a.fillStyle=b.colors.plate;a.fill();a.save()}}function K(){var m=12*(f/100),h=8*(f/100),c=77*(f/100),d=20*(f/100),k=4*(f/100),r=2*(f/100),l=function(){a.shadowOffsetX=2;a.shadowOffsetY=2;a.shadowBlur=10;a.shadowColor="rgba(188, 143, 143, 0.45)"};l();a.save();n=0>n?Math.abs(b.minValue-n):0<b.minValue?n-b.minValue:Math.abs(b.minValue)+n;a.rotate(e(45+n/((b.maxValue-b.minValue)/270)));a.beginPath();a.moveTo(-r,-d);a.lineTo(-k,
0);a.lineTo(-1,c);a.lineTo(1,c);a.lineTo(k,0);a.lineTo(r,-d);a.closePath();a.fillStyle=g(b.colors.needle.start,b.colors.needle.end,c-d);a.fill();a.beginPath();a.lineTo(-0.5,c);a.lineTo(-1,c);a.lineTo(-k,0);a.lineTo(-r,-d);a.lineTo(r/2-2,-d);a.closePath();a.fillStyle="rgba(255, 255, 255, 0.2)";a.fill();a.restore();l();a.beginPath();a.arc(0,0,m,0,2*Math.PI,!0);a.fillStyle=g("#f0f0f0","#ccc",m);a.fill();a.restore();a.beginPath();a.arc(0,0,h,0,2*Math.PI,!0);a.fillStyle=g("#e8e8e8","#f5f5f5",h);a.fill()}
function L(){a.save();a.font=40*(f/200)+"px Led";var b=x(y),h=a.measureText("-"+x(0)).width,c=f-33*(f/100),g=0.12*f;a.save();var d=-h/2-0.025*f,e=c-g-0.04*f,h=h+0.05*f,g=g+0.07*f,k=0.025*f;a.beginPath();a.moveTo(d+k,e);a.lineTo(d+h-k,e);a.quadraticCurveTo(d+h,e,d+h,e+k);a.lineTo(d+h,e+g-k);a.quadraticCurveTo(d+h,e+g,d+h-k,e+g);a.lineTo(d+k,e+g);a.quadraticCurveTo(d,e+g,d,e+g-k);a.lineTo(d,e+k);a.quadraticCurveTo(d,e,d+k,e);a.closePath();d=a.createRadialGradient(0,c-0.12*f-0.025*f+(0.12*f+0.045*f)/
2,f/10,0,c-0.12*f-0.025*f+(0.12*f+0.045*f)/2,f/5);d.addColorStop(0,"#888");d.addColorStop(1,"#666");a.strokeStyle=d;a.lineWidth=0.05*f;a.stroke();a.shadowBlur=0.012*f;a.shadowColor="rgba(0, 0, 0, 1)";a.fillStyle="#babab2";a.fill();a.restore();a.shadowOffsetX=0.004*f;a.shadowOffsetY=0.004*f;a.shadowBlur=0.012*f;a.shadowColor="rgba(0, 0, 0, 0.3)";a.fillStyle="#444";a.textAlign="center";a.fillText(b,-0,c);a.restore()}Gauge.Collection.push(this);this.config={renderTo:null,width:200,height:200,title:!1,
maxValue:100,minValue:0,majorTicks:[],minorTicks:10,strokeTicks:!0,units:!1,valueFormat:{"int":3,dec:2},majorTicksFormat:{"int":1,dec:0},glow:!0,animation:{delay:10,duration:250,fn:"cycle"},colors:{plate:"#fff",majorTicks:"#444",minorTicks:"#666",title:"#888",units:"#888",numbers:"#444",needle:{start:"rgba(240, 128, 128, 1)",end:"rgba(255, 160, 122, .9)"}},highlights:[{from:20,to:60,color:"#eee"},{from:60,to:80,color:"#ccc"},{from:80,to:100,color:"#999"}]};var y=0,E=this,n=0,I=0,H=!1;this.setValue=
function(a){n=b.animation?y:a;var d=(b.maxValue-b.minValue)/100;I=a>b.maxValue?b.maxValue+d:a<b.minValue?b.minValue-d:a;y=a;b.animation?k():this.draw();return this};this.setRawValue=function(a){n=y=a;this.draw();return this};this.clear=function(){y=n=I=this.config.minValue;this.draw();return this};this.getValue=function(){return y};this.onready=function(){};l(this.config,b);this.config.minValue=parseFloat(this.config.minValue);this.config.maxValue=parseFloat(this.config.maxValue);b=this.config;n=
y=b.minValue;if(!b.renderTo)throw Error("Canvas element was not specified when creating the Gauge object!");var z=b.renderTo.tagName?b.renderTo:document.getElementById(b.renderTo),a=z.getContext("2d"),A,C,D,t,u,f,B;q();this.updateConfig=function(a){l(this.config,a);q();this.draw();return this};var M={linear:function(a){return a},quad:function(a){return Math.pow(a,2)},quint:function(a){return Math.pow(a,5)},cycle:function(a){return 1-Math.sin(Math.acos(a))},bounce:function(a){a:{a=1-a;for(var b=0,
c=1;;b+=c,c/=2)if(a>=(7-4*b)/11){a=-Math.pow((11-6*b-11*a)/4,2)+Math.pow(c,2);break a}a=void 0}return 1-a},elastic:function(a){a=1-a;return 1-Math.pow(2,10*(a-1))*Math.cos(30*Math.PI/3*a)}},G=null;a.lineCap="round";this.draw=function(){if(!A.i8d){B.clearRect(-t,-u,C,D);B.save();var g={ctx:a};a=B;p();N();J();d();s();b.title&&(a.save(),a.font=24*(f/200)+"px Arial",a.fillStyle=b.colors.title,a.textAlign="center",a.fillText(b.title,0,-f/4.25),a.restore());b.units&&(a.save(),a.font=22*(f/200)+"px Arial",
a.fillStyle=b.colors.units,a.textAlign="center",a.fillText(b.units,0,f/3.25),a.restore());A.i8d=!0;a=g.ctx;delete g.ctx}a.clearRect(-t,-u,C,D);a.save();a.drawImage(A,-t,-u,C,D);if(Gauge.initialized)L(),K(),H||(E.onready&&E.onready(),H=!0);else var e=setInterval(function(){Gauge.initialized&&(clearInterval(e),L(),K(),H||(E.onready&&E.onready(),H=!0))},10);return this}};Gauge.initialized=!1;
(function(){var b=document,l=b.getElementsByTagName("head")[0],q=-1!=navigator.userAgent.toLocaleLowerCase().indexOf("msie"),v="@font-face {font-family: 'Led';src: url('fonts/digital-7-mono."+(q?"eot":"ttf")+"');}",k=b.createElement("style");k.type="text/css";if(q)l.appendChild(k),l=k.styleSheet,l.cssText=v;else{try{k.appendChild(b.createTextNode(v))}catch(e){k.cssText=v}l.appendChild(k);l=k.styleSheet?k.styleSheet:k.sheet||b.styleSheets[b.styleSheets.length-1]}var g=setInterval(function(){if(b.body){clearInterval(g);
var e=b.createElement("div");e.style.fontFamily="Led";e.style.position="absolute";e.style.height=e.style.width=0;e.style.overflow="hidden";e.innerHTML=".";b.body.appendChild(e);setTimeout(function(){Gauge.initialized=!0;e.parentNode.removeChild(e)},250)}},1)})();Gauge.Collection=[];
Gauge.Collection.get=function(b){if("string"==typeof b)for(var l=0,q=this.length;l<q;l++){if((this[l].config.renderTo.tagName?this[l].config.renderTo:document.getElementById(this[l].config.renderTo)).getAttribute("id")==b)return this[l]}else return"number"==typeof b?this[b]:null};function domReady(b){window.addEventListener?window.addEventListener("DOMContentLoaded",b,!1):window.attachEvent("onload",b)}
domReady(function(){function b(b){for(var e=b[0],d=1,g=b.length;d<g;d++)e+=b[d].substr(0,1).toUpperCase()+b[d].substr(1,b[d].length-1);return e}for(var l=document.getElementsByTagName("canvas"),q=0,v=l.length;q<v;q++)if("canv-gauge"==l[q].getAttribute("data-type")){var k=l[q],e={},g,p=parseInt(k.getAttribute("width"),10),w=parseInt(k.getAttribute("height"),10);e.renderTo=k;p&&(e.width=p);w&&(e.height=w);p=0;for(w=k.attributes.length;p<w;p++)if(g=k.attributes.item(p).nodeName,"data-type"!=g&&"data-"==
g.substr(0,5)){var d=g.substr(5,g.length-5).toLowerCase().split("-");if(g=k.getAttribute(g))switch(d[0]){case "colors":d[1]&&(e.colors||(e.colors={}),"needle"==d[1]?(d=g.split(/\s+/),e.colors.needle=d[0]&&d[1]?{start:d[0],end:d[1]}:g):(d.shift(),e.colors[b(d)]=g));break;case "highlights":e.highlights||(e.highlights=[]);g=g.match(/(?:(?:-?\d*\.)?(-?\d+){1,2} ){2}(?:(?:#|0x)?(?:[0-9A-F|a-f]){3,8}|rgba?\(.*?\))/g);for(var d=0,J=g.length;d<J;d++){var s=g[d].replace(/^\s+|\s+$/g,"").split(/\s+/),x={};
s[0]&&""!=s[0]&&(x.from=s[0]);s[1]&&""!=s[1]&&(x.to=s[1]);s[2]&&""!=s[2]&&(x.color=s[2]);e.highlights.push(x)}break;case "animation":d[1]&&(e.animation||(e.animation={}),"fn"==d[1]&&/^\s*function\s*\(/.test(g)&&(g=eval("("+g+")")),e.animation[d[1]]=g);break;default:d=b(d);if("onready"==d)continue;if("majorTicks"==d)g=g.split(/\s+/);else if("strokeTicks"==d||"glow"==d)g="true"==g?!0:!1;else if("valueFormat"==d)if(g=g.split("."),2==g.length)g={"int":parseInt(g[0],10),dec:parseInt(g[1],10)};else continue;
e[d]=g}}e=new Gauge(e);k.getAttribute("data-value")&&e.setRawValue(parseFloat(k.getAttribute("data-value")));k.getAttribute("data-onready")&&(e.onready=function(){eval(this.config.renderTo.getAttribute("data-onready"))});e.draw()}});window.Gauge=Gauge;
Laat het weten als je nog vragen hebt of ergens mee vastloopt.
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
mechanik
junior lid
Berichten: 13
Lid geworden op: 09 jul 2013, 20:31
Installatie Land: België

Re: Eenvoudige logging met Raspberry

Bericht door mechanik » 10 mei 2016, 08:34

sinds enige dagen heeft mijn solarlog de geest gegeven en ben ik dus op zoek gegaan naar een alternatief die geen 500€ kost.
Ik ben volledig nieuw wat betreft raspberry en vraag me ook af hoe de praktische kant van de zaak in elkaar zit.
wat is er allemaal juist nodig van software op de raspberry en hoe gebeuren de aansluitingen van de raspberry met de GSC EM10-DIN meters, 2 in mijn geval, juist?
Hoe krijg ik alles op een website via de raspberry en is het mogelijk om met je script ook meer gedetaileerde info te verkrijgen ipv die "gaugemeter"?

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 10 mei 2016, 10:42

Op de eerste plaats moet je wat van hobbyen houden indien ja :


Er is alleen een pc of laptop nodig met een kaartlezer om de software er op te krijgen
+ wat gratis software (FiliZila + Putty )

De aansluitingen zijn gewoon 2 draadjes die je op de RPI schuift of soldeert.

De RPI heeft zelf een webserver, dus je hoeft niets naar je website te schrijven.

Dit script is echter maar heel simpel, als je meer wilt kun je beter naar PVdiary op RPI kijken denk ik.
http://www.zonstraal.be/forum/viewtopic.php?f=38&t=181
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
mechanik
junior lid
Berichten: 13
Lid geworden op: 09 jul 2013, 20:31
Installatie Land: België

Re: Eenvoudige logging met Raspberry

Bericht door mechanik » 10 mei 2016, 11:01

de 2 draadjes die je bedoeld komen van de GSC-meter veronderstel ik, daar begint het dus al, ik heb 2 omvormers dus ook 2 GSC meters .... maar ik zal al eens verder kijken op de link die je hierboven gepost hebt :-)
In ieder geval hartelijk bedankt :-)

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 10 mei 2016, 12:02

Dan worden het drie draadjes ;-)

1 + 3,3V van de RPI naar de gsc meters en 2 terug van de meters naar de RPI.
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
mechanik
junior lid
Berichten: 13
Lid geworden op: 09 jul 2013, 20:31
Installatie Land: België

Re: Eenvoudige logging met Raspberry

Bericht door mechanik » 24 mei 2016, 14:48

ik ben eindelijk verder geraakt met de raspberry :-) heeft even stilgelegen maar geen erg.
Nu ik heb je bestanden opgeslagen op de raspberry en ze eens doorgenomen, daaruit blijkt dat ik pin 17 moet gebruiken om de +-impulsen te laten registreren?
maar wat met mijn 2de GSC meter, waar moet ik die op aansluiten? en moet ik dan ook het script aanpassen?
Ik heb je script ook opgeslagen en willen uitvoeren vanuit python 2.7.9 Shell maar als ik dat wil doen dan geeft hij me de volgende error " There's an error in your program: unindent does not match any outer indentation level" ....
ja, sorry maar ben nog volledig nieuw op raspberry gebied ... zal nog even duren voordat ik het gewoon zal zijn ...

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 24 mei 2016, 15:18

Ik moet ook weer even nadenken :-)

Je kan een tweede script laten draaien naast het eerste en die bv pin 18 laten uitlezen.
Dat is het gemakkelijkste .

Wat de error betreft
Bij python moet alles op de juiste plaatst staan!
Vermoedelijk heb je een insprong verkeert gezet, het beste gebruik je Notepad++ met Python plug-in of een ander geschikte tekst verwerken bv Geany op Linux
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
mechanik
junior lid
Berichten: 13
Lid geworden op: 09 jul 2013, 20:31
Installatie Land: België

Re: Eenvoudige logging met Raspberry

Bericht door mechanik » 24 mei 2016, 16:15

ik heb je raad opgevolgd en notepa++ gebruikt en daar de python indent plugin erbij geïnstalleerd en actief gezet
je bron code gecopieerd en met ctrl c en geplat in notepad++ met ctrl v, dan het bestand opgeslagen en doorgemaild naar mijn pi en daar dan opgeslagen in de home/pi folder.
als ik het dan open in python en het wil laten lopen krijg ik nog steeds dezelfde error ..

Gebruikersavatar
janus
Site Admin
Site Admin
Berichten: 11966
Lid geworden op: 04 mar 2009, 22:39
Installatie Land: Ander
Locatie: Ten zuiden van antwerpen
Sponsor ons: Afbeelding
Contacteer:

Re: Eenvoudige logging met Raspberry

Bericht door janus » 24 mei 2016, 17:42

Doorgemaild naar de PI??
.
Mijn wens is: "Dat ook in de toekomst de zon voor iedereen gratis op mag komen."

Gelieve geen technische vragen via pb Klik voor Uitleg

Gebruikersavatar
mechanik
junior lid
Berichten: 13
Lid geworden op: 09 jul 2013, 20:31
Installatie Land: België

Re: Eenvoudige logging met Raspberry

Bericht door mechanik » 24 mei 2016, 18:02

ja via gmail ... :-) ik heb de raspberry op een touchscreen aangesloten en in een behuizing gestoken ...
of moet ik echt de bestanden manueel via de SD-kaart in de laptop kopieren?

Plaats reactie