In general it is better to have one table for each type of data (I assume that the structure of each of these data_s_x tables is the same). This makes it easy to add a new device without changing the structure of the database.
It does increase the data volumes in the one table, though, and makes it important that the right indexes have been applied - it probably is in your case any way!
Your data_m and data_h tables are strictly speaking denormalised: they contain derived data and are not actually needed as their contents can be calculated when required. However, this sort of denormalisation for performance reasons doesn't sound unreasonable. I don't know whether you added them because performance was bad without them: if you didn't then I'd suggest one possible improvement would be to see whether the reports which use than still run acceptably if you perform the AVG calculations in the SQL that generates the report. If performance is OK, then you can remove the tables and the processing that maintains them.