isNight - nil value

  • 9 Odpowiedzi
  • 5370 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline v41n

  • ** 35
  • 0
  • Nazwa i wersja ID: v41n
isNight - nil value
« dnia: Sierpień 27, 2016, 12:29:48 pm »
Cześć,

Proszę o pomoc dlaczego poniższy kod zwraca błąd:  [DEBUG] 13:28:30: line 7: attempt to concatenate a nil value

--[[
%% properties
%% globals
isNight
--]]
 
fibaro:debug("Wartość: "..fibaro:getGlobalValue("isNight"))
   

Z góry dziękuje za pomoc.
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: isNight - nil value
« Odpowiedź #1 dnia: Sierpień 27, 2016, 10:32:08 pm »
scene uruchomiles z palca i dostales taki komunikat czy scena zostala uruchomiona na podstawie globala ?
*

Offline v41n

  • ** 35
  • 0
  • Nazwa i wersja ID: v41n
Odp: isNight - nil value
« Odpowiedź #2 dnia: Sierpień 29, 2016, 02:49:17 pm »
Z palca.
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: isNight - nil value
« Odpowiedź #3 dnia: Sierpień 29, 2016, 09:02:03 pm »
no i wszytko jasne. Wartosc zmiennej jest pusta.
zrob nowa scene ktora ustawia wartość isNight, albo wpisz jakas w wartość w panelu zmiennych a dopiero pozniej uruchom z palca ta scene. Pamietaj ze wartosci zmiennych globalnych po restarcie centrali znow sa puste, wiec warto miec scene ktora ustawia zmienne przy starcie centrali.

« Ostatnia zmiana: Sierpień 30, 2016, 09:42:19 am wysłana przez marecki_0luk1 »
*

Offline v41n

  • ** 35
  • 0
  • Nazwa i wersja ID: v41n
Odp: isNight - nil value
« Odpowiedź #4 dnia: Sierpień 30, 2016, 11:27:06 am »
No ok.

Korzystam ze sceny użytkownika Traktor69. Czy jest to prawidłowe ustawienie zmiennej bo mam wrażenie, że nadal jest pusta.


--[[
1303 value
%% properties
%% globals
%% autostart
--]]
 
-- Initial parameters -------------------------------------------------------

sunriseDelay = 0
sunsetDelay = 0



-- Functions -----------------------------------------------------------------

-- funkcja zamienia czas w formacie tekstowym "HH:MM" lub os.date("*t")
-- na liczbę minut od północy

function toMinutes(czasHHMM)
local a
if type(czasHHMM) == "string" then
a = tonumber(string.sub(czasHHMM, 1, 2)) * 60 + tonumber(string.sub(czasHHMM, 4, 5))
else   
a = tonumber(czasHHMM.hour) * 60 + tonumber(czasHHMM.min)
end
return a
end

-- funkcja zamienia liczbę minut od północy  na format tekstowy godziny "HH:MM"

function toHHMM(minutes)
local b = string.format("%02d",((minutes/60*100) - ((minutes/60*100) % 100))/100)
local c = string.format("%02d",minutes - (tonumber(b)*60))
local d = b..":"..c
return d
end

-- end of Functions-----------------------------------------------------------


while true do
 
-- ustalenie ilości minut od północy do godziny wschodu i zachodu słońca

local sunriseMinutes = toMinutes(fibaro:getValue(1, 'sunriseHour'))
local sunsetMinutes = toMinutes(fibaro:getValue(1, 'sunsetHour'))

-- ustalenie ilości minut od północy do teraz

local nowMinutes = toMinutes(os.date("*t"))
   
-- ustawienie zmiennej globalnej isNight   


    if nowMinutes > (sunriseMinutes + sunriseDelay)
       and nowMinutes < (sunsetMinutes + sunsetDelay)
      then
      fibaro:setGlobal("isNight", "0")
      else
      fibaro:setGlobal("isNight", "1")
    end

-- debug --------------------------------------------------------------------

fibaro:debug("Teraz jest: "..toHHMM(nowMinutes))
fibaro:debug("Wschód słońca: "..fibaro:getValue(1, 'sunriseHour'))
fibaro:debug("Zachód słońca: "..fibaro:getValue(1, 'sunsetHour'))
fibaro:debug("isNight = "..fibaro:getGlobalValue("isNight"))
fibaro:debug("-----------------------------------------")
 
-----------------------------------------------------------------------------
 
fibaro:sleep(60*1000)
   
end -- end while
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: isNight - nil value
« Odpowiedź #5 dnia: Sierpień 31, 2016, 08:07:28 am »
a co masz w debug tej sceny? po co dopisales 1303 value jak scena ma autostart i nigdy sie nie konczy?
*

Offline v41n

  • ** 35
  • 0
  • Nazwa i wersja ID: v41n
Odp: isNight - nil value
« Odpowiedź #6 dnia: Sierpień 31, 2016, 11:27:08 am »
W debugu mam to: attempt to concatenate a nil value

A 1303 to przez przypadek jak kopiowałem z inne sceny.
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: isNight - nil value
« Odpowiedź #7 dnia: Sierpień 31, 2016, 03:26:21 pm »
no to co sie dziwisz ze nie dziala ;-)
*

Offline v41n

  • ** 35
  • 0
  • Nazwa i wersja ID: v41n
Odp: isNight - nil value
« Odpowiedź #8 dnia: Wrzesień 04, 2016, 12:20:54 pm »
Zmieniłem kod, komunikat z debugu:


[DEBUG] 13:17:29: Teraz jest: 13:17
[DEBUG] 13:17:29: Wschód słońca: 05:56
[DEBUG] 13:17:29: Zachód słońca: 19:12
[DEBUG] 13:17:29: line 68: attempt to concatenate a nil value

?


--[[
%% autostart
%% properties
%% globals
--]]
 
-- Initial parameters -------------------------------------------------------

sunriseDelay = 0
sunsetDelay = 0



-- Functions -----------------------------------------------------------------

-- funkcja zamienia czas w formacie tekstowym "HH:MM" lub os.date("*t")
-- na liczbę minut od północy

function toMinutes(czasHHMM)
local a
if type(czasHHMM) == "string" then
a = tonumber(string.sub(czasHHMM, 1, 2)) * 60 + tonumber(string.sub(czasHHMM, 4, 5))
else   
a = tonumber(czasHHMM.hour) * 60 + tonumber(czasHHMM.min)
end
return a
end

-- funkcja zamienia liczbę minut od północy  na format tekstowy godziny "HH:MM"

function toHHMM(minutes)
local b = string.format("%02d",((minutes/60*100) - ((minutes/60*100) % 100))/100)
local c = string.format("%02d",minutes - (tonumber(b)*60))
local d = b..":"..c
return d
end

-- end of Functions-----------------------------------------------------------


while true do
 
-- ustalenie ilości minut od północy do godziny wschodu i zachodu słońca

local sunriseMinutes = toMinutes(fibaro:getValue(1, 'sunriseHour'))
local sunsetMinutes = toMinutes(fibaro:getValue(1, 'sunsetHour'))

-- ustalenie ilości minut od północy do teraz

local nowMinutes = toMinutes(os.date("*t"))
   
-- ustawienie zmiennej globalnej isNight   


    if nowMinutes > (sunriseMinutes + sunriseDelay)
       and nowMinutes < (sunsetMinutes + sunsetDelay)
      then
      fibaro:setGlobal("isNight", "0")
      else
      fibaro:setGlobal("isNight", "1")
    end

-- debug --------------------------------------------------------------------

fibaro:debug("Teraz jest: "..toHHMM(nowMinutes))
fibaro:debug("Wschód słońca: "..fibaro:getValue(1, 'sunriseHour'))
fibaro:debug("Zachód słońca: "..fibaro:getValue(1, 'sunsetHour'))
fibaro:debug("isNight = "..fibaro:getGlobalValue("isNight"))
fibaro:debug("-----------------------------------------")
 
-----------------------------------------------------------------------------

end -- end while

*

Offline v41n

  • ** 35
  • 0
  • Nazwa i wersja ID: v41n
Odp: isNight - nil value
« Odpowiedź #9 dnia: Wrzesień 04, 2016, 12:50:15 pm »
Dobra poradziłem sobie. Działa.