Page 1 of 1

LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by AndersGregow
Hej!
1. Kan man ha globala funktioner och variabler som kan nås mellan olika skript?
2. Om onDeviceChanged anropas av ett device, kan ett annat device anropa samma metod (i samma skript) om den första devicen tex. ligger i en sleep i metoden.

Mvh. /Anders

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
1) Nej

2) Kan du ge exempel?

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by AndersGregow
1. Så synd :-(
Hade varit bra att enkelt synkronisera skript.

2.

Code: Select all

function onDeviceStateChanged(device, state, stateValue)
   if device:name() == SENSOR_ALARM then
        slep(20000) -- wait for alarm away sensor
        if (device:state() == STATUS_ON) and (not status_alarm_armed) then
            status_alarm_armed = true
            print("*** %s Alarm On ***", os.date())
            update_devices()
        elseif (device:state() ~= STATUS_ON) and status_alarm_armed then
            status_alarm_armed = false
            print("*** %s Alarm Off ***", os.date())
            update_devices()
        end
   elseif device:name() == SENSOR_ALARM_AWAY then -- sensor is inverted
        if (device:state() ~= STATUS_ON) and (not status_alarm_armed_away) then
            status_alarm_armed_away = true
            print("*** %s Alarm Away On ***", os.date())
        elseif (device:state() == STATUS_ON) and status_alarm_armed_away then
            status_alarm_armed_away = false
            print("*** %s Alarm Away Off ***", os.date())
  end
end

Om SENSOR_ALARM kommer först så lägger den sig att vänta en stund (överdriven tid här...) på att SENSOR_ALARM_AWAY eventuellt ska hända, detta för att olika enheter ska tändas/släckas beroende på om man larmat på "hemma" eller "borta".
Sensorerna är ljus-sensorer som läser av ljusdioder på larmenheten.
Kommer SENSOR_ALARM_AWAY att hanteras medans onDeviceStateChanged() ligger i 20s-fördröjningen, och rätt status kommer att vara satt i status_alarm_armed_away när väl sleep är klar? Eller kommer den hanteras först efter att SENSOR_ALARM hanterats klart? Eller, kommer det missas helt?

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
AndersGregow wrote:Kommer SENSOR_ALARM_AWAY att hanteras medans onDeviceStateChanged() ligger i 20s-fördröjningen, och rätt status kommer att vara satt i status_alarm_armed_away när väl sleep är klar? Eller kommer den hanteras först efter att SENSOR_ALARM hanterats klart? Eller, kommer det missas helt?
Nästa körning av onDeviceStateChanged() kommer köras om den första är i "sleep". Sleep är utformad för att ge tråden tid att utföra annat.
Skulle du istället haft en evighetsloop som kollat så att tillräckligt lång tid gått (utan att kalla på sleep) så skulle inga nya anrop till onDeviceStateChanged() köras förrän första är klart.

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by AndersGregow
Perfekt.

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by erikjoens
AndersGregow wrote: 1. Kan man ha globala funktioner och variabler som kan nås mellan olika skript?
Du kan ha enkla binära "globala" variabler i form av en "icke existerande" 433mhz enhet. Du kan t.ex. lägga till en 433mhz brytare utan att koppla denna till en riktig brytare, och sen använder du den som en "global" variabel med läge on eller off.

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by AndersGregow
Jo, det känner jag till, använder det redan.
Inte lika "snyggt" dock. ;-)

Re: LUA - globala variabler och funktioner

Posted: Fri Mar 17, 2023 9:45 am
by erikjoens
Nej håller med, hade varit trevligare att ha ett bättre sätt att hantera olika "states".

Jag har några stycken fejk enheter som jag använder för att trigga olika händelser och några för att hålla koll på olika states. Har dock prefixat dom med [T] och i deras namn så blir de iaf nån sorts ordning i listan :)