Funkcja odczytu wartości różnych liczników

Użytkownicy tworzą, zmieniają.
swiezak
Posty: 1545
Rejestracja: ndz maja 04, 2014 12:19 pm
Lokalizacja: śląskie

Re: Funkcja odczytu wartości różnych liczników

Post autor: swiezak » ndz cze 17, 2018 6:21 pm

dobijam do brzegu z licznikiem:D po tygodniu testów zliczyło perfekt co do jednego impulsu. kod od @pasiekazj.
W wersji w której miałem problem z uruchomieniem po zaniku zasilania wyjście z lm393 było podpięte do gpio D4 esp. Po zmianie na gpio D5 wszystko śmiga elegancko. Po długich testach nie zawsze zliczało mi impulsy. Po nocy było ok. w dzień gubiło- czyli trzeba było zmienić wartość 200

Kod: Zaznacz cały

tmr.alarm(2, 200, 1, function()
na wartość 40 ( u mnie dobrana doświadczalnie) to jest czas w ms- jeżeli ta wartość była 200 to jak było duże zużycie to program ignorował impulsy krótsze niż 200ms.
Kod od @pasiekazj nie wysyła "current" tylko zużycie całkowite. Mam kod od @dise który wygląda jakby obliczał current ale nie mogę go uruchomić bo esp się restartuje . Potrzebuję Waszej pomocy z tym kodem:)

Kod: Zaznacz cały

--Variables
PulseGas = 0
GasCounterValue = 1
GasDivider = 0.00833334  -- 0.01 m3 it's pulse divider  for my counter
GasPin = 5 -- Gpio05
PinState = 1
LastPinState = 1
FirstSend = 1
Current = 0
SentStatus = 1
SendPulse = 0
LastSentPulse = 0

-- Nettemp Variables
NettempIP="100.100.10.200"
NettempKey = "XXXXXXX"
SensorType = "elec"
SensorIp = "100.100.10.210"
SensorDevice = "wireless"
 

-- function to prevent sending 0.009888888 pulses ...
function round(what, precision)
   return math.floor(what*math.pow(10,precision)+0.5) / math.pow(10,precision)
end
-- already not used

 

--Data To Nettemp
function SendData()
   if (Current < 0) then
        Current = 0
   end
  if(wifi.sta.getip()~=nil) then

 

  

   if (PulseGas ~= LastSentPulse) then

 

        -- tutaj sprawdzamy czy posylanie poszlo ok

      if (SentStatus == 1 ) then
            SendPulse = ((PulseGas - LastSentPulse) * GasDivider)
            LastSentPulse = PulseGas   
        else
            SendPulse = ((PulseGas - LastSentPulse) * GasDivider)
        end

       

    conn=net.createConnection(net.TCP, 0)  
    conn:connect(3000,NettempIP)
 

    print("Sending Data to Nettemp") 
  

  

    conn:send("GET /receiver.php?key=".. NettempKey .. "&type=".. SensorType .. "&value=" .. SendPulse .. "&ip=" .. SensorIp  .. "&device=" .. SensorDevice  
    .. "&current=" ..Current .. " HTTP/1.1\r\nHost: NettempIP\r\n"
    .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")
    -- now reading response from server searching for "ok" answer
  

    conn:on("receive", function(conn, payload) print(payload)         

        if string.find(payload,"ok") ~= nil then   
          SentStatus = 1
          print("Response from Server ok ! Data Sent Successfully :... resetting Counter")
        else
          SentStatus = 0
          print("Server unavailable !!!")
        end

  

    end )

                        

    end

            

  else
   print("Getting IP please wait...")
   dofile("init.lua")    
  end

end

 

--- MAIN LOOOP

 

gpio.mode(GasPin, gpio.INPUT)

 

srv=net.createServer(net.TCP)

    srv:listen(80, function(conns)
      conns:on("receive", function(conns,payload)
        --print(payload)
        conns:send("<h1> PulseGas : " .. PulseGas .. " </h1>")
      end)
      conns:on("sent", function(conns) conns:close() end)
    end)

              

TimerStart  = tmr.now()
 
tmr.alarm(1, 60000, 1, function() SendData() end)
tmr.alarm(2, 40, 1, function()
local pinValue = gpio.read(GasPin)
if pinValue == gpio.LOW then
  --  print 'GPIO2 is low'
    PinState = 0
    if PinState ~= LastPinState then
                 PulseGas = PulseGas + GasCounterValue
                 TimerStop = tmr.now()
                 interval = TimerStop - TimerStart
      TimerStart  = tmr.now()
                 Current = round(((360000 / interval) / GasDivider),2)
      print("Pulse Detected : " .. PulseGas )
                 print(" Current is : " .. Current .. " m3/h" )
    -- print(PulseGas) 
    end
     LastPinState = 0      
else
   -- print 'GPIO2 is high'

    PinState = 1
    LastPinState = 1
end

end)

Awatar użytkownika
pasiekazj
Posty: 727
Rejestracja: pn wrz 28, 2015 10:35 am
Lokalizacja: Częstochowa
Kontakt:

Re: Funkcja odczytu wartości różnych liczników

Post autor: pasiekazj » pn cze 18, 2018 11:12 am

Co masz na myśli pisząc zużycie całkowite? Kod który wrzuciłeś wygląda dokładnie tak jak mój - nie wiem w czym różnica ?

Kod: Zaznacz cały

Current = round(((3600000 / interval) / GasCounterValue),0) 
Rpi 3 + SSD 240 GB + nettemp.
http://mmsite.pl

ODPOWIEDZ