‏הצגת רשומות עם תוויות energy. הצג את כל הרשומות
‏הצגת רשומות עם תוויות energy. הצג את כל הרשומות

יום שישי, 31 במאי 2013

מדידת צריכת החשמל בביתי בעזרת ינשוף

כבר באוקטובר 2012 התחלתי למדוד את הצריכה של האנרגיה בבית, לא היו לי מכשירים מדויקים פשוט מדי פעם תעדתי את שעוני הצריכה של המים והחשמל (בדירה שאני גר כרגע 2 שעוני חשמל שכל אחד הוא פאזה אחת, שאלות בבקשה לחברת החשמל כי לי אין מושג למה)

בהתחלה מדדתי שלוש פעמים ביום, היו הפוגות שמדדתי פעם ביום-יומיים וכשהייתי ממש עמוס בדברים אחרים שכחתי לחודשיים למדוד אבל עכשיו עם טכנולוגיה פשוטה שנתקלתי בה בזכות מהנדס חרוץ להנדסת אלקטרוניקה, יש לי עתה מכשיר שמנטר את הצריכה בבית כל כ-15 שניות ושומר את המידע באופן מפורט, ונותן לי תובנות ואת היכולת להבין כיצד אפילו המשק הקטן הביתי שלי יכול לחסוך אנרגיה.  קישור לטבלת המידע וגרף הביצועים הידני בטבלה Chart-All ניתן לראות את הגדימה הידנית.

גרף מתקדם בעזרת מערכת ינשוף: עד 30/5/2013 ממוצע ידני, החל מ-  31/5/2013 אזין את המידע ממערכת הינשוף שנותנת גם רזולוציות יותר מדויקות של כמה שניות הפרש וגם שומרת על רציפות. לגרף זה כמובן לא שמתי את חשבון המים כי הוא לא נמדד אלקטרונית, אותו עדיין אמדוד ידנית.
הנתונים בכחול הם צריכת הkW/h היומית והנתונים באדום הם הממוצע של 7 הימים האחרונים. בצהוב צריכת החשמל הדו-חודשית עליה אני משלם לחברת החשמל ובירוק הנמדד בינשוף במהלך חודשיים. הציר האנכי השמאלי הוא קוט"ש צריכה ליום והציר הימני הוא קוט"ש צריכה בחודשיים. המערכת מתעדכנת מאתר הינשוף מידי לילה, כך שכל בוקר בגרף זה יש כבר את הצריכה של אתמול. רואים למשל את הטיסה לחו"ל שלנו באוגוסט איך שהצריכה נופלת לכ- 1.5 קילוואט ליום (מחוברים לשקע נשארו רק המקרר והאינטרנט) כך שאני יכול להעריך שהמקרר שלנו הוא יעיל למדי, במהלך שנה הוא אולי עולה לנו עד 500 ש"ח בחשמל שזה מאוד יעיל.
מאז שהתחלנו למדוד הצלחנו להוריד את חשבון החשמל שלנו מכ- 1000 ש"ח לחודש לכ- 600 ש"ח לחודש, כאשר הבחנו בצרכנים בזבזניים, החלפנו מנורות ליבון בפלורסנט וקנינו נורות לד חסכוניות במיוחד מחנות ב- EBAY (המחירים בעולם משמעותית נמוכים מאלו שבחנויות בארץ אבל זה נושא מורכב...)

הצריכה הממוצעת במהלך השבוע:

קישור לחנות ממנה קניתי רצועת לד לתאורת לילה לחדר תינוק וקישור לחנות ממנה קניתי מנורות מתאימות לבית נורה סטנדרטי במחיר מאד תחרותי
ממליץ מאד לנסות את המערכות האלו, או לפחות להתחיל להתעניין.


יום ראשון, 24 במרץ 2013

Solar systems yield Java / JavaScript development

Lately I've been asked to help with the monitoring systems of most of our Solar installations, which are hundreds of solar systems in Israel.

Each system is connected to the internet and has some kind of interface I can read it's data (if it's connected) and check these signs:
Solar system with shaded panels shown in black

- has the system lost connection lately (like the last week/month)
- is the power on right now?
- did it produce any energy yesterday and today?
- if it is connected more than a year, are there any interferences around the year and what's a year's yield?
- for each kW installed on the system, what's a years yield (normalized) ?
- what's the specific price for this system of NIS/kW and is it according to the financial plan?

I've started to learn Java (lots and lots of reading) and I've downloaded Eclipse that really helps a lot to design and study the syntax. I'll update here about the functions I'm writing and what each does, if you have suggestions I'd really appreciate Your feedback.

usually in Israel we refer to the 1650 kW a year per each kW installed.
so if I have a 55kWp system, It should produce about 90.75MW annualy. so if this system produces less I would flag it as an issue, unless it is designed for a certain azimuth / elevation which I can see in "solar degradation" charts what kind of yearly % will this system lack

I'm working on a Java application to scan these systems each night and write down a report.
I'm doing it step by step so here's a code to calculate how much time has passed (in days and in years) from the installation date until today:
some panels that show partial shading in the morning (probably a tree)

(I'm going to use native Java classes an no matter what the forums say, I'm not going to install any 3'rd party plugins for it...

// ----- Java Code : calculating difference between dates in days and years -----

import java.util.*;

public class Main {
    public static void main(String[] args){
        Calendar caln1 = new GregorianCalendar();
        Calendar caln2 = new GregorianCalendar();
        caln1.set(2010,1,1);
        // If you require a different date please insert one below remember to remove the "//" format: (Year,Month,Day)
        //caln2.set(2010,1,1);
        int daysb = daysCalcBetween(caln1.getTime(),caln2.getTime());
        System.out.println("Days passed = "    + daysb);
        double timeYears = daysb/365.25;
        System.out.println("in Years it's = " + timeYears);
    }
    public static int daysCalcBetween(Date d1,Date d2){
        return (int) ((d2.getTime()-d1.getTime())/(1000*60*60*24));
    }
}

// ----- END OF Java Code : calculating difference between dates in days and years -----

some system manufacturers provide a 'daily report' via email, so I've been starting to log these systems each day to get some perspective how different areas and climates provide different yields. I'm using Google Script to daily parse these emails into a Google Spreadsheet that provides some analytics on systems.

This is the actual daily yield of our systems for each 1kWp installed normalized and verified. from these analytics I could continue to develop a script that helps determine if a system is faulty, if it needs cleaning and to see who yields the best for each geographical area:

This is a 'live' graph that updates daily due to the JavaScript I've built in Google script:
the script is:
 -----
/* I am not a professional programmer so if you have any insight on how to optimize this script Your comments are more than welcome ! */

 function processSMA() {
  // getting the label target in gmail:
  var threads = GmailApp.getUserLabelByName('desiredLabel').getThreads();
var doc = SpreadsheetApp.openById("SpreadsheetDoc").getSheets()[0];
  var lastRow = doc.getLastRow();
  var lastCol = doc.getLastColumn();
  // This specific chart has indexes: a row for each date and a culomn for each system
  var indexDate = doc.getRange(1,1,lastRow,1).getValues();
  var indexDate1 = new Array()
  var indexSystem = doc.getRange(1, 1, 1, lastCol).getValues();
  var indexSystem1 = new Array();
 
  /* format date of index:
 since getRange receives a 2d array here, I need change it to a 1d array in order to search for indexes in it in the future. */

  for (i=0; i<lastRow;i++){
     indexDate1[i] = indexDate[i][0];
     if(indexDate1[i]>0){
     // I'm formating the date so that in the next indexing it would be easy to search for it
     indexDate1[i] = Utilities.formatDate(indexDate1[i], "GMT", "MM/dd/yyyy");
     }
  }
 
    for (i=0; i<lastCol;i++){
    // I'm removing white spaces to ensure proper indexing
    indexSystem1[i] = indexSystem[0][i].replace(/\s/g, "");
        }
  // garbage collector: remove unformatted old indexes:
  indexDate = null;
  indexSystem = null;
 
  // parsing the messages:
  for (var i = 0; i < threads.length; i++) {
  var messages = threads[i].getMessages();
  
    
     for (var j = 0; j < messages.length;j++) {
      // when dealing with large amount of emails, this is recommended...
       Utilities.sleep(1000);
      // Parse each message
       var date = Utilities.formatDate(messages[j].getDate(), "GMT", "MM/dd/yyyy")
       // row position:
       var rowPos = indexDate1.indexOf(date);
        // the subject of the email has the system name, the date and produced kWh today.
       var rawData = messages[j].getSubject().toString();
            
       // looking through the text for the data:
       var dataPosReport = rawData.search("Info Report");
       var dataPosDate = rawData.search(date);
       var dataPosProduction = rawData.search("Daily Production")
       var dataPoskWh = rawData.search("kWh")
     
       // and now to use this locations to create system and yield
       var systemName = rawData.slice(dataPosReport+12,dataPosDate-1).replace(/\s/g, "");
       var systemYield = rawData.slice(dataPosProduction+17,dataPoskWh);
       var colPos = indexSystem1.indexOf(systemName);
       if(colPos!=-1){
         doc.getRange(rowPos,colPos+1).setValue(systemYield);
       // getting rid of the email so It will not be parsed after it has been successful
         messages[j].moveToTrash();
       } else {
       // if a system has not been found or the operation was not successful log out the system, to assure the naming system is correct in the target spreadsheet.
       Logger.log(systemName);
       }
    }
  }
}

-----
again, I'm a graphic designer, not a professional programmer, it would mean a lot to me if any of you share your insight on how to improve this script further. comments are very much welcome !

ToDO:
1. with a given system evaluate if it is up to the 1650 kW/year per kW installed
2. compare the system yield and return of investment to it's contract information and what was promised to the client
3. learn to write a script that logs into each system through the internet, writes an XML or CSV for each system and evaluates system condition
4.  lots of work to be done (and this is on my spare time...) If you have some thoughts, links or anything I could learn from Your comments are welcome !

Z.


יום ראשון, 17 ביולי 2011

Solar Yield : Degradation and % Efficiency

Simple chart for Azimuth/Inclination and percent degraded yield from PV's used for sloped roofs: based local in Israel (A Google login required)
be sure to check out My website site for more information

 Timelapse animation of a system we've installed in Elad, Israel, which shows the preperations, modeling and the last part shows how we evade the shadow. we've used a Trimble D-GPS to obtain ~1 cm resolution of the building and high walls that we had to take into consideration.
Your comments are most welcome
Do You wish to compare the yield of Your system to other systems? 

I'm working on a daily kWh per kWp installed on systems around Israel, you can monitor hundreds of systems using the JavaScript I'm working, the graph charts are in this link
there is about 10,000 kWp monitored daily that You can view how systems in Jerusalem yield differently than systems in the Golan, in cities or outside of them etc'.
if you like to be part of this statistics please inform me and I'll log Your system as well.
Thank You for reading this, Your comments are most welcome !

יום ראשון, 3 ביולי 2011

Practical Solar PV charts for installations

I've been asked a lot about how much degradation one should expect from having the wrong azimuth on a certain roof. also the inclination has an effect. I'll try to bring here the basic types I see common.

A roofs facing south are rare, but until we develop a tracking system that can use a standard roof tile installation, this is pretty much the degradation expected from a 22° inclination / Azimuth :


This Chart is only effecting 22° inclination roofs local at Israel. additional charts of different inclinations are located here.
The following interactive chart also shows expected degradation due to two variables: azimuth and 0°-25° inclination (geographical location Tel Aviv):

(to view a Google interactive chart you must log in your Google account)

When designing flat roof arrays, the row distance must allow the sunlight to be available for all of the array from 08:00-15:00 in winter at least and 07:30-17:00 in summer to enjoy the peak power of the array.
if the area doesn't allow it use these tips:

1. The build of the panel has some faults. when partially shadowed it may produce no energy at all. it seems that if it is shadowed on it's short side (for instance, a panel is standing) it will not generate energy. while if it is similarly shadowed on it's long side (a panel is lying) it will produce up to 66% energy even while shadowed.
Flat Panel with shadows drawing

2. it is smart to use technological improvements such as Tigo maximizer units but they are not cheap. sadly a lot of consumers think cheap and not think profitable, which can generate a lot of untapped energy. a large scale facility that isn't shadowed will think "why do I need this?" and forget about partial clouding or bird droppings that when one panel is down, the whole array goes down.

3. for flat roof installations, the following chart provides distances based on inclination of the panels (local iseael) and should provide maximum peak power at minimum distances, larger will be more effective:


(again, one must be logged in a Google account in order to view the interactive chart)
Be sure to check out My website for more info

יום שלישי, 8 בפברואר 2011

Solar Optimizer preliminary draft

After a longer than expected render I've come up with a preliminary draft which I'll keep abusing...
for more information about the study visit here
Sun view of the 2 trial array
An additional Idia rose while I was addressing this, that the dynamic panel could also be an additional reflector for the rest of the array, so for this experiment I've used only 2 panels, one stationary and one facing the sun.
Close up PV
and a parrallel video output you can view here:


a second version of 3 tracking panels here in this video:

יום ראשון, 6 בפברואר 2011

Solar Optimizer thoughts

After encountering technologies such as Tigo Maximizer units and having short conversations about some of the issues that rise when developing the photovoltic solar installations, It seems that such an array could have additional management and control for the following: