Page 1 of 2
React on RSS feed
Posted: Friday 08 September 2017 14:16
by MatthijsD
Hello!
Does anyone know if it is possible to use switches through a RSS feed?
Situation: I want to turn on lights as soon as a RSS feed gets a post with a specifiek strain of text.
Why: I'm a firefighter and I want to turn on certain lights as soon as I get a notification on my pager. Because the pager doesn't have a way to send anything, I want Domoticz to look at an RSS feed.
Can someone help me, or maybe even tell me to look in another direction than RSS?
Re: React on RSS feed
Posted: Friday 08 September 2017 15:40
by Westcott
Python has an RSS feedreader library.
It seems to be possible in LUA as well, which makes integration easier.
How frequently would you want to check the feed?
Re: React on RSS feed
Posted: Friday 08 September 2017 16:16
by MatthijsD
Thank you for your reply!
I'm running on Synology and would like to let it check every 5 seconds, only in a given timeframe.
Re: React on RSS feed
Posted: Thursday 14 September 2017 14:00
by MatthijsD
Still unanswered and unsolved!
If anyone can help me out, that would be great

Re: React on RSS feed
Posted: Thursday 14 September 2017 14:46
by elmortero
This
LINK should help you get started.
It is simular to reading from a json table which has many examples here on the Domoticz forum.
Re: React on RSS feed
Posted: Wednesday 20 September 2017 21:37
by MatthijsD
My script skills are sadly, very rusty.
I looked at other options and got the idea to use IFTTT web, to open an JSON url for a switch as soon as there is a new post in the RSS feed.
This, now resulting in automatically turning on the lights as soon as my pager goes off. Awesome
Thanks for the tips!
Re: React on RSS feed
Posted: Monday 25 September 2017 10:25
by NathanBlissett
elmortero wrote: ↑Thursday 14 September 2017 14:46
This
LINK should help you get started.
It is simular to reading from a json table which has many examples here on the Domoticz forum.
Thanks for sharing it, elmortero!
Re: React on RSS feed
Posted: Wednesday 21 February 2018 18:11
by dverhall
Welke RSS feed gebruik je voor de meldingen?
Re: React on RSS feed
Posted: Wednesday 21 February 2018 20:27
by elmortero
dverhall wrote: ↑Wednesday 21 February 2018 18:11
Hello MatthijsD,
Can you please tell me how you fix it? I work also as a fire-fighter in Holland. Please contact me.
Ok, guys, I didn't realize it was for the P2000 stream.
This code might actually do what you need.
In it's current version it writes it's output to a text device and (as test, I do not live in Holland, I fitered on 'brand' in the URL and Amsterdam in the script. It also writes the detected CAP codes to another text sensor but you could for example have it flip a switch or start a scene on certen cap codes(you own personal or department code)
The code should be very straight forward and easy to customize to your needs.
Edit: I should mention this is dzVents (version from version 2.4 upward)
Code: Select all
return {
on = {
timer = { 'at every 3 minutes'},
httpResponses = { 'P2000' } -- matches callback string below
},
execute = function(domoticz, triggerItem)
local sensor = domoticz.devices('P2000')
local currInfo = tostring(sensor.text)
local Csensor = domoticz.devices('CapCodes')
local CcurrInfo = tostring(Csensor.text)
if (triggerItem.isTimer) then
domoticz.openURL({
url = 'https://p2000.phlux.eu/v1/event?query=Brand&limit=1',
method = 'GET',
callback = 'P2000'
})
--print('P2000 triggered by timer')
elseif (triggerItem.isHTTPResponse) then
local response = triggerItem
if not response.isJSON then print('data is not jSon') end
if (response.ok and response.isJSON) then
--print('P2000 triggered by callback')
tl = #response.json.events
tc = 1
repeat
local bericht = tostring(response.json.events[tc].title)
if bericht ~= currInfo then
if string.find((string.lower(bericht)), "amsterdam") then
-- print('bericht gevonden: '..bericht)
sensor.updateText(bericht)
print('msg : '..bericht)
CE = #response.json.events[tc].capcodes
ec = 1
repeat
local CAPs = tostring(response.json.events[tc].capcodes[CE].capcode)
if CAPs ~= CcurrInfo then
--print('Capcode = '..CAPs)
Csensor.updateText(CAPs)
end
ec = ec + 1
until ec > CE
end
end
tc = tc + 1
until tc > tl
end
else
print('**P2000 failed to fetch info')
end
end
}
Re: React on RSS feed
Posted: Wednesday 25 July 2018 9:03
by EdwinK
elmortero wrote: ↑Wednesday 21 February 2018 20:27
dverhall wrote: ↑Wednesday 21 February 2018 18:11
Hello MatthijsD,
Can you please tell me how you fix it? I work also as a fire-fighter in Holland. Please contact me.
Ok, guys, I didn't realize it was for the P2000 stream.
This code might actually do what you need.
In it's current version it writes it's output to a text device and (as test, I do not live in Holland, I fitered on 'brand' in the URL and Amsterdam in the script. It also writes the detected CAP codes to another text sensor but you could for example have it flip a switch or start a scene on certen cap codes(you own personal or department code)
The code should be very straight forward and easy to customize to your needs.
Edit: I should mention this is dzVents (version from version 2.4 upward)
Code removed to save space
When I go to the url mentioned in the script, I end up with a warning page from Chrome, and then a site about package and such.
Re: React on RSS feed
Posted: Wednesday 25 July 2018 12:24
by elmortero
Hi EdwinK,
It seems that that site is down.
I did a quick search and following code should also do what you want:
Code: Select all
return {
on = {
timer = { 'every minute' }, --this might be to low..
httpResponses = { 'Pdroid' } -- matches callback string below
},
execute = function(domoticz, triggerItem)
local sensor = domoticz.devices('P2000')
local currInfo = tostring(sensor.text)
local Csensor = domoticz.devices('CapCodes')
local CcurrInfo = tostring(Csensor.text)
--parameters to be set (or not, if you leave empty the results will not be filtered )
local capcode = '' --seems to work only if also regio of plaats is used
local regio = ''
--[[ 1=Amsterdam-Amstelland 6=Brabant Noord 11=Brabant Zuid-Oost 12=Drenthe 27=Flevoland 7=Friesland 8=Gelderland-Midden 13=Gelderland-Zuid 19=Gooi en Vechtstreek 2=Groningen 25=Haaglanden 5=Hollands Midden 17=IJsselland 9=Kennemerland 15=Limburg-Noord 21=Limburg-Zuid 26=Midden- en West Brabant 3=Noord- en Oost Gelderland 24=Noord-Holland Noord 10=Rotterdam-Rijnmond 23=Twente 18=Utrecht 4=Zaanstreek-Waterland 20=Zeeland
14=Zuid-Holland Zuid
--]]
local dienst = '2'
--[[1= Politie 2 = Brandweer 3 = Ambulance 4 = KNRM 5 = Lifeliner 7 = Dares
--]]
local plaats = ''
if (triggerItem.isTimer) then
domoticz.openURL({
url = 'https://www.alarmeringdroid.nl/api/livemon?dienst='..dienst..'®io='..regio..'&capcode='..capcode..'&plaats='..plaats,
method = 'GET',
callback = 'Pdroid'
})
elseif (triggerItem.isHTTPResponse) then
local response = triggerItem
if (response.ok and response.isJSON) then
tl = #response.json.items
tc = 1
repeat
local dienst = tostring(response.json.items[tc].dienst)
local regio = tostring(response.json.items[tc].regio)
local info = tostring(response.json.items[tc].brandinfo)
if info == nil then info = '-' end
local melding = tostring(response.json.items[tc].msg) --items[0].msg
local regio = tostring(response.json.items[tc].regio) --items[0].regio
local info = tostring(response.json.items[tc].brandinfo) --items[0].brandinfo
local lat = tostring(response.json.items[tc].lat)
local lon = tostring(response.json.items[tc].lon)
local grip = tonumber(response.json.items[tc].grip)
local composed = tostring(melding..' ** '..info)
if composed ~= currInfo then
sensor.updateText(composed)
print(composed)
if lon ~= nil then
local google = ('https://www.google.com/maps/search/?api=1&query='..lat..','..lon)
print(google)
end
end
tc = tl -- this is to limit the result to only one event. That should do if you set your filters correct
-- if you want more results comment the line
--end
tc = tc + 1
until tc > tl
end
else
print('**Pdroid failed to fetch info')
end
end
}
The info about filtering is in the script. If you leave the filter empty it will just be ignored in the URL. I recommend to use as much filtering as possible to make the json smaller (and thus load faster) so there is little chance of missing the alerts you want.
If you don't want the link to google maps (in this script only written to the log) remove lines 50 to 53
Re: React on RSS feed
Posted: Sunday 17 March 2019 23:11
by clut
What am I doing wrong?
I tried to run this script but it didn't work. I made the 2 dummy text sensors named "P2000" and "CapCodes" but they were not filled with text.
Below is a part of my logfile:
2019-03-17 23:07:00.231 Status: dzVents: Info: ------ Start external script: Domoticz-P2000.lua:, trigger: every minute
2019-03-17 23:07:00.268 Status: dzVents: Info: ------ Finished Domoticz-P2000.lua
2019-03-17 23:07:00.306 Status: dzVents: Info: WUS: ------ Finished updateWeatherSensors.lua
2019-03-17 23:07:01.600 Status: dzVents: Info: Handling httpResponse-events for: "Pdroid
2019-03-17 23:07:01.601 Status: dzVents: Info: ------ Start external script: Domoticz-P2000.lua: HTTPResponse: "Pdroid"
2019-03-17 23:07:01.639 Status: dzVents: Info: ------ Finished Domoticz-P2000.lua
2019-03-17 23:08:00.232 Status: dzVents: Info: ------ Start external script: Domoticz-P2000.lua:, trigger: every minute
2019-03-17 23:08:00.269 Status: dzVents: Info: ------ Finished Domoticz-P2000.lua
I don't know how to check what I am doning wrong, if I put the text string direct in a Webbrowser it works normally, like a collection of text
Thanks for help!
Re: React on RSS feed
Posted: Monday 18 March 2019 15:25
by elmortero
Hi,
Maybe post your complete code, you might have added a non working filter since you do not get errors from dzvents.
Re: React on RSS feed
Posted: Tuesday 19 March 2019 22:10
by clut
OKe, here is my code:
Code: Select all
return {
on = {
timer = { 'every minute' }, --this might be to low..
httpResponses = { 'Pdroid' } -- matches callback string below
},
execute = function(domoticz, triggerItem)
local sensor = domoticz.devices('P2000')
local currInfo = tostring(sensor.text)
local Csensor = domoticz.devices('CapCodes')
local CcurrInfo = tostring(Csensor.text)
--parameters to be set (or not, if you leave empty the results will not be filtered )
local capcode = '' --seems to work only if also regio of plaats is used
local regio = ''
--[[ 1=Amsterdam-Amstelland 6=Brabant Noord 11=Brabant Zuid-Oost 12=Drenthe 27=Flevoland 7=Friesland 8=Gelderland-Midden 13=Gelderland-Zuid 19=Gooi en Vechtstreek 2=Groningen 25=Haaglanden 5=Hollands Midden 17=IJsselland 9=Kennemerland 15=Limburg-Noord 21=Limburg-Zuid 26=Midden- en West Brabant 3=Noord- en Oost Gelderland 24=Noord-Holland Noord 10=Rotterdam-Rijnmond 23=Twente 18=Utrecht 4=Zaanstreek-Waterland 20=Zeeland
14=Zuid-Holland Zuid
--]]
local dienst = '2'
--[[1= Politie 2 = Brandweer 3 = Ambulance 4 = KNRM 5 = Lifeliner 7 = Dares
--]]
local plaats = 'Amsterdam'
if (triggerItem.isTimer) then
domoticz.openURL({
url = 'https://www.alarmeringdroid.nl/api/livemon?dienst='..dienst..'®io='..regio..'&capcode='..capcode..'&plaats='..plaats,
method = 'GET',
callback = 'Pdroid'
})
elseif (triggerItem.isHTTPResponse) then
local response = triggerItem
if (response.ok and response.isJSON) then
tl = #response.json.items
tc = 1
repeat
local dienst = tostring(response.json.items[tc].dienst)
local regio = tostring(response.json.items[tc].regio)
local info = tostring(response.json.items[tc].brandinfo)
if info == nil then info = '-' end
local melding = tostring(response.json.items[tc].msg) --items[0].msg
local regio = tostring(response.json.items[tc].regio) --items[0].regio
local info = tostring(response.json.items[tc].brandinfo) --items[0].brandinfo
local lat = tostring(response.json.items[tc].lat)
local lon = tostring(response.json.items[tc].lon)
local grip = tonumber(response.json.items[tc].grip)
local composed = tostring(melding..' ** '..info)
if composed ~= currInfo then
sensor.updateText(composed)
print(composed)
if lon ~= nil then
local google = ('https://www.google.com/maps/search/?api=1&query='..lat..','..lon)
print(google)
end
end
tc = tl -- this is to limit the result to only one event. That should do if you set your filters correct
-- if you want more results comment the line
--end
tc = tc + 1
until tc > tl
end
else
print('**Pdroid failed to fetch info')
end
end
}
The file is saved under: ~/domoticz/scripts/dzVents/scripts as "Domoticz-P2000.lua"
Thanks for help!
Re: React on RSS feed
Posted: Wednesday 20 March 2019 12:03
by elmortero
In order to check if it gets any data at all:
move line 49, the one that says print(composed) and put it before line 47 (if composed ~= currInfo then) so that the output is written to log without checking if it is different from the already stored text.
Also: change timer = { 'every minute' } to timer = { 'every 3 minutes' },
Let us know what happens in the logs
Re: React on RSS feed
Posted: Wednesday 20 March 2019 18:30
by clut
Thanks for your reply, result looks like the same... I did what you suggested
2019-03-20 18:30:00.378 Status: dzVents: Info: ------ Start external script: Domoticz-P2000.lua:, trigger: every 3 minutes
2019-03-20 18:30:00.416 Status: dzVents: Info: ------ Finished Domoticz-P2000.lua
2019-03-20 18:30:00.454 Status: dzVents: Info: WUS: ------ Finished updateWeatherSensors.lua
2019-03-20 18:30:02.620 Status: dzVents: Info: Handling httpResponse-events for: "Pdroid
2019-03-20 18:30:02.621 Status: dzVents: Info: ------ Start external script: Domoticz-P2000.lua: HTTPResponse: "Pdroid"
2019-03-20 18:30:02.672 Status: dzVents: Info: ------ Finished Domoticz-P2000.lua
And if I put the string direct into a webbrowser I do have the result below:
https://www.alarmeringdroid.nl/api/live ... =Amsterdam
Re: React on RSS feed
Posted: Monday 25 March 2019 19:28
by clut
Is there maybe another method to find out what is going on? I mean, for some reason I do not have an error, but there is nothing dropped in my sensors so what am I doing wrong?
Re: React on RSS feed
Posted: Saturday 27 July 2019 12:01
by elmortero
clut wrote: ↑Monday 25 March 2019 19:28
Is there maybe another method to find out what is going on? I mean, for some reason I do not have an error, but there is nothing dropped in my sensors so what am I doing wrong?
Hi Clut,
Sorry for the late reply. I don't use the script myself so lost track of the topic.
The issue is that alarmeringdroid does not have it's page headers correct (basically says the content is test instead of json).
I have my own way of solving that and my script relies on that.
The adapted code below checks for that and converts the data to correct json result.
Please have a try, if you still need this.
Code: Select all
return {
on = {
timer = { 'every 2 minutes' }, --this might be to low..
httpResponses = { 'Pdroid' } -- matches callback string below
},
execute = function(domoticz, triggerItem)
local sensor = domoticz.devices('P2000') -- You will need to have a text sensor called P2000
local currInfo = tostring(sensor.text) -- gets the content of above sensor (so we won't update it with same content)
-- set the next to parameters to filter results
local capcode = '' -- seems to work only if also regio of plaats is used
local regio = ''
--[[ Possible values for regio are
1=Amsterdam-Amstelland 6=Brabant Noord 11=Brabant Zuid-Oost 12=Drenthe 27=Flevoland 7=Friesland 8=Gelderland-Midden 13=Gelderland-Zuid 19=Gooi en Vechtstreek 2=Groningen 25=Haaglanden 5=Hollands Midden 17=IJsselland 9=Kennemerland 15=Limburg-Noord 21=Limburg-Zuid 26=Midden- en West Brabant 3=Noord- en Oost Gelderland 24=Noord-Holland Noord 10=Rotterdam-Rijnmond 23=Twente 18=Utrecht 4=Zaanstreek-Waterland 20=Zeeland
14=Zuid-Holland Zuid
--]]
local dienst = '2'
--[[Possible values for dienst are
1= Politie 2 = Brandweer 3 = Ambulance 4 = KNRM 5 = Lifeliner 7 = Dares
--]]
local plaats = 'Amsterdam'
if (triggerItem.isTimer) then
domoticz.openURL({
url = 'https://www.alarmeringdroid.nl/api/livemon?dienst='..dienst..'®io='..regio..'&capcode='..capcode..'&plaats='..plaats,
method = 'GET',
callback = 'Pdroid'
})
elseif (triggerItem.isHTTPResponse) then
local response = triggerItem
if (response.ok) then
if response.isJSON then -- check headers if "Content-Type => application/json" (alarmeringdroid does not)
-- good, the response is in correct json
else
print('p2000 values not JSON, converting it now')
response = domoticz.utils.fromJSON(response.data) -- converts to real JSON
end
tl = #response.items
tc = 1
repeat
local dienst = tostring(response.items[tc].dienst)
local regio = tostring(response.items[tc].regio)
local info = tostring(response.items[tc].brandinfo)
if info == nil then info = '-' end
local melding = tostring(response.items[tc].msg) --items[0].msg
local regio = tostring(response.items[tc].regio) --items[0].regio
local info = tostring(response.items[tc].brandinfo) --items[0].brandinfo
local lat = tostring(response.items[tc].lat)
local lon = tostring(response.items[tc].lon)
local grip = tonumber(response.items[tc].grip)
local composed = tostring(melding..' ** '..info)
if composed ~= currInfo then
sensor.updateText(composed)
print(composed)
if lon ~= nil then
local google = ('https://www.google.com/maps/search/?api=1&query='..lat..','..lon)
print(google)
end
end
tc = tl -- Voids the next line to limit the result to last event only. If you want all results comment out this line
tc = tc + 1 -- increase the counter with 1 in order to get the next (or better, previous) message
until tc > tl
end
else
print('**Pdroid failed to fetch info')
end
end
}
Hope it works for you now.
Re: React on RSS feed
Posted: Saturday 27 July 2019 16:14
by EdwinK
-[[Possible values for dienst are
1= Politie 2 = Brandweer 3 = Ambulance 4 = KNRM 5 = Lifeliner 7 = Dares
If I want to get both the fire-department (brandweer) AND police (Politie), can I then use both their numbers line 1,2,3 etc.?
Re: React on RSS feed
Posted: Saturday 27 July 2019 19:13
by elmortero
EdwinK wrote: ↑Saturday 27 July 2019 16:14
If I want to get both the fire-department (brandweer) AND police (Politie), can I then use both their numbers line 1,2,3 etc.?
Seems to work, but with semi-colon (;)