I've used this query for tablespace sizes previously. Thinking you could modify it since it currently works on a % basis.
I'd suggest that since you are monitoring all of your tablespaces, you add a case statement to this so it will evaluate to a 0 or 1 (any TBS not exceeded threshold or exceeded threshold).
Otherwise, you'll have to define an alert for each TBS.
Once a day should be sufficient for this kind of alert.
select df.tablespace_name, round(((MAX_BYTES-((MAX_BYTES-BYTES)+FREE_SPACE)) / MAX_BYTES )*100) "UPercent"
group by tablespace_name ) df,
(select tablespace_name,sum(bytes)/1024/1024 FREE_SPACE
group by tablespace_name) FS
where df.tablespace_name = fs.tablespace_name
order by 1