Page 1 of 1

does not equal

Posted: Sunday 24 November 2019 6:13
by markjgabb
hi all

Ive been working on a script for when my chromecast is playing videos, but i find the state can update from video to video every now and then when it switches between shows and ad breaks

im trying to combat this with the persistent value of last state, but i cant get the laststate variable to work because i need a does not equal in my dzvents script which throws and error
can anyone advise on the correct format for does not equal?

i thought it would be != or !== as in most other coding languages but im getting i missed something

Code: Select all

return {
    on = { 
        devices = { 'lounge TV Status' }
        },
    
data = {
           LastState = { initial = "Screensaver" }
       },
    
    execute = function(dz, item)
        local fanlights = dz.devices('Fan Lights')
        
        local delay = .20
        local dimLevel = item.level
        

        if item.state == 'Video' and data.LastState !== 'Video'  then
            repeat
                delay = delay
                dimLevel = dimLevel - 1
                fanlights.dimTo(dimLevel).afterSec(delay)
            until dimLevel <= 0    
        elseif item.state == 'Screensaver' and data.LastState == 'Video' then
              repeat
                delay = delay
                dimLevel = dimLevel + 1
                fanlights.dimTo(dimLevel).afterSec(delay)
            until dimLevel = 100
        elseif item.state == 'Sleeping' and data.LastState == 'Video' then
               repeat
                delay = delay
                dimLevel = dimLevel + 1
                fanlights.dimTo(dimLevel).afterSec(delay)
            until dimLevel = 100
                
                
                
            end
        end
    
}

Re: does not equal  [Solved]

Posted: Sunday 24 November 2019 7:51
by waaren
markjgabb wrote: Sunday 24 November 2019 6:13 i thought it would be != or !== as in most other coding languages but im getting i missed something
In Lua unequal test is ~=
If you refer to persistent variables you have to use dz.data.<varname>

Code: Select all

return 
{
    on = 
    { 
        devices = { 'lounge TV Status' },
    },
    
    data = 
    {
           LastState = { initial = "Screensaver" },
    },
    
    logging = 
    {
        level = domoticz.LOG_DEBUG,    -- Set to ERROR when OK
    },

    execute = function(dz, item)
        _G.logMarker =  _G.moduleLabel
        
        local fanlights = dz.devices('Fan Lights')
        
        local delay = .20
        local dimLevel = item.level

        if item.state == 'Video' and dz.data.LastState ~= 'Video'  then
            repeat
                dimLevel = math.max(dimLevel - 1, 0) -- ensure dimLevel will not become < 1 (when repeat loop entered with level = 0 )
                fanlights.dimTo(dimLevel).afterSec(delay)
            until dimLevel = 0    
        elseif item.state == 'Screensaver' and dz.data.LastState == 'Video' then
            repeat
                dimLevel = dimLevel + 1
                fanlights.dimTo(dimLevel).afterSec(delay)
            until dimLevel = 100
        elseif item.state == 'Sleeping' and dz.data.LastState == 'Video' then
           repeat
                dimLevel = dimLevel + 1
                fanlights.dimTo(dimLevel).afterSec(delay)
            until dimLevel = 100
        end
        dz.data.LastState = item.state
    end
}

Re: does not equal

Posted: Tuesday 26 November 2019 11:05
by markjgabb
champion that works perfectly now!