Logistique

Étude de cas Logistique et recueil de recettes SQL

La logistique est un écosystème complexe impliquant la coordination du transport, des opérations d'entrepôt, de l'inventaire et de l'exécution des livraisons. L'intégration de la télématique dans les processus logistiques permet aux entreprises de collecter des données en temps réel sur les véhicules, les conducteurs, les itinéraires et les conditions de la cargaison, ce qui améliore considérablement la prise de décision et l'efficacité opérationnelle.

Navixy IoT Query, avec ses capacités robustes d'ingestion de données et d'analytique des séries temporelles, soutient la transformation numérique des opérations logistiques en permettant une visibilité approfondie à chaque étape du cycle de vie. Ses capacités robustes d'ingestion télématique fournissent une visibilité complète sur ces opérations. Les données GPS en temps réel, les diagnostics des données des capteurs, la géorepérage et l'analytique des capteurs permettent aux opérateurs logistiques de numériser les flux de travail, d'automatiser les contrôles et de prendre des décisions éclairées.

Phase du cycle de vie
Objectifs
Cas d'utilisation couverts / Recettes

Gestion des itinéraires

Optimiser le routage des véhicules, assurer un dispatch efficace et réduire les retards

Nombre de trajets par jour Nombre de kilomètres par véhicule par jour (7 derniers jours)

Surveillance de la cargaison

Assurer des conditions de transport appropriées pour les marchandises sensibles

Événements de violation de température (et d'humidité) au cours des 7 derniers jours

Fonctionnement du véhicule

Suivre l'utilisation de la flotte, assurer la maintenance et réduire les temps d'arrêt

Résumé des heures moteur par véhicule / conducteur / jour (7 derniers jours) Analyse des temps d'arrêt des véhicules Suivi des actifs sans mouvement

Sécurité & sûreté de l'itinéraire

Détecter les abus, les activités non autorisées et les violations de sécurité

Détection de déviation d'itinéraire - Arrêts non autorisés (24 dernières heures) Détection d'utilisation en dehors des heures

Gestion de la conformité

Surveiller le comportement des conducteurs, appliquer les politiques et la conformité opérationnelle

Résumé des heures moteur par véhicule / conducteur / jour (7 derniers jours) Détection d'utilisation en dehors des heures

Analyse post-livraison

Évaluer l'efficacité opérationnelle et les performances historiques

Rapport du journal d'événements du véhicule Nombre de kilomètres par véhicule par jour (7 derniers jours) Nombre de trajets par jour Suivi des actifs sans mouvement

Suivi des actifs sans mouvement

Ce cas identifie les actifs (par ex., véhicules ou remorques) qui n'ont pas modifié leur GPS comparer les coordonnées minimales et maximales pendant la période. Si les deux valeurs se situent dans une plage très étroite (un seuil de tolérance, par ex. ±0,01 degré), nous signalons l'actif comme immobile. La requête fait également une jointure avec les tables objects et vehicles dans raw_business_data pour récupérer des libellés d'actifs significatifs pour la sortie des résultats.

WITH gps_bounds AS (
    SELECT
        td.device_id,
        MIN(td.latitude) AS min_lat,
        MAX(td.latitude) AS max_lat,
        MIN(td.longitude) AS min_lon,
        MAX(td.longitude) AS max_lon,
        COUNT(*) AS location_records
    FROM raw_telematics_data.tracking_data_core td
    WHERE td.device_time >= now() - interval '48 hours'
    GROUP BY td.device_id
),
stationary_devices AS (
    SELECT
        device_id
    FROM gps_bounds
    WHERE location_records > 10 -- exclure les appareils avec des données très clairsemées
	AND((max_lat - min_lat) <= 2000 -- ~10 mètres
		OR
      	(max_lon - min_lon) <= 1000  -- ~10 mètres
    		)
SELECT
    v.vehicle_id,
    v.vehicle_label,
    o.object_id,
    o.object_label,
    sd.device_id,
    gb.min_lat / 1e7 AS latitude,
    gb.min_lon / 1e7 AS longitude,
    gb.location_records
FROM stationary_devices sd
JOIN gps_bounds gb ON sd.device_id = gb.device_id
JOIN raw_business_data.objects o ON o.device_id = sd.device_id
LEFT JOIN raw_business_data.vehicles v ON v.object_id = o.object_id
ORDER BY gb.location_records DESC;

Analyse des temps d'arrêt des véhicules

Ce cas se concentre sur l'analyse de la durée pendant laquelle les véhicules sont non opérationnels en raison de la maintenance, de pannes ou d'inactivité. Les métriques de temps d'arrêt sont cruciales pour les opérations logistiques afin de surveiller la santé de la flotte, réduire les temps d'inactivité et améliorer l'utilisation globale et l'efficacité de la planification.

Le cœur de l'analyse des temps d'arrêt consiste à exploiter la table vehicle_service_tasks de raw_business_data, qui enregistre à la fois les événements de maintenance planifiés et non planifiés. Chaque tâche contient une start_date et une end_date, représentant la période de temps d'arrêt. En filtrant sur les tâches de service terminées, nous pouvons calculer la durée exacte pendant laquelle chaque véhicule était hors service.

La requête calcule le temps d'arrêt total par véhicule en additionnant les durées de toutes ses tâches de service (en heures). Elle permet également une ventilation entre maintenance planifiée et non planifiée en utilisant le drapeau is_unplanned. Pour rendre les résultats plus exploitables, elle fait une jointure avec la table vehicles afin d'inclure les libellés des véhicules, les numéros d'immatriculation et les informations de modèle.

Détection de déviation d'itinéraire

Ce cas identifie les situations où des véhicules dévient de leurs itinéraires assignés ou attendus — en particulier des zones géorepérées ou des couloirs de livraison. Le suivi de ces déviations aide à assurer la conformité des itinéraires, à réduire les retards, à détecter les comportements de conduite à risque et à maintenir les SLA de livraison.

Cette logique compare les positions GPS réelles du véhicule issues de tracking_data_core (dans le schéma raw_telematics_data) avec des zones géographiques prédéfinies provenant de la table zones dans raw_business_data. Ces zones représentent des itinéraires assignés ou des segments d'itinéraire. En utilisant des comparaisons géométriques via ST_DWithin, nous déterminons si un point se trouve à l'intérieur ou à l'extérieur de la zone tampon de l'itinéraire.

La requête associe chaque position GPS à chaque zone d'itinéraire connue en utilisant un CROSS JOIN, puis applique ST_DWithin() pour vérifier si le véhicule se trouvait à l'intérieur du corridor autorisé. Nous isolons les lignes où le véhicule était en dehors de tous les itinéraires géorepérés et les signalons comme déviations. La sortie finale répertorie ces déviations, y compris l'appareil, l'horodatage, le libellé du véhicule et la distance du point par rapport au centre de la zone la plus proche.

Résumé des heures moteur par véhicule / conducteur / jour (7 derniers jours)

Ce cas mesure la durée pendant laquelle les moteurs étaient actifs pour chaque véhicule sur une base journalière, permettant aux gestionnaires de flotte de suivre l'utilisation, d'identifier la surutilisation ou la sous-utilisation, et de corréler l'activité avec les affectations des conducteurs. Lorsqu'il est lié aux conducteurs, il prend également en charge la validation des heures de travail et l'analyse des performances.

La table states dans raw_telematics_data enregistre des indicateurs d'état moteur en séries temporelles, généralement avec un state_name tel que 'ignition' et une valeur de 1 (allumé) ou 0 (éteint). Pour calculer les heures moteur, nous trouvons toutes les transitions horodatées pour chaque appareil et calculons les durées où le moteur était allumé (1).

Pour lier l'activité du moteur à la fois aux véhicules et aux conducteurs, nous utilisons les tables objects, vehicles et driver_history de raw_business_data. Nous associons chaque enregistrement d'état au conducteur actuel sur cet objet (via l'historique d'affectation des conducteurs) et au véhicule correspondant. Nous groupons ensuite les données par jour, véhicule et conducteur, en additionnant le temps moteur actif total (en heures).

Événements de violation de température (et d'humidité) au cours des 7 derniers jours

Ce cas identifie les relevés de capteurs — tels que la température ou l'humidité — qui dépassent des seuils critiques pendant le transport. La surveillance de telles violations est vitale pour les industries transportant des produits périssables (par ex., alimentation, produits pharmaceutiques) pour assurer la conformité aux exigences de la chaîne du froid et prévenir la détérioration.

Cette requête extrait les données d'entrée des capteurs de la table inputs dans le schéma raw_telematics_data. Chaque ligne représente une lecture de capteur (par ex., température, humidité) enregistrée à un horodatage spécifique par un appareil. Nous filtrons ces enregistrements pour n'inclure que ceux provenant des 7 derniers jours.

La logique principale de filtrage est basée sur les motifs de nom de capteur et une comparaison de leurs valeurs numériques par rapport aux seuils (par ex., >25°C pour la température, >80% pour l'humidité). Étant donné que value est stocké en texte, nous le convertissons en numérique avant d'appliquer les conditions de seuil. Pour enrichir les résultats, nous faisons une jointure avec la table objects afin de récupérer les libellés du véhicule ou de l'actif, ce qui améliore l'interprétabilité pour les gestionnaires de flotte.

Arrêts non autorisés (24 dernières heures)

Ce cas identifie les arrêts non autorisés ou non planifiés effectués par des véhicules au cours des dernières 24 heures. Il aide à détecter d'éventuelles violations des itinéraires de livraison, des pauses non autorisées ou des temps d'inactivité pouvant affecter l'efficacité énergétique et les performances des SLA.

La requête analyse les points de localisation avec une vitesse faible ou nulle en utilisant la La requête utilise la table tracking_data_core de raw_telematics_data pour extraire les données de localisation en séries temporelles et la vitesse. Un arrêt est détecté lorsque la vitesse descend en dessous de 3 km/h pendant une durée de plus de 2 minutes. En utilisant les fonctions LAG et LEAD, la requête segmente ces périodes de basse vitesse pour déterminer les horodatages de début et de fin d'arrêt.

Pour détecter les arrêts non autorisés, elle filtre les emplacements qui se trouvent à l'intérieur des zones géorepérées connues (table zones) en utilisant ST_DWithin de PostGIS. Seuls les arrêts en dehors de tout tampon de zone sont signalés. Le résultat inclut l'ID du véhicule, le libellé de l'objet, l'immatriculation, les horodatages, la durée et les coordonnées pour chaque arrêt.

Détection d'utilisation en dehors des heures

Ce cas identifie les situations où des véhicules sont exploités en dehors des heures normales de travail — définies ici comme du lundi au vendredi, 09:00–18:00. De telles détections sont essentielles pour signaler un usage non autorisé, identifier un éventuel mauvais usage du véhicule, et améliorer la sécurité de l'actif.

La logique repose sur la table tracking_data_core de raw_telematics_data, qui enregistre des événements GPS horodatés par appareil. Nous déduisons le jour de la semaine local et l'heure d'utilisation à partir de chaque entrée device_time et filtrons les enregistrements en dehors de la fenêtre commerciale définie (c.-à-d. avant 9 h, après 18 h, ou à tout moment le week-end).

Pour plus de clarté, nous enrichissons les données GPS avec les métadonnées des objets et des véhicules provenant de raw_business_data (par ex., libellé du véhicule, immatriculation, ID d'objet). Pour des résumés plus pertinents, nous agrégeons éventuellement l'utilisation pour compter combien d'événements en dehors des heures se sont produits par véhicule et quand ils ont eu lieu. Cela peut aider à identifier des motifs ou des récidivistes.

Nombre de trajets par jour

Ce cas mesure combien de trajets chaque véhicule effectue quotidiennement et quelle distance ils parcourent, aidant les équipes logistiques à évaluer l'utilisation du véhicule, optimiser les itinéraires et détecter des anomalies comme des trajets incomplets ou des usages non déclarés.

Pour définir un trajet, nous utilisons un changement d' état de mouvement du véhicule — c.-à-d. transition de l'arrêt au mouvement puis retour à l'arrêt. En utilisant les valeurs de vitesse de la table tracking_data_core, la requête segmente les données en fonction de ces transitions. Un trajet est identifié comme une période de mouvement continue où la vitesse reste au-dessus d'un seuil (par ex., >5 km/h).

Chaque trajet inclut :

  • Un horodatage et emplacement de départ (premier point en mouvement)

  • Un horodatage et emplacement de fin (dernier point en mouvement avant l'arrêt)

  • Le distance de Haversine entre les positions de départ et d'arrivée

Nous calculons le nombre de trajets et la distance totale par jour et par véhicule, éventuellement enrichis avec les étiquettes de véhicule provenant de la table vehicles.

Nombre de kilométrage par véhicule et par jour (7 derniers jours)

Ce cas calcule la mileage quotidienne (en kilomètres) pour chaque véhicule au cours des 7 derniers jours. Il est fondamental pour le suivi de l'utilisation des véhicules, la surveillance de l'efficacité énergétique, la planification de la maintenance, et la détection de la sous-utilisation ou de la surutilisation.

Nous extrayons tous les enregistrements GPS de tracking_data_core pour les 7 derniers jours. Chaque point GPS possède un horodatage, une latitude et une longitude. Pour chaque véhicule et chaque jour, nous :

  1. Trier les points GPS chronologiquement par appareil.

  2. Calculer la distance entre les points consécutifs en utilisant la formule de Haversine.

  3. Sommer les distances par jour et par appareil pour obtenir le kilométrage total.

Cette approche offre une grande précision sans dépendre de capteurs d'odomètre externes. Optionnellement, la requête joint les tables objects et vehicles pour enrichir les résultats avec les métadonnées de l'actif.

Rapport du journal des événements des véhicules

Ce cas fournit un rapport complet de tous les événements liés aux véhicules (par ex., allumage, porte ouverte, freinage brusque, etc.) à travers la flotte. Il inclut le type d'événement, l'horodatage, et le contexte du véhicule, permettant aux équipes opérationnelles d'auditer le comportement, de suivre les activités anormales ou de générer des alertes et des analyses.

La source principale est la table states du schéma raw_telematics_data. Chaque ligne inclut : device_id (source de l'événement), device_time (horodatage), state_name (étiquette de l'événement) et value (statut ou mesure).

Pour créer un rapport exploitable :

  1. Nous extrayons tous les enregistrements des 7 derniers jours.

  2. Les regrouper par le type d'événement, véhicule, et date pour fournir un compte du nombre de fois où chaque événement est survenu et quand il s'est produit.

  3. Enrichir les résultats avec les métadonnées du véhicule (vehicle_label, registration_number, object_label) via objects et vehicles.

Ceci fournit une chronologie d'événements quotidienne à travers la flotte - essentielle pour le diagnostic, l'analyse comportementale et la maintenance proactive.

Mis à jour

Ce contenu vous a-t-il été utile ?