Notification script  [Solved]

Easy to use, 100% Lua-based event scripting framework.

Moderator: leecollings

Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Notification script

Post by Larsoss »

Hey,

I have another question about scripting. I have a number of dummy switches that I have sent a notification. now it is so that a script is running that switches my lamp. which causes me to get a notification quite often.

now I thought it might be possible to make 1 dzvents script in which I put all my idx of my switches of which I want a notification and if it changes status on / off then a notification via the script comes via telegram.

and maybe even adjust the notification.

so at idx 15 is my living room lamp and when it comes on the notification comes "lamp on" and when my dummy "ping television" comes on the notification "the tv is on" comes on.

who can help me in the right direction?
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
Tjalling94
Posts: 4
Joined: Sunday 25 August 2019 14:54
Target OS: -
Domoticz version:
Contact:

Re: Notification script

Post by Tjalling94 »

You can also check the current state of your light.

Code: Select all

if domoticz.devices('lamp').state == 'Off' then
   domoticz.devices('lamp').switchOn();
end
That's enough to prevent duplicate notifications
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

Ok. But still want to make a script with the notifications :)
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
kimot
Posts: 104
Joined: Saturday 25 November 2017 17:18
Target OS: Raspberry Pi / ODroid
Domoticz version: v3.8153
Location: Czech Rep.
Contact:

Re: Notification script

Post by kimot »

And why script for this "switch custom message", when you can write notification directly in switch notification tab?


2020-09-22-224730_1920x1080_scrot.png
2020-09-22-224730_1920x1080_scrot.png (154.28 KiB) Viewed 2749 times
RPi2 Domoticz v 4.10717
10 x Sonoff Basic - ESPeasy
1 x Wemos D1 - ESPeasy
1 x Shelly Plus Plug S
1 x Sonoff S26 - ESPeasy
1 x Shelly 1
1 x MySensors HC-SR04
1 x MySenosrs wifi gateway
1 x RFLink
4x Cam IPC-T240H
HvdW
Posts: 504
Joined: Sunday 01 November 2015 22:45
Target OS: Raspberry Pi / ODroid
Domoticz version: 2023.2
Location: Twente
Contact:

Re: Notification script

Post by HvdW »

Did you have a look at the 'System-alive-check' script which you can find here to see howto set it up in your own script?
Bugs bug me.
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

kimot wrote: Tuesday 22 September 2020 22:50 And why script for this "switch custom message", when you can write notification directly in switch notification tab?



2020-09-22-224730_1920x1080_scrot.png
because i get to many notifications, even when there is nothing change's... it still sending me the same notification.
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Larsoss wrote: Tuesday 22 September 2020 23:26 because i get to many notifications, even when there is nothing change's... it still sending me the same notification.
Could look like below

Code: Select all

--[[

        script to send adjustable notifications
        Enter text in description field like below 2 lines
        Text within {} can be changed. device_name and device_id will be substituted by script

        active:{device device_name has been switched on}
        idle:{device device_id has been switched off}

]]--

return 
{
    on = 
    {
        devices = 
        {
            551, 552, 553, -- All devices you want to check
        },
    },

    logging = 
    {
        level = domoticz.LOG_DEBUG,
        marker = 'notifyer',
    },

    data = 
    {
        devices = 
        {
            initial = {},
        },
    },

    execute = function(dz, item)

        local function substitute(str)
            replacingText =
            {
                ['device_id']  = item.id,
                ['device_name']  = item.name,
            }

            for key, substitution in pairs(replacingText) do
               str = str:gsub(key, substitution) 
            end
           return str 
        end 

        local function procesDescription(state)
            local _, _, msg = string.find(item.description,state .. ":(%b{})") -- get text between {}
            if msg then
                msg = msg:match("[^{].*[^}]") -- remove {}
                msg = substitute(msg)
                dz.log('procesDescription: ' .. msg, dz.LOG_DEBUG)
            else
                dz.log('procesDescription: Text not found in description', dz.LOG_DEBUG)
            end
            return msg
        end

        local function procesNotification( state )
            if dz.data.devices[item.id] ~= state then
                dz.data.devices[item.id] = state
                return procesDescription(state)
            else
                dz.log('procesNotification: State did not change', dz.LOG_DEBUG)
            end
        end

        --main
        local msg = procesNotification(item.active and 'active' or 'idle') 
        if msg then
            dz.log(msg, dz.LOG_DEBUG)  
            dz.notify('notifyer',msg, dz.PRIORITY_NORMAL,nil,nil,dz.NSS_TELEGRAM)
        end
    end
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

Almost Waaren, still no meassage to telegram.. but you get the point of what i was searching for.
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Larsoss wrote: Wednesday 23 September 2020 0:09 Almost Waaren, still no meassage to telegram.. but you get the point of what i was searching for.
I tested the script before posting and it works for me. Did you add the required text in the description field for the devices at hand?
Do you see any messages in the log?
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

waaren wrote: Wednesday 23 September 2020 0:44
Larsoss wrote: Wednesday 23 September 2020 0:09 Almost Waaren, still no meassage to telegram.. but you get the point of what i was searching for.
I tested the script before posting and it works for me. Did you add the required text in the description field for the devices at hand?
Do you see any messages in the log?
no error in log

Code: Select all

2020-09-23 00:47:00.567 Status: EventSystem: Script event triggered: /home/pi/domoticz/dzVents/runtime/dzVents.lua
2020-09-23 00:47:18.536 (MQTT Discovery) onCommand 004/Spots Overkapping: Command: 'Off', Level: 0, Color:
2020-09-23 00:47:18.537 (MQTT Discovery) MqttClient::Publish cmnd/spots_overkapping/POWER (OFF)
2020-09-23 00:47:18.590 (MQTT Discovery) 004/Spots Overkapping: Topic: 'tele/spots_overkapping/STATE 'Setting nValue: 1->0, sValue: ''->''
2020-09-23 00:47:18.526 Status: User: Admin initiated a switch command (147/Spots Overkapping/Off)
2020-09-23 00:47:18.732 Status: dzVents: Info: Handling events for: "Spots Overkapping", value: "Off"
2020-09-23 00:47:18.733 Status: dzVents: Info: notifyer: ------ Start internal script: Notificatie Script: Device: "Spots Overkapping (MQTT Discovery)", Index: 147
2020-09-23 00:47:18.733 Status: dzVents: Info: notifyer: ------ Finished Notificatie Script

Code: Select all

--[[

        script to send adjustable notifications
        Enter text in description field like below 2 lines
        Text within {} can be changed. device_name and device_id will be substituted by script

        active:{device device_name has been switched on}
        idle:{device device_id has been switched off}

]]--

return 
{
    on = 
    {
        devices = 
        {
            41, 42, 123, 124, 146, 147, 150, 151, 157 -- All devices you want to check
        },
    },

    logging = 
    {
        level = domoticz.LOG_DEBUG,
        marker = 'notifyer',
    },

    data = 
    {
        devices = 
        {
            initial = {},
        },
    },

    execute = function(dz, item)

        local function substitute(str)
            replacingText =
            {
                ['device_id']  = item.id,
                ['device_name']  = item.name,
            }

            for key, substitution in pairs(replacingText) do
               str = str:gsub(key, substitution) 
            end
           return str 
        end 

        local function procesDescription(state)
            local _, _, msg = string.find(item.description,state .. ":(%b{dummy is veranderd naar})") -- get text between {}
            if msg then
                msg = msg:match("[^].*[^]") -- remove {}
                msg = substitute(msg)
            end
            return msg
        end

        local function procesNotification( state )
            if dz.data.devices[item.id] ~= state then
                dz.data.devices[item.id] = state
                return procesDescription(state)
            end
        end

        --main
        local msg = procesNotification(item.active and 'active' or 'idle') 
        if msg then
            dz.log(msg)  
            dz.notify('notifyer', msg, dz.PRIORITY_HIGH, nil, nil, dz.NSS_TELEGRAM)
        end
    end
}
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Larsoss wrote: Wednesday 23 September 2020 0:47 no error in log
I added some extra log statements in my original posted code. Please use this updated one and check the log. It might help to find why it is not working for you.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

I really don't understand sorry .. and I also understand that you don't want to deliver everything in ready-made solutions .. but I really don't see what I'm forgetting .. I've tried to put text in everything, but stay now you get the message Text not found in description 'in the log.
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Larsoss wrote: Wednesday 23 September 2020 11:44 I really don't understand sorry .. and I also understand that you don't want to deliver everything in ready-made solutions .. but I really don't see what I'm forgetting .. I've tried to put text in everything, but stay now you get the message Text not found in description 'in the log.
Did you enter the exact text in the description field of the device like below? (Click on the edit button of the device in the switches tab to get to this screen)
description.png
description.png (51.53 KiB) Viewed 2628 times
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script  [Solved]

Post by Larsoss »

waaren wrote: Wednesday 23 September 2020 12:03
Larsoss wrote: Wednesday 23 September 2020 11:44 I really don't understand sorry .. and I also understand that you don't want to deliver everything in ready-made solutions .. but I really don't see what I'm forgetting .. I've tried to put text in everything, but stay now you get the message Text not found in description 'in the log.
Did you enter the exact text in the description field of the device like below? (Click on the edit button of the device in the switches tab to get to this screen)

description.png
No i did not, now i have done it. and the telegram arive's.. thank you very much.
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

Hey Waaren,

I have a new dummy with the seasons, it contains 4 selector switches that are triggered to the time of the year.

Now it is Autumn, for example. This works with the% value of 10,20,30,40.

Can I also process it in this script? So if a new season starts (winter for example) that there will also be a message about it?
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Larsoss wrote: Tuesday 13 October 2020 13:06 Can I also process it in this script? So if a new season starts (winter for example) that there will also be a message about it?
Script needs some modification (see below) but yes.

Code: Select all

--[[
        script to send notifications of selector type switches
]]--

return 
{
    on = 
    {
        devices = 
        {
            668,  -- All devices you want to check
        },
    },

    logging = 
    {
        level = domoticz.LOG_DEBUG,
        marker = 'selector notifyer',
    },

    data = 
    {
        devices = 
        {
            initial = {},
        },
    },

    execute = function(dz, item)
        
        local function procesNotification( label )
            if dz.data.devices[item.id] ~= label then
                dz.data.devices[item.id] = label
                return label
            else
                dz.log('procesNotification: Label did not change', dz.LOG_DEBUG)
            end
        end

        --main
        local msg = procesNotification(item.levelName) 
        if msg then
            dz.log(msg, dz.LOG_DEBUG)  
            dz.notify('notifyer','Selector ' .. item.name .. ' switched to ' .. msg, dz.PRIORITY_NORMAL,nil,nil,dz.NSS_TELEGRAM)
        end
    end
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Larsoss wrote: Tuesday 13 October 2020 13:06 Can I also process it in this script? So if a new season starts (winter for example) that there will also be a message about it?
But why not combine these functionalities into one script. (after restoring level 0 "Off")

Code: Select all

--[[
        script to set selector switch to season and
        send notifications of levelNames of selector type switches
]]--

local time = '08:30'

local spring = '21/03'
local summer = '21/06'
local autumn = '21/09'
local winter = '21/12'

local seasonDevice = 668

return 
{
    on = 
    {
        timer = 
        {
            'at ' .. time .. ' on ' .. spring,
            'at ' .. time .. ' on ' .. summer,
            'at ' .. time .. ' on ' .. autumn,
            'at ' .. time .. ' on ' .. winter,
        },
        
        devices = 
        {
            seasonDevice,  -- You can add other selector type devices you want to check
        },
    },

    logging = 
    {
        level = domoticz.LOG_DEBUG,
        marker = 'Season selector notifyer',
    },

    data = 
    {
        devices = 
        {
            initial = {},
        },
    },

    execute = function(dz, item)
        local season = dz.devices(seasonDevice)
        
        local function procesNotification( label )
            if dz.data.devices[item.id] ~= label then
                dz.data.devices[item.id] = label
                return label
            else
                dz.log('procesNotification: Label did not change', dz.LOG_DEBUG)
            end
        end

        --main
        if item.isTimer then 
            if item.trigger:find(winter) then season.switchSelector('Winter')
            elseif item.trigger:find(spring) then season.switchSelector('Spring') 
            elseif item.trigger:find(summer) then season.switchSelector('Summer')
            elseif item.trigger:find(autumn) then season.switchSelector('Autumn')
            else
                season.switchSelector('Very strange season')
            end
        else
            local msg = procesNotification(item.levelName) 
            if msg then
                dz.log(msg, dz.LOG_DEBUG)  
                dz.notify('notifyer','Selector ' .. item.name .. ' switched to ' .. msg, dz.PRIORITY_NORMAL,nil,nil,dz.NSS_TELEGRAM)
            end
        end
    end
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Larsoss
Posts: 65
Joined: Friday 18 March 2016 10:11
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: Netherlands
Contact:

Re: Notification script

Post by Larsoss »

waaren wrote: Tuesday 13 October 2020 13:59
Larsoss wrote: Tuesday 13 October 2020 13:06 Can I also process it in this script? So if a new season starts (winter for example) that there will also be a message about it?
But why not combine these functionalities into one script. (after restoring level 0 "Off")

Code: Select all

--[[
        script to set selector switch to season and
        send notifications of levelNames of selector type switches
]]--

local time = '08:30'

local spring = '21/03'
local summer = '21/06'
local autumn = '21/09'
local winter = '21/12'

local seasonDevice = 668

return 
{
    on = 
    {
        timer = 
        {
            'at ' .. time .. ' on ' .. spring,
            'at ' .. time .. ' on ' .. summer,
            'at ' .. time .. ' on ' .. autumn,
            'at ' .. time .. ' on ' .. winter,
        },
        
        devices = 
        {
            seasonDevice,  -- You can add other selector type devices you want to check
        },
    },

    logging = 
    {
        level = domoticz.LOG_DEBUG,
        marker = 'Season selector notifyer',
    },

    data = 
    {
        devices = 
        {
            initial = {},
        },
    },

    execute = function(dz, item)
        local season = dz.devices(seasonDevice)
        
        local function procesNotification( label )
            if dz.data.devices[item.id] ~= label then
                dz.data.devices[item.id] = label
                return label
            else
                dz.log('procesNotification: Label did not change', dz.LOG_DEBUG)
            end
        end

        --main
        if item.isTimer then 
            if item.trigger:find(winter) then season.switchSelector('Winter')
            elseif item.trigger:find(spring) then season.switchSelector('Spring') 
            elseif item.trigger:find(summer) then season.switchSelector('Summer')
            elseif item.trigger:find(autumn) then season.switchSelector('Autumn')
            else
                season.switchSelector('Very strange season')
            end
        else
            local msg = procesNotification(item.levelName) 
            if msg then
                dz.log(msg, dz.LOG_DEBUG)  
                dz.notify('notifyer','Selector ' .. item.name .. ' switched to ' .. msg, dz.PRIORITY_NORMAL,nil,nil,dz.NSS_TELEGRAM)
            end
        end
    end
}
Yep, this works right away. Thank you. And I haven't recovered anything.

The dummy is as above
Image
Raspberry 4 - USB boot Domoticz /|\ Raspberry 2B - Dashticz /|\ Tasmota device's /|\ Philips Hue & Yeelight
Jan Jansen
Posts: 229
Joined: Wednesday 30 April 2014 20:27
Target OS: Raspberry Pi / ODroid
Domoticz version: Stable
Location: The Netherlands
Contact:

Re: Notification script

Post by Jan Jansen »

While converting a blockly script (burglar alarm) I came across this thread. In the event of a burglary, it is relevant to know which door or window is opened. If that can be done via a notification, fantastic! This concerns specific devices under specific circumstances.

Code: Select all

return {
	on = {
		devices = {
			'Voordeur',                                         -- door contact
			'Woonkamer (voorzijde)',                            -- door contact
			'Slaapkamer (voorzijde)',                           -- door contact
			'Keukendeur',                                       -- door contact
			'Inbraak keukendeur',                               -- dummy switch (on delay)
			'Schuurdeur',                                       -- door contact
			'Inbraak schuurdeur',                               -- dummy switch (on delay)
			'Beveiliging'                                       -- dummy selector levels 'Uit', 'Thuis' and 'Afwezig'
		}
	},
	
	logging =
    {
        level = domoticz.LOG_DEBUG, 
        marker = 'inbraak',
    },
	
	execute = function(dz, item)
	    local vd = dz.devices('Voordeur')
	    local wk = dz.devices('Woonkamer (voorzijde)')
	    local slpkmrvz = dz.devices('Slaapkamer (voorzijde)')
	    local kd = dz.devices('Keukendeur')
	    local inbkd = dz.devices('Inbraak keukendeur')
	    local sd = dz.devices('Schuurdeur')
	    local inbsd = dz.devices('Inbraak Schuurdeur')
	    local bev = dz.devices('Beveiliging')
	    local asinb = dz.devices('Alarmsignaal inbraak')
	    local iva = dz.devices('Inschakelvertraging alarm')     -- dummy switch on delay
	    
		if (vd.state == 'On' or wk.state == 'On' or slpkmrvz.state == 'On' or kd.state == 'On' or sd.state == 'On') and bev.state == 'Thuis' then
		    asinb.switchOn()
		    dz.notify('Inbraak (thuis)!!','   ??  geactiveerd',dz.PRIORITY_HIGH)
		end
		if (vd.state == 'On' or wk.state == 'On' or slpkmrvz.state == 'On' or inbkd.state == 'On' or inbsd.state == 'On') and iva.state == 'On' then
		    asinb.switchOn()
		    dz.notify('Inbraak (afwezig)!!','   ??   geactiveerd',dz.PRIORITY_HIGH)
		end
		if bev.state == 'Uit' and asinb == 'On' then
		    asinb.switchOff()
		    dz.notify('Reset alarm','Alarminstallatie gereset',dz.PRIORITY_HIGH)
		end    
	end
}
In case of bev.state == 'Thuis' it only concerns the devices 'Voordeur', Woonkamer (voorzijde), Slaapkamer (voorzijde), Keukendeur and Schuurdeur
In case iva.state == 'On' it only concerns the devices 'Voordeur', Woonkamer (voorzijde), Slaapkamer (voorzijde), Inbraak keukendeur and Inbraak schuurdeur.

Thanks in advance!

Regards Jan
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Notification script

Post by waaren »

Jan Jansen wrote: Friday 23 October 2020 15:46 While converting a blockly script (burglar alarm) I came across this thread. In the event of a burglary, it is relevant to know which door or window is opened.
Can you try after changing

Code: Select all

'   ??   geactiveerd'
to

Code: Select all

item.name .. ' geactiveerd'
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 1 guest