Logic Machine Forum
calculation with table - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: calculation with table (/showthread.php?tid=4198)



calculation with table - pioneersteffen - 22.08.2022

Hi @all,

I working on a script to calculate the solar energy through the windows based on Solcast API. Therefore I defining the window parameters as tables and want to calculate the energy forecast for each window and write them to a new table (fe) for the window index. 

Unfortutately this writing to the table is not working, logs attached.

Can you please help me what I'm doing wrong?

Many thanks for your help!

Best Regards
Steffen

Code:
require('json')
https = require 'ssl.https'


appid = 'xxx'
lat = '52'
lon ='10'
azi = '170'
hours = '48'
format = 'json'


url = 'https://api.solcast.com.au/world_radiation/forecasts?latitude=%s&longitude=%s&hours=%s&format=%s&api_key=%s'
url = string.format(url, lat, lon, hours, format, appid)

res, code, headers, status = ssl.https.request(url)
log (code, status, headers)
data = json.pdecode(res)

--Fault messages:
if not data then
  alert('Error converting data')
  return
end

if not res then
  alert('Error collecting data')
  return
end

data = data.forecasts


gwert=0.5
ff={} --Tabelle Fensterfläche
fw={} -- Tabelle Fenster Winkel
fn={} -- Tabelle Fenster Neigung, Senkrecht = 90
fe={} --Fensterenergemenge aus f_energiesum

--Galerie
ff[2]=1.6 -- Glasfläche Fenster
fw[2]=8 -- Azimuth Fenster zu Süden = 0° ; Westen = + 90°
fn[2]=33 -- Neigung Senkrecht = 90

--Leben
ff[3]=2.1 -- Glasfläche Fenster
fw[3]=8 -- Azimuth Fenster zu Süden = 0° ; Westen = + 90°
fn[3]=90 -- Neigung Senkrecht = 90
ff[4]=7.45 -- Glasfläche Fenster
fw[4]=8 -- Azimuth Fenster zu Süden = 0° ; Westen = + 90°
fn[4]=90 -- Neigung Senkrecht = 90
ff[5]=2.63 -- Glasfläche Fenster
fw[5]=-82 -- Azimuth Fenster zu Süden = 0° ; Westen = + 90°
fn[5]=90 -- Neigung Senkrecht = 90

now = os.date('*t')
hour = now.hour
i=1 --Index halbe Stunde aus Solcast json
f=2 --Fensterindex Tabelle
f_energiesum = 0
rest_hour = 24 - hour

for f=2,5,1 do --EDIT Anpassung Fensteranzahl
    while i<3 do
    dni = data[i].dni
    ghi = data[i].ghi --global horizontal
    dhi = data[i].dhi --diffus horizontal
    bh = ghi - dhi --direkt horrizontal
    zenith = data[i].zenith
    sunh = 90 - zenith -- Sonnenhöhe
    azimuth = data[i].azimuth

    w_einstrahl = math.asin(math.sin(math.rad(sunh)) * math.cos(math.rad(fn[f])) + math.cos(math.rad(sunh))*math.cos(math.rad(fw[f]-azimuth))*math.sin(math.rad(fn[f])))
    dir_einstrahl = math.sin(w_einstrahl)/math.sin(math.rad(sunh))*bh --Direktstrahlung auf eine geneigte Oberfläche
    if sunh == 0 then dir_einstrahl = 0 end -- Abfangen Division durch 0

    dif_einstrahl = (1 + math.cos(math.rad(fn[f])))/2*dhi --diffuse Horizontalstrahlung
    f_energie = (dir_einstrahl + dif_einstrahl)*ff[f]*gwert
    
    f_energiesum = f_energiesum + f_energie
    fe[f] = f_energiesum
--    log(i,f, ghi, dhi, bh, sunh, azimuth, w_einstrahl, dir_einstrahl, dif_einstrahl, f_energie, f_energiesum, ff[f], fw[f], fe[f])

    i=i+1
    end
   
grp.write('49/'..f..'/8', f_energiesum)
log(f,fw,ff,fn,fe)
    

end


Code:
Solcast_Radiation 22.08.2022 08:27:09
* arg: 1
  * number: 2
* arg: 2
  * table:
   [2]
    * number: 8
   [3]
    * number: 8
   [4]
    * number: 8
   [5]
    * number: -82
* arg: 3
  * table:
   [2]
    * number: 1.6
   [3]
    * number: 2.1
   [4]
    * number: 7.45
   [5]
    * number: 2.63
* arg: 4
  * table:
   [2]
    * number: 33
   [3]
    * number: 90
   [4]
    * number: 90
   [5]
    * number: 90
* arg: 5
  * table:
   [2]
    * number: 280.824289622413
Solcast_Radiation 22.08.2022 08:27:09
* arg: 1
  * number: 3
* arg: 2
  * table:
   [2]
    * number: 8
   [3]
    * number: 8
   [4]
    * number: 8
   [5]
    * number: -82
* arg: 3
  * table:
   [2]
    * number: 1.6
   [3]
    * number: 2.1
   [4]
    * number: 7.45
   [5]
    * number: 2.63
* arg: 4
  * table:
   [2]
    * number: 33
   [3]
    * number: 90
   [4]
    * number: 90
   [5]
    * number: 90
* arg: 5
  * table:
   [2]
    * number: 280.824289622413
Solcast_Radiation 22.08.2022 08:27:09
* arg: 1
  * number: 4
* arg: 2
  * table:
   [2]
    * number: 8
   [3]
    * number: 8
   [4]
    * number: 8
   [5]
    * number: -82
* arg: 3
  * table:
   [2]
    * number: 1.6
   [3]
    * number: 2.1
   [4]
    * number: 7.45
   [5]
    * number: 2.63
* arg: 4
  * table:
   [2]
    * number: 33
   [3]
    * number: 90
   [4]
    * number: 90
   [5]
    * number: 90
* arg: 5
  * table:
   [2]
    * number: 280.824289622413
Solcast_Radiation 22.08.2022 08:27:09
* arg: 1
  * number: 5
* arg: 2
  * table:
   [2]
    * number: 8
   [3]
    * number: 8
   [4]
    * number: 8
   [5]
    * number: -82
* arg: 3
  * table:
   [2]
    * number: 1.6
   [3]
    * number: 2.1
   [4]
    * number: 7.45
   [5]
    * number: 2.63
* arg: 4
  * table:
   [2]
    * number: 33
   [3]
    * number: 90
   [4]
    * number: 90
   [5]
    * number: 90
* arg: 5
  * table:
   [2]
    * number: 280.824289622413



RE: calculation with table - admin - 23.08.2022

while i<3 do loop works only once because i is not reset in the for loop. You can use for i = 1, 2 do instead of while. In this case i is a local variable so there's no need to declare it beforehand.


RE: calculation with table - pioneersteffen - 23.08.2022

Many thanks admin for your help! What a stupid failure from my side but I couldn’t find the failure on my own. I will post the validated script when I’m finished testing.