Many ways to approach this. I’d suggest firstly looking into the material parameter collections as they are a great way to drive an unlimited number of materials with the same parameters without ticking them or making MIDs. Then it should be pretty easy to drive those parameters in the level blueprint. you could even make it a whether BP that the level just helps communicate with.
You could basically assign a number of states. Lets say for now the states are Clear, light rain, storm, or 0, 1, 2. You could have on levelstart a random float between 0 and 3 generated and then stagger a few branches to get a switch on int behavior. If < 1, state = Clear; elseif < 2 state = light rain; elseish < 3 state = storm. This is just one of many ways to start thinking about the problem.
You could make the state actually a float, and use the frac part of the value to drive something like the intensity which could be intepreted as anything by the various whether sub systems. Ie, the amount of raindrops per texture could increase as state went from 2 to 3.