Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

SCRIPT: TimeDevice.vb - Endre triggertid av et event med en device!


Moskus

Anbefalte innlegg

Nå kan du endelig få endre trigger-tiden til dine eventer med noen enkle tastetrykk! Det fungerer fint på websiden, HStouch og HS Mobile. :) 

 

Vi har alle eventer som går av på et visst tidspunkt. F.eks. vekkerklokker. Av og til vil man enkelt kunne endre tiden på vekkerklokken uten å måtte navigere til Event-siden og finne selve eventet. Kanskje vil man at ungene skal kunne gjøre det, etc.

 

Med dette scriptet får du en device som dette:image.png

... som lar deg endre klokkeslettet på et event.

 

Her er scriptet (vær nøye med filnavnet, det må være riktig):

TimeDevice.vb

    Public Sub Main(ByVal input As Object)
        'Moskus 2019
        '-----------------------------
        'The Main sub will update 
        'DeviceRef,NewTime
        'Example: 3245,13:00 -> will set device 3245 to 13:00 and the event to trigger at 13:00
        '-----------------------------

        Dim deviceRef As Integer = input.ToString.Split(",")(0)
        Dim timeString As String = input.ToString.Split(",")(1)
        Dim _time As TimeSpan = TimeSpan.Parse(timeString)

        UpdateDeviceAndEvent(deviceRef, _time)
    End Sub

    Public Sub CreateDevice(byval input as Object)
        Dim deviceRef As Integer = hs.NewDeviceRef("Klokkekontroll")
        Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceRef)
        dev.Location(hs) = "Klokke"
        dev.Location2(hs) = "Klokke"
        dev.Device_Type_String(hs) = "Ditt event her"

        hs.SaveEventsDevices()

        AddDeviceButtons(deviceRef)

        Dim _time As New TimeSpan
        hs.SetDeviceString(deviceRef, _time.ToString("hh\:mm"), False)
        hs.SetDeviceValueByRef(deviceRef, _time.TotalMinutes, True)
    End Sub

    Public Sub ButtonPress(ByVal input As Object)
        Dim deviceRef As Integer = input(0)
        Dim parameter As String = input(1)
        Dim deviceValue As Integer = hs.DeviceValue(deviceRef)
        Dim minutesToAdd As Integer = Integer.Parse(parameter)

        Dim newValue As Integer = deviceValue + minutesToAdd
        If newValue < 0 Then newValue = 24 * 60 + minutesToAdd
        If newValue > 24 * 60 Then newValue = minutesToAdd

        Dim _time As TimeSpan = New TimeSpan(0, newValue, 0)
        UpdateDeviceAndEvent(deviceRef, _time)
    End Sub

    Public Sub UpdateDeviceAndEvent(ByVal deviceRef As Integer, ByVal _time As TimeSpan)
        hs.SetDeviceString(deviceRef, _time.ToString("hh\:mm"), False)
        hs.SetDeviceValueByRef(deviceRef, _time.TotalMinutes, True)


        Dim eventName As String = DirectCast(hs.GetDeviceByRef(deviceRef), Scheduler.Classes.DeviceClass).Device_Type_String(hs)
        Dim eventRef As String = hs.GetEventRefByName(eventName)
        hs.EventSetTimeTrigger(eventRef, New Date(1, 1, 1).Add(_time))
        hs.SaveEventsDevices()
    End Sub

    Public Sub AddDeviceButtons(ByVal device_ref As String)
        Dim devID As Integer = CInt(device_ref)
        hs.DeviceScriptButton_DeleteAll(devID)
        hs.DeviceProperty_dvMISC(device_ref, HomeSeerAPI.Enums.eDeviceProperty.MISC_Set, HomeSeerAPI.Enums.dvMISC.SHOW_VALUES)

        Try
            hs.WriteLog("TimeDevice.vb", "Added button 1: " & hs.DeviceScriptButton_AddButton(devID, "+5 min", 5, "TimeDevice.vb", "ButtonPress", "+5", 1, 1, 1))
            hs.WriteLog("TimeDevice.vb", "Added button 2: " & hs.DeviceScriptButton_AddButton(devID, "-5 min", -5, "TimeDevice.vb", "ButtonPress", "-5", 1, 2, 1))
            hs.WriteLog("TimeDevice.vb", "Added button 3: " & hs.DeviceScriptButton_AddButton(devID, "+15 min", 15, "TimeDevice.vb", "ButtonPress", "+15", 1, 3, 1))
            hs.WriteLog("TimeDevice.vb", "Added button 4: " & hs.DeviceScriptButton_AddButton(devID, "-15 min", -15, "TimeDevice.vb", "ButtonPress", "-15", 1, 4, 1))
            hs.WriteLog("TimeDevice.vb", "Added button 5: " & hs.DeviceScriptButton_AddButton(devID, "+1 time", 60, "TimeDevice.vb", "ButtonPress", "+60", 2, 1, 1))
            hs.WriteLog("TimeDevice.vb", "Added button 6: " & hs.DeviceScriptButton_AddButton(devID, "-1 time", -60, "TimeDevice.vb", "ButtonPress", "-60", 2, 2, 1))
        Catch ex As Exception
            hs.WriteLog("TimeDevice.vb", "Error adding buttons: " & ex.Message)
        End Try
    End Sub

 

Du trenger først å lage et event som trigger scriptet med rutinen "CreateDevice", slik:

image.png

 

Gå nå til Device Manager-siden. Velg at "Klokke" skal vises, både for "Floor" og "Room". MEN: Du må også huske på å velge ALLE device typer:

image.png

 

Da får du opp den nye devicen. Denne kan du navngi og gi plassering akkurat som det passer deg. :)

 

Så skal vi bestemme hvilket event som skal trigges. Navnet sette vi som en "Device Type String" under Advanced-taben. Merk at hele navnet skal brukes, og at det er "Gruppe" + mellomrom + "Event navn". La oss si at jeg vil trigge et test-event som jeg har navngitt "Et timer-event", som her:

image.png

 

Da er hele evnetnavnet mitt: "Test Et timer-event", og det setter vi inn her:

image.png

... og trykker "Done".

NB! Når vi nå går tilbake til Device Manager, må vi huske på å vise alle Device Types igjen, fordi den har vi nettopp endret til noe nytt som ikke var valgt før.

 

Så er det bare å stille klokka. :) 

Endrer vi tiden på devicen til dette...

image.png

... vil eventet også endres:

image.png

 

Det gjør ingenting om eventet ditt har andre conditions, de vil ikke bli påvirket av dette. :) 

 

 

 

Scriptet har også en rutine for å endre klokkeslettet med eventer, f.eks. hvis man skal stille tilbake flere  vekkerklokker etter en ferie. 

Da kaller man bare rutinen/metoden "Main" (eller lar være å spesifisere rutine), og bruker deviceRef og klokkeslett som parameter.

Dette:

image.png

 

... gir dette:

image.png

... og selvfølgelig dette:

image.png

 

  • Like 2
  • Thanks 4
Lenke til kommentar
Del på andre sider

33 minutter siden, Moskus skrev:

Hvordan tenker du at det skal fungere? Hva skal løses?

Når vi er på ferie pleier eg å stille inn event for når varme skal settast til "heime auto" igjen, slik at hus og vatn er tilbake på normal temperatur til vi er heime. Dette har eg pleid å aktivere frå midnatt den dagen vi forventar å komme heim, og det ville blitt langt enklare å endre ein device samanlikna med å endre eventet. 

Lenke til kommentar
Del på andre sider

11 timer siden, bjornepappa skrev:

Når vi er på ferie pleier eg å stille inn event for når varme skal settast til "heime auto" igjen, slik at hus og vatn er tilbake på normal temperatur til vi er heime. Dette har eg pleid å aktivere frå midnatt den dagen vi forventar å komme heim, og det ville blitt langt enklare å endre ein device samanlikna med å endre eventet. 

Ja, men det sier ikke så mye likevel. Skal du ha noe tilsvarende som setter selve dagen det gjøres på? Jeg tror ikke det er så lett å scripte de nødvendige endringene i det eventet...

 

Men det finnes andre geniale løsninger for sånne problemer. Legg det i kalenderen, og installer GCalSeer. :)

image.png

 

Vi var på hyttetur (kun en overnatting) forrige helg:

image.png

 

  • Like 2
Lenke til kommentar
Del på andre sider

1 time siden, Moskus skrev:

Ja, men det sier ikke så mye likevel. Skal du ha noe tilsvarende som setter selve dagen det gjøres på? Jeg tror ikke det er så lett å scripte de nødvendige endringene i det eventet...

 

Men det finnes andre geniale løsninger for sånne problemer. Legg det i kalenderen, og installer GCalSeer. :)

image.png

 

Vi var på hyttetur (kun en overnatting) forrige helg:

image.png

 

 

Takk! Eg har jo nettopp lagt inn GCalSeer for å få HS til å holde styr på turnusarbeidet mitt, så det bør jo funke fint.

Lenke til kommentar
Del på andre sider

@Moskus, beklagar om det er noko eg totalt har oversett. Men innbiller meg at eg har fulgt oppskrifta for å lage devicen, men det dukkar ikkje opp nokon device - etasje og rom "Klokke" blir ikkje generert...

Ganske sikker på at script-eventet er satt opp korrekt og eg har prøvd mange ganger å trigge det manuelt.

 

image.png.ffc9b71d791253d6216a52bd72d93127.png

Lenke til kommentar
Del på andre sider

... og du har sett hva loggen har å si? :) 

 

43 minutter siden, bjornepappa skrev:

Men innbiller meg at eg har fulgt oppskrifta for å lage devicen, men det dukkar ikkje opp nokon device - etasje og rom "Klokke" blir ikkje generert...

... og du har husket å vise alle device types?

Lenke til kommentar
Del på andre sider

Hmmm. Burde eg ha oppretta ein ny device og lagt inn device ref i Parameters-boksen? 

Sitat
Oct-16 20:03:57   Error 3 Running script C:\Program Files (x86)\HomeSeer HS3\scripts\TimeDevice.vb :Antall parametere stemmer ikke overens.->Does entry point CreateDevice exist in script? ved System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) ved System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) ved Scheduler.clsRunVBNetScript.ExecuteScript()
Oct-16 20:03:49   Event Running script in background: C:/Program Files (x86)/HomeSeer HS3/scripts/TimeDevice.vb("CreateDevice")

 

Endret av bjornepappa
Lenke til kommentar
Del på andre sider

  • 11 måneder senere...

Flott script - har lenge tenkt på å lage noe tilsvarende, men nå slipper jeg jo det 🙂

Men...
Jeg bruker dette på HS4, og alt ser ut til å fungere fint. Men etter en restart av HS så er fremdeles devicen det men alle kontrollene er borte, og det er jo litt kjipt.
Oppdaterte akkurat HS til 4.1.8.0, men jeg så det også på 4.1.6.0

 

 

EDIT:
Men jeg fant en workaround

- jeg ser nå at jeg kan kjøre  et nytt event for å legge de til igjen, og jeg kommer til å legge til dette i Startup.vb (iallefall inntil videre)

 
IF
This event is MANUALLY triggered
THEN
Run the script: TimeDevice.vb
                calling method AddDeviceButtons with parameter(s) 3946
                     and only allow one instance of the script to run at a time.
Endret av HSv
  • Like 2
Lenke til kommentar
Del på andre sider

4 timer siden, HSv skrev:

Jeg bruker dette på HS4, og alt ser ut til å fungere fint. Men etter en restart av HS så er fremdeles devicen det men alle kontrollene er borte, og det er jo litt kjipt.

F*en! Jeg hadde håpet dette var fikset. Det har jo vært et problem med HS4 ganske lenge.

 

Men snedig workaround! Kudos! :)

 

Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Dette er mulig jeg har oversett en grunn til at det gjøres slik, men:

 

Dim newValue As Integer = deviceValue + minutesToAdd
If newValue < 0 Then newValue = 24 * 60 + minutesToAdd
If newValue > 24 * 60 Then newValue = minutesToAdd

 

Hvis deviceValue nå fra før er 23:45, og man trykker +1 time, så vil ny tid bli 01:00. Eller hvis den er 23:50 og man trykker +15 min, så blir ny tid 00:15. Tilsvarende hvis den er 00:15 og man trykker -1 time, så blir ny tid 23:00. Og om den er 00:10 og man trykker -15 min, så blir ny tid 23:45.

 

Kan kanskje dette heller skrives slik?

 

Dim newValue As Integer = deviceValue + minutesToAdd
If newValue < 0 Then newValue = 24 * 60 + newValue
If newValue > 24 * 60 Then newValue = newValue - 24 * 60

 

Evt. slik om man vil forkorte (på bekostning av noe lesbarhet).

 

Dim newValue As Integer = deviceValue + minutesToAdd
If newValue < 0 Then newValue += 24 * 60
If newValue > 24 * 60 Then newValue -= 24 * 60

 

Lenke til kommentar
Del på andre sider

  • 1 år senere...

Super veiledning og script @Moskus 😁 Tusen takk, det var akkurat det jeg trengte.

Oppstod dog et lite problem. Jeg har fortsatt ikke kommet meg over på HS Touch, så jeg bruker fortsatt HS Mobile en del. Klokke-devicen funker som den skal i device-oversikten, men med en gang jeg prøver å legge den til på et dashbord forsvinner alle knappene. Har sjekket alle innstillinger jeg kan tenke meg, prøvd å opprette flere klokker, men problemet er det samme. Om noen har et tips til hva som kan forårsake dette tar jeg gjerne i mot tips!

 

Screenshot_20220901_170318_com.homeseer.mobile.android.thumb.jpg.1d2cf70223dedb99d441b3c774c76485.jpgScreenshot_20220901_170519_com.homeseer.mobile.android.thumb.jpg.0628c211ba1bbf4e1c06d470d7f4a91a.jpg

Endret av Im_IB
Lenke til kommentar
Del på andre sider

Im_IB skrev (49 minutter siden):

Klokke-devicen funker som den skal i device-oversikten, men med en gang jeg prøver å legge den til på et dashbord forsvinner alle knappene.

Det er ikke deg. Det er en bug i HomeSeer Mobile, men hvis du venter til neste refesh, så skal de dukke opp igjen. :)

 

Lenke til kommentar
Del på andre sider

Moskus skrev (På 1.9.2022 den 18.12):

Det er ikke deg. Det er en bug i HomeSeer Mobile, men hvis du venter til neste refesh, så skal de dukke opp igjen. :)

 

Hva mener du med neste refresh? Knappene har aldri vært synlig i Dashboards-fanen, men er synlig hele tiden i Device-fanen.

En annen ting som det kanskje er greit å advare om, er at det noen ganger blir generert en ny and if statement i eventen som begrenser trigger til en bestemt dato (i det herrens år 0001 for sikkerhets skyld) hvis man tar "snarveien" og blar forbi midnatt.

Lenke til kommentar
Del på andre sider

Im_IB skrev (På 3.9.2022 den 7.35):

Knappene har aldri vært synlig i Dashboards-fanen

Det har jeg ikke testet, de burde ikke være usynlige der heller, men i Dashboard har man større kontroll over hva som skal være synlig eller ei. Det er mulig dette ikke inkluderer knapper som er laget fra scripts.

 

Im_IB skrev (På 3.9.2022 den 7.35):

En annen ting som det kanskje er greit å advare om, er at det noen ganger blir generert en ny and if statement i eventen som begrenser trigger til en bestemt dato (i det herrens år 0001 for sikkerhets skyld) hvis man tar "snarveien" og blar forbi midnatt.

Ja, da går man over til et nytt døgn. Jeg må tydeligvis nullstille telleren.

Lenke til kommentar
Del på andre sider

  • 1 år senere...

  

Moskus skrev (På 5.9.2022 den 13.50):

Ja, da går man over til et nytt døgn. Jeg må tydeligvis nullstille telleren.


Har du funnet noen smart fix på dette? Eller har du noen forslag til fix?

Jeg hadde nok en uheldig hendelse her om dagen, med en elbillader som ikke hadde startet, og ende med å komme for seint på jobben 🙈

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.