For such a task, there is a real-time clock module
with wake on interrupt RTC Module Micro Crystal RV-3028-C7
It is important to note here that the RAK12002 module has the ability to work with interrupts - this is a very important feature for your task.
RAK12002 is a WisBlock (RTC) Real-Time Clock module based on Micro Crystal RV-3028-C7 which has its own battery backup via super capacitor.
All you need to do is program the watch’s internal alarm clock to wake up every hour (the Melopero_RV3028 libraries have all the functions).
Of course, this should put the microcontroller into sleep mode after waking up.
Here is how it is implemented in the library examples.
// set the interrupt to trigger every day at 1 minute from now
// since we set the hour to 15:20 we don't have to check if the
// minute value exceeds 59...
rtc.enableAlarm(/* weekdayOrDate not important */ 0, /* hour */ rtc.getHour(), /* minute */ rtc.getMinute() + 1,
/* dateAlarm */ false, /* hourAlarm */ true, /* minuteAlarm */ true, /* generateInterrupt */ true);
// setup the pin to listen for the interrupt
attachInterrupt(digitalPinToInterrupt(intPin), interruptCallback, CHANGE);