MySQL performance for aggregate function
The subquery is not needed at all. 
The ORDER BY inside a subquery like this (without a LIMIT) makes no sense. 
The external query has SELECT date but GROUP BY DATE(date). HOUR(date). This, while allowed in MySQL older versions (i.e. before 5.7), is not valid SQL.


I suggest you rewrite:

SELECT 
    DATE(date) AS value_date, 
    HOUR(date) AS value_hour, 
    MAX(temperature) AS max_temperature
FROM temperature_information 
WHERE device = 1111 
GROUP BY DATE(date), HOUR(date) ;


Regarding performance: 


an index on (device, date, temperature) will make the query more efficient than the current indexes on (device) alone and on (device, date). If you add this 3-column index, you could drop the other two ("device" and "idx") indexes. 
Another option would be to store the date and hour part in separate columns and add a 4-column index on (device, date_part, hour_part, temperature).
If you move to version 5.7, you coul dhave the date and hour parts as generated columns. See MySQL docs: Ganerated Columns.
After the comment/edit that there are many more data columns and since it looks like you'll be running analytic type of queries, another option would be to change the PRIMARY KEY to (device, date) - or (device, date_part, hour_part, min_sec_part). This effectively - for an InnoDB table - clusters the data in the way you want them for this query. Of course you should test first this alternative design and how it will affect other queries, too.