Sharing : Afval kalendar in text sensor

Goldwing1973
Posts: 109
Joined: Monday 08 August 2016 22:55
Target OS: Linux
Domoticz version: Stable
Location: Netherlands, Alphen aan den Rijn
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by Goldwing1973 » Sunday 01 October 2017 12:21

zicht wrote:
Sunday 01 October 2017 9:26
Thanks, i copy'd/pasted your code and the errors are gone, now i have to wait until tomorrow night for the "Hello World" to be replaced with the garbage being collected next monday.
Your welcome.
Your code will runt twice at 18h00 and 18h01 :) Off course if you want to test you can change 18 to the next hour.
Well done !
I just changed the time to test the code, but i'm getting an error again
2017-10-01 12:14:16.331 Error: EventSystem: in Afvalkalender: [string "commandArray = {}..."]:49: attempt to index global 'testjavascript' (a nil value)
Also it does show the correct dates in the log, but the switch isn't getting an update, it remains at "Hello World"

2017-10-01 12:15:49.352 LUA: Afval Kalender
2017-10-01 12:15:49.737 LUA: Groente,fruit & tuin ma 9 okt
2017-10-01 12:15:49.738 LUA: Metaal & Drinkpakken ma 2 okt
2017-10-01 12:15:49.738 LUA: Papier & karton wo 11 okt

I remarked the “testjavascript” line by adding — in front, the error is gone, but also my complete dashboard in Domoticz????
Disabling the Afvalkalender in events doesn’t return the Dashboard

EDIT: Restoring the database backup from an hour ago fixed the Dashboard
Over 50 Z-Wave Devices (Fibaro and Neo), 4xLogitech Hub, 2xPhilips Hue Bridge+55 Lights, 1x Nest Thermostat, 2xNetatmo Weather Station, 1xSkybell v1 Doorbell, 3 Kwikset KEVO Doorlocks and Domoticz running on a Intel NUC

zicht
Posts: 202
Joined: Sunday 11 May 2014 11:09
Target OS: Windows
Domoticz version: 3.8xxx
Location: NL
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by zicht » Wednesday 04 October 2017 13:39

probably you trying to set something wrong in you text device.... causing your problems

the gathering from data works well as it prints ok, you mixed the 2 scripts what will not work.
See code below, should work without any problem

You can add notifications and text as you want but be aware if you mallform a text sensor (Length to long or include faulty (HTML)code) this can mess up big time. The text code will print all you put into it, so influences the dashboard webpage !

Code: Select all

commandArray = {}

function os.capture(cmd, raw)				-- os.command uitvoeren en resultaat daarvan lezen in string
  local f=assert(io.popen(cmd, 'r'))
  local s=assert(f:read('*a'))
  f:close()
  if raw then return s end
  s=string.gsub(s, '^%s+', '')
  s=string.gsub(s, '%s+$', '')
  s=string.gsub(s, '[\n\r]+', ' ')
  return s
end


function Afval() 
    -- haal data op van site
	commando='curl -s http://afvalkalender.alphenaandenrijn.nl/login/0484200000000000'
	result=os.capture(commando)
	if string.find(result,"rror") then 
		result="" 
		WriteToFile("Error >>> function 640"..commando,"url")
	end
	-- Beperk string tot infoblock van de site
	local start=string.find(result,'<ul id="ophaaldata">')
	local eind=string.find(result,'<i>Papier en karton</i></a>',start)
	local nData=string.sub(result, start, eind)
	nData=nData:gsub('%W',' ') nData=nData:match("^%s*(.-)%s*$") nData=nData:gsub("%s+", " ")
	w,x=string.find(nData,"Groente fruit en tuinafval i class date")
	y,z=string.find(nData," i i ",x)
	Groente=string.sub(nData,x+1,y)
	print("Groente,fruit & tuin"..Groente)
	w,x=string.find(nData,"Metaal en Drinkpakken i class date")
	y,z=string.find(nData," i i ",x)
	Metaal=string.sub(nData,x+1,y)
	print("Metaal & Drinkpakken "..Metaal)
	w,x=string.find(nData,"Papier en karton i class date")
	y,z=string.find(nData," i",x)
	Papier=string.sub(nData,x+1,y)
	print("Papier & karton "..Papier)
 
return Papier, Metaal, Groente

time = os.date("*t")
-- Only want to be notified on the evenning the garbage can needs to be put outside.
if time.hour==18 and time.min<=1 then 
   print('Afval module')
   
   Papier,Metaal,Groente=afval() 	-- roep functie aan en krijg de datums
   local IDX = '525' 				-- text IDX
   
   commandArray[#commandArray + 1]={['UpdateDevice']=IDX..'|0|Groente '..Groente.." Metaal "..Metaal.." papier"..Papier}
end



Rpi & Win x64. Using : cam's,Nest,RFXCom,Kaku,LaCrosse,RFY,IsAlive,Dummy,Wether Underground, standard Lua, Curl on windows,Domoticz Android App & Tasker,

"The only source of knowledge is experience (A.Einstein)"

assenzuid
Posts: 154
Joined: Friday 13 November 2015 10:11
Target OS: Raspberry Pi
Domoticz version: Beta
Location: The Netherlands, Emmen Area
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by assenzuid » Friday 20 October 2017 22:51

zicht wrote:
Friday 16 June 2017 10:15
assenzuid wrote:Would be great if it's also working with http://www.areareiniging.nl/home/bewone ... -digitaal/
Just had a look at that site, but its very local (could not find my schedule at all) --> not able to test.
And based on your request i found that not all communties are supported yet on the site i used :shock: (added a link to test in first post)
Can you provide me with some valid input for the site you mentioned ?
(it should be possible to make the script work for all sites as its based on source code reading)

You can use the following input.
postcode 7827AA with number 1

Sorry for the late response :oops:

nf999
Posts: 14
Joined: Friday 06 March 2015 17:51
Target OS: Raspberry Pi
Domoticz version: latest
Location: holland
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by nf999 » Saturday 03 February 2018 10:37

I recreated the script to do less parsing in lua, added timeouts to the get url, repeat if afvalwijzer get fails and send a reminder in the morning. Now only when afvalwijzer fails to respond the script goes over the 10secs and you get a warning in the log ;-)
Just for sharing since its based on the ideas and work done here. The script will run once daily and trigger a notification based on "vandaag" in the responses. The responses are stored in a dummy text variable. It's lua only (no python no dzVents) but requires curl and grep, 2 basic almost always available commands. (if you don't have curl installed, for rpi use: apt-get install curl). It's been running on my rpi2 steadily for the last month.

Add this script as domoticz time based lua event, and create the dummy device.

Code: Select all

-- afvalWijzer module
-- 
-- curl in os required!!
-- create dummy text device from dummy hardware 'Afval Kalender'
-- Check the timing when to get a notification below
-- based on script by zicht @ http://www.domoticz.com/forum/viewtopic.php?t=17963


-- 2017-12-27 working version
-- 2018-01-02 timeouts and repeats

commandArray = {}

local myAfvalDevice='Afval Kalender'
local Postcode='your-zip-here'
local Huisnummer='your-housenr-here'

time = os.date("*t")
-- time of notification
if time.hour==6 and time.min==47 then
-- if time.min %1 == 0 then
    print('AfvalWijzer module')

    function os.capture(cmd, rep)  -- execute command to get site
        -- rep is nr of repeats if result is empty
        local r = rep or 1
        local s = ""
        while ( s == "" and r > 0) do
            r = r-1
            local f = assert(io.popen(cmd, 'r'))
            s = assert(f:read('*a'))
            f:close()
        end
        if ( rep - r > 1 ) then
            print("os.capture needed more than 1 call: " .. rep-r)
        end
      return s
    end

    -- get data from afvalWijzer
    local commando = "curl --max-time 5 -s 'http://www.mijnafvalwijzer.nl/nl/"..Postcode.."/"..Huisnummer.."/" .. "' | grep -E 'class=\"first(Date|WasteType)'"
    -- addded: grep -E '\<class=\"first(Date|WasteType)'
    local tmp = os.capture(commando, 5)
    if ( tmp == "" ) then
        print("afvalWijzer: Empty result from curl command")
    end
    
    if tmp ~= "" then
        -- strip html stuff and format for domoticz
        tmp=tmp:gsub('%c','')
        tmp=tmp:gsub('.-<p class="firstDate">(.-)</p>.-<p class="firstWasteType">(.-)</p>','%1: %2\n')
    
        print ('afvalWijzer result: ' .. tmp)
        if otherdevices[myAfvalDevice] ~= tmp then
            commandArray['UpdateDevice'] = otherdevices_idx[myAfvalDevice] .. '|0|' .. tmp
            if tmp:match('vandaag') then
                print("afvalWijzer: notification sent")
                commandArray['SendNotification']='Afvalwijzer#'..tmp
            end
        end
    end -- empty result
end

return commandArray

mikeoo
Posts: 143
Joined: Sunday 22 March 2015 8:35
Target OS: Raspberry Pi
Domoticz version: Beta
Location: Holland
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by mikeoo » Monday 05 February 2018 16:33

nf999 wrote:
Saturday 03 February 2018 10:37
I recreated the script to do less parsing in lua, added timeouts to the get url, repeat if afvalwijzer get fails and send a reminder in the morning. Now only when afvalwijzer fails to respond the script goes over the 10secs and you get a warning in the log ;-)
Just for sharing since its based on the ideas and work done here. The script will run once daily and trigger a notification based on "vandaag" in the responses. The responses are stored in a dummy text variable. It's lua only (no python no dzVents) but requires curl and grep, 2 basic almost always available commands. (if you don't have curl installed, for rpi use: apt-get install curl). It's been running on my rpi2 steadily for the last month.

Add this script as domoticz time based lua event, and create the dummy device.

Code: Select all

-- afvalWijzer module
-- 
-- curl in os required!!
-- create dummy text device from dummy hardware 'Afval Kalender'
-- Check the timing when to get a notification below
-- based on script by zicht @ http://www.domoticz.com/forum/viewtopic.php?t=17963


-- 2017-12-27 working version
-- 2018-01-02 timeouts and repeats

commandArray = {}

local myAfvalDevice='Afval Kalender'
local Postcode='your-zip-here'
local Huisnummer='your-housenr-here'

time = os.date("*t")
-- time of notification
if time.hour==6 and time.min==47 then
-- if time.min %1 == 0 then
    print('AfvalWijzer module')

    function os.capture(cmd, rep)  -- execute command to get site
        -- rep is nr of repeats if result is empty
        local r = rep or 1
        local s = ""
        while ( s == "" and r > 0) do
            r = r-1
            local f = assert(io.popen(cmd, 'r'))
            s = assert(f:read('*a'))
            f:close()
        end
        if ( rep - r > 1 ) then
            print("os.capture needed more than 1 call: " .. rep-r)
        end
      return s
    end

    -- get data from afvalWijzer
    local commando = "curl --max-time 5 -s 'http://www.mijnafvalwijzer.nl/nl/"..Postcode.."/"..Huisnummer.."/" .. "' | grep -E 'class=\"first(Date|WasteType)'"
    -- addded: grep -E '\<class=\"first(Date|WasteType)'
    local tmp = os.capture(commando, 5)
    if ( tmp == "" ) then
        print("afvalWijzer: Empty result from curl command")
    end
    
    if tmp ~= "" then
        -- strip html stuff and format for domoticz
        tmp=tmp:gsub('%c','')
        tmp=tmp:gsub('.-<p class="firstDate">(.-)</p>.-<p class="firstWasteType">(.-)</p>','%1: %2\n')
    
        print ('afvalWijzer result: ' .. tmp)
        if otherdevices[myAfvalDevice] ~= tmp then
            commandArray['UpdateDevice'] = otherdevices_idx[myAfvalDevice] .. '|0|' .. tmp
            if tmp:match('vandaag') then
                print("afvalWijzer: notification sent")
                commandArray['SendNotification']='Afvalwijzer#'..tmp
            end
        end
    end -- empty result
end

return commandArray
Try to use your nice script but it don't update the Text sensor. Name is exactly like yours. I get in the log file the information when and what the next pickup is but that's it.

Any hints?

LOG file shows

Code: Select all

 2018-02-05 15:30:00.214 LUA: AfvalWijzer module
2018-02-05 15:30:01.049 LUA: afvalWijzer result: vrijdag 09 februari: Plastic, Metaal, Drankenkartons

nf999
Posts: 14
Joined: Friday 06 March 2015 17:51
Target OS: Raspberry Pi
Domoticz version: latest
Location: holland
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by nf999 » Monday 05 February 2018 20:11

not really. Can you verify the dummy text sensor in devices tab?

mine shows as:
Hardware: Dummy
Name: Afval Kalender
Type: General
SubType: Text
and ;-)
Data: vandaag: Restafval woensdag 07 februari: Plastic, Metalen en Drankkartons

Only reason to not update is when the text sensor already has the exact same value as per:

Code: Select all

 if otherdevices[myAfvalDevice] ~= tmp then
but I'm asuming that's not the case

notification should not be sent, since there is no "vandaag" in the text ;-)

How about if you remove the "if" mentioned above (and corresponding "end")?

mikeoo
Posts: 143
Joined: Sunday 22 March 2015 8:35
Target OS: Raspberry Pi
Domoticz version: Beta
Location: Holland
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by mikeoo » Tuesday 06 February 2018 8:56

nf999 wrote:
Monday 05 February 2018 20:11
Only reason to not update is when the text sensor already has the exact same value as per:
:oops: I feel stupid. That was the problem

nf999
Posts: 14
Joined: Friday 06 March 2015 17:51
Target OS: Raspberry Pi
Domoticz version: latest
Location: holland
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by nf999 » Saturday 10 February 2018 9:53

;) Good to see its working!

LJ80
Posts: 49
Joined: Wednesday 14 January 2015 22:49
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by LJ80 » Tuesday 20 February 2018 21:41

What a great idea!
Cleverly made, if you ever have time to explain how this works for my region:
https://www.gemeentewestland.nl/afval/a ... eling.html

:D

bvansteyn
Posts: 8
Joined: Wednesday 07 March 2018 19:22
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by bvansteyn » Wednesday 07 March 2018 19:36

@nf999:

Is there a way to test the script beforehand? I've made the dummy sensor last week and copied your script to LUA and activated it. I had to wait a week to see if it was working (because tuesday is garbage day). I saw some logging, but no message was sent. To bad I had to reboot the system and now my logging is gone and I don't want to wait another week. How can I edit the script to test if it is working?

Can you maybe post a short howto use this within Domoticz? It's my first script and I've little knowledge of domoticz. Do I have to do anything else within Domoticz next to making the dummy sensor with this parameters?;

Hardware: Dummy
Name: Afval Kalender
Type: General
SubType: Text
Data: Hello World (is default text? Should I replace this with something else?)

Edit; this is the log showing:

Code: Select all

2018-03-09 06:47:00.378 dzVents: AfvalWijzer module
2018-03-09 06:47:00.704 dzVents: os.capture needed more than 1 call: 5
2018-03-09 06:47:00.704 dzVents: afvalWijzer: Empty result from curl command

BarryT
Posts: 258
Joined: Tuesday 31 March 2015 22:06
Target OS: Raspberry Pi
Domoticz version: beta
Location: east netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by BarryT » Friday 16 March 2018 15:09

Great script, thanks!

I only want to have the "firstWasteType" instead of the date also..
Is that possible, and if yes how?

Edit, found it allready.. :)
6x Raspberry 3B
A lot of scripts, switches and sensors :)

User avatar
jvdz
Posts: 1313
Joined: Tuesday 30 December 2014 20:25
Target OS: Raspberry Pi
Domoticz version: Stable
Location: Westland/Netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by jvdz » Friday 16 March 2018 19:37

LJ80 wrote:
Tuesday 20 February 2018 21:41
What a great idea!
Cleverly made, if you ever have time to explain how this works for my region:
https://www.gemeentewestland.nl/afval/a ... eling.html

:D
I have the basics working for gemeente Westland, Just need to clean it up a little. Will post something soon.

Jos

BarryT
Posts: 258
Joined: Tuesday 31 March 2015 22:06
Target OS: Raspberry Pi
Domoticz version: beta
Location: east netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by BarryT » Friday 16 March 2018 20:16

dutchdevil83 wrote:
Wednesday 05 July 2017 20:45
For sending a notification one day before the actual pickup day (for example paper day is wednesday but waste day is friday here) i use this code for the notication:

Code: Select all

  --Notification
   if tonumber(os.date("%d")) + 1 ==  tonumber(string.match(tmp, "0*(%d+)")) then
   commandArray['SendNotification']='Afvalwijzer#'..tmp
   end 
this is not working.. :(
i wish to have this notification one day before they come, @17.00 hour for example..
6x Raspberry 3B
A lot of scripts, switches and sensors :)

User avatar
jvdz
Posts: 1313
Joined: Tuesday 30 December 2014 20:25
Target OS: Raspberry Pi
Domoticz version: Stable
Location: Westland/Netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by jvdz » Saturday 17 March 2018 13:08

Adding 1 to the current day will not work when today is the last day of the month and you want to get a warning for tomorrow.
I have solved that by using os.difftime().
See my next post for usage in het Westland which contains this logic when you are interested.

Jos

User avatar
jvdz
Posts: 1313
Joined: Tuesday 30 December 2014 20:25
Target OS: Raspberry Pi
Domoticz version: Stable
Location: Westland/Netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by jvdz » Saturday 17 March 2018 13:13

LJ80 wrote:
Tuesday 20 February 2018 21:41
What a great idea!
Cleverly made, if you ever have time to explain how this works for my region:
https://www.gemeentewestland.nl/afval/a ... eling.html

:D
@LJ80 ,
This is what I have working now. Just follow the instructions at the top of the script and you should be in business.
I have the script saved in "/home/domoticz/scripts/lua/script_time_huisvuil-westland.lua" but you can also save it in the internal editor as TIME script,
Let me know when you have issues or questions.

EDIT:
- some code updates
- fixed juni which should be jun in the table
- move the code to : https://github.com/jvanderzande/mijnafvalwijzer file script_time_huisvuil-westland.lua
Last edited by jvdz on Friday 23 March 2018 18:35, edited 2 times in total.

BarryT
Posts: 258
Joined: Tuesday 31 March 2015 22:06
Target OS: Raspberry Pi
Domoticz version: beta
Location: east netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by BarryT » Saturday 17 March 2018 15:14

jvdz wrote:
Saturday 17 March 2018 13:13
@LJ80 ,
This is what I have working now. Just follow the instructions at the top of the script and you should be in business.
I have the script saved in "/home/domoticz/scripts/lua/script_time_huisvuil-westland.lua" but you can also save it in the internal editor as TIME script,
Let me know when you have issues or questions.

EDIT: some code updates
Can you do the same, but then with the afvalwijzer? this is very handy!

thankss
6x Raspberry 3B
A lot of scripts, switches and sensors :)

User avatar
jvdz
Posts: 1313
Joined: Tuesday 30 December 2014 20:25
Target OS: Raspberry Pi
Domoticz version: Stable
Location: Westland/Netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by jvdz » Saturday 17 March 2018 15:26

BarryT wrote:
Saturday 17 March 2018 15:14
Can you do the same, but then with the afvalwijzer? this is very handy!

thankss
Shouldn't be too hard, but you will have to provide me with the current script you use and a postcode to test with, so I can test the basics.
PM is fine too in case you don't want to share your address info in open forum. :)

Jos

nf999
Posts: 14
Joined: Friday 06 March 2015 17:51
Target OS: Raspberry Pi
Domoticz version: latest
Location: holland
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by nf999 » Friday 23 March 2018 17:48

bvansteyn wrote:
Wednesday 07 March 2018 19:36
Is there a way to test the script beforehand? I've made the dummy sensor last week and copied your script to LUA and activated it. I had to wait a week to see if it was working (because tuesday is garbage day). I saw some logging, but no message was sent. To bad I had to reboot the system and now my logging is gone and I don't want to wait another week. How can I edit the script to test if it is working?

Code: Select all

2018-03-09 06:47:00.378 dzVents: AfvalWijzer module
2018-03-09 06:47:00.704 dzVents: os.capture needed more than 1 call: 5
2018-03-09 06:47:00.704 dzVents: afvalWijzer: Empty result from curl command
srry for the late reply ..

yes you can check the call to afvalwijzer. Just add

Code: Select all

print('command: ' .. commando)
just after the

Code: Select all

local commando='curl ...
Execute the command from the command line and this should give some result. Could very well be that eg curl is not installed.
As to the howto, the basics are in the script itself, and since you already have loggings the script is running. Issue is probably related to the command being executed, 2b identified with by adding extra logging via the print command above.

BarryT
Posts: 258
Joined: Tuesday 31 March 2015 22:06
Target OS: Raspberry Pi
Domoticz version: beta
Location: east netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by BarryT » Friday 23 March 2018 18:11

There is a new script, made by "jvdz"

This script is tested before, in many ways and the result is just what you need.. :)

Check it here >>
https://github.com/jvanderzande/mijnafvalwijzer

All credits goes to Jos :mrgreen:
6x Raspberry 3B
A lot of scripts, switches and sensors :)

User avatar
jvdz
Posts: 1313
Joined: Tuesday 30 December 2014 20:25
Target OS: Raspberry Pi
Domoticz version: Stable
Location: Westland/Netherlands
Contact:

Re: Sharing : Afval kalendar in text sensor

Post by jvdz » Friday 23 March 2018 18:46

BarryT wrote:
Friday 23 March 2018 18:11
This script is tested before, in many ways and the result is just what you need.. :)
Check it here >>
https://github.com/jvanderzande/mijnafvalwijzer
All credits goes to Jos :mrgreen:
I have indeed stored the scripts in Github, which allows for others to contribute modification if required.
This Github currently version for: Enjoy,
Jos

Post Reply

Who is online

Users browsing this forum: No registered users and 5 guests