Connecteur Overmind

Overmind est un connecteur du Hub qui fournit des données virtuelles pour les tests et les démonstrations. Il permet de simuler une consigne, un compteur, un état, une date ou une position géographique, sans équipement physique.

Il gère deux familles de variables :

  • Defined : la valeur est définie à l’enregistrement, puis modifiée par une écriture provenant d’une session, d’une application ou d’un autre connecteur.
  • Evolving : la valeur évolue automatiquement à un intervalle choisi. Les abonnés reçoivent les changements de valeur, de qualité et de date source.

La définition est portée par l’URL du handle. Name est obligatoire et constitue sa référence primaire. Une troisième forme, Overmind://Metronome, permet de déclarer les métronomes qui synchronisent les variables évolutives.

In diesem Artikel

    Mehr anzeigen
    Weniger anzeigen

    1. Définir et retrouver un handle

    1.1 Structure du chemin

    Le path d’un handle est une URL. Son préfixe, ou protocole, est Overmind://. Pour définir une variable, il est suivi de Defined ou d’Evolving, puis d’un point d’interrogation introduisant ses paramètres.

    Chaque paramètre est une association Clé=Valeur. Le caractère & sépare les paramètres, comme dans la partie query d’une URL.

    Compteur de 0 à 100, incrémenté de 1 toutes les 5 secondes, puis ramené à 0 :

    Overmind://Evolving?Name=Increment0To100Every5s&Type=Integer&InitialValue=0&EndValue=100&Step=1&Interval=5&Behavior=Increment
    
    

    1.2 Name : identité et remplacement

    Name identifie un handle dans une instance d’Overmind. Les espaces en début et fin du nom sont retirés et la comparaison ne tient pas compte de la casse. Ainsi Counter et counter désignent la même variable.

    Enregistrer une définition avec un nom déjà présent remplace l’ancienne définition et réinitialise la valeur, même si le chemin fourni est identique. Les abonnements existants à ce nom continuent de recevoir ses changements. Une définition invalide est refusée avant de remplacer la variable existante.

    1.3 Lire et s’abonner par le nom

    Après avoir enregistré la définition, utiliser uniquement son nom pour lire sa valeur ou s’abonner à ses changements :

    Overmind://Name=Increment0To100Every5s
    
    

    Ce chemin court ne réinitialise pas le handle. Il accepte uniquement le paramètre Name. Pour changer la définition, enregistrer à nouveau un chemin Defined ou Evolving portant le même nom.

    1.4 Écrire dans un handle Defined

    Créer une consigne modifiable :

    Overmind://Defined?Name=MutableInteger20&Type=Integer&InitialValue=20
    
    

    Envoyer ensuite la valeur 25 à Overmind://Name=MutableInteger20 par l’opération d’écriture du Hub. Le nom reste identique, la valeur devient 25 et la date de modification est actualisée.

    Une écriture incompatible avec le type est refusée sans changer la valeur ni sa date. Les écritures sur un handle Evolving sont refusées.

    2. Types de valeurs

    Le paramètre Type indique la nature de la valeur simulée. Il détermine comment Overmind interprète la valeur reçue, quelles valeurs sont acceptées et quels calculs sont possibles lors d’une évolution ou d’une écriture.

    Par exemple, Type=Integer interprète 10 comme un nombre entier auquel on peut ajouter un pas. Type=String conserve 10 comme du texte. Type=DateTime permet de faire avancer une date d’une durée donnée.

    Les handles Defined et Evolving utilisent les mêmes types. Une déclaration Metronome possède directement une période Span et n’utilise pas le paramètre Type.

    Type Valeur manipulée
    Boolean Booléen true ou false.
    Integer Entier signé de -2147483648 à 2147483647.
    SmallInteger Octet non signé de 0 à 255.
    Single Nombre décimal, stocké en double précision dans Overmind.
    DateTime Date et heure publiées en UTC.
    GISVector Position géographique.
    String Texte.
    Unknow, Any, Url, Guid Traités comme du texte ; une URL ou un Guid n’est pas validé comme tel.
    Color, Image, Array Types non pris en charge : la définition est refusée.

    Sans Type, Overmind utilise Unknow. Une valeur telle que 123 reste donc du texte si aucun type numérique n’est indiqué.

    3. Handles Defined

    Un handle Defined représente une valeur que l’on fixe puis que l’on peut modifier depuis l’extérieur, par une écriture du Hub. Il convient par exemple à une consigne, à un état forcé ou à une valeur stable de démonstration. Il n’évolue pas automatiquement.

    On peut associer plusieurs clés à Defined dans son URL : le nom identifie la variable, le type précise sa nature et les autres paramètres permettent de choisir sa valeur initiale, sa qualité ou sa date source. Les clés disponibles sont les suivantes.

    Paramètre Rôle et valeur par défaut
    Name Nom obligatoire, identité du handle.
    Context Texte descriptif facultatif, sans effet sur l’identité.
    Type Type de valeur ; Unknow par défaut.
    InitialValue Valeur initiale, convertie selon Type.
    Status Qualité initiale ; Good par défaut.
    LastModificationDate Date source initiale ; date courante UTC par défaut.

    Context est une information descriptive facultative. Il ne sépare pas les identités : deux définitions ayant le même Name et des contextes différents désignent le même handle.

    Sans InitialValue, les nombres valent 0, le booléen vaut false, le texte est vide, la date vaut le 1er janvier de l’an 1 UTC et la position GIS vaut (0,0).

    LastModificationDate décrit la date de la valeur, pas sa fréquence d’évolution. Une écriture réussie actualise cette date. Une consigne peut donc porter une qualité Unreachable et une date ancienne dès son enregistrement pour simuler une donnée indisponible ou périmée.

    4. Handles Evolving

    Un handle Evolving représente une variable qui change automatiquement au fil du temps. Il peut simuler un compteur, une mesure aléatoire, une suite d’états, une date qui avance ou un déplacement géographique. Les abonnés sont informés de ses évolutions.

    Les clés associées à Evolving dans l’URL permettent de choisir le type de valeur, son départ, son arrivée, la manière de la faire évoluer et la durée entre deux changements. Step agit sur le changement de valeur ; Interval règle le temps entre les changements.

    Paramètre Rôle et valeur par défaut
    Name Nom obligatoire, identité du handle.
    Context Texte descriptif facultatif.
    Type Type de valeur ; Unknow par défaut.
    InitialValue Point de départ ou entrée initiale de l’Aggregate.
    EndValue Borne d’arrivée, date absolue ou durée selon le type.
    Step Pas d’évolution, durée, saut dans une liste ou nombre de transitions GIS.
    Interval Durée positive entre deux évolutions ; 30 secondes par défaut.
    Behavior Increment par défaut ; Decrement ou Random au choix. Pour un texte sans Aggregate explicite, le défaut est Random (voir Listes et textes).
    Aggregate Liste des valeurs à parcourir, séparées par des virgules.
    Metronome Nom d’un métronome existant ; facultatif.
    Statuses Liste des qualités possibles, séparées par des tirets ; Good par défaut.
    LastModificationTimeSpan Durée à soustraire à la date source ; zéro par défaut.

    EndValue est le seul paramètre de borne d’arrivée accepté.

    4.1 Behavior et bouclage

    Increment ajoute Step ; Decrement le retranche. Pour les nombres et les dates, InitialValue est le point de départ et EndValue la borne dans le sens choisi. Après dépassement de cette borne, la valeur revient au point de départ. La borne est atteinte si le pas tombe exactement dessus.

    Avec InitialValue=0, EndValue=100 et Step=1, la séquence est 0, 1, 2, jusqu’à 100, puis 0. Avec InitialValue=3, EndValue=0 et Behavior=Decrement, elle est 3, 2, 1, 0, puis 3.

    Random choisit une valeur dans les bornes ou dans une liste de valeurs (voir plus loin la notion d’Aggregate). Step n’est pas utilisé pour le tirage aléatoire. Si ce paramètre est fourni, sa valeur doit néanmoins être valide.

    Sans Behavior, le comportement est Increment. Le cas particulier des textes est expliqué dans la section Listes et textes.

    4.2 Valeurs par défaut et Step

    Type sans Aggregate Départ par défaut Borne d’arrivée par défaut Step par défaut
    Integer Minimum du type ; maximum en Decrement. Maximum du type ; minimum en Decrement. 1.
    SmallInteger 0. 255 ; 0 en Decrement. 1.
    Single 0. Maximum du type ; minimum en Decrement. 0.1.
    DateTime 1er janvier de l’an 1 UTC. Date maximale ; date minimale en Decrement. 30 secondes.
    Boolean false. Alternance ou tirage aléatoire. Non utilisé.
    String et types assimilés Première entrée de la liste. Liste de textes. 1 entrée.
    GISVector Longitude 0, latitude 0. Point d’arrivée historique : longitude 5.877286, latitude 47.858437 (voir GISVector). Trajet effectué en un déplacement.

    Choisir des bornes explicites pour une simulation lisible. Step doit être positif : entier pour Integer, SmallInteger, les listes et les transitions GIS ; décimal pour Single ; durée pour DateTime.

    Pour un Boolean sans Aggregate, Step n’est pas utilisé : le booléen est inversé à chaque échéance avec Increment ou Decrement. Avec Random, il est tiré au hasard et peut conserver la même valeur. Lorsqu’une liste de booléens est fournie par Aggregate, on parcourt cette liste selon les règles décrites ci-dessous.

    4.3 Listes (Aggregate) et textes

    Aggregate=A,B,C fournit les valeurs autorisées. Increment avance dans la liste, Decrement recule et Random choisit une entrée. Le parcours est cyclique ; Step compte les entrées à sauter, avec 1 par défaut.

    La première entrée est utilisée au départ, même avec Decrement. InitialValue permet de choisir une autre entrée et doit alors appartenir à la liste. EndValue n’intervient pas lorsque l’Aggregate est présent. Toutes les entrées sont converties dans le type demandé.

    Dans un handle Evolving, un texte évolue toujours en choisissant une entrée d’une liste. Cela concerne String et les types assimilés au texte : Any, Unknow, Url et Guid.

    Cette liste peut avoir trois origines :

    • Un Aggregate explicite : les valeurs fournies constituent la liste. Sans Behavior, elles sont parcourues dans l’ordre avec Increment.
    • Des textes définis par InitialValue et EndValue : ils forment une liste de deux entrées. Si une extrémité est omise, elle est prise dans la liste intégrée.
    • Aucun de ces paramètres : Overmind utilise sa liste de messages intégrée.

    Dans les deux derniers cas, sans Aggregate explicite, le Behavior par défaut est Random. On peut choisir Behavior=Increment pour parcourir les textes dans l’ordre. Un texte Defined, lui, reste une valeur fixe et n’utilise aucune liste.

    4.4 DateTime

    Pour un DateTime, InitialValue est la date de départ. EndValue peut être une date d’arrivée absolue ou une durée calculée à partir du départ.

    Step est la durée d’avancement de la date simulée. Interval est le temps réel entre deux évolutions : Step=30&Interval=1 fait avancer la date de 30 secondes chaque seconde réelle.

    Date d’arrivée absolue : partir de 10 h UTC, avancer de 30 secondes chaque seconde réelle et reboucler après 10 h 01 UTC.

    Overmind://Evolving?Name=AdvanceDate30sEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=2026-09-08T10:01:00Z&Step=30&Interval=1
    
    

    Date d’arrivée relative : parcourir une minute à partir de 10 h UTC, en avançant de 500 ms chaque seconde réelle.

    Overmind://Evolving?Name=AdvanceDate500msEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=00:01:00&Step=00:00:00.500&Interval=1
    
    

    Durée relative en Decrement : partir de 10 h 01 UTC, soustraire 30 secondes à chaque seconde réelle, jusqu’à une minute avant le départ, puis recommencer.

    Overmind://Evolving?Name=RewindDate30sEvery1s&Type=DateTime&InitialValue=2026-09-08T10:01:00Z&EndValue=60&Step=30&Interval=1&Behavior=Decrement
    
    

    Date aléatoire : choisir chaque seconde réelle une date dans la minute suivant 10 h UTC. Step n’est pas utilisé.

    Overmind://Evolving?Name=RandomDateWithinMinuteEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=00:01:00&Interval=1&Behavior=Random
    
    

    4.5 GISVector

    Une position individuelle utilise l’ordre longitude,latitude : InitialValue=2,48. Les valeurs publiées utilisent le format longitude;latitude, par exemple 2;48.

    Pour un GIS, EndValue est un point d’arrivée, pas une valeur maximale. Les coordonnées 5.877286,47.858437 proviennent d’un point fixé dans le code historique du connecteur ; elles ne représentent aucune limite géographique. Préciser InitialValue et EndValue permet de choisir son propre trajet.

    Sans Aggregate, une transition est le déplacement de la position courante vers la position suivante. Step indique en combien de déplacements de même longueur le trajet du départ à l’arrivée est découpé. Une transition est effectuée à chaque Interval.

    Avec un départ (2,48), une arrivée (4,50), Step=2 et Interval=1, le résultat est :

    Temps écoulé Position publiée Déplacement
    0 seconde 2;48 Point de départ.
    1 seconde 3;49 Première transition : moitié du trajet.
    2 secondes 4;50 Deuxième transition : arrivée.
    3 secondes 2;48 Retour au départ pour recommencer le trajet.
    Overmind://Evolving?Name=ForwardGisTripEvery1s&Type=GISVector&InitialValue=2,48&EndValue=4,50&Step=2&Interval=1
    
    

    Inverser InitialValue et EndValue inverse le trajet. Avec Random, un point est tiré au hasard sur le segment ; Step n’est pas utilisé.

    5. Synchroniser les évolutions avec un métronome

    5.1 Déclarer un métronome avec un handle

    Un métronome définit une cadence commune à plusieurs variables. Il se déclare lui aussi avec une URL, avant d’appliquer les variables qui vont l’utiliser.

    Métronome dont les battements sont espacés de 250 ms :

    Overmind://Metronome?Span=00:00:00.250&Name=Demo250ms
    
    
    Clé Rôle
    Name Nom obligatoire du métronome.
    Span Durée obligatoire et strictement positive entre deux battements. Elle accepte des secondes, y compris fractionnaires, ou une durée formatée.

    Le handle fournit sa période comme valeur, par exemple 00:00:00.2500000. Il est lisible avec la référence par nom décrite au début du document. Ce n’est pas un compteur de battements et il n’accepte pas d’écriture directe ; pour changer la période, enregistrer une nouvelle définition Metronome.

    Redéclarer le même nom met à jour Span sans redémarrer la phase commune. Si la nouvelle période est incompatible avec un intervalle de variable actif ou sauvegardé, la déclaration échoue explicitement et la période précédente reste appliquée.

    Les noms suivent la même règle d’unicité que les autres handles. Un métronome encore utilisé ne peut pas être remplacé par une variable Defined ou Evolving.

    5.2 Interval reste une durée

    Le métronome est facultatif. Sans Metronome, chaque handle évolue selon son intervalle depuis son initialisation. Les fractions de seconde sont acceptées : Interval=0.29 demande une évolution toutes les 290 ms.

    Avec Metronome, le handle conserve son intervalle et rejoint une origine temporelle commune. Deux handles ayant le même métronome et le même intervalle évoluent aux mêmes échéances, même s’ils ont été enregistrés à des moments différents.

    Un métronome possède un nom Name et une période Span strictement positive. L’intervalle du handle doit être un multiple entier positif de cette période. Ce sont toujours des durées : Interval=1 signifie une seconde, pas un battement.

    Span du métronome Interval du handle Résultat
    250 ms 1 seconde Évolution tous les 4 battements.
    250 ms 500 ms Évolution tous les 2 battements.
    250 ms 750 ms Évolution tous les 3 battements.
    250 ms 290 ms Refus : le rapport n’est pas entier.
    10 ms 290 ms Évolution tous les 29 battements.

    Sans Interval, la durée de 30 secondes reste appliquée et doit elle aussi être un multiple de Span. Un métronome absent de la configuration, un nom vide ou un intervalle incompatible produit une erreur explicite.

    5.3 Échéances communes

    Sur un métronome de 250 ms, des handles d’intervalles 500 ms et 750 ms ont une échéance commune toutes les 1,5 seconde. Un handle ajouté plus tard rejoint la prochaine échéance correspondant à son intervalle.

    Les notifications sont émises successivement, avec la date de l’échéance commune. La cadence n’est pas une garantie temps réel. En cas de retard du moteur, une seule évolution est appliquée pour la dernière échéance atteinte, sans rejouer tous les battements manqués. La reconnexion crée une nouvelle origine temporelle commune.

    5.4 Préparer les métronomes des exemples

    Le catalogue utilise Demo250ms, déclaré ci-dessus, et Demo10ms, dont les battements sont espacés de 10 ms :

    Overmind://Metronome?Span=00:00:00.010&Name=Demo10ms
    
    

    Appliquer ces deux URLs avant les sept exemples synchronisés. Elles figurent en tête du tableau PreloadPaths fourni à la fin du document. Il n’est plus nécessaire de préparer un fichier de base pour ces exemples.

    Lorsqu’un même lot d’enregistrement contient une déclaration de métronome et ses variables, Overmind traite d’abord la déclaration unique de ce métronome. Si plusieurs définitions partagent un même nom dans le lot, leur ordre reste celui de la demande pour conserver la règle du dernier enregistrement.

    Une déclaration par handle prend effet en mémoire, comme celle d’une variable. La réappliquer après une reconnexion si elle n’a pas été sauvegardée dans la base. L’administration Overmind permet aussi de créer, modifier et sauvegarder les métronomes.

    6. Qualité, date source et erreurs

    La qualité indique l’état simulé de la donnée ; elle est distincte du statut de connexion d’Overmind.

    Qualité Situation représentée
    Good Donnée valide.
    Unreachable Donnée inaccessible.
    SpecificError Erreur spécifique.
    Unhandled Handle non pris en charge.
    UnpluggedConnector Connecteur déconnecté.
    NoConnectorFound Aucun connecteur trouvé.

    Pour Defined, utiliser Status. Pour Evolving, utiliser Statuses=Good-Unreachable-SpecificError : une qualité est choisie dans cette liste à chaque évolution. Un libellé de qualité inconnu est converti en SpecificError.

    LastModificationDate fixe la date initiale d’un handle Defined. LastModificationTimeSpan recule la date source d’un Evolving sans modifier son intervalle : une valeur mise à jour toutes les secondes peut être présentée avec cinq minutes de retard.

    Le Hub et ConnectorTester conservent la qualité et la date source initiales. Ainsi une définition demandant Unreachable et une date fixe doit afficher ces mêmes informations dès l’enregistrement, puis lors d’une lecture par nom.

    Un échec d’enregistrement fournit un motif explicite et un log de niveau Error, associé au connecteur, au chemin et à la cause. Cela couvre notamment un Name absent, un type non pris en charge, une valeur mal formée, un intervalle nul, un métronome inconnu ou une écriture interdite.

    Une simulation qui échoue pendant une évolution publie SpecificError. Les autres handles continuent de fonctionner.

    7. Formats et caractères réservés des URL

    Les noms des paramètres, des types et des comportements sont insensibles à la casse. Les paramètres inconnus, répétés ou inapplicables à la famille du handle sont refusés.

    Le path étant une URL, certains caractères y ont un rôle réservé. Par exemple, ? introduit les paramètres et & les sépare. Lorsqu’un de ces caractères fait partie d’une valeur, il faut l’encoder pour qu’il reste dans cette valeur. Les espaces, les accents et le signe + doivent aussi être encodés dans les valeurs des paramètres.

    Caractère Encodage dans une valeur
    Espace %20
    Esperluette & %26
    Signe + %2B
    Signe = %3D
    Point d’interrogation ? %3F
    Dièse # %23
    Pourcentage % %25
    Virgule dans une paire GIS d’un Aggregate %2C

    Les nombres utilisent le point décimal : 21.5, 0.25. Les booléens utilisent true ou false, pas 0 ou 1.

    Les dates peuvent être écrites en ISO 8601, par exemple 2026-09-08T10:00:00Z. Une date sans fuseau est interprétée en UTC ; les dates publiées sont normalisées en UTC. Dans un décalage horaire positif, encoder le signe + : 2026-09-08T12:00:00%2B02:00.

    Les durées acceptent un nombre de secondes, éventuellement fractionnaire, ou le format [jours.]hh:mm:ss[.fractions]. Par exemple, 0.29 et 00:00:00.290 représentent 290 ms ; 1.02:03:04 représente 1 jour, 2 heures, 3 minutes et 4 secondes.

    8. Installation et conservation des données

    Le connecteur se distribue sous la forme de GraphicStream.Immersive.Hub.Connectors.Overmind.dll. En dehors du runtime .NET 10, sa dépendance applicative est GraphicStream.Immersive.Hub.Abstractions.dll, fournie par l’hôte.

    Pour ConnectorTester, copier la DLL Overmind dans le dossier Connectors situé à côté de l’exécutable, puis relancer le tester. Il doit proposer un seul connecteur Overmind. Le type de configuration est GraphicStream.Immersive.Hub.Connectors.Overmind.ConnectorSession.

    La base Overmind/database.json conserve les chemins du catalogue, les variables de l’administration et les définitions des métronomes. Les métronomes sont chargés à la connexion. Les chemins sauvegardés ne deviennent pas automatiquement des handles actifs ; ils doivent être enregistrés par un consommateur.

    Une déconnexion arrête les évolutions et vide le registre des handles actifs. Au redémarrage, enregistrer à nouveau les variables et les métronomes qui n’ont pas été sauvegardés. La base n’est pas une sauvegarde automatique de la dernière valeur de chaque handle.

    Un JSON de base mal formé ou des métronomes invalides empêchent la connexion et produisent une erreur. La suppression d’un chemin du catalogue accepte son nom, sa référence courte ou sa définition ; elle retire les entrées du même nom et sauvegarde la base.

    Pour adapter les anciens chemins, ajouter Name à toutes les définitions et donner des noms distincts aux variables qui étaient auparavant différenciées uniquement par Context.

    9. Exemples de handles

    9.1 Métronomes

    Métronome de 250 ms pour synchroniser les variables.

    Overmind://Metronome?Span=00:00:00.250&Name=Demo250ms
    
    

    Métronome de 10 ms pour les intervalles multiples de 10 ms.

    Overmind://Metronome?Span=00:00:00.010&Name=Demo10ms
    
    

    9.2 Valeurs définies

    Entier modifiable, initialisé à 20.

    Overmind://Defined?Name=MutableInteger20&Type=Integer&InitialValue=20
    
    

    Booléen modifiable, initialisé à false.

    Overmind://Defined?Name=MutableBooleanFalse&Type=Boolean&InitialValue=false
    
    

    Octet modifiable, initialisé à 128.

    Overmind://Defined?Name=MutableByte128&Type=SmallInteger&InitialValue=128
    
    

    Décimal modifiable, initialisé à 21,5.

    Overmind://Defined?Name=MutableDecimal21Point5&Type=Single&InitialValue=21.5
    
    

    Texte contenant des accents, des espaces, & et +.

    Overmind://Defined?Name=TextWithReservedCharacters&Type=String&InitialValue=%C3%89tage%201%20%26%20accueil%20%2B%20caf%C3%A9
    
    

    Date fixée au 8 septembre 2026 à 10 h UTC.

    Overmind://Defined?Name=FixedUtcDate&Type=DateTime&InitialValue=2026-09-08T10:00:00Z
    
    

    Date à 12 h en UTC+2, publiée à 10 h UTC.

    Overmind://Defined?Name=DateWithTimeZone&Type=DateTime&InitialValue=2026-09-08T12:00:00%2B02:00
    
    

    Position fixe : longitude 2, latitude 48.

    Overmind://Defined?Name=FixedGisPosition&Type=GISVector&InitialValue=2,48
    
    

    Texte libre de type Any.

    Overmind://Defined?Name=FreeText&Type=Any&InitialValue=texte%20libre
    
    

    Adresse URL conservée comme texte.

    Overmind://Defined?Name=UrlAsText&Type=Url&InitialValue=https:%2F%2Fexample.com%2Fstatus%3Fzone%3DA%26mode%3Dlive
    
    

    Identifiant Guid conservé comme texte.

    Overmind://Defined?Name=GuidAsText&Type=Guid&InitialValue=11111111-2222-3333-4444-555555555555
    
    

    Texte sans conversion, de type Unknow.

    Overmind://Defined?Name=UnknownTypeAsText&Type=Unknow&InitialValue=valeur%20sans%20conversion
    
    

    Valeur 123 conservée comme texte lorsque Type est omis.

    Overmind://Defined?Name=OmittedTypeAsText&InitialValue=123
    
    

    Entier initialisé à 0 par défaut.

    Overmind://Defined?Name=DefaultIntegerZero&Type=Integer
    
    

    Octet initialisé à 0 par défaut.

    Overmind://Defined?Name=DefaultByteZero&Type=SmallInteger
    
    

    Décimal initialisé à 0 par défaut.

    Overmind://Defined?Name=DefaultDecimalZero&Type=Single
    
    

    Booléen initialisé à false par défaut.

    Overmind://Defined?Name=DefaultBooleanFalse&Type=Boolean
    
    

    Texte vide par défaut.

    Overmind://Defined?Name=DefaultEmptyText&Type=String
    
    

    Date initialisée au 1er janvier de l’an 1 UTC.

    Overmind://Defined?Name=DefaultMinimumDate&Type=DateTime
    
    

    Position initialisée à longitude 0, latitude 0.

    Overmind://Defined?Name=DefaultGisOrigin&Type=GISVector
    
    

    Valeur 42 avec la qualité Good.

    Overmind://Defined?Name=GoodQualityValue&Type=Integer&InitialValue=42&Status=Good
    
    

    Valeur 42 avec la qualité Unreachable.

    Overmind://Defined?Name=UnreachableQualityValue&Type=Integer&InitialValue=42&Status=Unreachable
    
    

    Valeur 42 avec la qualité SpecificError.

    Overmind://Defined?Name=SpecificErrorQualityValue&Type=Integer&InitialValue=42&Status=SpecificError
    
    

    Valeur 42 avec la qualité Unhandled.

    Overmind://Defined?Name=UnhandledQualityValue&Type=Integer&InitialValue=42&Status=Unhandled
    
    

    Valeur 42 avec la qualité UnpluggedConnector.

    Overmind://Defined?Name=UnpluggedConnectorQualityValue&Type=Integer&InitialValue=42&Status=UnpluggedConnector
    
    

    Valeur 42 avec la qualité NoConnectorFound.

    Overmind://Defined?Name=NoConnectorFoundQualityValue&Type=Integer&InitialValue=42&Status=NoConnectorFound
    
    

    Valeur 42 datée du 1er janvier 2026 à 8 h UTC.

    Overmind://Defined?Name=FixedSourceDate&Type=Integer&InitialValue=42&LastModificationDate=2026-01-01T08:00:00Z
    
    

    Qualité inconnue convertie en SpecificError.

    Overmind://Defined?Name=UnknownQualityBecomesSpecificError&Type=Integer&InitialValue=42&Status=ErreurSimulee
    
    

    Variable nommée « Room A & floor 1 », avec un contexte descriptif.

    Overmind://Defined?Name=Room%20A%20%26%20floor%201&Type=Integer&InitialValue=20&Context=B%C3%A2timent%20A%2F%C3%89tage%201
    
    

    9.3 Valeurs évolutives autonomes

    Compteur de 0 à 100, +1 toutes les 5 s, puis retour à 0.

    Overmind://Evolving?Name=Increment0To100Every5s&Type=Integer&InitialValue=0&EndValue=100&Step=1&Interval=5&Behavior=Increment
    
    

    Compte à rebours de 3 à 0 toutes les secondes, puis retour à 3.

    Overmind://Evolving?Name=Countdown3To0Every1s&Type=Integer&InitialValue=3&EndValue=0&Step=1&Interval=1&Behavior=Decrement
    
    

    Entier aléatoire de 1 à 6 toutes les secondes.

    Overmind://Evolving?Name=RandomInteger1To6Every1s&Type=Integer&InitialValue=1&EndValue=6&Interval=1&Behavior=Random
    
    

    Alternance entre 2147483646 et 2147483647 toutes les secondes.

    Overmind://Evolving?Name=IntegerMaximumEvery1s&Type=Integer&InitialValue=2147483646&EndValue=2147483647&Interval=1
    
    

    Octet de 0 à 255, +85 toutes les secondes.

    Overmind://Evolving?Name=IncrementByte0To255Every1s&Type=SmallInteger&InitialValue=0&EndValue=255&Step=85&Interval=1&Behavior=Increment
    
    

    Octet de 255 à 0, -85 toutes les secondes.

    Overmind://Evolving?Name=DecrementByte255To0Every1s&Type=SmallInteger&InitialValue=255&EndValue=0&Step=85&Interval=1&Behavior=Decrement
    
    

    Octet aléatoire de 0 à 255 toutes les secondes.

    Overmind://Evolving?Name=RandomByteEvery1s&Type=SmallInteger&InitialValue=0&EndValue=255&Interval=1&Behavior=Random
    
    

    Décimal de 0 à 1, +0,25 toutes les secondes.

    Overmind://Evolving?Name=IncrementDecimal0To1Every1s&Type=Single&InitialValue=0&EndValue=1&Step=0.25&Interval=1&Behavior=Increment
    
    

    Décimal de 1 à 0, -0,25 toutes les secondes.

    Overmind://Evolving?Name=DecrementDecimal1To0Every1s&Type=Single&InitialValue=1&EndValue=0&Step=0.25&Interval=1&Behavior=Decrement
    
    

    Décimal aléatoire entre 0 et 1 toutes les secondes.

    Overmind://Evolving?Name=RandomDecimal0To1Every1s&Type=Single&InitialValue=0&EndValue=1&Interval=1&Behavior=Random
    
    

    Booléen inversé toutes les secondes avec Increment.

    Overmind://Evolving?Name=ToggleBooleanIncrementEvery1s&Type=Boolean&InitialValue=false&Interval=1&Behavior=Increment
    
    

    Booléen inversé toutes les secondes avec Decrement.

    Overmind://Evolving?Name=ToggleBooleanDecrementEvery1s&Type=Boolean&InitialValue=false&Interval=1&Behavior=Decrement
    
    

    Booléen choisi au hasard toutes les secondes.

    Overmind://Evolving?Name=RandomBooleanEvery1s&Type=Boolean&InitialValue=false&Interval=1&Behavior=Random
    
    

    Message de la liste intégrée choisi au hasard toutes les 2 s.

    Overmind://Evolving?Name=RandomBuiltInTextEvery2s&Type=String&Interval=2
    
    

    Messages de la liste intégrée parcourus dans l’ordre toutes les 2 s.

    Overmind://Evolving?Name=OrderedBuiltInTextEvery2s&Type=String&Interval=2&Behavior=Increment
    
    

    Alternance entre Arrêt et Marche toutes les 2 s.

    Overmind://Evolving?Name=ToggleStoppedRunningEvery2s&Type=String&InitialValue=Arr%C3%AAt&EndValue=Marche&Interval=2&Behavior=Increment
    
    

    Choix entre Libre et Occupé toutes les 2 s.

    Overmind://Evolving?Name=RandomFreeOccupiedEvery2s&Type=String&InitialValue=Libre&EndValue=Occup%C3%A9&Interval=2
    
    

    Cycle Accueil, Préparation, Exécution, Terminé toutes les 2 s.

    Overmind://Evolving?Name=OrderedWorkflowEvery2s&Type=String&Aggregate=Accueil,Pr%C3%A9paration,Ex%C3%A9cution,Termin%C3%A9&Interval=2
    
    

    Cycle A, C, B avec Decrement toutes les 2 s.

    Overmind://Evolving?Name=ReverseTextListEvery2s&Type=String&Aggregate=A,B,C&Behavior=Decrement&Interval=2
    
    

    État Libre, Occupé ou Maintenance choisi toutes les 2 s.

    Overmind://Evolving?Name=RandomStateListEvery2s&Type=String&Aggregate=Libre,Occup%C3%A9,Maintenance&Behavior=Random&Interval=2
    
    

    Liste A, B, C, D parcourue depuis B par sauts de 2 toutes les secondes.

    Overmind://Evolving?Name=SkipTwoFromBEvery1s&Type=String&Aggregate=A,B,C,D&InitialValue=B&Step=2&Interval=1
    
    

    Cycle des paliers 0, 10, 50, 100 toutes les 2 s.

    Overmind://Evolving?Name=IntegerLevelsEvery2s&Type=Integer&Aggregate=0,10,50,100&Interval=2
    
    

    Cycle des octets 0, 128, 255 toutes les 2 s.

    Overmind://Evolving?Name=ByteLevelsEvery2s&Type=SmallInteger&Aggregate=0,128,255&Interval=2
    
    

    Cycle des décimaux 18,5, 20,25 et 23,75 toutes les 2 s.

    Overmind://Evolving?Name=DecimalLevelsEvery2s&Type=Single&Aggregate=18.5,20.25,23.75&Interval=2
    
    

    Cycle false, false, true toutes les 2 s.

    Overmind://Evolving?Name=BooleanSequenceEvery2s&Type=Boolean&Aggregate=false,false,true&Interval=2
    
    

    Cycle entre trois dates UTC toutes les 2 s.

    Overmind://Evolving?Name=DateSequenceEvery2s&Type=DateTime&Aggregate=2026-09-08T08:00:00Z,2026-09-08T12:00:00Z,2026-09-08T18:00:00Z&Interval=2
    
    

    Cycle des textes A, B, C de type Any toutes les 2 s.

    Overmind://Evolving?Name=AnyTextListEvery2s&Type=Any&Aggregate=A,B,C&Interval=2
    
    

    Cycle des textes x, y, z de type Unknow toutes les 2 s.

    Overmind://Evolving?Name=UnknownTextListEvery2s&Type=Unknow&Aggregate=x,y,z&Interval=2
    
    

    Alternance entre deux URL toutes les 2 s.

    Overmind://Evolving?Name=UrlListEvery2s&Type=Url&Aggregate=https:%2F%2Fexample.com%2Fa,https:%2F%2Fexample.com%2Fb&Interval=2
    
    

    Alternance entre deux identifiants Guid toutes les 2 s.

    Overmind://Evolving?Name=GuidListEvery2s&Type=Guid&Aggregate=11111111-2222-3333-4444-555555555555,aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee&Interval=2
    
    

    Date de 10 h à 10 h 01, avancée de 30 s chaque seconde.

    Overmind://Evolving?Name=AdvanceDate30sEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=2026-09-08T10:01:00Z&Step=30&Interval=1
    
    

    Date avancée de 500 ms chaque seconde, sur une plage d’une minute.

    Overmind://Evolving?Name=AdvanceDate500msEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=00:01:00&Step=00:00:00.500&Interval=1
    
    

    Date de 10 h 01 à 10 h, reculée de 30 s chaque seconde.

    Overmind://Evolving?Name=RewindDate30sEvery1s&Type=DateTime&InitialValue=2026-09-08T10:01:00Z&EndValue=60&Step=30&Interval=1&Behavior=Decrement
    
    

    Date tirée au hasard dans une plage d’une minute, chaque seconde.

    Overmind://Evolving?Name=RandomDateWithinMinuteEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=00:01:00&Interval=1&Behavior=Random
    
    

    Trajet de (2,48) à (4,50) en deux transitions, une par seconde.

    Overmind://Evolving?Name=ForwardGisTripEvery1s&Type=GISVector&InitialValue=2,48&EndValue=4,50&Step=2&Interval=1
    
    

    Trajet de (4,50) à (2,48) en deux transitions, une par seconde.

    Overmind://Evolving?Name=ReverseGisTripEvery1s&Type=GISVector&InitialValue=4,50&EndValue=2,48&Step=2&Interval=1
    
    

    Point choisi sur le segment (2,48)-(4,50) chaque seconde.

    Overmind://Evolving?Name=RandomGisPointEvery1s&Type=GISVector&InitialValue=2,48&EndValue=4,50&Interval=1&Behavior=Random
    
    

    Parcours de trois positions dans l’ordre, une par seconde.

    Overmind://Evolving?Name=OrderedGisRouteEvery1s&Type=GISVector&Aggregate=48%2C2,49%2C3,50%2C4&Interval=1&Behavior=Increment
    
    

    Parcours de trois positions en sens inverse, une par seconde.

    Overmind://Evolving?Name=ReverseGisRouteEvery1s&Type=GISVector&Aggregate=48%2C2,49%2C3,50%2C4&Interval=1&Behavior=Decrement
    
    

    Position choisie parmi trois points chaque seconde.

    Overmind://Evolving?Name=RandomGisRouteEvery1s&Type=GISVector&Aggregate=48%2C2,49%2C3,50%2C4&Interval=1&Behavior=Random
    
    

    Compteur de 0 à 10, +1 toutes les 290 ms.

    Overmind://Evolving?Name=CounterEvery290ms&Type=Integer&InitialValue=0&EndValue=10&Interval=0.29
    
    

    Compteur de 0 à 10, +1 toutes les 90 s.

    Overmind://Evolving?Name=CounterEvery90s&Type=Integer&InitialValue=0&EndValue=10&Interval=00:01:30
    
    

    Compteur de 0 à 10, +1 tous les 1 jour, 2 h, 3 min et 4 s.

    Overmind://Evolving?Name=CounterEvery1d2h3m4s&Type=Integer&InitialValue=0&EndValue=10&Interval=1.02:03:04
    
    

    Compteur de 0 à 10 toutes les 250 ms, avec notation scientifique.

    Overmind://Evolving?Name=CounterEvery250msScientific&Type=Integer&InitialValue=0&EndValue=10&Interval=2.5e-1
    
    

    Compteur de 0 à 10 toutes les 30 s, intervalle omis.

    Overmind://Evolving?Name=CounterDefault30s&Type=Integer&InitialValue=0&EndValue=10
    
    

    Compteur de 0 à 2, +1 toutes les secondes, avec EndValue.

    Overmind://Evolving?Name=Counter0To2Every1s&Type=Integer&InitialValue=0&EndValue=2&Interval=1
    
    

    Compteur avec qualité Good, Unreachable ou SpecificError tirée chaque seconde.

    Overmind://Evolving?Name=RandomQualityCounterEvery1s&Type=Integer&InitialValue=0&EndValue=10&Interval=1&Statuses=Good-Unreachable-SpecificError
    
    

    Compteur évoluant chaque seconde avec la qualité Unreachable.

    Overmind://Evolving?Name=UnreachableCounterEvery1s&Type=Integer&InitialValue=0&EndValue=10&Interval=1&Statuses=Unreachable
    
    

    Compteur évoluant chaque seconde avec une qualité inconnue convertie en SpecificError.

    Overmind://Evolving?Name=UnknownQualityCounterEvery1s&Type=Integer&InitialValue=0&EndValue=10&Interval=1&Statuses=ErreurSimulee
    
    

    Compteur mis à jour chaque seconde, avec une date source reculée de 5 min.

    Overmind://Evolving?Name=CounterWith5MinuteOldDate&Type=Integer&InitialValue=0&EndValue=10&Interval=1&LastModificationTimeSpan=00:05:00&Context=D%C3%A9monstration%2FRetard
    
    

    9.4 Valeurs synchronisées par un métronome

    Compteur synchronisé toutes les secondes sur Demo250ms.

    Overmind://Evolving?Name=SynchronizedCounterEvery1s&Type=Integer&InitialValue=0&EndValue=100&Interval=00:00:01&Metronome=Demo250ms
    
    

    Booléen synchronisé avec le compteur précédent, toutes les secondes.

    Overmind://Evolving?Name=SynchronizedBooleanEvery1s&Type=Boolean&Interval=1&Metronome=Demo250ms
    
    

    Compteur évoluant tous les 2 battements de Demo250ms, soit 500 ms.

    Overmind://Evolving?Name=SynchronizedCounterEvery500ms&Type=Integer&InitialValue=0&EndValue=100&Interval=0.5&Metronome=Demo250ms
    
    

    Compteur évoluant tous les 3 battements de Demo250ms, soit 750 ms.

    Overmind://Evolving?Name=SynchronizedCounterEvery750ms&Type=Integer&InitialValue=0&EndValue=100&Interval=00:00:00.750&Metronome=Demo250ms
    
    

    Compteur évoluant tous les 29 battements de Demo10ms, soit 290 ms.

    Overmind://Evolving?Name=SynchronizedCounterEvery290ms&Type=Integer&InitialValue=0&EndValue=100&Interval=0.29&Metronome=Demo10ms
    
    

    Compteur synchronisé sur Demo250ms toutes les 30 s, intervalle omis.

    Overmind://Evolving?Name=SynchronizedCounterDefault30s&Type=Integer&InitialValue=0&EndValue=100&Metronome=Demo250ms
    
    

    Compteur synchronisé chaque seconde, avec une date source reculée de 2 s.

    Overmind://Evolving?Name=SynchronizedCounterWith2sOldDate&Type=Integer&InitialValue=0&EndValue=100&Interval=1&Metronome=Demo250ms&LastModificationTimeSpan=2
    
    

    10. Charger tous les exemples dans ConnectorTester

    Le tableau JSON ci-dessous contient 88 URLs : les deux métronomes, puis les 86 variables des exemples. Leurs noms sont identiques à ceux utilisés dans ce document.

    1. Fermer ConnectorTester, puis ouvrir appsettings.json à côté de son exécutable.
    2. Intégrer ces chemins dans HubSettings.PreloadPaths, en conservant les connecteurs, propriétés et chemins déjà configurés. Ne pas créer une seconde section HubSettings si elle existe déjà.
    3. Relancer le tester et activer Overmind.
    4. Appliquer les deux premières lignes, Demo250ms et Demo10ms, avec le bouton « Appliquer le Handle au Hub ».
    5. Appliquer les variables à tester. Les exemples synchronisés disposent alors de leurs métronomes.
    {
      "HubSettings": {
        "PreloadPaths": [
          "Overmind://Metronome?Span=00:00:00.250&Name=Demo250ms",
          "Overmind://Metronome?Span=00:00:00.010&Name=Demo10ms",
          "Overmind://Defined?Name=MutableInteger20&Type=Integer&InitialValue=20",
          "Overmind://Defined?Name=MutableBooleanFalse&Type=Boolean&InitialValue=false",
          "Overmind://Defined?Name=MutableByte128&Type=SmallInteger&InitialValue=128",
          "Overmind://Defined?Name=MutableDecimal21Point5&Type=Single&InitialValue=21.5",
          "Overmind://Defined?Name=TextWithReservedCharacters&Type=String&InitialValue=%C3%89tage%201%20%26%20accueil%20%2B%20caf%C3%A9",
          "Overmind://Defined?Name=FixedUtcDate&Type=DateTime&InitialValue=2026-09-08T10:00:00Z",
          "Overmind://Defined?Name=DateWithTimeZone&Type=DateTime&InitialValue=2026-09-08T12:00:00%2B02:00",
          "Overmind://Defined?Name=FixedGisPosition&Type=GISVector&InitialValue=2,48",
          "Overmind://Defined?Name=FreeText&Type=Any&InitialValue=texte%20libre",
          "Overmind://Defined?Name=UrlAsText&Type=Url&InitialValue=https:%2F%2Fexample.com%2Fstatus%3Fzone%3DA%26mode%3Dlive",
          "Overmind://Defined?Name=GuidAsText&Type=Guid&InitialValue=11111111-2222-3333-4444-555555555555",
          "Overmind://Defined?Name=UnknownTypeAsText&Type=Unknow&InitialValue=valeur%20sans%20conversion",
          "Overmind://Defined?Name=OmittedTypeAsText&InitialValue=123",
          "Overmind://Defined?Name=DefaultIntegerZero&Type=Integer",
          "Overmind://Defined?Name=DefaultByteZero&Type=SmallInteger",
          "Overmind://Defined?Name=DefaultDecimalZero&Type=Single",
          "Overmind://Defined?Name=DefaultBooleanFalse&Type=Boolean",
          "Overmind://Defined?Name=DefaultEmptyText&Type=String",
          "Overmind://Defined?Name=DefaultMinimumDate&Type=DateTime",
          "Overmind://Defined?Name=DefaultGisOrigin&Type=GISVector",
          "Overmind://Defined?Name=GoodQualityValue&Type=Integer&InitialValue=42&Status=Good",
          "Overmind://Defined?Name=UnreachableQualityValue&Type=Integer&InitialValue=42&Status=Unreachable",
          "Overmind://Defined?Name=SpecificErrorQualityValue&Type=Integer&InitialValue=42&Status=SpecificError",
          "Overmind://Defined?Name=UnhandledQualityValue&Type=Integer&InitialValue=42&Status=Unhandled",
          "Overmind://Defined?Name=UnpluggedConnectorQualityValue&Type=Integer&InitialValue=42&Status=UnpluggedConnector",
          "Overmind://Defined?Name=NoConnectorFoundQualityValue&Type=Integer&InitialValue=42&Status=NoConnectorFound",
          "Overmind://Defined?Name=FixedSourceDate&Type=Integer&InitialValue=42&LastModificationDate=2026-01-01T08:00:00Z",
          "Overmind://Defined?Name=UnknownQualityBecomesSpecificError&Type=Integer&InitialValue=42&Status=ErreurSimulee",
          "Overmind://Defined?Name=Room%20A%20%26%20floor%201&Type=Integer&InitialValue=20&Context=B%C3%A2timent%20A%2F%C3%89tage%201",
          "Overmind://Evolving?Name=Increment0To100Every5s&Type=Integer&InitialValue=0&EndValue=100&Step=1&Interval=5&Behavior=Increment",
          "Overmind://Evolving?Name=Countdown3To0Every1s&Type=Integer&InitialValue=3&EndValue=0&Step=1&Interval=1&Behavior=Decrement",
          "Overmind://Evolving?Name=RandomInteger1To6Every1s&Type=Integer&InitialValue=1&EndValue=6&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=IntegerMaximumEvery1s&Type=Integer&InitialValue=2147483646&EndValue=2147483647&Interval=1",
          "Overmind://Evolving?Name=IncrementByte0To255Every1s&Type=SmallInteger&InitialValue=0&EndValue=255&Step=85&Interval=1&Behavior=Increment",
          "Overmind://Evolving?Name=DecrementByte255To0Every1s&Type=SmallInteger&InitialValue=255&EndValue=0&Step=85&Interval=1&Behavior=Decrement",
          "Overmind://Evolving?Name=RandomByteEvery1s&Type=SmallInteger&InitialValue=0&EndValue=255&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=IncrementDecimal0To1Every1s&Type=Single&InitialValue=0&EndValue=1&Step=0.25&Interval=1&Behavior=Increment",
          "Overmind://Evolving?Name=DecrementDecimal1To0Every1s&Type=Single&InitialValue=1&EndValue=0&Step=0.25&Interval=1&Behavior=Decrement",
          "Overmind://Evolving?Name=RandomDecimal0To1Every1s&Type=Single&InitialValue=0&EndValue=1&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=ToggleBooleanIncrementEvery1s&Type=Boolean&InitialValue=false&Interval=1&Behavior=Increment",
          "Overmind://Evolving?Name=ToggleBooleanDecrementEvery1s&Type=Boolean&InitialValue=false&Interval=1&Behavior=Decrement",
          "Overmind://Evolving?Name=RandomBooleanEvery1s&Type=Boolean&InitialValue=false&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=RandomBuiltInTextEvery2s&Type=String&Interval=2",
          "Overmind://Evolving?Name=OrderedBuiltInTextEvery2s&Type=String&Interval=2&Behavior=Increment",
          "Overmind://Evolving?Name=ToggleStoppedRunningEvery2s&Type=String&InitialValue=Arr%C3%AAt&EndValue=Marche&Interval=2&Behavior=Increment",
          "Overmind://Evolving?Name=RandomFreeOccupiedEvery2s&Type=String&InitialValue=Libre&EndValue=Occup%C3%A9&Interval=2",
          "Overmind://Evolving?Name=OrderedWorkflowEvery2s&Type=String&Aggregate=Accueil,Pr%C3%A9paration,Ex%C3%A9cution,Termin%C3%A9&Interval=2",
          "Overmind://Evolving?Name=ReverseTextListEvery2s&Type=String&Aggregate=A,B,C&Behavior=Decrement&Interval=2",
          "Overmind://Evolving?Name=RandomStateListEvery2s&Type=String&Aggregate=Libre,Occup%C3%A9,Maintenance&Behavior=Random&Interval=2",
          "Overmind://Evolving?Name=SkipTwoFromBEvery1s&Type=String&Aggregate=A,B,C,D&InitialValue=B&Step=2&Interval=1",
          "Overmind://Evolving?Name=IntegerLevelsEvery2s&Type=Integer&Aggregate=0,10,50,100&Interval=2",
          "Overmind://Evolving?Name=ByteLevelsEvery2s&Type=SmallInteger&Aggregate=0,128,255&Interval=2",
          "Overmind://Evolving?Name=DecimalLevelsEvery2s&Type=Single&Aggregate=18.5,20.25,23.75&Interval=2",
          "Overmind://Evolving?Name=BooleanSequenceEvery2s&Type=Boolean&Aggregate=false,false,true&Interval=2",
          "Overmind://Evolving?Name=DateSequenceEvery2s&Type=DateTime&Aggregate=2026-09-08T08:00:00Z,2026-09-08T12:00:00Z,2026-09-08T18:00:00Z&Interval=2",
          "Overmind://Evolving?Name=AnyTextListEvery2s&Type=Any&Aggregate=A,B,C&Interval=2",
          "Overmind://Evolving?Name=UnknownTextListEvery2s&Type=Unknow&Aggregate=x,y,z&Interval=2",
          "Overmind://Evolving?Name=UrlListEvery2s&Type=Url&Aggregate=https:%2F%2Fexample.com%2Fa,https:%2F%2Fexample.com%2Fb&Interval=2",
          "Overmind://Evolving?Name=GuidListEvery2s&Type=Guid&Aggregate=11111111-2222-3333-4444-555555555555,aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee&Interval=2",
          "Overmind://Evolving?Name=AdvanceDate30sEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=2026-09-08T10:01:00Z&Step=30&Interval=1",
          "Overmind://Evolving?Name=AdvanceDate500msEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=00:01:00&Step=00:00:00.500&Interval=1",
          "Overmind://Evolving?Name=RewindDate30sEvery1s&Type=DateTime&InitialValue=2026-09-08T10:01:00Z&EndValue=60&Step=30&Interval=1&Behavior=Decrement",
          "Overmind://Evolving?Name=RandomDateWithinMinuteEvery1s&Type=DateTime&InitialValue=2026-09-08T10:00:00Z&EndValue=00:01:00&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=ForwardGisTripEvery1s&Type=GISVector&InitialValue=2,48&EndValue=4,50&Step=2&Interval=1",
          "Overmind://Evolving?Name=ReverseGisTripEvery1s&Type=GISVector&InitialValue=4,50&EndValue=2,48&Step=2&Interval=1",
          "Overmind://Evolving?Name=RandomGisPointEvery1s&Type=GISVector&InitialValue=2,48&EndValue=4,50&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=OrderedGisRouteEvery1s&Type=GISVector&Aggregate=48%2C2,49%2C3,50%2C4&Interval=1&Behavior=Increment",
          "Overmind://Evolving?Name=ReverseGisRouteEvery1s&Type=GISVector&Aggregate=48%2C2,49%2C3,50%2C4&Interval=1&Behavior=Decrement",
          "Overmind://Evolving?Name=RandomGisRouteEvery1s&Type=GISVector&Aggregate=48%2C2,49%2C3,50%2C4&Interval=1&Behavior=Random",
          "Overmind://Evolving?Name=CounterEvery290ms&Type=Integer&InitialValue=0&EndValue=10&Interval=0.29",
          "Overmind://Evolving?Name=CounterEvery90s&Type=Integer&InitialValue=0&EndValue=10&Interval=00:01:30",
          "Overmind://Evolving?Name=CounterEvery1d2h3m4s&Type=Integer&InitialValue=0&EndValue=10&Interval=1.02:03:04",
          "Overmind://Evolving?Name=CounterEvery250msScientific&Type=Integer&InitialValue=0&EndValue=10&Interval=2.5e-1",
          "Overmind://Evolving?Name=CounterDefault30s&Type=Integer&InitialValue=0&EndValue=10",
          "Overmind://Evolving?Name=Counter0To2Every1s&Type=Integer&InitialValue=0&EndValue=2&Interval=1",
          "Overmind://Evolving?Name=RandomQualityCounterEvery1s&Type=Integer&InitialValue=0&EndValue=10&Interval=1&Statuses=Good-Unreachable-SpecificError",
          "Overmind://Evolving?Name=UnreachableCounterEvery1s&Type=Integer&InitialValue=0&EndValue=10&Interval=1&Statuses=Unreachable",
          "Overmind://Evolving?Name=UnknownQualityCounterEvery1s&Type=Integer&InitialValue=0&EndValue=10&Interval=1&Statuses=ErreurSimulee",
          "Overmind://Evolving?Name=CounterWith5MinuteOldDate&Type=Integer&InitialValue=0&EndValue=10&Interval=1&LastModificationTimeSpan=00:05:00&Context=D%C3%A9monstration%2FRetard",
          "Overmind://Evolving?Name=SynchronizedCounterEvery1s&Type=Integer&InitialValue=0&EndValue=100&Interval=00:00:01&Metronome=Demo250ms",
          "Overmind://Evolving?Name=SynchronizedBooleanEvery1s&Type=Boolean&Interval=1&Metronome=Demo250ms",
          "Overmind://Evolving?Name=SynchronizedCounterEvery500ms&Type=Integer&InitialValue=0&EndValue=100&Interval=0.5&Metronome=Demo250ms",
          "Overmind://Evolving?Name=SynchronizedCounterEvery750ms&Type=Integer&InitialValue=0&EndValue=100&Interval=00:00:00.750&Metronome=Demo250ms",
          "Overmind://Evolving?Name=SynchronizedCounterEvery290ms&Type=Integer&InitialValue=0&EndValue=100&Interval=0.29&Metronome=Demo10ms",
          "Overmind://Evolving?Name=SynchronizedCounterDefault30s&Type=Integer&InitialValue=0&EndValue=100&Metronome=Demo250ms",
          "Overmind://Evolving?Name=SynchronizedCounterWith2sOldDate&Type=Integer&InitialValue=0&EndValue=100&Interval=1&Metronome=Demo250ms&LastModificationTimeSpan=2"
        ]
      }
    }