Veltron : display and control Velbus modules UI

Hello all,

here is a funny program (I hope) to control your house automation. It’s the first beta version because I need some feedback.
You need an IP/Velbus server (search on this forum they’re plenty :slight_smile: ).

Now download the following ZIP file, extract where you want (it’s portable) and read the PDF file first.
Here is how it looks :slight_smile:

**Download **: golfy.free.fr/Velbus/Veltron/Veltron.zip

Trop énorme !
Génial, extra !

Faut que j’installe mon petit eeepc 7" dans mon rack avec le serveur ip, et je teste cela rapidement ^^

Hello Golfy,

Your UI works fine, thanks for sharing your work. I am busy making my own interface but i Can’t get the status of my Relay module. I think you did the programing in C# (I hope this). Is it posible to pos there the code you use to get the status of a relay? I will apreciate this very much.

Regards

hi to bveklm,

here you see the code in c# express 2008 when you use a server.
i’m using VMB8PB ( address 1 to 12) ,VMB4PD( address 32), VMB4RY (address 48 to 51) , VMB1RY(address 52), VMB1DM(address 64 to 65), VMB1LED(address 80),VMB1TC(address 96) and VMB1TS(address 97 to 98)


        private void velbusConnector1_PacketReceived(Velbusserver.VelbusConnector.ReceivedPacketArgs ar)
        {
            // look if relay is on or off

            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 1 && ar.packet[3] == 1)// channel 1 is on
            {
                if (Bureel.InvokeRequired)
                    Bureel.BeginInvoke(new MethodInvoker(delegate() { Bureel.BackColor = Color.Green; }));
                else
                    Bureel.BackColor = Color.Green;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 1 && ar.packet[3] == 0)// channel 1 is off
            {
                if (Bureel.InvokeRequired)
                    Bureel.BeginInvoke(new MethodInvoker(delegate() { Bureel.BackColor = Color.Red; }));
                else
                    Bureel.BackColor = Color.Red;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 2 && ar.packet[3] == 2)// channel 2 is on
            {
                if (Master.InvokeRequired)
                    Master.BeginInvoke(new MethodInvoker(delegate() { Master.BackColor = Color.Green; }));
                else
                    Master.BackColor = Color.Green;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 2 && ar.packet[3] == 0)// channel 2 is off
            {
                if (Master.InvokeRequired)
                    Master.BeginInvoke(new MethodInvoker(delegate() { Master.BackColor = Color.Red; }));
                else
                    Master.BackColor = Color.Red;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 4 && ar.packet[3] == 4)// channel 3 is on
            {
                if (Guest.InvokeRequired)
                    Guest.BeginInvoke(new MethodInvoker(delegate() { Guest.BackColor = Color.Green; }));
                else
                    Guest.BackColor = Color.Green;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 4 && ar.packet[3] == 0)// channel3 is off
            {
                if (Guest.InvokeRequired)
                    Guest.BeginInvoke(new MethodInvoker(delegate() { Guest.BackColor = Color.Red; }));
                else
                    Guest.BackColor = Color.Red;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 8 && ar.packet[3] == 8)// channel4 is on
            {
                if (Kleerkast.InvokeRequired)
                    Kleerkast.BeginInvoke(new MethodInvoker(delegate() { Kleerkast.BackColor = Color.Green; }));
                else
                    Kleerkast.BackColor = Color.Green;
            }
            if (ar.packet.Address == 48 && ar.packet.Command == 251 && ar.packet[1] == 8 && ar.packet[3] == 0)// channel 4 is off
            {
                if (Kleerkast.InvokeRequired)
                    Kleerkast.BeginInvoke(new MethodInvoker(delegate() { Kleerkast.BackColor = Color.Red; }));
                else
                    Kleerkast.BackColor = Color.Red;
            }


            if (ar.packet.Address == 52 && ar.packet.Command == 251 && ar.packet[1] == 1 && ar.packet[3] == 1)
            {
                if (label11.InvokeRequired)
                    label11.BeginInvoke(new MethodInvoker(delegate() { label11.BackColor = Color.Green; }));
            }
            if (ar.packet.Address == 52 && ar.packet.Command == 251 && ar.packet[1] == 1 && ar.packet[3] == 0)
            {
                if (label11.InvokeRequired)
                    label11.BeginInvoke(new MethodInvoker(delegate() { label11.BackColor = Color.Red; }));
            }

            // Get value of the dimmer and put it into variables waarde1,2 & 3
            if (ar.packet.Address == 64 && ar.packet.Command == 238)
            {
                if (numericUpDown1.InvokeRequired)
                    numericUpDown1.BeginInvoke(new MethodInvoker(delegate() { label15.Text = Convert.ToString(ar.packet[2]); }));
            }
            if (ar.packet.Address == 65 && ar.packet.Command == 238)
            {
                if (numericUpDown2.InvokeRequired)
                    numericUpDown2.BeginInvoke(new MethodInvoker(delegate() { label14.Text = Convert.ToString(ar.packet[2]); }));
            }
            if (ar.packet.Address == 80 && ar.packet.Command == 238)
            {
                if (numericUpDown3.InvokeRequired)
                    numericUpDown3.BeginInvoke(new MethodInvoker(delegate() { label16.Text = Convert.ToString(ar.packet[2]); }));
            }
            // Get temperatures and put it into numericUpDownTemp's
            if (ar.packet.Address == 97 && ar.packet.Command == 234)
            {
                waarde13 = Convert.ToDecimal(ar.packet[5]);
                  if (numericUpDownTemp_leefruimte.InvokeRequired)
                      numericUpDownTemp_leefruimte .BeginInvoke(new MethodInvoker(delegate() { numericUpDownTemp_leefruimte.Value = waarde13 / 2; }));
            }
            if (ar.packet.Address == 98 && ar.packet.Command == 234)
            {
                waarde14 = Convert.ToDecimal(ar.packet[5]);
                if (numericUpDown_bureel.InvokeRequired)
                    numericUpDown_bureel.BeginInvoke(new MethodInvoker(delegate() { numericUpDown_bureel.Value = waarde14 / 2; }));
            }
            if (ar.packet.Address == 99 && ar.packet.Command == 234)
            {
                waarde15 = Convert.ToDecimal(ar.packet[5]);
                if (numericUpDown_temp_badkamer.InvokeRequired)
                    numericUpDown_temp_badkamer.BeginInvoke(new MethodInvoker(delegate() { numericUpDown_temp_badkamer.Value = waarde15 / 2; }));
            }

            // Get value from VMBTS and put it in waarde(4,5,6)
            if (ar.packet.Address == 97 && ar.packet.Command == 230)
            {
                waarde4 = (((ar.packet[5] * 256) + ar.packet[6]) / 32) * 0.0625;
            }
            if (ar.packet.Address == 98 && ar.packet.Command == 230)
            {
                waarde5 = (((ar.packet[5] * 256) + ar.packet[6]) / 32) * 0.0625;
            }
            if (ar.packet.Address == 99 && ar.packet.Command == 230)
            {
                waarde6 = (((ar.packet[5] * 256) + ar.packet[6]) / 32) * 0.0625;
            }

            //Looking for input on VMB8pd at address 12
            if (ar.packet.Address == 12 && ar.packet.Command == 0)
            {
                inputpir = ar.packet[2];
            }
        }

and to put a relay on and off

        private void Bureel_Click(object sender, EventArgs e)
        {
            if (Bureel.BackColor == Color.Red)
            {
                packet_out.Address = 48;
                packet_out.Priority = PacketPriority.High;
                packet_out.Rtr = false;
                packet_out.DataSize = 2;
                packet_out.Command = 2;
                packet_out[1] = 1;
                packet_out[2] = 0;
                packet_out[3] = 0;
                packet_out[4] = 0;
                velbusConnector1.SendPacket(packet_out);
            }
            else
            {
                packet_out.Address = 48;
                packet_out.Priority = PacketPriority.High;
                packet_out.Rtr = false;
                packet_out.DataSize = 2;
                packet_out.Command = 1;
                packet_out[1] = 1;
                packet_out[2] = 0;
                packet_out[3] = 0;
                packet_out[4] = 0;
                velbusConnector1.SendPacket(packet_out);
            }
        }

how to switch all modules off


        private void AllesUit_Click(object sender, EventArgs e)
        {
            //Switch all relaymodules off
            for (int i = 48; i <= 0x63; i++)
            {
                packet_out.Address = i;
                packet_out.Priority = PacketPriority.High;
                packet_out.Rtr = false;
                packet_out.DataSize = 2;
                packet_out.Command = 1;
                packet_out[1] = 15;
                packet_out[2] = 0;
                packet_out[3] = 0;
                packet_out[4] = 0;
                velbusConnector1.SendPacket(packet_out);
            }

            // Switch all dimmers off
            for (int i = 64; i <= 95; i++)
            {
                packet_out.Address = i;
                packet_out.Priority = PacketPriority.High;
                packet_out.Rtr = false;
                packet_out.DataSize = 5;
                packet_out.Command = 7;
                packet_out[1] = 1;
                packet_out[2] = 0;
                packet_out[3] = 0;
                packet_out[4] = 0;
                packet_out[5] = 0;
                velbusConnector1.SendPacket(packet_out);
            }
        }

how to command a dimmer


        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            packet_out.Address = 0x40;
            packet_out.Priority = PacketPriority.High;
            packet_out.Rtr = false;
            packet_out.DataSize = 0x05;
            packet_out.Command = 0x07;
            packet_out[1] = 0x01;
            packet_out[2] = Convert.ToByte(numericUpDown1.Value);
            packet_out[3] = 0xff;
            packet_out[4] = 0xff;
            packet_out[5] = 0x00;
            velbusConnector1.SendPacket(packet_out);
            label15.Text = Convert.ToString(numericUpDown1.Value);       
        }

to use it without a server


// Loop over all relaymodules
 // and send out my scan packet
 for (int i = 0x30; i <= 0x3F; i++)
 {
      packet.Address = i;
      packet.Priority = PacketPriority.Low;
      packet.Rtr = false;
      packet.DataSize = 2;
      packet.Command = 0xFA;
      packet[1] = 0x0F;
      bus.Send(packet);
 }

 // Loop over all dimmermodules
 // and send out my scan packet
 for (int i = 0x40; i <= 0x5F; i++)
 {
      packet.Address = i;
      packet.Priority = PacketPriority.Low;
      packet.Rtr = false;
      packet.DataSize = 2;
      packet.Command = 0xFA;
      packet[1] = 1;
      bus.Send(packet);
 }

 // Send out my scan packet to all the VMBTS modules
 for (int i = 0x61; i <= 0x6F; i++)
 {
     packet.Address = i;
     packet.Priority = PacketPriority.Low;
     packet.Rtr = false;
     packet.DataSize = 2;
     packet.Command = 0xFA;
     packet[1] = 1;
     bus.Send(packet);

     packet.Address = i;
     packet.Priority = PacketPriority.Low;
     packet.Rtr = false;
    packet.DataSize = 2;
    packet.Command = 0xE5;
    packet[1] = 0x00;
    packet[2] = 0x00;
    bus.Send(packet);
 }

 public void PacketReceived(object source, BusPacketIoEventArgs args)
 {
 // look if relay is on or off
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 1 && args.Packet[3] == 1)
 {
     if (Bureel.InvokeRequired)
         Bureel.BeginInvoke(new MethodInvoker(delegate() { Bureel.BackColor = Color.Green; }));
     else
         Bureel.BackColor = Color.Green;
 }
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 1 && args.Packet[3] == 0)
 {
     if (Bureel.InvokeRequired)
         Bureel.BeginInvoke(new MethodInvoker(delegate() { Bureel.BackColor = Color.Red; }));
     else
         Bureel.BackColor = Color.Red;
 }
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 2 && args.Packet[3] == 2)
 {
     if (Master.InvokeRequired)
         Master.BeginInvoke(new MethodInvoker(delegate() { Master.BackColor = Color.Green; }));
     else
         Master.BackColor = Color.Green;
 }
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 2 && args.Packet[3] == 0)
 {
     if (Master.InvokeRequired)
         Master.BeginInvoke(new MethodInvoker(delegate() { Master.BackColor = Color.Red; }));
     else
         Master.BackColor = Color.Red;
 }
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 4 && args.Packet[3] == 4)
 {
     if (Guest.InvokeRequired)
         Guest.BeginInvoke(new MethodInvoker(delegate() { Guest.BackColor = Color.Green; }));
     else
         Guest.BackColor = Color.Green;
 }
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 4 && args.Packet[3] == 0)
 {
     if (Guest.InvokeRequired)
         Guest.BeginInvoke(new MethodInvoker(delegate() { Guest.BackColor = Color.Red; }));
     else
         Guest.BackColor = Color.Red;
 }
 if (args.Packet.Address == 0x30 && args.Packet.Command == 0xFB && args.Packet[1] == 8 && args.Packet[3] == 8)
 {
     if (Kleerkast.InvokeRequired)
         Kleerkast.BeginInvoke(new MethodInvoker(delegate() { Kleerkast.BackColor = Color.Green; }));
     else
         Kleerkast.BackColor = Color.Green;
 }

 if (args.Packet.Address == 0x34 && args.Packet.Command == 0xFB && args.Packet[1] == 1 && args.Packet[3] == 1)
 {
     if (label10.InvokeRequired)
         label10.BeginInvoke(new MethodInvoker(delegate() { label10.BackColor = Color.Green; }));
 }
 if (args.Packet.Address == 0x34 && args.Packet.Command == 0xFB && args.Packet[1] == 1 && args.Packet[3] == 0)
 {
     if (label10.InvokeRequired)
         label10.BeginInvoke(new MethodInvoker(delegate() { label10.BackColor = Color.Red; }));
 }

 // Get value of the dimmer and put it into variables waarde1,2 & 3
 if (args.Packet.Address == 0x40 && args.Packet.Command == 0xEE)
 {
     if (numericUpDown1.InvokeRequired)
         numericUpDown1.BeginInvoke(new MethodInvoker(delegate() { label15.Text = Convert.ToString(args.Packet[2]); }));
 }
 if (args.Packet.Address == 0x41 && args.Packet.Command == 0xEE)
 {
     if (numericUpDown2.InvokeRequired)
         numericUpDown2.BeginInvoke(new MethodInvoker(delegate() { label14.Text = Convert.ToString(args.Packet[2]); }));
 }
 if (args.Packet.Address == 0x50 && args.Packet.Command == 0xEE)
 {
     if (numericUpDown3.InvokeRequired)
         numericUpDown3.BeginInvoke(new MethodInvoker(delegate() { label16.Text = Convert.ToString(args.Packet[2]); }));
 }
 if (args.Packet.Address == 0x61 && args.Packet.Command == 0xEA)
 {
     waarde13 = Convert.ToDecimal(args.Packet[5]);
     if (numericUpDownTemp_leefruimte.InvokeRequired)
         numericUpDownTemp_leefruimte.BeginInvoke(new MethodInvoker(delegate() {numericUpDownTemp_leefruimte.Value = waarde13/2;}));
 }
 if (args.Packet.Address == 0x62 && args.Packet.Command == 0xEA)
 {
     waarde14 = Convert.ToDecimal(args.Packet[5]);
     if (numericUpDown_bureel.InvokeRequired)
         numericUpDown_bureel.BeginInvoke(new MethodInvoker(delegate() {numericUpDown_bureel.Value = waarde14/2;}));
 }
 if (args.Packet.Address == 0x63 && args.Packet.Command == 0xEA)
 {
     waarde15 = Convert.ToDecimal(args.Packet[5]);
     if (numericUpDown_temp_badkamer.InvokeRequired)
         numericUpDown_temp_badkamer.BeginInvoke(new MethodInvoker(delegate() {numericUpDown_temp_badkamer.Value = waarde15/2;}));
 }

 // Get value from VMBTS and put it in waarde(4,5,6)
 if (args.Packet.Address == 0x61 && args.Packet.Command == 0xE6)
 {
     waarde4 = (((args.Packet[1] * 256) + args.Packet[2]) / 32) * 0.0625;
 }
 if (args.Packet.Address == 0x62 && args.Packet.Command == 0xE6)
 {
     waarde5 = (((args.Packet[1] * 256) + args.Packet[2]) / 32) * 0.0625;
 }
 if (args.Packet.Address == 0x63 && args.Packet.Command == 0xE6)
 {
     waarde6 = (((args.Packet[1] * 256) + args.Packet[2]) / 32) * 0.0625;
 }

 //Looking for input on VMB8pd
 if (args.Packet.Address == 0x0C && args.Packet.Command == 0x00)
 {
     inputpir = args.Packet[1];
 }
 }

 private void Bureel_Click(object sender, EventArgs e)
 {
     if (Bureel.BackColor == Color.Red)
     {
         packet.Address = 0x30;
         packet.Priority = PacketPriority.High;
         packet.Rtr = false;
         packet.DataSize = 2;
         packet.Command = 0x02;
         packet[1] = 0x01;
         packet[2] = 0x00;
         bus.Send(packet);
     }
      else
     {
         packet.Address = 0x30;
         packet.Priority = PacketPriority.High;
         packet.Rtr = false;
         packet.DataSize = 2;
         packet.Command = 0x01;
         packet[1] = 0x01;
         packet[2] = 0x00;
         bus.Send(packet);
     }
 }

to Golfy,

i have downloaded your program. is it correct that i can’t change the temperature?
I 've notice that the server crasches when you trie to use velbuslink on the same pc.
Did you write your program in C# or java or something else?

Hi Stis,

it’s written in Purebasic, an easy programming language with amazing capacities !
I’ve tried tu run VelbusLink and Veltron, without any problem, but I use PB_Velbus-server : could works differently with others IP to Velbus server (althrough it should not).

Yes, it’s not possible to change temperature, because it’s just a display :
It would be great to change the weather with Veltron but I’m not working on a such function for now :slight_smile:

Code could be send freely by email : golfy @} free.fr :slight_smile:
Missing functions :

  • blind control
  • buttons for macro control (like “close all west blind”)
  • Internet web service (very hard to securise)

Veltron 0.8 beta is arrived !
it’s a correction for crashing (problem was : when program didn’t found module on the map, it crash.). Now, if a module isn’t on a map, it don’t crash.
By the way, I’ve added a statusbar and… if you install espeak, Veltron is able to inform you in real time (funny but boring ! you’ve been informed :slight_smile: ).
Temp modification not present for now (I don’t have enough time to add functions quickly, sorry :frowning: )

Try it and gives feedback !!!
golfy.free.fr/Velbus/Veltron/Veltron.zip

Edit : Veltron 0.7 has introduced another bug, so I corrected it with version 0.8…

;------------------------------------------------------------------------------------------------------- ; VELTRON Auteur : David ROUMANET Date création : 30/10/2012 ; golfy@free.fr ;------------------------------------------------------------------------------------------------------- ; v0.8 Ajout Checkbox pour Voix. Correction Drag'n drop. Ajout Progressbar au chargement 12/11/2013 ; v0.7 Correction plantage sur Element() négatif. Ajout StatusBar (pour info...) 11/11/2013 ; v0.6 Modification structurelle : DrawPlan. Ajout de voix pour test 12/05/2013 ; v0.5 Ecriture proc. SCAN, lire/écrire modules, notions de type modules... 26/04/2013 ; v0.2 Ajout des procédures SCAN, Lecture de préférences, ... 04/10/2012 ; v0.1 Création (Canvas, TabPanel et Drag'n Drop) 30/10/2012 ;-------------------------------------------------------------------------------------------------------

Salut,

Je viens de tester le programme : il se connecte bien sur mon pc server ou tourne Velbus Server 3.07.
Je lance le scan, on le voit bien tourner sur le velbus server.

Mais une fois à 100% il n’y a rien.
J’ai bien essayé de faire save et autre, mais rien ne se passe ?

Dixit un beta-testeur (Benoît) :

En effet, je n’ai pas encore bouquiné les VMBGPxxx !!!

Pas de modules spécifiques de mon coté.
Juste des relais à sortie tension et des relais à volets, rien de très spécial.

Bonjour Daweb,

Quand tu fais un save, Veltron sauve le scan dans le fichier VelbusModules.lst et tu trouveras ce fichier (éditable) dans le répertoire de Veltron. Y a-t-il les données de ton installation dans ce fichier? Si oui, ouvres à nouveau Veltron et fais un “load” qui chargera les données de ce fichier et tu devrais voir tes modules sur la droite, dans la fenêtre de Veltron, tu les places alors sur le plan de la maison et de là, tu peux activer tes relais.

Benoît

Salut,
Non même faisant Save après le scan, le fichier ne se cree pas.
Le scan se déroule bien, ais n’affiche rien. Je fais save, rien ne se asse, rien ne se cree :frowning:

Okay, je travaille dessus… niveau stabilité, j’ai laissé le soft tourner une semaine --> sans problème !
La version actuelle est 0.9 :
golfy.free.fr/Velbus/Veltron/Veltron.zip

elle ajoute notamment :

  1. le déplacement de modules sur le plan (pour cela, il faut activer le bouton [Move] ). Si [Move] n’est pas actif, une tentative de déplacement affiche le nom du module dans la barre d’état du programme.
  2. Elle ajoute également un avancement du scan en temps réel.

J’espère que cette version fonctionnera mieux pour Daweb. Pour ceux qui ont des modules VMBGPO, je dois encore bosser mais il y a Noël bientôt… donc un temps que je réserve généralement à ma petite famille :slight_smile:

PS: pour VMBGPx, je pense que le problème vient de la classification… quelle icône choisir ? Temp ou bouton (c’est le type qui définit l’affichage) ! donc je dois trouver une solution pour gérer correctement ces boutons…

Salut,

Je viens de tester la nouvelle version, mais comme toujours, j’ai un joli total found : 0 à la fin du scan.
L’adresse de mes modules est basique : 1, 2 …

Mystère :frowning:

[quote=“Daweb”]Salut,

Je viens de tester la nouvelle version, mais comme toujours, j’ai un joli total found : 0 à la fin du scan.
L’adresse de mes modules est basique : 1, 2 …

Mystère :([/quote]

Bonjour Daweb,

une question : as-tu un serveur IP (Velbus <-> TCP/IP) ? en effet, le fonctionnement de Veltron est basé sur le dialogue avec le bus Velbus au travers d’un tel serveur. Tu peux choisir celui que tu veux (d’autres membres du forum proposent le leur dans les pages du forum).
Sinon, tu peux utiliser PB_Velbus-server : l’intérêt est qu’avec une seule prise USB( ou série), tu puisses utiliser plusieurs applications qui travaillent avec Velbus (ex: j’utilise un soft perso qui s’appelle Téa et qui est très bogué, Veltron et de temps en temps, je lance VelbusLink en même temps, et même depuis plusieurs PC)

Deuxièmement, si cela ne t’ennuie pas, peux-tu m’envoyer une capture d’écran après quelques secondes de scan de Veltron et également, le fichier VelbusModules.lst à la fin du scan (faire un SAVE avant de quitter Veltron) : Veltron utilise une boucle sur toutes les adresses possible (de 1 à 254). Il n’y a donc pas de raison qu’il ne détecte rien, sauf s’il n’arrive pas à communiquer avec le BUS.

Envoies le tout à mon adresse email : go lfy @ f *ree.fr (enlever les * et espaces)
Je ferais mon possible pour comprendre et permettre à tous d’utiliser Veltron :slight_smile:

Salut Golfy.
Oui j’utilise ton serveur :slight_smile:
Version 3.07

Et je vois bien le serveru passer le scan quand Veltron scan.
Mais le soucis justement c’est que le fichier Velbusmodules.lst n’est pas crée avec le SAVE.
donc difficile de te l’envoyer :frowning:

en bas pendant le scan on le voit chercher : scanned adress : 50 an found (empty add) (total found : 0)
Puis ca va jusqu’à 100%. Et il marque 0 module found en bas à gauche.
J’attend un peu pour voir, je sauve… Et aucun fichier ne se crée.

J’ai essayé directement sur le PC ou est le serveur (win XP) en mettant comme ip localhost et l’ip de la machine et 127.0.0.1
Et depuis mon autre Pc lui sous Win 8.1, idem.

Ok, voici une version 0.10 spéciale (debug au scan) : elle enregistre des variables de bas niveau dans un fichier “scandebug.txt”
Le format est d’ailleurs simple, voici par exemple mon premier module :

t:1 a$=[0FFB0108FF08FCECFCFC0818E60400] cpt=[0] Type=VMB4RY $1-1 => [PC-Ch. Parents] $1-2 => [PC-Cuisine] $1-3 => [X] $1-4 => [Hotte]
Merci de faire un scan et de me transmettre le résultat :slight_smile:
Mon email est indiqué dans le soft, y’a qu’a cliquer :slight_smile:

Pour le reste des améliorations :

  • Prise en compte des VMBGPO et VMBGPx
  • Possibilité d’appuyer sur les symboles boutons (pour simuler un appui réel)

Il suffit de placer le nouvel exécutable dans le répertoire Veltron
golfy.free.fr/Velbus/Veltron/Veltron_0.10.exe

J’attends vos retours :slight_smile:

[size=85]Edit 7:42 premier commentaire de ma part (mais corrigé)… les boutons VMBGPx utilise un simple nombre pour leur état, là où les VMB4PD et VMB8PB utilise une valeur binaire (1,2,4,8…)[/size]

Merci de ta réactivité :slight_smile:
Je teste cela d’ici 30 minutes.

Par ailleurs je vais aussi tester sur l’installation domotique demon bureau pour voir (qui est très simple, un seul module relai pour gérer 4 lumière)

Hum je vais pas avoir besoin de t’envoyer quoi que ce soit, cette version est en train de detecter :slight_smile:
Deja 6 trouvés et ça scan :slight_smile:

Petit retour (ça marche ^^)

J’ai quelques bugs sur certains noms mal notés, que j’ai corrigé en éditant le fichier.
Par contre pour les volets, pas encore au point : ca affiche juste un caré, et ça ouvre/ferme un peu aléatoirement.

Pour les lumières nickel.
Seul truc, quand on lance le logiciel, tout apparait comme eteint.
Il faudrait que le logiciel recupere l’état on/off des lampes.

GG en tout cas