Jump to content
  • Sign Up
Støtt hjemmeautomasjon.no!

SCRIPT: MotionLog.vb - Logg bevegelser til en device


Moskus

Recommended Posts

Dette scriptet lar deg logge alle bevegelser til en device, slik at det blir enklere å se på web eller HStouch. Bevegelser (eller enhver hendelse) blir da logget slik.

 

motionlog.png

 

 MotionLog.vb (ny)

    Public Sub Main(ByVal input As Object)
        Dim logDeviceRef As Integer = 1081 ' Update this
        Dim count As Integer = 9 'Maximum number of lines shown on the device - 1. 9 means 10 lines are shown

        Dim currentText As String = hs.DeviceString(logDeviceRef)
        currentText = currentText.Replace("<br>", "|")
        Dim lines() As String = currentText.Split("|")
        If lines.GetLength(0) < count Then count = lines.GetLength(0)
        Dim oldLines(count - 1) As String
        Array.Copy(lines, oldLines, count)

        'Creating the device text
        Dim newText As String = Now.Date & " " & Now.ToLongTimeString & " - " & input.ToString
        If lines.GetLength(0) > 0 And lines(0) <> "" Then newText &= "<br>"

        'Adding the previous lines
        newText &= String.Join("<br>", oldLines)

        'Updating the device string
        hs.SetDeviceString(logDeviceRef, newText, True)
        'hs.TriggerEvent("Restart SisteBeveglse timer")

        lines = Nothing
        oldLines = Nothing
    End Sub

 

 

Spoiler

 

MotionLog.vb (gammel)


Public Sub Main(ByVal input As Object)
    Dim logDeviceRef As Integer = 1081 ' Update this

    Dim currentText As String = hs.DeviceString(logDeviceRef)
    Dim lines As System.Collections.Generic.List(Of String)

    If currentText.Contains("<br/>") Then
        lines = currentText.Split("<br/>").ToList
    Else
        lines = currentText.Split("<br>").ToList
    End If

    'Removing empty lines and cleaing up strings
    For i As Integer = lines.Count - 1 To 0 Step -1
        If lines(i).Trim = "" Then lines.RemoveAt(i)
        If lines(i).Contains("br/>") Then lines(i) = lines(i).Replace("br/>", "")
        If lines(i).Contains("br>") Then lines(i) = lines(i).Replace("br>", "")
    Next

    'Remove the bottom entry if needed
    If lines.Count = 10 Then lines.RemoveAt(lines.Count - 1)

    'Creating the device text
    Dim newText As String = Now.Date & " " & Now.ToLongTimeString & " - " & input.ToString
    If lines.Count > 0 Then newText &= "<br>"

    If lines.Count > 2 Then
        For i As Integer = 0 To lines.Count - 2
            newText &= lines(i) & "<br>"
        Next
    ElseIf lines.Count = 2 Then
        newText &= lines(0) & "<br>"
    End If

    'Adding the last lines without the HTML break
    newText &= lines(lines.Count - 1)

    'Updating the device string
    hs.SetDeviceString(logDeviceRef, newText, True)
    'hs.TriggerEvent("Restart SisteBeveglse timer")
End Sub

 

 

For hver bevegelsessensor har jeg da et event som blir trigget ved bevegelse (selvfølgelig! ;)), som i tillegg til å styre lys der det er nødvendig, kjører dette scriptet med sub Main og parameter med navnet på sensoren, som "Kjøkken" eller "Stue".

 

I tillegg har jeg en timer som he ter "SisteBevegelse", som jeg resetter når dette skjer. Hvis du også vil bruke dette, må du opprette den timeren, lage et Event (som jeg har kalt "Restart SisteBevegelse timer" fordi det ikke finnes kode for å restarte den), og fjerne fnutten foran den nest siste linjen i koden.

 

 

EDIT: Oppdatert slik at det blir penere i HStouch. :) 

EDIT2:  Bruker arrays for å gjøre scriptet enklere. Burde nå kjøre på Linux uten problemer.

  • Thanks 3
Link to comment
Share on other sites

Jeg har en versjon av dette scriptet hjemme hvor jeg deler opp hver event til en virtual device. Gjør det lettere å få det pent i HSTouch. Skal poste det når jeg er ferdig på jobb.

Link to comment
Share on other sites

Den 5/29/2016 klokken 19.52, Moskus skrev:

... skrev jeg det til deg, eller har du modifisert det selv? :)

 

Rettelse; det var ikke en modifisert utgave av scriptet ditt, men heller en overkomplisert metode som sikkert kan gjøres lettere med et script. ?

 

Slik gjorde jeg det:

 

1. Start med å lage en Virtual Device for hver bevegelsessensor du vil ha historie på.

 

#618 = 01 - Bevegelse historie

#619 = 02 - Bevegelse historie

#620 = 03 - Bevegelse historie

 

HomeSeer Web Control.png

 

 

2. Lag en ny gruppe i Events med navn "Bevegelsessensor historie" og opprett følgende eventer i denne gruppen:

  • Bevegelsessensor - Gang
  • Bevegelsessensor - Stue
  • Bevegelsessensor - Soverom

 

HomeSeer Web Control   Events.png

 

 

3. Event Bevegelsessensor - Gang ser slik ut:

 

HomeSeer Web Control   Events2.png

 

Script1:

&hs.SetDeviceString(620, hs.DeviceString(619), True)

Script2:

&hs.SetDeviceString(619, hs.DeviceString(618), True)

Script3:

&hs.SetDeviceString(618, hs.DeviceLastChangeRef(621) & " " & "- Bevegelse i gang", True)

 

4. Event Bevegelsessensor - Stue ser slik ut:

 

HomeSeer Web Control   Stue.png

 

Script1: Ingen forandring

 

Script2: Ingen forandring

 

Script3:

&hs.SetDeviceString(618, hs.DeviceLastChangeRef(622) & " " & "- Bevegelse i stue", True)

 

 

5. Event Bevegelsessensor - Soverom ser slik ut:

 

HomeSeer Web Control   Soverom.png

 

Script1: Ingen forandring

 

Script2: Ingen forandring

 

Script3:

&hs.SetDeviceString(618, hs.DeviceLastChangeRef(623) & " " & "- Bevegelse i soverom", True)

 

6. Hver gang en bevegelsessensor trigger så kjøres eventene og resultatet blir som dette:

 

HomeSeer Web historie.png

 

De 3 VDene kan du nå plassere i riktig rekkefølge hvor du måtte ønske i HSTouch. :)

  • Like 1
Link to comment
Share on other sites

Den 1.6.2016 klokken 11.16, Moskus skrev:

Hjælp!

 

Tenker jeg oppdaterer scriptet mitt istedenfor, jeg. ;)

Er det bare å kopiere å bruke scriptene dere lager?

Dette er en jeg vil låne om det er mulig, og den blir oppdatert.

Link to comment
Share on other sites

2 minutter siden, TomasV skrev:

Er det bare å kopiere å bruke scriptene dere lager?

Dette er en jeg vil låne om det er mulig, og den blir oppdatert.

 

Ja, her er det bare å kopiere og bruke scriptene som du vil. Bare husk på å forandre på Reference IDen slik at de passer ditt system. :) 

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

Hei,

 

Jeg får denne erroren når jeg prøver å kjøre scriptet:

Running script C:\Program Files (x86)\HomeSeer HS3\scripts\MotionLog.vb :Exception has been thrown by the target of an invocation.->Does entry point Main exist in script? at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at A.c17b105f989efe61e5979e67bec1ef734.cffd66cb0782c50126727e3fa75582d7a()

 

Slik ser eventen ut:

Yklsb0Vn.jpeg

 

Har byttet DeviceRef til ny opprettet VD.

 

Noen som ser åpenbar feil jeg har gjort?

Link to comment
Share on other sites

On 7/6/2016 at 11:23, GeneralVirus said:

Prøv å kjør denne under Tools -> Control Panel -> Immediate Script Command.

 

hs.SetDeviceString(DINDEVICEREF, "Linje 1<br/>Linje 2<br/>Linje 3", True)

 

Det virker. Hva kan da være feil?

Link to comment
Share on other sites

  • 3 months later...

OK, da kan det være at du trenger å oppdatere fra mono 3 til mono 4, eller noe sånt. Jeg er dessverre ikke rette personen å spørre.

Mono er .NET på Linux. Men versjon 3 har ikke alle de kule funksjonene som den siste versjonen har.

 

EDIT: Det kan være at det hjelper å skrive "Imports System.Linq" på en egen linje helt, helt øverst i scriptet.

  • Like 1
Link to comment
Share on other sites

16 minutter siden, Moskus skrev:

OK, da kan det være at du trenger å oppdatere fra mono 3 til mono 4, eller noe sånt. Jeg er dessverre ikke rette personen å spørre.

Mono er .NET på Linux. Men versjon 3 har ikke alle de kule funksjonene som den siste versjonen har.

 

EDIT: Det kan være at det hjelper å skrive "Imports System.Linq" på en egen linje helt, helt øverst i scriptet.

Ser ikke ut som det hjalp å legge til Imports System.Linq, så da skal jeg se om jeg får oppdatert til mono 4 (eller så får jeg børste støv av en win pc).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.