Page 2 of 4

Re: Philips hue

Posted: Fri Jan 18, 2013 10:22 pm
by Rebel
Bart,

Dit is een zeer welkome aanpassing / uitbreiding, ga het zeker toepassen!
De LED strips, zowel RGB als momo, worden bij mij nu met Domation modules aangestuurd, deze zijn ook geintegreerd in HS.

Ik denk echter niet dat Philips een RGB module gaat koppelen, Hue is namelijk geen RGB. Het zijn meer pastel kleuren vandaar dat hier echte witte kleuren mee te maken zijn. Het groene spectrum is dan wel weer beperkt, maar je kan niet alles hebben.

MVG
Arjo.

Re: Philips hue

Posted: Sat Jan 19, 2013 10:53 am
by bartbakels
Rebel,

Thnx, ben gisteren nog bezig geweest met directe put en get functies met hs.urlaction. De get functie werkt en kan de lampenstatus ophalen. Maar de put krijg ik niet aan de praat. Ik denk vanwege het data to send formaat. Zo kunnen we direct met de hue praten en hebben we geen php nodig.

Mvg

Re: Philips hue

Posted: Sat Jan 19, 2013 11:39 am
by Rebel
Bart,

Dat zijn mooie ontwikkelingen, ik heb in mn zoektocht wel eens ergens gelezen op het net dat iemand zn hue's met vb.net bestuurde, alleen gaf die zn code niet weg..... Het zou dus wel moeten kunnen! Zonder php verdient wel de voorkeur, ik ga daar nogmaals naar zoeken.

Re: Philips hue

Posted: Sat Jan 19, 2013 12:01 pm
by Digit
php of een HS script omzetten naar VB.Net moet toch niet zo moeilijk zijn?
Helaas heb ik de hardware (nog?) niet.

Re: Philips hue

Posted: Sat Jan 19, 2013 12:28 pm
by bartbakels
heren,

ja het probleem zit volgens mij in ; of the HS.urlaction of in het dataformaat dat ik probeer te posten;

Code: Select all

sub Main (ByVal Params As Object)


dim data

data = hs.URLAction("http://IP/api/KEY/lights/1/","GET", "", "")

hs.WriteLog("gethue", data)

end sub
Dit was het get script je dit returned mooi de status van de lamp

Code: Select all

sub Main (ByVal Params As Object)

dim tosend

dim data

tosend = "{""on"" : true}"

data = hs.URLAction("http://IP/api/KEY/lights/1/state","PUT", tosend, "")

hs.WriteLog("gethue", data)

end sub
dit is het set script, geeft geen errors maar ook geen actie helaas ik denk dat ik iets verkeerd doe met de data die ik zend, heb hier al meerdere strings gebruikt. Ik weet dat JSON normaliter gebruikt wordt maar dit wordt niet ondersteund in de homeseer url acties source; domoticaworld.com/scripts/control-your- ... hilips-tv/

Iemand enig idee?

Re: Philips hue

Posted: Sat Jan 19, 2013 2:05 pm
by bartbakels
Heren,


:D :D Oplossing is gevonden, en zal deze nog verder gaan uitwerken, maar PHP kan overboord. hs.urlaction was inderdaad het probleem. de volgende oplossing werkt voor het zenden van commandos. hieronder het stukje code gedeeld;

Code: Select all

sub Main (ByVal Params As Object)

dim tosend
dim data
dim httpres 'http response
dim objHTTP

tosend = "{""bri"":254,""xy"":[0.63531,0.34127],""on"":true}"


 ' Start the HTTP communication
   objHTTP = CreateObject ("WinHttp.WinHttpRequest.5.1" )
   objHTTP.Open("PUT", "http://IP/api/KEY/lights/1/state" , False) 
   objHTTP.Send(tosend)
  data = objHTTP.ResponseText

 ' Check if all communication went well

   httpres = objHTTP.Status
   If httpres <> 200 Then
      Hs.writelog("hueset" , "Datastream upload for device returns error " & httpres)
   End if 

 ' And close down
   objHTTP = Nothing

hs.WriteLog("gethue send", tosend)
hs.WriteLog("gethue response", data)

end sub

Re: Philips hue

Posted: Sat Jan 19, 2013 2:20 pm
by Rebel
Perfect Bart!

Dit gaat mooi worden. Veel succes met het verder uitwerken. Ik ben hier zeer content mee!

MVG
Arjo.

Re: Philips hue

Posted: Sat Jan 19, 2013 4:38 pm
by bartbakels
heren,

hier de laatste versie, ik heb het bestaande script aangepast zodat er geen PHP meer nodig is. Tevens 2 cases aangemaakt, een Control en een status case. De status dient nog verder uitgewerkt te worden, de returnstring (nu display in Log) dient geïnterpreteerd te worden en naar de device value en status geschreven te worden (mocht zich iemand geroepen voelen...heel graag ;)) Dit wil overigens ook zeggen dat de aanroep parameters aangepast moeten worden. Misschien verstandig dat we in het homeseer scripting forum verder gaan?

Code: Select all

'HueControl.vb
'by B. Bakels
'19 Jan 2013 - version 2.0
'
'USAGE with HomeSeer
'Make an event and select script.
'For the parameter field use ("Main","control;B80;B90;1")
'
'where: ("Main","<executionmode (control or status)>;<DeviceCode Homeseer Control Device>;<DeviceCode mode Device>;<Hue Number to control> ")
'Main with a capital M
'there are 2 execution modes; 	COntrol: controls the Hue lamp
'				Status: Updates the homeseer device status with the current hue status



sub Main(byVal params As Object)


'Declare params
'=============================
Dim HASH As String
Dim IP As String
Dim ACTION
Dim MODE
Dim status
DIM BRI As Integer
DIM SAT As Integer
DIM HUE As Integer
DIM COLTEMP As Integer
DIM Debug as boolean
DIM StateResponse


'setup specific settings
'=============================
Debug = false
IP = "IP"
HASH="HASH"


'read script execution additional parameters
'=============================

Dim strExecution As String = hs.StringItem(Params, 1, ";") 
Dim strDeviceControl As String = hs.StringItem(Params, 2, ";") 
Dim strDeviceMode As String = hs.StringItem(Params, 3, ";")
Dim BULBNO As string = hs.StringItem(Params, 4, ";")


'Calculate Values and get devicestatus and value
'=============================

MODE = hs.DeviceValue(strDeviceMode)
ACTION = hs.DeviceStatus(strDeviceControl)
BRI = hs.DeviceValue(strDeviceControl)*2.54
SAT = hs.DeviceValue(strDeviceControl)*2.54
HUE = hs.DeviceValue(strDeviceControl)*655.35
COLTEMP = (hs.DeviceValue(strDeviceControl)*3.46)+154

'debug mode
'=============================

If Debug = true Then 

	hs.writelog("Huecontrol Debug","Device to Control :" & strDeviceControl)
	hs.writelog("Huecontrol Debug","Device for Mode :" & strDeviceMode )
	hs.writelog("Huecontrol Debug","Hue Number :" & BULBNO )
	hs.writelog("Huecontrol Debug","Action :" & ACTION )
	hs.writelog("Huecontrol Debug","Execution mode :" & strExecution )
	hs.writelog("Huecontrol Debug","Selected Mode :" & MODE )
	hs.writelog("Huecontrol Debug","calculated Brightness :" & BRI )
	hs.writelog("huecontrol Debug","calculated Saturation :" & SAT )
	hs.writelog("huecontrol Debug","calculated Hue :" & HUE )
	hs.writelog("huecontrol Debug","calculated color temperature :" & COLTEMP )
end if

Select case strExecution

'==================================================
'==	Execution Mode; Control HUE Lamp	===
'==================================================

Case "Control"

Select case ACTION

'Hue changed to ON
'=============================
case 2
  
  status = SetHueState(BULBNO, IP, HASH, "{""on"":true}", Debug )
  hs.writelog("HueControl" , status)

'Hue changed to Off
'=============================
 case 3

  status = SetHueState(BULBNO, IP, HASH, "{""on"":false}", Debug )
  hs.writelog("HueControl" , status)

'Hue change Dim value
'=============================
 case 4
  
	Select case MODE

	'DIMMER Mode
	case 0
		status = SetHueState(BULBNO, IP, HASH, "{""on"":true,""bri"":" & BRI & "}", Debug )
 		hs.writelog("HueControl" , status)
		 
 	
	'Saturation Mode
	case 100
  		status = SetHueState(BULBNO, IP, HASH, "{""on"":true,""sat"":" & SAT & "}", Debug )
 		hs.writelog("HueControl" , status)
	
	'Hue Mode	
	case 200
  		status = SetHueState(BULBNO, IP, HASH, "{""on"":true,""hue"":" & HUE & "}", Debug )
 		hs.writelog("HueControl" , status)
	
	'Color Temperature Mode	
	case 300
  		status = SetHueState(BULBNO, IP, HASH, "{""on"":true,""ct"":" & COLTEMP & "}", Debug )
 		hs.writelog("HueControl" , status)	
	End Select

'every other case
'=============================

 case else
  status = SetHueState(BULBNO, IP, HASH, "{""on"":false}", Debug )
  hs.writelog("HueControl" , status)
 
    End Select

'==================================================
'==Execution Mode; Status update homeseer device===
'==================================================

case "Status"

	StateResponse= GetHueStatus(BULBNO, IP, HASH, Debug )
	hs.writelog("HueControl", Stateresponse)

End Select



'End of Main

End Sub









'===========================================
'==              Functions                ==
'===========================================



'GET HUE STATUS
'===========================================

Function GetHueStatus (BULBNO, IP, HASH, Debug)
 
Dim Stateresponse

	Stateresponse = hs.URLAction("http://" & IP & "/api/" & HASH &"/lights/" & BULBNO & "/","GET", "", "")
  
If Debug = true Then hs.writelog("HueControl Debug get action", Stateresponse)

return Stateresponse

End Function


'SET HUE STATE
'===========================================


Function SetHueState (BULBNO, IP, HASH, setdata, Debug)
 
Dim Setresponse
dim httpres 'http response
dim objHTTP



 ' Start the HTTP communication
   objHTTP = CreateObject ("WinHttp.WinHttpRequest.5.1" )
   objHTTP.Open("PUT", "http://" & IP & "/api/" & HASH & "/lights/" & BULBNO & "/state" , False) 
   objHTTP.Send(setdata)
   Setresponse = objHTTP.ResponseText

 ' Check if all communication went well

   httpres = objHTTP.Status
   If httpres <> 200 Then
      Hs.writelog("hueset" , "HueControl Debug set action returns error " & httpres)
   End if 

 ' And close down
   objHTTP = Nothing

If Debug = true Then hs.WriteLog("send", setdata)
If Debug = true Then hs.WriteLog("response", Setresponse)
  
  return Setresponse

End Function

Re: Philips hue

Posted: Sun Jan 20, 2013 12:00 am
by Rebel
Bart,

Het zou zo mooi kunnen zijn, maar ik krijg het script zonder php niet aan de praat. Alle waarden in de debug mode zijn gevuld en krijg de volgende resultaat:

Code: Select all

19-1-2013 22:51:38 	response 	[{"error":{"type":5,"address":"ð","description":"invalid/missing parameters in body"}}]
19-1-2013 22:51:38 	send 	{"on":true,"hue":52428}
Doe ik wat fout of heb ik misschien een "verlopen" .net versie?

MVG
Arjo.

Re: Philips hue

Posted: Sun Jan 20, 2013 12:11 am
by bartbakels
Rebel

ik heb t vermoedde dat het in je aanroep parameters zit . Hoe roep je t script aan?
Let ook op de hoofdletter C bij control
Zet debug node eens aan en geef me je log eens van executie.

Re: Philips hue

Posted: Sun Jan 20, 2013 12:37 am
by Rebel
Bart,

Hier een stukje log, dit moet van onder naar boven gelezen worden

Code: Select all

[{"error":{"type":5,"address":"ð","description":"invalid/missing parameters in body"}}]
19-1-2013 23:33:34 	send 	{"on":true,"hue":39321}
19-1-2013 23:33:34 	huecontrol Debug 	calculated color temperature :362
19-1-2013 23:33:34 	huecontrol Debug 	calculated Hue :39321
19-1-2013 23:33:34 	huecontrol Debug 	calculated Saturation :152
19-1-2013 23:33:34 	Huecontrol Debug 	calculated Brightness :152
19-1-2013 23:33:34 	Huecontrol Debug 	Selected Mode :200
19-1-2013 23:33:34 	Huecontrol Debug 	Execution mode :Control
19-1-2013 23:33:34 	Huecontrol Debug 	Action :4
19-1-2013 23:33:34 	Huecontrol Debug 	Hue Number :1
19-1-2013 23:33:34 	Huecontrol Debug 	Device for Mode :A21
19-1-2013 23:33:34 	Huecontrol Debug 	Device to Control :A20
19-1-2013 23:33:34 	Event 	Running script in background: HueControl.vb("Main","Control;A20;A21;1")
19-1-2013 23:33:34 	Event 	Event Trigger "Hue1"
Hopelijk zegt het je wat

Re: Philips hue

Posted: Sun Jan 20, 2013 1:00 am
by bartbakels
Ik zal morgen even kijken. Heb de hue volgens mij niet getest, werkt het bij de brightness wel?

Mvg

Re: Philips hue

Posted: Sun Jan 20, 2013 1:09 am
by Rebel
Alle smaakjes doen het niet, soms komt er ook nog dit voorbij;

Code: Select all

19-1-2013 23:38:40 	Error 	Scripting runtime error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Value does not fall within the expected range. at Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack, Boolean IgnoreReturn) at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn) at scriptcode32.scriptcode32.SetHueState(Object BULBNO, Object IP, Object HASH, Object setdata, Object Debug) at scriptcode32.scriptcode32.Main(Object params) --- End of inner exception stack trace --- at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) at Scheduler.VsaScriptHost.Invoke(String ModuleName, String MethodName, Object[] Arguments)
En dat is niet reproduceerbaar bij welke opdracht dit is.

Maar slaap er niet wakker van! Morgen weer een dag.

Mvg
Arjo

Re: Philips hue

Posted: Sun Jan 20, 2013 2:17 am
by bartbakels
Kom net thuis, en bij werkt t gewoon allemaal, zal morgen ff hetscriptje uploaden en screenshots van mijn configuratie

Mvg

Bart

Re: Philips hue

Posted: Sun Jan 20, 2013 2:35 pm
by bartbakels
Rebel,

Hierbij het script als vb file (als zip) tevens 2 screenshots van mijn configuratie. Het werkt hier gewoon zonder issues. ZIjn er andere mensen die het ook getest hebben? Ik ga vandaag waarschijnlijk nog even verder met de status terugmelding en een flashing functie.

Hopelijk werkt het nu wel voor je...

MVG

Bart