Ik heb namelijk ook HomeSeer draaien op mijn HomeServer en heb niet zoals de meeste geavanceerde domomtica producten maar gewoon enkele ingebouwde x10 schakelaars icm bewegingsensorren en Plugwise apparatuur, that's all folks.
Omdat ik toch een beetje groen wilt zijn en mijn server niet 24/7 aan wilt hebben staan, tsjah ik heb nog geen x10 alarm of x10 camera's dus dan is dat nog niet nodig had ik een aantal uitdagingen.
Ik maak namelijk geen gebruik van de dag en nacht melding binnen de bewegingsensor omdat ik vind dat deze pas heel erg laat reageren.
Ik heb daarom een virtual device gemaakt genaamd MidNight op housecode A99 waar ik een event aan heb gekoppeld "Set Midnight Off" die er voor zorgt dat de virtual device uit gaat 15 minuten After Sunrise. Daarnaast heb ik een event "Set Midnight On" hoe kan het ook anders aan gaat 15 minuten before Sunset.
Dit werkt dus allemaal prima als je 24/7 je computer hebt aan staan.
Maar ik heb mijn computer zo getriggered dat hij tussen 2 uur 's-nachts en 7 uur 's-ochtends in slaapstand gaat en na 7 uur weer aan gaat. Als hij weer uit slaapmodus komt word uiteraard nooit meer "Set Midnight Off" getriggered omdat de tijd al verstreken is. Nu zou je denken om het in de startup script te verwerken maar HomeSeer word niet opnieuw gestart als de computer uit slaapmodus word gehaald. Daarnaast zou je nog denken aan de powerfailure optie maar dat werkt niet.
Wegens dit specifieke probleem in mijn huidige situatie was ik genoodzaakt om handmatig het event te triggeren, uiteraard heb ik daar geen zin in en heb ik een script gemaakt om dit te triggeren.
1. Maak een virtual device aan met de naam "Midnight" en zet deze op housecode A99
2. Maak een event aan met de naam "Set Midnight Off" met als trigger type Sunrise en Offset 15 Minutes en after
3. Maak een event aan met de naam "Set Midnight On" met als trigger type Sunset en offset 15 Minutes en Before
4. Maak een event aan met de naam 'WatchSunriseSunset'
5. Zet in het tabblad Trigger de Current Trigger Type op Recurring en Trigger Every 1 minutes
6. Bij tabblad Action maak je een nieuw script aan met de naam "WatchSunriseAndSunset.vb"
7. Bij optional Parameters zet je het volgende: ("Main", "Set Midnight Off;Set Midnight On")
Hierbij is "Set Midnight Off" het event dat ervoor zorgt dat de virtual device MidNight uit gaat 15 minuten after sunrise, zie punt 2
Hierbij is "Set Midnight On" het event dat ervoor zorgt dat de virtual device Midnight aan gaat 15 minuten before sunset, zie punt 3
8. Open Script Window en zet onderstaand script hierin, vergeet niet te klikken op Save Script om het script op te slaan en daarna Twee x Update.
Code: Select all
Sub Main(parm as object)
' declare sunrise and sunset properties
Dim sunriseOffset, sunsetOffset, sunriseDate, sunsetDate, sunriseTime, sunsetTime, now As DateTime
Dim sunriseRef, sunsetRef As Long
Dim sunriseEvent, sunsetEvent As Scheduler.Classes.EventClass
Dim sunriseEventName, sunsetEventName As String
' get first param with the name of the sunrise event
sunriseEventName = hs.stringitem(parm, 1, ";")
' get second param with the name of the sunset event
sunsetEventName = hs.stringitem(parm, 2, ";")
' get sunrise and sunset time
sunriseTime = hs.sunrise
sunsetTime = hs.sunset
' set sunrise and sunset date for comparing purposes because the month, year and day will not be set
sunriseDate = new Date(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, sunriseTime.Hour, sunriseTime.Minute, 0)
sunsetDate = new Date(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, sunsetTime.Hour, sunsetTime.Minute, 0)
' get event by name for sunrise and sunset
sunriseRef = hs.GetEventRefByName(sunriseEventName)
sunsetRef = hs.GetEventRefByName(sunsetEventName)
' get event for sunrise and sunset
sunriseEvent = hs.GetEventByRef(sunriseRef)
sunsetEvent = hs.GetEventByRef(sunsetRef)
' get offset for sunrise and sunset
sunriseOffset = sunriseEvent.ev_offset
sunsetOffset = sunsetEvent.ev_offset
' If true, ev_offset is subtracted from sunrise to get the trigger time. If false, ev_offset is added to sunrise to get the trigger time.
If (sunriseEvent.ev_offset_before) Then
sunriseDate = sunriseDate.AddMinutes(-sunriseOffset.Minute)
Else
sunriseDate = sunriseDate.AddMinutes(sunriseOffset.Minute)
End If
' If true, ev_offset is subtracted from sunset to get the trigger time. If false, ev_offset is added to sunset to get the trigger time.
If (sunsetEvent.ev_offset_before) Then
sunsetDate = sunsetDate.AddMinutes(-sunsetOffset.Minute)
Else
sunsetDate = sunsetDate.AddMinutes(sunsetOffset.Minute)
End If
' The today date
now = DateTime.Now
' The now date is later or equal then the sunrise date AND the now date is earlier or equal then the sunset date
If (DateTime.Compare(now, sunriseDate) >= 0 AND DateTime.Compare(now, sunsetDate) <= 0) Then
hs.TriggerEvent(sunriseEventName)
hs.writelog("info", "WatchSunriseAndSunset: Triggering event for daylight")
Else
hs.TriggerEvent(sunsetEventName)
hs.writelog("info", "WatchSunriseAndSunset: Triggering event for midnight")
End If
End Sub
gekoppeld aan mijn bewegingssensorren zodat de lamp alleen aan gaat als de Midnight op On staat.
That's all folks!
Ik denk ik deel dit specifieke script met jullie maar waarschijnlijk heeft iedereen zijn server 24/7 aan staan waardoor dit probleem niet voorkomt of dat jullie een nog
ingenieus systeem hebben zoals een sensor buiten die nacht en dag detecteerd. Maar ik als simpele domotica starter ben hier even mee geholpen en ben van plan om dit
op late termijn zeker anders te doen maar nu werkt het.
Ondanks dat hoop ik toch dat iemand er misschien wat aan heeft.