Page 1 of 1

dzvents docker and script

Posted: Friday 28 May 2021 14:16
by pvklink
I have installed docker and use docker for
- mysql
- phpadmin
- mqtt
- domoticz
- dashticz
- nodered
- apache

All seems to work ok, except one script (for now). MY denon script works for years but after docker it, it wont work and no error with a line!
Any one a suggestion, i only send a curl to my denon...

Code: Select all

2021-05-28 14:09:28.661 2021-05-28 14:09:28. Scriptname: DZ_denon, Unknown trigger. DENON setting aangepast met ingestelde waarde: STEREO
2021-05-28 14:09:28.661 2021-05-28 14:09:28. Scriptname: DZ_denon, Unknown trigger. DENON setting aangepast met ingestelde waarde: 010440
2021-05-28 14:09:28.661 2021-05-28 14:09:28. Scriptname: DZ_denon, Unknown trigger. DENON setting aangepast met ingestelde waarde: TUNER
2021-05-28 14:09:28.661 2021-05-28 14:09:28. Scriptname: DZ_denon, Unknown trigger. DENON: curl http://192.168.20.26/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/-70
2021-05-28 14:09:28.661 2021-05-28 14:09:28. Scriptname: DZ_denon, Unknown trigger. DENON setting aangepast met ingestelde waarde: -70

local scriptVar = 'DenonCustomEvents'
return {
	on =    {
            devices = {'denon*' },
            customEvents = {scriptVar},
            },
            data = {lastVolumeState = {initial = '',},},

    execute = function(dz, item,info)
    _G.logLevel = dz.helpers.get_logtype(dz)    -- dz.log('debug test',dz.LOG_DEBUG) this will only make it to the log when LOG_DEBUG is set  AND dz.log('blabla',dz.LOG_FORCE) -- this will allways make it tp the log
    _G.logMarker = _G.moduleLabel               -- marker wordt scriptnaam, _G.logMarker = info.scriptName is idem
    local messageTable = {}                     -- log alles, 0 = niets, 1 dom, 2 global, 3 alles... evt per regel ook in te regelen
    -- HIER START DE EXECUTIE

    local ipdenon       = '192.168.20.26'
    local denon_cmd_1   = 'curl http://' .. ipdenon .. '/MainZone/index.put.asp?cmd0='      -- basiscommando1
    local denon_cmd_2   = 'curl http://' .. ipdenon .. '/Tuner/TUNER/index.put.asp?cmd0='   -- basiscommando2

    local denon_volume  = dz.devices('denon_volume')
    local denon_source  = dz.devices('denon_source')
    local denon_radio   = dz.devices('denon_radio')
    local denon_mixer   = dz.devices('denon_mixer')

    local SourceToSet_volume= -50       -- volume, zie ook LET OP!
    local SourceToSet_source= 'TUNER'   -- source receiver
    local SourceToSet_freq  = '009540'  -- frequency
    local SourceToSet_mixer = 'STEREO'  -- mixer
    
    --local sign          = '+'   -- als je geen + in een var kan opnemen --' .. sign  ..'  DIT LIJKT INEENS NIET MEER NODIG ?
    local volume_states =   { uit=SourceToSet_volume, fluister = SourceToSet_volume-20, zacht = SourceToSet_volume-10, medium = SourceToSet_volume, hard = SourceToSet_volume+10, extra = SourceToSet_volume+20,}
    local source_states =   { Radio = 'TUNER', Tv = 'SAT/CBL', Sonos = 'CD', Kodi = 'MPLAY', Pc = 'GAME', Cast = 'BD'}
    local radio_states  =   { Skyradio = '010440',Qmusic = '009540', Veronica = '009490', ['538'] = '010500',West = '008890' }
    local mixer_states  =   { movie = 'MOVIE', stereo = 'STEREO', ['mch stereo'] = 'MCH+STEREO', ['dolby digital'] = 'DOLBY+DIGITAL', music = 'MUSIC', game = 'GAME', ['pure direct'] = 'PURE+DIRECT', 
                            direct = 'DIRECT', standaard = 'STANDARD', simulation = 'SIMULATION', auto = 'AUTO', left='LEFT', ['video game'] = 'VIDEO+GAME',['rock arena'] = 'ROCK+ARENA' }

    local function get_waarde(dev_state, waardebereik, defvalue )  -- haal waarde op voor een dev_state, doorzoek een waardebereik en geef bij geen hit defvalue terug
        for i_state, i_waarde in pairs(waardebereik) do 
            if i_state == dev_state then 
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON setting aangepast met ingestelde waarde: ' .. tostring(i_waarde),30)
                return i_waarde 
            end
        end
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON setting bestaat niet ! Aangepast met defaultwaarde: ' .. tostring(defvalue),30)
        return defvalue
    end
    
    local function activeer_setting()  -- settings zetten
        os.execute (denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , SourceToSet_volume));             -- Denon volume

        vartmp = denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , SourceToSet_volume);
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON: ' .. vartmp,10)

        os.execute (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. get_waarde(denon_source.state,source_states , SourceToSet_source));        -- Denon wordt op source gezet
        os.execute (denon_cmd_2 .. 'PutTunerFrequency%2F' .. get_waarde(denon_radio.state,radio_states , SourceToSet_freq));                -- Denon radio zender wordt gezet
        os.execute (denon_cmd_1 .. 'PutSurroundMode%2F' .. get_waarde(denon_mixer.state,mixer_states , SourceToSet_mixer) );                -- Denon mixer wordt gezet

        dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN) is ingesteld met volume(' .. string.upper(denon_volume.state) .. '), Source(' .. string.upper(denon_source.state) .. '), Zender(' .. string.upper(denon_radio.state) .. '), Mixer(' .. string.upper(denon_mixer.state) .. ')' ,30)
    end

    if item.isDevice then
        if  item.name == 'denon_volume' then 
           if item.nValue == 0 then                                        -- numerieke waarde van de state van denon_volume (0=off, 1 = on)
                dz.data.lastVolumeState = 'Off'
                os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FOFF' );         -- zet denon uit
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',' DENON(UIT), denon is uitgezet',30)
            else                                                            -- denon_volume staat aan
                if dz.data.lastVolumeState == 'Off' then                    -- als vorige waarde off was
                    dz.data.lastVolumeState = item.levelName                -- vorige_state wordt op aan gezet!
                    os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FON' )       -- zet denon aan, check de previous waarde als die uit was dan aanzetten anders niet, dan alleen setings doorvoeren !

                vartmp2 = denon_cmd_1 .. 'PutZone_OnOff%2FON';
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON: ' .. vartmp2,30)


                    dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN), denon is voor ze zekerheid aangezet',30)
                    dz.emitEvent(scriptVar).afterSec(5)
                else                                                        -- vorige waarde was een volume waarde, dus stond al aan!
                    dz.emitEvent(scriptVar)
                end
            end
        else
            if dz.devices('denon_volume').state == 'uit' then 
                denon_volume.switchSelector('medium').silent()              -- LET OP! als de denon uit staat, heeft volume de waarde uit, dus zal bij waarde ophalen waarde bij uit worden gepakt. De selector moet dan ook op bijpassende waarde worden gezet en dat is medium
                os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FON' );          -- zet denon aan

                vartmp3 = denon_cmd_1 .. 'PutZone_OnOff%2FON';
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON: ' .. vartmp3,30)


                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN), denon is aangezet door een ander denon onderdeel',30)
                dz.emitEvent(scriptVar).afterSec(5)               
            else
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN), denon stond al aan',30)   -- overtollig, dus op 0 gezet
                dz.emitEvent(scriptVar)                                     -- mag gelijk worden uitgevoerd, staat al aan               
            end
        end
    elseif item.isCustomEvent then
        activeer_setting() 
    end
    dz.helpers.globalMessage2(dz,item,info,messageTable,'chg')              -- dump
end
}

Re: dzvents docker and script

Posted: Friday 28 May 2021 15:29
by waaren
pvklink wrote: Friday 28 May 2021 14:16 All seems to work ok, except one script (for now). MY denon script works for years but after docker it, it wont work and no error with a line!
Any one a suggestion, i only send a curl to my denon...
os.execute does not return anything so you cannot know if the curl command was found and if so if it was executed without issues.
If possible better to change this to dz.openURL with a callback or to executeShellCommand (also with a callback) in both cases you will see more to work with.

Re: dzvents docker and script

Posted: Friday 28 May 2021 16:20
by pvklink
ahhhhhhhh.... I remembered i wise lesson (from you) to eliminate the script by pelling it off... So i did in the wrong order and after two hours (1 minute a agoo i came to the conclusion: that execute dos not work with docker...

:-)

thanks waaren, i wil test the other option! :-)

Code: Select all

return {
	on =    {
            devices = {'testxx' },
            },

    execute = function(dz, item,info)

    var1 = 'curl http://192.168.20.26/MainZone/index.put.asp?cmd0=PutZone_OnOff%2FON'
    var2 = 'curl http://192.168.20.26/MainZone/index.put.asp?cmd0=PutZone_OnOff%2FOFF'

        os.execute (var2);          -- zet denon aan

end
}

Re: dzvents docker and script

Posted: Friday 28 May 2021 23:40
by pvklink
The openURL part works Great!
I like to pass a command from within a docker to the host, i testen the below command from $ and that works.
Now i want this os command to exec from within dzvents.
Is this the way to go ? i have my doubts on the mycommand part
this part works on the $ sshpass -f <(printf '%s\n' 2286MA11@) ssh [email protected] "sudo docker stop nodered"

Code: Select all

function call_exec(mycmd)
            dz.executeShellCommand(
                                    {
                                    command = mycmd,
                                    callback = scriptVar,
                                    timeout = 120           -- in seconds
                                    })
    end
mycommand = "sshpass -f <(printf '%s\n' xxxx@) ssh [email protected] 'sudo docker stop nodered')"
call_exec(mycommand)

Re: dzvents docker and script

Posted: Sunday 30 May 2021 11:36
by pvklink
@solved by moving the actual command to a script an call the script...

Re: dzvents docker and script

Posted: Sunday 30 May 2021 17:39
by pvklink
My denon script works with the new commands within docker but gives an error without line number.
2021-05-30 17:54:05.209 Status: dzVents: Info: ------ Finished DZ_denon
2021-05-30 17:54:05.244 Error: Error opening url: http://192.168.20.26/MainZone/index.put ... tion/TUNER
2021-05-30 17:54:05.258 Error: Error opening url: http://192.168.20.26/MainZone/index.put ... MCH+STEREO
2021-05-30 17:54:05.264 Error: Error opening url: http://192.168.20.26/MainZone/index.put ... umeSet/-70

It happens when the function activeer_setting() executes and kicks some urls...
I can cut and paste the urls in my browser and they work.
The procedure i followed: (denon was already on)
- put my volume harder (denon_volume)

Code: Select all

-- docker ondersteunt geen os.execute, 
-- gebruik dz.openURL 
-- HAAL OOK DE ; weg achter de procedure zoals van oorsprong wel bij os.execute wordt gebruikt

-- fouten bij functie activeer settings, maar lijkt allemaal toch goed te gaan, kan alle vanaf http gewoon in de browser kloppen en dan werkt t, de callback werkt dan blijkbaar niet goed om de fout te zien
-- 2021-05-30 17:09:11.181 Error: Error opening url: http://192.168.20.26/MainZone/index.put.asp?cmd0=PutZone_InputFunction/TUNER
-- 2021-05-30 17:09:11.186 Error: Error opening url: http://192.168.20.26/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/-60
-- 2021-05-30 17:09:11.192 Error: Error opening url: http://192.168.20.26/MainZone/index.put.asp?cmd0=PutSurroundMode/MCH+STEREO

local scriptVar = 'DenonCustomEvents'
local scriptVar2 = 'DenonhttpEvents'
return {
	on =    {
            devices = {'denon*' },
            customEvents = {scriptVar},
            httpResponses = {scriptVar2},
            },
            data = {lastVolumeState = {initial = '',},},
    logging = { level = domoticz.LOG_DEBUG },

    execute = function(dz, item,info)
    --_G.logLevel = dz.helpers.get_logtype(dz)    -- dz.log('debug test',dz.LOG_DEBUG) this will only make it to the log when LOG_DEBUG is set  AND dz.log('blabla',dz.LOG_FORCE) -- this will allways make it tp the log
    --_G.logMarker = _G.moduleLabel               -- marker wordt scriptnaam, _G.logMarker = info.scriptName is idem
    local messageTable = {}                     -- log alles, 0 = niets, 1 dom, 2 global, 3 alles... evt per regel ook in te regelen
    -- HIER START DE EXECUTIE

    local ipdenon       = '192.168.20.26'

--    local denon_cmd_1   = 'curl http://' .. ipdenon .. '/MainZone/index.put.asp?cmd0='      -- basiscommando1
--    local denon_cmd_2   = 'curl http://' .. ipdenon .. '/Tuner/TUNER/index.put.asp?cmd0='   -- basiscommando2
    local denon_cmd_1   = 'http://' .. ipdenon .. '/MainZone/index.put.asp?cmd0='      -- basiscommando1
    local denon_cmd_2   = 'http://' .. ipdenon .. '/Tuner/TUNER/index.put.asp?cmd0='   -- basiscommando2

    local denon_volume  = dz.devices('denon_volume')
    local denon_source  = dz.devices('denon_source')
    local denon_radio   = dz.devices('denon_radio')
    local denon_mixer   = dz.devices('denon_mixer')

    local SourceToSet_volume= -50       -- volume, zie ook LET OP!
    local SourceToSet_source= 'TUNER'   -- source receiver
    local SourceToSet_freq  = '009540'  -- frequency
    local SourceToSet_mixer = 'STEREO'  -- mixer
    
    --local sign          = '+'   -- als je geen + in een var kan opnemen --' .. sign  ..'  DIT LIJKT INEENS NIET MEER NODIG ?
    local volume_states =   { uit=SourceToSet_volume, fluister = SourceToSet_volume-20, zacht = SourceToSet_volume-10, medium = SourceToSet_volume, hard = SourceToSet_volume+10, extra = SourceToSet_volume+20,}
    local source_states =   { Radio = 'TUNER', Tv = 'SAT/CBL', Sonos = 'CD', Kodi = 'MPLAY', Pc = 'GAME', Cast = 'BD'}
    local radio_states  =   { Skyradio = '010440',Qmusic = '009540', Veronica = '009490', ['538'] = '010500',West = '008890' }
    local mixer_states  =   { movie = 'MOVIE', stereo = 'STEREO', ['mch stereo'] = 'MCH+STEREO', ['dolby digital'] = 'DOLBY+DIGITAL', music = 'MUSIC', game = 'GAME', ['pure direct'] = 'PURE+DIRECT', 
                            direct = 'DIRECT', standaard = 'STANDARD', simulation = 'SIMULATION', auto = 'AUTO', left='LEFT', ['video game'] = 'VIDEO+GAME',['rock arena'] = 'ROCK+ARENA' }

    local function call_url(myurl)
        dz.openURL({
        url = myurl,
        method = 'GET',
        callback = scriptVar2
        })
    end

    local function get_waarde(dev_state, waardebereik, defvalue )  -- haal waarde op voor een dev_state, doorzoek een waardebereik en geef bij geen hit defvalue terug
        for i_state, i_waarde in pairs(waardebereik) do 
            if i_state == dev_state then 
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON setting aangepast met ingestelde waarde: ' .. tostring(i_waarde),30)
                return i_waarde 
            end
        end
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON setting bestaat niet ! Aangepast met defaultwaarde: ' .. tostring(defvalue),30)
        return defvalue
    end
    
    local function activeer_setting()  -- settings zetten nu de dz.openURL functie gebruikt en %2F vervangen door / anders werk DZopenURL niet
        call_url (denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , SourceToSet_volume))              -- Denon volume
        call_url (denon_cmd_1 .. 'PutZone_InputFunction/' .. get_waarde(denon_source.state,source_states , SourceToSet_source))           -- Denon wordt op source gezet
        call_url (denon_cmd_2 .. 'PutTunerFrequency/' .. get_waarde(denon_radio.state,radio_states , SourceToSet_freq))                   -- Denon radio zender wordt gezet
        call_url (denon_cmd_1 .. 'PutSurroundMode/' .. get_waarde(denon_mixer.state,mixer_states , SourceToSet_mixer))                    -- Denon mixer wordt gezet

        -- nieuwe opzet docker, met oude waarden, dus ook %2F die volges mij niet werken in dzopenURL
        --call_url (denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , SourceToSet_volume))                -- Denon volume
        --call_url (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. get_waarde(denon_source.state,source_states , SourceToSet_source))           -- Denon wordt op source gezet
        --call_url (denon_cmd_2 .. 'PutTunerFrequency%2F' .. get_waarde(denon_radio.state,radio_states , SourceToSet_freq))                   -- Denon radio zender wordt gezet
        --call_url (denon_cmd_1 .. 'PutSurroundMode%2F' .. get_waarde(denon_mixer.state,mixer_states , SourceToSet_mixer))                    -- Denon mixer wordt gezet

        -- oude waarde zonder docker, dit werkte met os.execute
        --os.execute (denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , SourceToSet_volume));             -- Denon volume
        --os.execute (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. get_waarde(denon_source.state,source_states , SourceToSet_source));  -- Denon wordt op source gezet
        --os.execute (denon_cmd_2 .. 'PutTunerFrequency%2F' .. get_waarde(denon_radio.state,radio_states , SourceToSet_freq));        -- Denon radio zender wordt gezet
        --os.execute (denon_cmd_1 .. 'PutSurroundMode%2F' .. get_waarde(denon_mixer.state,mixer_states , SourceToSet_mixer) );         -- Denon mixer wordt gezet

        dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN) is ingesteld met volume(' .. string.upper(denon_volume.state) .. '), Source(' .. string.upper(denon_source.state) .. '), Zender(' .. string.upper(denon_radio.state) .. '), Mixer(' .. string.upper(denon_mixer.state) .. ')' ,30)
    end

    if item.isDevice then
        if  item.name == 'denon_volume' then 
           if item.nValue == 0 then                                        -- numerieke waarde van de state van denon_volume (0=off, 1 = on)
                dz.data.lastVolumeState = 'Off'
                
                call_url (denon_cmd_1 .. 'PutZone_OnOff/OFF' )
                --call_url (denon_cmd_1 .. 'PutZone_OnOff%2FOFF' )
                --os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FOFF' );         -- zet denon uit
                
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',' DENON(UIT), denon is uitgezet',30)
            else                                                            -- denon_volume staat aan
                if dz.data.lastVolumeState == 'Off' then                    -- als vorige waarde off was
                    dz.data.lastVolumeState = item.levelName                -- vorige_state wordt op aan gezet!

                    call_url (denon_cmd_1 .. 'PutZone_OnOff/ON' )
                    --call_url (denon_cmd_1 .. 'PutZone_OnOff%2FON' )
                    --os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FON' )       -- zet denon aan, check de previous waarde als die uit was dan aanzetten anders niet, dan alleen setings doorvoeren !

                    dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN), denon is voor ze zekerheid aangezet',30)
                    dz.emitEvent(scriptVar).afterSec(5)
                else                                                        -- vorige waarde was een volume waarde, dus stond al aan! en wordt dus van volume waarde veranderd
                    --pvkactie= denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , SourceToSet_volume)
                    --call_url (pvkactie)              -- Denon volume
                    dz.emitEvent(scriptVar)
                end
            end
        else
            if dz.devices('denon_volume').state == 'uit' then 
                denon_volume.switchSelector('medium').silent()              -- LET OP! als de denon uit staat, heeft volume de waarde uit, dus zal bij waarde ophalen waarde bij uit worden gepakt. De selector moet dan ook op bijpassende waarde worden gezet en dat is medium

                call_url (denon_cmd_1 .. 'PutZone_OnOff/ON' )
                --call_url (denon_cmd_1 .. 'PutZone_OnOff%2FON' )
                --os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FON' );          -- zet denon aan

                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN), denon is aangezet door een ander denon onderdeel',30)
                dz.emitEvent(scriptVar).afterSec(5)               
            else
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add',  ' DENON(AAN), denon stond al aan',30)   -- overtollig, dus op 0 gezet
                dz.emitEvent(scriptVar)                                     -- mag gelijk worden uitgevoerd, staat al aan               
            end
        end
    elseif item.isCustomEvent then
        activeer_setting() 
    elseif item.isShellCommandResponse then
        if item.ok then
            dz.log('xxxx successfully send', dz.LOG_DEBUG)
        else
            dz.log('No valid response from xxx command: ' .. item.statusCode, dz.LOG_ERROR)
            dz.log(item, dz.LOG_DEBUG)
        end
    elseif (item.isHTTPResponse) then
        if (item.ok) then
            dz.log('xxxx successfully send', dz.LOG_DEBUG)
            --  local current = item.json.consumption
            --  dz.devices('myCurrentUsage').updateEnergy(current)
        else
            dz.log('No valid response from xxx command: ' .. item.statusCode, dz.LOG_ERROR)
            dz.log(item, dz.LOG_DEBUG)
        end
    end
    dz.helpers.globalMessage2(dz,item,info,messageTable,'chg')              -- dump
end
}

Re: dzvents docker and script

Posted: Sunday 30 May 2021 18:29
by pvklink
I have an easier script with the same problem, an error and the script works within docker

2021-05-30 18:26:28.493 Status: dzVents: Info: ------ Finished DZ_service_clear_log
2021-05-30 18:26:28.299 Error: Error opening url: http://192.168.20.48:82/json.htm?idx=14 ... arlightlog
2021-05-30 18:26:28.474 Error: dzVents: Error: (3.1.8) HTTP/1.1 response: 401 ==>> Unauthorized

All the files of my data are unprotected, so that coukd be the problem..
Has to do something with docker and domoticz

Code: Select all

local scriptVar = 'cleartextCustomEvents'

return {
    on = {
            devices = {'clear_log'},
            customEvents = {scriptVar},
            httpResponses = { 'clean_response' },
        },
    
    execute = function(dz, item,info)
    _G.logLevel = dz.helpers.get_logtype(dz)    -- dz.log('debug test',dz.LOG_DEBUG) this will only make it to the log when LOG_DEBUG is set  AND dz.log('blabla',dz.LOG_FORCE) -- this will allways make it tp the log
    _G.logMarker = _G.moduleLabel
    local messageTable = {}                         -- log alles, 0 = niets, 1 dom, 2 global, 3 alles... evt per regel ook in te regelen

    function clean_hist()
        -- er is een url om de historie te schonen
        dz.openURL({
        url = 'http://192.168.20.48:82/json.htm?idx=1472&type=command&param=clearlightlog',
        method = 'GET',
        callback = 'clean_response'})
    end

    if (item.isDevice and item.state == 'On') or (item.isCustomEvent) then
        -- zie de del optie hieronder, dit schoont alleen de actuele / laatste msg, niet de historie
        dz.helpers.globalMessage2(dz,item,info,messageTable,'del',dz.time.rawDate .. '  ' .. dz.time.rawTime .. ' :' .. ' TIMERLOG CLEAR: log wordt geschoond...' .. '<br>',30) -- delete
        clean_hist()
        dz.devices('clear_log').switchOff().silent().afterSec(1)    --device weer in de off stand zetten zonder script uit te voeren
   
    elseif (item.isHTTPResponse) then
        if (item.ok) then
            --  local current = item.json.consumption
            --  dz.devices('myCurrentUsage').updateEnergy(current)
        end
    end

end
}

Re: dzvents docker and script

Posted: Sunday 30 May 2021 20:32
by waaren
pvklink wrote: Sunday 30 May 2021 17:39 -- docker ondersteunt geen os.execute,
I doubt if that is the right conclusion. os.execute is generic Lua code
I suspect that curl cannot be found from within docker and that's more likely the reason why that part fails.

Re: dzvents docker and script  [Solved]

Posted: Sunday 30 May 2021 20:37
by waaren
pvklink wrote: Sunday 30 May 2021 18:29 I have an easier script with the same problem, an error and the script works within docker
Did you follow below

Also make sure that in the Security section in the settings (Setup > Settings > System > Local Networks (no username/password) you allow 127.0.0.1 (and / or ::1 when using IPv6 ) to not need a password. dzVents does use this port to get the location settings and to send certain commands to Domoticz.

Re: dzvents docker and script

Posted: Sunday 30 May 2021 21:53
by pvklink
I just installed curl (was already there) and still get

2021-05-30 21:51:43.730 Status: dzVents: Info: ------ Start internal script: DZ_service_clear_log: HTTPResponse: "clean_response"
2021-05-30 21:51:43.749 Status: dzVents: Info: ------ Finished DZ_service_clear_log
2021-05-30 21:51:43.508 Error: Error opening url: http://192.168.20.48:82/json.htm?idx=14 ... arlightlog
2021-05-30 21:51:43.731 Error: dzVents: Error: (3.1.8) HTTP/1.1 response: 401 ==>> Unauthorized

When i go to the device via the domoticz ux and clean the log is does work ,
and when using the browser and
http://192.168.20.48:82/json.htm?idx=14 ... arlightlog it works

Butbelow dzvents script it wont work and gives an error

Code: Select all

local scriptVar = 'cleartextCustomEvents'

return {
    on = {
            devices = {'clear_log'},
            customEvents = {scriptVar},
            httpResponses = { 'clean_response' },
        },
    
    execute = function(dz, item,info)
    _G.logLevel = dz.helpers.get_logtype(dz)    -- dz.log('debug test',dz.LOG_DEBUG) this will only make it to the log when LOG_DEBUG is set  AND dz.log('blabla',dz.LOG_FORCE) -- this will allways make it tp the log
    _G.logMarker = _G.moduleLabel
    local messageTable = {}                         -- log alles, 0 = niets, 1 dom, 2 global, 3 alles... evt per regel ook in te regelen

    function clean_hist()
        -- er is een url om de historie te schonen
        dz.openURL({
        url = 'http://192.168.20.48:82/json.htm?idx=1472&type=command&param=clearlightlog',
        method = 'GET',
        callback = 'clean_response'})
    end

    if (item.isDevice and item.state == 'On') or (item.isCustomEvent) then
        -- zie de del optie hieronder, dit schoont alleen de actuele / laatste msg, niet de historie
        dz.helpers.globalMessage2(dz,item,info,messageTable,'del',dz.time.rawDate .. '  ' .. dz.time.rawTime .. ' :' .. ' TIMERLOG CLEAR: log wordt geschoond...' .. '<br>',30) -- delete
        clean_hist()
        dz.devices('clear_log').switchOff().silent().afterSec(1)    --device weer in de off stand zetten zonder script uit te voeren
   
    elseif (item.isHTTPResponse) then
        if (item.ok) then
            --  local current = item.json.consumption
            --  dz.devices('myCurrentUsage').updateEnergy(current)
        end
    end

end
}
These are my settings of domoticz in the container: (local and all my vlans are there)
127.0.0.1;192.168.1.*;192.168.10.*;192.168.20.*;192.168.30.*;192.168.70.1

But the default docker domoticz/docker uses a bridge mode i think, does that change anything ?

This is my domoticz compose part

Code: Select all

version: '3.6'

[code]
services:
  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto
    restart: unless-stopped
    user: "1000"
    ports:
    - "1883:1883"
    volumes:
    - "/home/pi/pvkmenu/IOTstack/volumes/mosquitto/data:/mosquitto/data"
    - "/home/pi/pvkmenu/IOTstack/volumes/mosquitto/log:/mosquitto/log"
    - "/home/pi/pvkmenu/IOTstack/volumes/mosquitto/pwfile:/mosquitto/pwfile"
    - "/home/pi/pvkmenu/IOTstack/volumes/mosquitto/config:/mosquitto/config:ro"
    network_mode: bridge
  domoticz:
    container_name: domoticz
    #build: /home/pi/pvkmenu/IOTstack/services/domoticz/.
    image: domoticz/domoticz:latest
    ports:
    - "82:8080"
    - "444:443"
    devices:
    - '/dev/ttyUSB0:/dev/ttyUSB0'
    - '/dev/ttyACM0:/dev/ttyACM0'
    - '/dev/ttyUSB1:/dev/ttyUSB1'
    volumes:
    - "/home/pi/pvkmenu/IOTstack/volumes/domoticz/data:/opt/domoticz/userdata"
    restart: unless-stopped
    network_mode: bridge
    environment:
    - PUID=1000
    - PGID=1000
    - LOG_PATH=/opt/domoticz/userdata/domoticz.log
  dashticz:
    container_name: dashticz
    build: /home/pi/pvkmenu/IOTstack/services/dashticz/.
    #context: .   
    restart: always
    ports:
      - "80:80"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - type: bind
        source: /home/pi/pvkmenu/IOTstack/volumes/dashticz/
        target: /var/www/html/


my dockerfile (need small add-on to the original docker mage because of the need to start and stop other dockers within the domoticz docker. I use sshpass for that. I start and stop a motion docker when security is off..

Code: Select all

FROM domoticz/domoticz:latest
USER root

RUN apt-get update -y -q
RUN apt-get install apt-utils -y -q
RUN apt-get install sshpass -y -q


Re: dzvents docker and script

Posted: Monday 31 May 2021 7:25
by pvklink
It is solved, with a perfect hint from @waaren
Had to do with the ip-range in domoticz setup.
The docker uses bridging and another ip-range, 172.17.0.*
adding this range solved it!