DLL HomeIO

Présentation

HomeIO dispose d'une DLL permettant de lire et écrire les valeurs de l'ensemble des capteurs et actionneurs de la maison.

HomeIO utilise le concept de Memory Mapped Files pour sauvegarder les données de la maison. Cette Memory Map est mise à jour en permanence par HomeIO qui indique les valeurs des capteurs, et lit les valeurs des actionneurs.

HomeIo met donc à disposition une DLL qui comporte un objet MemoryMap de type singleton (une seule instance peut exister). Cette instance représente une copie en cache de la Memory Map gérée par HomeIO.

La méthode MemoryMap.Instance.Update() est responsable de la synchronisation entre la version en cache de la Memory map et sa version en mémoire accessible et utilisée par HomeIO. Cette méthode doit être appelée à chaque fois que vous souhaitez que vos actions aient une incidence sur HomeIO ou pour récupérer l'état de la maison.

Vous pouvez récupérer https://realgames.b-cdn.net/hio/homeio-sdk.zip et la documentation : https://docs.realgames.co/homeio/en/sdk-getting-started/

Ce dossier contient des exemples (à étudier), et un explorateur (écrit en C#) pour voir l'état des capteurs/actionneurs.

Attention, avec la version .Net 6, il faut utiliser une version plus récente de la DLL, qui se trouve ici : https://github.com/realgamessoftware/factoryio-sdk (répertoire lib), ou directement téléchargeable ci-après

Cas de lecture simple

L'exemple ci-dessous permet de piloter la lampe du salon, et de l'allumer/éteindre 10 fois. La lumière du salon doit être en mode "pilotage externe" (external mode, icône en bleu)

using System;
using System.Threading;

using EngineIO; //import the HomeIO dll

namespace EngineIO.Samples
{
    class Program
    {
        //In this sample we are switching the living room light on and off 10 times.
        static void Main(string[] args)
        {
            //We are using a MemoryBit which we get from the MemoryMap.
            //You can find all the memory addresses at the Memory Addresses page.
            MemoryBit livingRoomLight = MemoryMap.Instance.GetBit(0, MemoryType.Output);

            for (int i = 0; i < 10; i++)
            {
                livingRoomLight.Value = !livingRoomLight.Value;

                //When using a memory value before calling the Update method we are using a cached value.
                Console.WriteLine("Light is on? " + livingRoomLight.Value);

                //Calling the Update method will write the livingRoomLight.Value to the memory map.
                MemoryMap.Instance.Update();

                Thread.Sleep(1000);
            }

            //When we no longer need the MemoryMap we should call the Dispose method to release all the allocated resources.
            MemoryMap.Instance.Dispose();

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Principe

  1. Récupérer l'adresse de l'élément que vous souhaitez piloter (ligne 15)

  2. Modifier sa valeur (ligne 19)

  3. Mettre à jour la MemoryMap (ligne 25)

La liste des adresses des différents capteurs et actionneurs se trouvent à cette adresse : https://docs.realgames.co/homeio/en/memory-addresses/

Les inputs (capteurs/interrupteurs) et les outputs (actionneurs/lumières/moteurs...) sont listés avec le type, l'adresse, la zone (pièce), son nom, et le type de contact.

Une même adresse peut être utilisée pour différentes inputs ou outputs en fonction du type manipulé.

Last updated