25 sty 2016

Skrypt zastępujący specjalizowaną wersję wsadu do ESP dla QuinLED

W internecie dostępny jest genialny projekt QuinLED autorstwa Quindora. Był to jeden z pierwszych przykładów wykorzystania w praktyce modułu ESP. Dzięki nieco przerobionemu w stosunku do oryginału skryptowi Lua w Domoticzu, możemy do sterowania modułem wykorzystać ESP Easy, zamiast specjalizowanej wersji oprogramowania opartego na NodeMCU i kolekcji skryptów Lua wgrywanych do modułu ESP8266.


W przyszłości napiszę więcej o projekcie Quindora, ale dla wszystkich zainteresowanych, którzy chcieliby zbudować sobie sterownik do LED-ów korzystający z najprostszej postaci modułu ESP, czyli ESP-01, podaję link do v2 projektu: blog.quindorian.org/2015/04/esp8266-wifi-led-dimmer-part-8-of-x.html. Ja wykonałem już kilka modułów wg tego projektu, zamówiłem także płytki PCB zaprojektowane przez Quindora i wszystko działa rewelacyjnie.
Jedynym problemem był fakt, iż wsad do ESP trzeba było przygotować i wgrywać przy pomocy ciekawego, ale java'owego ESPEsplorera lub innych narzędzi współpracujących ze skryptami lua. Oznaczało to, że część modułów w domu będzie działać w oparciu o NodeMCU, a część o ESP Easy, które jest znacznie prostsze i szybsze w konfiguracji, a do tego teraz już obsługuje OTA, czyli aktualizację w locie przez wbudowaną stronę www modułu.

Poprosiłem więc o pomoc kolegów na forum ESP Easy i poniżej znajdziecie wynik tej współpracy.

QuinLED na ESP Easy

Kod Lua, który należy zapisać w Domoticzu w katalogu Scripts i nazwać stosownie do nazwy ściemniacza w kontrolerze (w przykładzie: Dimmer Strip Test) prezentuję poniżej (autor: cherowley z forum Easy ESP, z moimi modyfikacjami):


commandArray = {}

DomDevice = 'Dimmer Strip Test'
IP = 'espip'
Port = '80'
GPIO = 4

function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

function send(msg) 
   runcommand = "curl http://"..(IP)..":"..(Port).."/"..(msg)..""
   print (runcommand)
   print(os.capture(runcommand))
end

if devicechanged[DomDevice] then
   print("ESPEasy Dimmer Strip Test Script")

   if(devicechanged[DomDevice]=='Off') then 
      print("Turning OFF " .. DomDevice)
      send("control?cmd=PWM," .. tostring(GPIO) .. ",0") 
   elseif (devicechanged[DomDevice]=='On') then
      print("Turning On with value : " .. tostring(uservariables['HoldDimmer1']))
      otherdevices_svalues[DomDevice] = tostring(uservariables['HoldDimmer1'])
      send("control?cmd=PWM," .. tostring(GPIO) .. "," .. tostring(tostring(uservariables['HoldDimmer1']*32)))
else
   print("Value sent from domoticz is : " .. otherdevices_svalues[DomDevice])
   uservariables['HoldDimmer1'] = otherdevices_svalues[DomDevice]
   send("control?cmd=PWM," .. tostring(GPIO) .. "," .. tostring(tostring(uservariables['HoldDimmer1']*32)))
   commandArray['Variable:HoldDimmer1'] = uservariables['HoldDimmer1']
   end
end

return commandArray

Ściemniacz należy dodać ręcznie w Domoticzu, jako Lightwave RF typu 5, co powoduje, że do dyspozycji mamy 32 poziomy jasności. Następnie należy dostosować nazwę skopiowanego powyżej i zapisanego skryptu do nazwy nadanej ściemniaczowi (w przykładzie powyżej: script_Dimmer_Script_Test.lua) oraz dostosować odpowienio zmienne na początku skryptu (adres IP modułu ESP, port www oraz GPIO, które będzie sterować LED-ami).

Dzięki modyfikacji skryptu, w wyniku jego działania w logu Domoticza odkłada się także odpowiedź modułu ESP na przesłane polecenie, co oczywiście można wykorzystać do własnych celów.

Dla zainteresowanych: dyskusja na forum Easy ESP na ten temat.