Logic Machine Forum
Sort table and make schedule from script - 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: Sort table and make schedule from script (/showthread.php?tid=3869)



Sort table and make schedule from script - Tue - 13.02.2022

Hello there

I have a table looeking like this (but up to 40 lines):
local tbl = {
{month = 2, day = 13, hour = 9, price_raw = 0.12 , price_total= 0.42},
{month = 2, day = 13, hour = 10, price_raw = 0.22 , price_total= 0.49},
{month = 2, day = 13, hour = 11, price_raw = 0.23 , price_total= 0.43},
{month = 2, day = 13, hour = 12, price_raw = 0.11 , price_total= 0.44},
{month = 2, day = 13, hour = 13, price_raw = 0.13 , price_total= 0.48},
{month = 2, day = 13, hour = 14, price_raw = 0.19 , price_total= 0.38},
{month = 2, day = 13, hour = 15, price_raw = 0.14 , price_total= 0.41},
{month = 2, day = 13, hour = 16, price_raw = 0.16 , price_total= 0.28}
}

How do I sort the table after [price_total] ?

Now I want to make a Schedule, lets call them, Charge_ev_in_min

How do I edit a schedule from script? I need to do the following:
Set time and date for start
Set value (0-600)
Disable scheduler
Enable scheduler
delete schedule 

BR

Tue


RE: Sort table and make schedule from script - Erwin van der Zwart - 14.02.2022

For the sorting use this:
Code:
table.sort(tbl, function(a, b) return a['price_total'] < b['price_total'] end)
For the update use this (old) sample:
.lua   Update schedulers and scheduler events on tagged objects V1.0.lua (Size: 5.07 KB / Downloads: 21)



RE: Sort table and make schedule from script - Tue - 14.02.2022

(14.02.2022, 07:10)Erwin van der Zwart Wrote: For the sorting use this:
Code:
table.sort(tbl, function(a, b) return a['price_total'] < b['price_total'] end)
For the update use this (old) sample:


Thx for that, It seams like when I first storage the table using: 

Code:
storage.set('NordPool_prices', pris_array_alle)


And after that

Code:
tbl_price = storage.get('NordPool_prices') -- Get prize from Nordpool
table.sort(tbl_price, function(a, b) return a['price_total'] > b['price_total'] end)
log(tbl_price)

It cannot sort it? Bellow is how the log looks, is there somthing with the table .. table here?

Code:
Event for Elprisen er lige nu (7/1/2) 14.02.2022 14:44:51
* table:
[0]
  * table:
   ["price_raw"]
    * number: 0.7961544
   ["date"]
    * number: 14
   ["hour"]
    * number: 14
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3961544
[1]
  * table:
   ["price_raw"]
    * number: 0.8211528
   ["date"]
    * number: 14
   ["hour"]
    * number: 15
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4211528
[2]
  * table:
   ["price_raw"]
    * number: 0.8022552
   ["date"]
    * number: 14
   ["hour"]
    * number: 16
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4022552
[13]
  * table:
   ["price_raw"]
    * number: 0.7928064
   ["date"]
    * number: 15
   ["hour"]
    * number: 3
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3928064
[31]
  * table:
   ["price_raw"]
    * number: 0.6808344
   ["date"]
    * number: 15
   ["hour"]
    * number: 21
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.2808344
[11]
  * table:
   ["price_raw"]
    * number: 0.7898304
   ["date"]
    * number: 15
   ["hour"]
    * number: 1
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3898304
[27]
  * table:
   ["price_raw"]
    * number: 0.8695128
   ["date"]
    * number: 15
   ["hour"]
    * number: 17
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.6495128
[9]
  * table:
   ["price_raw"]
    * number: 0.7766616
   ["date"]
    * number: 14
   ["hour"]
    * number: 23
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3766616
[23]
  * table:
   ["price_raw"]
    * number: 0.8261376
   ["date"]
    * number: 15
   ["hour"]
    * number: 13
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4261376
[19]
  * table:
   ["price_raw"]
    * number: 0.88164
   ["date"]
    * number: 15
   ["hour"]
    * number: 9
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.48164
[32]
  * table:
   ["price_raw"]
    * number: 0.7582104
   ["date"]
    * number: 15
   ["hour"]
    * number: 22
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3582104
[28]
  * table:
   ["price_raw"]
    * number: 0.855228
   ["date"]
    * number: 15
   ["hour"]
    * number: 18
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.635228
[24]
  * table:
   ["price_raw"]
    * number: 0.8245008
   ["date"]
    * number: 15
   ["hour"]
    * number: 14
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4245008
[33]
  * table:
   ["price_raw"]
    * number: 0.6540504
   ["date"]
    * number: 15
   ["hour"]
    * number: 23
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.2540504
[20]
  * table:
   ["price_raw"]
    * number: 0.8489784
   ["date"]
    * number: 15
   ["hour"]
    * number: 10
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4489784
[16]
  * table:
   ["price_raw"]
    * number: 0.8242776
   ["date"]
    * number: 15
   ["hour"]
    * number: 6
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4242776
[14]
  * table:
   ["price_raw"]
    * number: 0.7944432
   ["date"]
    * number: 15
   ["hour"]
    * number: 4
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3944432
[12]
  * table:
   ["price_raw"]
    * number: 0.7861104
   ["date"]
    * number: 15
   ["hour"]
    * number: 2
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3861104
[10]
  * table:
   ["price_raw"]
    * number: 0.7887888
   ["date"]
    * number: 15
   ["hour"]
    * number: 0
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3887888
[8]
  * table:
   ["price_raw"]
    * number: 0.8000976
   ["date"]
    * number: 14
   ["hour"]
    * number: 22
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4000976
[7]
  * table:
   ["price_raw"]
    * number: 0.8084304
   ["date"]
    * number: 14
   ["hour"]
    * number: 21
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4084304
[6]
  * table:
   ["price_raw"]
    * number: 0.8171352
   ["date"]
    * number: 14
   ["hour"]
    * number: 20
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4171352
[5]
  * table:
   ["price_raw"]
    * number: 0.7989816
   ["date"]
    * number: 14
   ["hour"]
    * number: 19
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.5789816
[4]
  * table:
   ["price_raw"]
    * number: 0.8688432
   ["date"]
    * number: 14
   ["hour"]
    * number: 18
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.6488432
[30]
  * table:
   ["price_raw"]
    * number: 0.7835064
   ["date"]
    * number: 15
   ["hour"]
    * number: 20
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.3835064
[29]
  * table:
   ["price_raw"]
    * number: 0.8146056
   ["date"]
    * number: 15
   ["hour"]
    * number: 19
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.5946056
[22]
  * table:
   ["price_raw"]
    * number: 0.8294112
   ["date"]
    * number: 15
   ["hour"]
    * number: 12
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4294112
[26]
  * table:
   ["price_raw"]
    * number: 0.8003952
   ["date"]
    * number: 15
   ["hour"]
    * number: 16
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4003952
[25]
  * table:
   ["price_raw"]
    * number: 0.821748
   ["date"]
    * number: 15
   ["hour"]
    * number: 15
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.421748
[3]
  * table:
   ["price_raw"]
    * number: 0.8733072
   ["date"]
    * number: 14
   ["hour"]
    * number: 17
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.6533072
[21]
  * table:
   ["price_raw"]
    * number: 0.8371488
   ["date"]
    * number: 15
   ["hour"]
    * number: 11
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4371488
[18]
  * table:
   ["price_raw"]
    * number: 0.8847648
   ["date"]
    * number: 15
   ["hour"]
    * number: 8
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4847648
[15]
  * table:
   ["price_raw"]
    * number: 0.8076864
   ["date"]
    * number: 15
   ["hour"]
    * number: 5
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.4076864
[17]
  * table:
   ["price_raw"]
    * number: 0.873828
   ["date"]
    * number: 15
   ["hour"]
    * number: 7
   ["month"]
    * number: 2
   ["price_total"]
    * number: 1.473828

This is how I make the table in the beginning
Code:
    NordPool_pricepriser[NordPool_price_i] = {month =  tonumber(os.date('%m' , os.time() + (3600*NordPool_price_i))), date =  tonumber(os.date('%d' , os.time() + (3600*NordPool_price_i))), hour = tonumber(os.date('%H' , os.time() + (3600*NordPool_price_i))),price_raw = NordPool_price_pris, price_total = NordPool_price_pris + total_add_price}-- store price and time for price
      if NordPool_pricepriser[NordPool_price_i].hour == 17 or NordPool_pricepriser[NordPool_price_i].hour == 18 or NordPool_pricepriser[NordPool_price_i].hour == 19 then
          NordPool_pricepriser[NordPool_price_i].price_total = NordPool_pricepriser[NordPool_price_i].price_total + Konstant_ekstra_tariff_17_20
        end
and that routine is called and then stoareg like this

Code:
pris_array_alle = NordPool_price() -- Get prices = {month, day, hour, price_raw, price_total}
storage.set('NordPool_prices', pris_array_alle)



RE: Sort table and make schedule from script - admin - 14.02.2022

Since you have [0] index in the table it is not treated as an array (index 1..n) so it cannot be sorted. You can convert it to array like this:
Code:
tbl_price = storage.get('NordPool_prices') -- Get prize from Nordpool
arr_price = {}

for _, row in pairs(tbl_price) do
  arr_price[ #arr_price + 1 ] = row
end

table.sort(arr_price, function(a, b) return a['price_total'] > b['price_total'] end)
log(arr_price)



RE: Sort table and make schedule from script - Tue - 14.02.2022

(14.02.2022, 14:02)admin Wrote: Since you have [0] index in the table it is not treated as an array (index 1..n) so it cannot be sorted. You can convert it to array like this:
Code:
tbl_price = storage.get('NordPool_prices') -- Get prize from Nordpool
arr_price = {}

for _, row in pairs(tbl_price) do
  arr_price[ #arr_price + 1 ] = row
end

table.sort(arr_price, function(a, b) return a['price_total'] > b['price_total'] end)
log(arr_price)

YOU ARE A LIFESAVER :-)!!