Homegenie - centralne sterowanie - może się przyda

pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Homegenie - centralne sterowanie - może się przyda

Post by pawel »

Witam
Coraz częściej widzę, że przewijają się tematy z próbami/propozycjami sterowania HapCan'em z zewnętrz (przez sieć LAN czy internet).
Mimo, że sama koncepcja systemu jest taka by był to system rozproszony (każdy moduł jest autonomiczny) mi też się zdarza, że chciał bym posiadać jakiś punkt centralny w którym miął bym wszystkie informacje co się dzieje i mógł bym sterować wszystkim z jednego punktu czy też urządzeń typu komputer, tablet, telefon.
Znalazłem fajny projekt http://www.homegenie.it/ to co mi się podoba to to, że uruchomiłem sterowanie roletami w 15 min :) a wcale nie jestem biegły w programowaniu.
System pozwala pisać własne programy w C#, Javascript, Pyton i Rubby bezpośrednio w edytorze systemu. Jak również tworzyć władne widgety. Również można bezpośrednio programować Arduino....
Zresztą wszystko można poczytać na stronie.
Pozdrawiam
Pawel
Jacek
Posts: 560
Joined: 17 Feb 2007, 18:00

Re: Homegenie - centralne sterowanie - może się przyda

Post by Jacek »

Dzięki Pawle, wygląda interesująco.
Napisz proszę co zrobiłeś i na jakim serwerze, aby skomunikować się z HAPCAN-em. Zrzuty ekranu też będą mile widziane ;)
Regards
Jacek
pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Re: Homegenie - centralne sterowanie - może się przyda

Post by pawel »

OK ale dzisiaj krótko bo trzeba jutro do pracy iść...
Serwer stoi na RaspberryPi instalacja wg opisu na stronie Honegenie.
Komunikacja z HapCan za pomocą TcpClientHelper dokumentacja http://genielabs.github.io/HomeGenie/ap ... 00015.html
Dodałem program w którym dodałem wirtualny moduł "HomeAutomation.HapCan" dla rolet i oprogramowałem dzięki TcpClientHelper.
Niestety moja główna przygoda z programowaniem ominęła klasy więc program jest troszkę.... OK nie będę się tłumaczył chciał bym to zrobić ładniej i bardzie elastycznie ale na razie nie potrafi, kod programu w załaczeniu. Jak by ktoś z większą wiedza programistyczą był w stanie coś wspomóc to wdzięczny :|

Proszę o pytania to jak się wyśpię to postaram się coś więcej opisać

https://www.dropbox.com/s/6g49xwgbyz6ka ... 2.png?dl=0
1.png
https://www.dropbox.com/s/cv2sjaqqp2ex8 ... 9.png?dl=0
2.png
https://www.dropbox.com/s/k5aw9lgfgvqhc ... 2.png?dl=0
3.png
https://www.dropbox.com/s/ap1zvtx37hm10 ... x.txt?dl=0

Code: Select all

<?xml version="1.0" encoding="utf-16"?>
<ProgramBlock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ConditionType>OnTrue</ConditionType>
  <Conditions />
  <Commands />
  <ScriptCondition>// Put your trigger code logic here.
// To execute the Code To Run,
// use a 'return true' or 'return false' otherwise.

Program.Setup(()=>{
    Program.AddOption("HCAddress", "192.168.0.?", "HapCan Ethernet IP Address","text");
  	Program.AddOption("HCPort","1003", "HapCan ethernet port","text");
  	//
  	// Create 5 virtual modules with the domain "HomeAutomation.PhilipsHue" and with address from 1 to 5
  	// "Dimmer" is the type and "GenericColorLight" is the widget to be used to display the virtual module
  	// See directory "html/pages/control/widgets/" for widget list
  	Program.AddVirtualModules("HomeAutomation.HapCan", "Shutter", "homegenie/generic/shutter", 1, 9);
  	Program.AddFeature ("HomeAutomation.HapCan", "Shutter","NodeNr", "Numer modulu", "text");
  	Program.AddFeature ("HomeAutomation.HapCan", "Shutter","GroupNr", "Numer grupy", "text");
  	Program.AddFeature ("HomeAutomation.HapCan", "Shutter","Channel", "Kanal", "text");
  
  
});
return false;
</ScriptCondition>
  <ScriptSource>
/*
Action<string> 
HandleStringReceived = (string message) => {
  	// this will be called every time a message is received from serial port
	Program.Notify("HapCan String", message);
    //          Program.RaiseEvent( "HapCan message", "Jest kurewska wiadomosc", "HapCan module");
};
*/
Action<byte[]> HandleMessageReceived = (byte[] message) => {
  	// this will be called every time a message is received from serial port
	Program.Notify("HapCan Bytes", BitConverter.ToString(message));
//    Program.RaiseEvent("HapCan message", "length " + message.Length, "HapCan module");
/*
  	int count = 0;
    foreach (byte element in message)
    {
      count += 1;
      Program.RaiseEvent("HapCan message", "byte " + count + "=" + element.ToString("X2"), "HapCan module");
    }    
*/
//         Program.RaiseEvent("HapCan message", "Jest kurwa wiadomosc", "HapCan module");
    //         Program.RaiseEvent("HapCan message", "Jest kurwa wiadomosc", "HapCan module");
  };

Action<bool>
HandleStatusChanged = (bool connected) => {
  	// this will be called every time the connection status changes
  	Program.Notify("HapCan Status", connected ? "CONNECTED!" : "DISCONNECTED!");
  	//Program.RaiseEvent("HapCan message", connected ? "CONNECTED! event" : "DISCONNECTED! event", "HapCan module");
};
  

// open the serial port channel and register handlers
TcpClient
  .Service( "192.168.88.90" )
  	.OnMessageReceived( HandleMessageReceived )
  	.OnStatusChanged( HandleStatusChanged )
//  	.OnStringReceived( HandleStringReceived )
  	.Connect( 1003 ); // change baud rate if needed


Func<byte[], byte> calculate_checksum = (byte[] message) => 
{
            //calculate the checksum
            byte checksum = 0;
            for(int i=1; i<13; i++)
                checksum += (byte)message[i];
            //display
            //label3.Text = checksum.ToString("X2");
  	return checksum;
};

var HapCanModules = Modules.InDomain("HomeAutomation.HapCan");

// - http://&lt;hg_address&gt;/api/HomeAutomation.PhilipsHue/...
When.WebServiceCallReceived("HomeAutomation.HapCan", ( args ) => 
{
    if (!TcpClient.IsConnected) {
	  	Program.Notify("HapCan Status", "DISCONNECTED!");
  		return false;  
    }
  	string[] reqs = ((string)args).Split('/');
    //string domain = reqs[0];
    try
    {
      string lightnumber = reqs[1];
      string command = reqs[2];
      string parameter = ""; if (reqs.Length > 3) parameter = Uri.UnescapeDataString(reqs[3]);
      //
      var module = HapCanModules.WithAddress(lightnumber).Get();
      //
            byte[] txBytes = new byte[15];
      switch(command)
      {
		// eg. http://&lt;hg_address&gt;/api/HomeAutomation.PhilipsHue/&lt;light_number&gt;/Control.On
        case "Control.On":
        case "Control.Up":
            try
            {
                //form frame
                txBytes[0] = 0xAA;                              //start byte
                txBytes[14] = 0xA5;                             //stop byte
                                                     
                txBytes[1] = 0x10;                              
                txBytes[2] = 0xA0;                              
                txBytes[3] = 0x05;   //komputer node nr                           
                txBytes[4] = 0x01;    // komputer group nr                          
                txBytes[5] = 0x03; //kierunek  0x00 STOP, 0x03 UP, 0x04 DOWN                             
                txBytes[6] = Convert.ToByte(module.Parameter("Channel").Value);//.0x01; //channel                              
                txBytes[7] = Convert.ToByte(module.Parameter("NodeNr").Value);//0x01;  //NodeNr                             
                txBytes[8] = Convert.ToByte(module.Parameter("GroupNr").Value);//0x04; //GroupNr                             
                txBytes[9] = 0x00;                              
                txBytes[10] = 0xFF;                              
                txBytes[11] = 0xFF;                              
                txBytes[12] = 0xFF;                              
                txBytes[13] = calculate_checksum(txBytes); // checksum                              

              //Program.RaiseEvent(module, "HapCan message", BitConverter.ToString(txBytes), "HapCan module");
              
               TcpClient.SendMessage(txBytes);
                
              //display
                /*string txLine = "";
                for (int i = 0; i &lt; 15; i++)
                    txLine += (txBytes[i].ToString("X2") + " ");
                AddText("-----");
                AddText("TX -&gt;  " + txLine);*/
            }
            catch (Exception ex)
            {
              Program.RaiseEvent(module, "HapCan message", ex.Message, "HapCan module");
                //AddText(ex.Message);
                //Disconnect_Click(null,null);
            }
        
        
        
        
        
        
        
        //bridgeapicall(lightnumber, "{ \"on\" : true }");
        	Program.RaiseEvent(module, "Status.Level", "1", "HapCan module");
        	break;
		// eg. http://&lt;hg_address&gt;/api/HomeAutomation.PhilipsHue/&lt;light_number&gt;/Control.Off
        case "Control.Off":
        case "Control.Down":
            try
            {
                //form frame
                txBytes[0] = 0xAA;                              //start byte
                txBytes[14] = 0xA5;                             //stop byte
                                                     
                txBytes[1] = 0x10;                              
                txBytes[2] = 0xA0;                              
                txBytes[3] = 0x05;   //komputer node nr                           
                txBytes[4] = 0x01;    // komputer group nr                          
                txBytes[5] = 0x04; //kierunek  0x00 STOP, 0x03 UP, 0x04 DOWN                             
                txBytes[6] = Convert.ToByte(module.Parameter("Channel").Value);//.0x01; //channel                              
                txBytes[7] = Convert.ToByte(module.Parameter("NodeNr").Value);//0x01;  //NodeNr                             
                txBytes[8] = Convert.ToByte(module.Parameter("GroupNr").Value);//0x04; //GroupNr                             
                txBytes[9] = 0x00;                              
                txBytes[10] = 0xFF;                              
                txBytes[11] = 0xFF;                              
                txBytes[12] = 0xFF;                              
                txBytes[13] = calculate_checksum(txBytes); // checksum                              

              //Program.RaiseEvent(module, "HapCan message", BitConverter.ToString(txBytes), "HapCan module");
              
               TcpClient.SendMessage(txBytes);
                
              //display
                /*string txLine = "";
                for (int i = 0; i &lt; 15; i++)
                    txLine += (txBytes[i].ToString("X2") + " ");
                AddText("-----");
                AddText("TX -&gt;  " + txLine);*/
            }
            catch (Exception ex)
            {
              Program.RaiseEvent(module, "HapCan message", ex.Message, "HapCan module");
                //AddText(ex.Message);
                //Disconnect_Click(null,null);
            }
    	    //bridgeapicall(lightnumber, "{ \"on\" : false }");
        	Program.RaiseEvent(module, "Status.Level", "0", "HapCan module");
        	break;

        case "Control.Stop":
            try
            {
                //form frame
                txBytes[0] = 0xAA;                              //start byte
                txBytes[14] = 0xA5;                             //stop byte
                                                     
                txBytes[1] = 0x10;                              
                txBytes[2] = 0xA0;                              
                txBytes[3] = 0x05;   //komputer node nr                           
                txBytes[4] = 0x01;    // komputer group nr                          
                txBytes[5] = 0x00; //kierunek  0x00 STOP, 0x03 UP, 0x04 DOWN                             
                txBytes[6] = Convert.ToByte(module.Parameter("Channel").Value);//.0x01; //channel                              
                txBytes[7] = Convert.ToByte(module.Parameter("NodeNr").Value);//0x01;  //NodeNr                             
                txBytes[8] = Convert.ToByte(module.Parameter("GroupNr").Value);//0x04; //GroupNr                             
                txBytes[9] = 0x00;                              
                txBytes[10] = 0xFF;                              
                txBytes[11] = 0xFF;                              
                txBytes[12] = 0xFF;                              
                txBytes[13] = calculate_checksum(txBytes); // checksum                              

              //Program.RaiseEvent(module, "HapCan message", BitConverter.ToString(txBytes), "HapCan module");
              
               TcpClient.SendMessage(txBytes);
                
              //display
                /*string txLine = "";
                for (int i = 0; i &lt; 15; i++)
                    txLine += (txBytes[i].ToString("X2") + " ");
                AddText("-----");
                AddText("TX -&gt;  " + txLine);*/
            }
            catch (Exception ex)
            {
              Program.RaiseEvent(module, "HapCan message", ex.Message, "HapCan module");
                //AddText(ex.Message);
                //Disconnect_Click(null,null);
            }
    	    //bridgeapicall(lightnumber, "{ \"on\" : false }");
        	Program.RaiseEvent(module, "Status.Level", "0", "HapCan module");
        	break;
        
        case "Control.Toggle":
        	if (module.Parameter("Status.Level").DecimalValue == 0)
            {
              	//bridgeapicall(lightnumber, "{ \"on\" : true }");
              	Program.RaiseEvent(module, "Status.Level", "1", "HapCan module");
            }
        	else
            {
              	//bridgeapicall(lightnumber, "{ \"on\" : false }");
	        	Program.RaiseEvent(module, "Status.Level", "0", "HapCan module");
            }
        	break;
        case "Control.Level":
    	    //bridgeapicall(lightnumber, "{ \"bri\" : " + ((int)(double.Parse(parameter) * 2.5)).ToString() + " }");
            Program.RaiseEvent(module, "Status.Level", (double.Parse(parameter) / 100D).ToString(), "HapCan module");
        	break;
        case "Status.Level":
    	    //bridgeapicall(lightnumber, "{ \"bri\" : " + ((int)(double.Parse(parameter) * 2.5)).ToString() + " }");
            //Program.RaiseEvent(module, "Status.Level", (double.Parse(parameter) / 100D).ToString(), "HapCan module");
	      	break;
		// eg. http://&lt;hg_address&gt;/api/HomeAutomation.PhilipsHue/&lt;light_number&gt;/Control.ColorHsb/&lt;hue&gt;,&lt;sat&gt;,&lt;bri&gt;
/*        case "Control.ColorHsb":
        	string[] values = parameter.Split(',');
        	double transition = 5;
        	if (values.Length > 3) transition = ((int)(double.Parse(values[3]) * 10)); 
    	    bridgeapicall(lightnumber, "{ \"on\" : true" + 
                        ", \"hue\" : " + (int)(double.Parse(values[0], System.Globalization.CultureInfo.InvariantCulture) * 65536) + 
                        ", \"sat\" : " + (int)(double.Parse(values[1], System.Globalization.CultureInfo.InvariantCulture) * 255) + 
                        ", \"bri\" : " + (int)(double.Parse(values[2], System.Globalization.CultureInfo.InvariantCulture) * 255) + 
						", \"transitiontime\" : " + transition.ToString() +  "}");
            Program.RaiseEvent(module, "Status.Level", (double.Parse(values[2], System.Globalization.CultureInfo.InvariantCulture)).ToString(), "HapCan module");
            Program.RaiseEvent(module, "Status.ColorHsb", parameter, "HapCan module");
        	break; */
      }
      //
      return "{ 'ResponseValue' : 'OK' }";    
    } catch (Exception e) { 
      
    	Program.Notify("HapCan ERROR!", e.Message);
                       
    }
    return "{ 'ResponseValue' : 'ERROR' }";
});


/*
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
*/

/*
When.ModuleParameterIsChanging( (module, parameter) =>
{
    if (module.Is("Wykusz Lewa") &amp;&amp; parameter.Is("Control.On"))
    {
        // ...
        // stop event propagation
            Program.RaiseEvent("Status.ColorHsb", "DUPA", "HapCan module");
        return false;
    }
    // continue event propagation
            //Program.RaiseEvent("Status.ColorHsb", "JASIO", "HapCan module");
    return true;
}); 

*/
                   

/*
while (Program.IsEnabled)
{
 	if ( !TcpClient.IsConnected ){
        Program.RaiseEvent("HapCan message", "Rozlaczony, pr?ba polaczenia", "HapCan module");
          TcpClient
            .Service( "192.168.88.90" )
              .OnMessageReceived( HandleMessageReceived )
              .OnStatusChanged( HandleStatusChanged )
          //  	.OnStringReceived( HandleStringReceived )
              .Connect( 1003 ); // change baud rate if needed
    }else{
      Program.RaiseEvent("HapCan message", "Polaczony", "HapCan module");
    } 
  Pause(30);

}
*/

//Program.RaiseEvent("HapCan", "Ide spac", "HapCan module");
Program.GoBackground();
</ScriptSource>
  <ScriptErrors>[]</ScriptErrors>
  <Domain>HomeAutomation.HomeGenie.Automation</Domain>
  <Address>1000</Address>
  <Name>HapCan</Name>
  <Description>Testowy program do sterowania urz?dzeniami systemu HAPCAN</Description>
  <Group>HAPCAN</Group>
  <Features>
    <ProgramFeature>
      <FieldType>text</FieldType>
      <ForDomains>HomeAutomation.HapCan</ForDomains>
      <ForTypes>Shutter</ForTypes>
      <Property>NodeNr</Property>
      <Description>Numer modulu</Description>
    </ProgramFeature>
    <ProgramFeature>
      <FieldType>text</FieldType>
      <ForDomains>HomeAutomation.HapCan</ForDomains>
      <ForTypes>Shutter</ForTypes>
      <Property>GroupNr</Property>
      <Description>Numer grupy</Description>
    </ProgramFeature>
    <ProgramFeature>
      <FieldType>text</FieldType>
      <ForDomains>HomeAutomation.HapCan</ForDomains>
      <ForTypes>Shutter</ForTypes>
      <Property>Channel</Property>
      <Description>Kanal</Description>
    </ProgramFeature>
  </Features>
  <ActivationTime>2015-09-27T06:45:21.560287Z</ActivationTime>
  <TriggerTime>2015-09-27T06:45:26.896718Z</TriggerTime>
  <Type>CSharp</Type>
  <IsEnabled>true</IsEnabled>
</ProgramBlock>

Pozdrawiam
Pawel
Jacek
Posts: 560
Joined: 17 Feb 2007, 18:00

Re: Homegenie - centralne sterowanie - może się przyda

Post by Jacek »

Wygląda to naprawdę nieźle. Tylko chyba przesadziłeś z tymi 15 minutami ;). Ale podejrzewam, że warto poświęcić trochę czasu na rozgryzienie programu.
Zorientowałeś się czy wizualizacja może mieć dowolny wygląd, czy też jest ograniczona do wyswietlania odseparowanych bloków widget-ów?
Regards
Jacek
pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Re: Homegenie - centralne sterowanie - może się przyda

Post by pawel »

Jacek wrote:Wygląda to naprawdę nieźle. Tylko chyba przesadziłeś z tymi 15 minutami ;). Ale podejrzewam, że warto poświęcić trochę czasu na rozgryzienie programu.
No OK może 15min i 30 sekund ;). Nie no jak widać w kodzie nie ma jakiś większych przemyśleń i choćby próby zoptymalizowania. te 15 min to od momentu jak doszedłem do wniosku, że jak jest TCPHelperClass to może sie dogada z HapCan. Więc parę linijek CTRL+C, CTRL+V dodany widget i roleta pojechała.
A potem dalej dalej i stop bo chciałbym, żeby było ładniej napisane i bardziej elastyczne i .... samozapacia zabrakło :( ale cały czas obiecują sobie że podszkolę C# i zrobię.
Marzyło mi się, żeby zrobić obsługę modułów HapCan tak jak zrobili między innymi dla ZWave
https://www.dropbox.com/s/tyb8v0cieh9s7 ... 0.png?dl=0
ale niestety szybko poległem :|

Jacek wrote:Zorientowałeś się czy wizualizacja może mieć dowolny wygląd, czy też jest ograniczona do wyswietlania odseparowanych bloków widget-ów?
Chyba raczej odseparowane bloki, chociaż myślę że w ramach bloku to już można zrobić co się chce http://genielabs.github.io/HomeGenie/widgets.html.
A z drugiej strony to chyba dzięki API http://genielabs.github.io/HomeGenie/ap ... rview.html można sobie to zorganizować jak się chce, ale tu mogę się mylić.
Pozdrawiam
Pawel
Bartek
Posts: 326
Joined: 14 Jul 2011, 19:36
Location: Wrocław
Contact:

Re: Homegenie - centralne sterowanie - może się przyda

Post by Bartek »

Ciekawe rozwiązanie. Dzięki za info, z chęcią przetestuję. Już dwa inne podobne systemy sprawdziłem i nie spełniają moich potrzeb a mój autorski prędzej do piachu pójdzie niż doczeka się finalnej wersji ;). Tego jakoś wcześniej nie znalazłem.
Bartek
Posts: 326
Joined: 14 Jul 2011, 19:36
Location: Wrocław
Contact:

Re: Homegenie - centralne sterowanie - może się przyda

Post by Bartek »

Przejrzałem tego "typa" i ma potencjał. Chociaż z tego co widzę to "pluginy" do komunikacji z wybranymi systemami tak nie do końca są pluginami i częściowo są zdaje się skompilowane w kodzie homegenie - mam nadzieję, że się mylę, to będzie prościej ;).

Podejmę próbę dorobienia plugina do hapcana, żeby nie trzeba było pisać tych wszystkich hex kodów a w samym "programie" HG zawrzeć tylko logikę działania.
pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Re: Homegenie - centralne sterowanie - może się przyda

Post by pawel »

PelzaK wrote:Chociaż z tego co widzę to "pluginy" do komunikacji z wybranymi systemami tak nie do końca są pluginami i częściowo są zdaje się skompilowane w kodzie homegenie - mam nadzieję, że się mylę, to będzie prościej ;).
Chyba masz rację gość opisuje jak napisać swój plugin.. ale teraz nie potrafię tego znaleźć było to w dziale tego MIG Interface PLUGIN
Wcześniej było opisane nawet z przykładowym plugin'em exaple:| teraz jednak tego nie widzę a właśnie na początku też chciałem stworzyć plugin ale właśnie poległem już na samym konfigurowaniu środowiska programistycznego :|
Jak znajdę to podeślę a i mam nadzieję, że uda Ci się jakiś plugin popełnić to podeślesz zgłaszam się na betatestera :)

aaa teraz widzę, aktualnie jest to rozdzielone na osobne repozytoria https://github.com/genielabs?tab=repositories z nazwami *-lib-dotnet
teraz to już w ogóle dla mnie czarna magia.
Pozdrawiam
Pawel
Bartek
Posts: 326
Joined: 14 Jul 2011, 19:36
Location: Wrocław
Contact:

Re: Homegenie - centralne sterowanie - może się przyda

Post by Bartek »

Im dalej w kod tym więcej drzew ;). Trochę dziwnie wygląda kod w chwili obecnej, niby są pluginy, ale jednak wkompilowane też są w tego całego MIGa.
Wygląda na to, że kod jest w trakcie migracji "na pluginy".

Nie znalazłem też opisu jak generować plugin w postaci zipa, aby dało się go zaciągnąć z tego konfiguratora webowego. W środku jest kilka plików, które definiują różne rzeczy. Konto na ichszym forum czeka na akceptację od kilku dni, więc niestety nawet nie ma jak i gdzie zadać pytań.
pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Re: Homegenie - centralne sterowanie - może się przyda

Post by pawel »

Nie ukrywam, że bardzo mnie zmartwiło to co piszesz :(
Miałem nadzieję, że będzie lepiej.
Pocieszające jest to, że w tej sytuacji troszkę sie lepiej czuję z moją porażką :)

Wydaje mi się, że gość troszkę przebudowuje całość co widać choćby po wersji było 1.0 beta a teraz 1.1 beta.... kiedyś widziałem opis i instrukcję jak dopisać plugin teraz to się zmieniło i na stronie na razie brak dokumentacji do MIG'a.

Co do kontaktu może spróbować przez Google+
Pozdrawiam
Pawel
Bartek
Posts: 326
Joined: 14 Jul 2011, 19:36
Location: Wrocław
Contact:

Re: Homegenie - centralne sterowanie - może się przyda

Post by Bartek »

Czyjś kod, zwłaszcza w fazie "sprzątania" źle się czyta :) a i jak wiadomo Open Source w większości przypadków cierpi na brak dobrej dokumentacji (co innego hapcan ;) ) lub też dokumentacja często bywa nieaktualna.

Trzeba dać im trochę czasu. O tyle dobrze, że przynamniej konto mi zaakceptowali na forum ;). Póki co, HG wygląda najlepiej z systemów które sprawdzałem. Priorytetem dla mnie jest głównie wykorzystanie C#, w javę i inne takie wynalazki nie chcę się bawić, więc sporo systemów odpada.
pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Re: Homegenie - centralne sterowanie - może się przyda

Post by pawel »

Widziałem, że udało się na forum HG coś ustalić. :)
Czy będziesz próbował stworzyć plugin? Albo dalej wygląda to nieciekawie?
Pozdrawiam
Pawel
Bartek
Posts: 326
Joined: 14 Jul 2011, 19:36
Location: Wrocław
Contact:

Re: Homegenie - centralne sterowanie - może się przyda

Post by Bartek »

Nie miałem specjalnie czasu, żeby nad tym posiedzieć. To co oni podlinkowali to widziałem, ale i tak trzeba wielu rzeczy się domyślać i rozpracować co do czego ;). Szkoda, że nie ma gotowego hello worlda, wtedy zdecydowanie łatwiej zacząć cokolwiek robić ;).
Bartek
Posts: 326
Joined: 14 Jul 2011, 19:36
Location: Wrocław
Contact:

Re: Homegenie - centralne sterowanie - może się przyda

Post by Bartek »

Cześć,
Nie miałem dotąd czasu aby się zagłębić dalej. Siadłem ponownie do projektu OpenSourceAutomation - ale niestety on jest jeszcze na etapie mocno niedopracowanego.
W ramach szaleństwa zainstalowałem też NODE RED. Dosyć ciekawe narzędzie, włączyłem światło w hapcanie łącząc ze sobą dwa bloczki i pisząc jedną linijkę kodu ;). Jeśli chodzi o szybkość tworzenia różnych rozwiązań to jest ok, ale zauważyłem, że potrafi zerwać połączenie z hapcanem i na odświeżenie trzeba czekać - a tam niestety poza bloczkiem TCP nie ma zbyt wiele kodu do modyfikowania ;).

Wróciłem jednak do HG, przeczytałem dokumentację, nawet coś z niej zrozumiałem tym razem ;). Pytanie, czy robiłeś może coś więcej w kierunku integracji HG z Hapcanem? Autor dodał nawet na dniach szkielet plugina, bo były pytania na ich forum nt tworzenia pluginów.

Co do UI, to wydaje się, że można zrobić dowolne, niekoniecznie w postaci widgetów - które też za bardzo nie są w moim typie. Zawsze też można po prostu zrobić niezależne UI w postaci strony HTML i używać API w stylu {adres_hg}/api/HomeAutomation.HAPCAN/Relay1/1/Control.On - to już daje spore możliwości w budowie UI na cokolwiek co potrafi wysłać request http ;).
pawel
Posts: 45
Joined: 04 Sep 2013, 08:13

Re: Homegenie - centralne sterowanie - może się przyda

Post by pawel »

Witam
Niestety :( czasowo jestem w czarnej d... i nie miałem ani grama czasu, żeby nawet pooglądać forum a co dopiero coś podziałać.

Co do UI to jest API i można sobie zrobić własny UI czy też wysyłać/odbierać polecenia z innych systemów.
Pozdrawiam
Pawel
Post Reply