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

SCRIPT: MotionLog.vb - Logg bevegelser til en device


Anbefalte innlegg

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
Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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
Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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
Lenke til kommentar
Del på andre sider

  • 4 uker senere...

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?

Lenke til kommentar
Del på andre sider

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?

Lenke til kommentar
Del på andre sider

  • 3 måneder senere...

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
Lenke til kommentar
Del på andre sider

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).

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.