import string
import mqtt
import webserver

var current0 = 0
var current1 = 0

var Tcurrent0 = 0
var Tcurrent1 = 0

var pa = [1,1,1,1,1,1,1,1,1,1]
var pb = [1,1,1,1,1,1,1,1,1,1]

var li = 0
var lj = 0

def cur_sum(cu)
 var sum = 0
  for i: 0..4
   sum = sum + cu[i]
  end
  return(sum/5)  
end

def my_sort(arr)
  var n = size(arr)
  for i : 0 .. n-2
    for j : 0 .. n-i-2
      # Если левый элемент больше правого — меняем их местами
      if arr[j] > arr[j+1]
        var temp = arr[j]
        arr[j] = arr[j+1]
        arr[j+1] = temp
      end
    end
  end
  return arr
end

def add_rule_a0(value,trigger,data)

    if value < 0
      Tcurrent0 = value*-1
    elif value > 0
      Tcurrent0 = value
    end

     pa[li] = Tcurrent0
     li = li+1

    if li > 9
     li = 0
     pa = my_sort(pa)
     pa = pa.reverse()
     # print(pa)
     current0 = cur_sum(pa)
    end
end

def add_rule_a1(value,trigger,data)
    if value < 0
      Tcurrent1 = value*-1
    elif value > 0
      Tcurrent1 = value
    end
  
     pb[lj] = Tcurrent1
     lj = lj+1

    if lj > 9
     lj = 0
     pb = my_sort(pb)
     pb = pb.reverse()
     current1 = cur_sum(pb)
     # print(pb)
    end

end

tasmota.add_rule("ADS1115#A0",add_rule_a0)
tasmota.add_rule("ADS1115#A1",add_rule_a1)

def publish_my_sensor_data()

    var current_timestamp = tasmota.rtc()["local"] # Get current epoch time
    var formatted_time = tasmota.strftime("%Y-%m-%dT%H:%M:%S",current_timestamp)
    var topic = string.format("tele/%s/SENSOR", tasmota.cmd("Topic", true)["Topic"])
    var payload0 = string.format("{\"Time\":\"%s\",\"SCT013\":{\"CURRENTA0\":%d}}", formatted_time,current0) 
    var payload1 = string.format("{\"Time\":\"%s\",\"SCT013\":{\"CURRENTA1\":%d}}", formatted_time,current1) 

    mqtt.publish(topic, payload0) # Publish the message
    mqtt.publish(topic, payload1) # Publish the message

    # print("Published to " + topic + ": " + payload0)
    # print("Published to " + topic + ": " + payload1)
    
end

tasmota.add_cron("*/10 * * * * *", publish_my_sensor_data)

class MySensorDriver: Driver
    def web_sensor()      
        webserver.content_send("<tr><td><B>SCT Curent 0: </td><td>")
        webserver.content_send(string.format("%d",current0)) 
        webserver.content_send(" mA</B></td></tr>")
        webserver.content_send("<tr><td><B>SCT Curent 1: </td><td>")
        webserver.content_send(string.format("%d",current1))
        webserver.content_send(" mA</B></td></tr>")
    end
end

d1 = MySensorDriver()
tasmota.add_driver(d1)
