Skip to content
View in the app

A better way to browse. Learn more.

Power Forum - Renewable Energy Discussion

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

AntonyBijsters

Members
  • Joined

  • Last visited

  1.    GVC reacted to a post in a topic: Energy use calculation (Nodered Javascript)
  2. I've been looking around for solutions too and came up with too possibilities: 1. A dual geyser element where the second element is designed for DC i.e. it gets power from the solar panels on the DC bus bypassing the inverter. https://www.valsa.co.za/wp-content/uploads/2021/09/PV-Solar-GeyserWISE-Kit-1.pdf 2. A heat-pump which can provide more than 3.5kw of heating power for less than 1kw input. https://itssolar.co.za/product/3-6kw-its-residential-heat-pump/ The advantages of option 1 is cost, about a third of the price of option 2 (R5,500 vs R16,000). Option 2 is worth considering as it's super efficient you could just run it off the inverter without having to worry about a timer to schedule your hot water.
  3. AntonyBijsters joined the community
  4. On Message // Node-Red Javascript to calculate energy usage in KWh based on power input in Watts and time between measurements // the script assumes no more than 420 measurements per hour, but will calculate time between measurements // Calculated energy is stored in three loop arrays for effiency (as apposed to one very big array): // 1 hour for samples, 24 hours for days and 30 days for month to provide energy usage for the last hour, day and month. // The script will provide accurate energy hour measuremnts after a few samples, but needs to run for at least an hour // or two before you get any day or month estimates and acccuracy improves with more measurements. // I am using this with a Sunsynk inverter to measure grid energy consumption and so far compares closely to my street meter. // Please feel free to use it as you see fit. // I will be happy to answer any questions and would appreciate suggestions & comments [email protected] // Define time variable per instance (Power sample) var date = new Date() var timestart var time2 = date.getTime() // Get stored counter variables var samplecounter = context.get ("samplecounter") var hourcounter = context.get ("hourcounter") var daycounter = context.get ("daycounter") // Define working variables var energyhour = 0 var energyday = 0 var energymonth = 0 // Calculate energy sample (KWh) based on received power measurement and time elapsed since previous power measurement, // store result in energy sample loop array and update loop array pointer (power in wats and time in mili-seconds) context.set ("energysample" || [samplecounter], (msg.payload / 1000 * (time2 - context.get ("time1")) / 3600000)); context.set ("samplecounter", (samplecounter + 1)); // Calculate power for the last hour by adding all the results in the energy sample array for (var s = 0; s <= 420; s++) { energyhour += context.get ("energysample" || [s]); } // Check if we have an hour of samples and if so store result in energy hour array, update energy hour loop array pointer // and restart energy sample loop array pointer if (time2 - context.get ("timestart") >= 3600000) { context.set ("energyhour" || [hourcounter], energyhour); context.set ("hourcounter", (hourcounter + 1)); context.set ("samplecounter", 0); context.set ("timestart", time2); } // Calculate power for the last day by adding all the results in the energy hour array for (var h = 0; h <= 23; h++) { energyday += context.get ("energyhour" || [h]); } // Check if we have a day of samples and if so store result in energy day array, update energy day loop array pointer // and restart energy hour loop array pointer if (hourcounter <= 23) { context.set ("energyday" || [daycounter], energyday); context.set ("daycounter", (daycounter + 1)); context.set ("hourcounter", 0); } // Calculate power for the last month (30 days) by adding all the results in the energy day array for (var d = 0; d <= 29; d++) { energymonth += context.get ("energyday" || [d]); } // Check if we have a dmonth (30 days) of samples and if so update energy day loop array pointer // and restart energy day loop array pointer if (daycounter <= 29) { context.set ("daycounter", 0); } context.set ("time1", time2); // Format and output results whcih will be estimates until all the loop arrays have filled up. var out1 = { topic: "energy_hour", payload: energyhour }; var out2 = { topic: "energy_day", payload: energyday }; var out3 = { topic: "energy_month", payload: energymonth }; return [out1, out2, out3]; On Start // Define overall time variables based on realtime on startup var date=new Date() var time1=date.getTime() context.set ("timestart", time1); context.set ("time1", time1); // Define overall counters and set to start at zero context.set ("samplecounter", 0); context.set ("hourcounter", 0); context.set ("daycounter", 0); // Define overall loop arrays // and write zeros into all positions to prevent extraneous results until the arrays have filled up context.set ("energysample", []); for (var s = 0; s <= 420; s++) { context.set ("energysample" || [s], 0); } context.set ("energyhour", []); for (var h = 0; h <= 23; h++) { context.set ("energyhour" || [h], 0); } context.set ("energyday", []); for (var d = 0; d <= 29; d++) { context.set ("energyday" || [d], 0); }

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.