I never left a window or door open for an extended period of time (being winter) but I suspect the senor sends out it's current status as it's check in. I.E. Sensor Closed when closed & Sensor Triggered when open.
So if you have a macro to trigger speech, it will repeat itself every hour. This may be fine as a reminder that something is open, but will be a nuisance constantly telling you it's closed.
The best way I can think of to avoid the repeats is using a Status Flag and only triggering the speech on a change (Clear-to-Set, Set-to-Clear). This of course will eat up most if not all of the 16 Status Flags.
You could use a set of Phantom Modules as pseudo-Status Flags for this. Just dedicate a House Code (example "P") for 16 phantom appliance switches. Then set this House Code as the Monitored House Code. You could then use macros that check for the state of these phantom switches (same as the Status Flags above) to determine when to trigger speech.
Too bad the sensor check in wasn't unique.