preserve generate_series rows through joins
If you want the COUNT of each element of the series you can use an scalar subquery.

WITH gs AS
(
    SELECT generate_series(NOW() - '72 hours'::interval, NOW(), '1 hour') AS t
)
SELECT gs.t, (SELECT COUNT(packets.id) 
              FROM   packets 
              JOIN   devices 
              ON     devices.id = packets.device_id
              WHERE  devices.mandate_id = 3
              AND    packets.transceived_at &gt; gs.t 
              AND    packets.transceived_at &lt;= gs.t + '1 hour')
FROM   gs;