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

SCRIPT: MotionLog.vb - Logg bevegelser til en device


Anbefalte innlegg

  • 1 måned senere...

Hvis man kun ønsker å se tidspunkt for siste hendelse, f.eks. hvis man har en oversikt i HStouch over siste bevegelse på alle multisensorer, så finnes det en superenkel måte å gjøre dette på.

 

Lag en virtual device for hver sensor du ønsker å logge - merk deg device id.

 

dev.png

 

id.png

 

Lag en event pr. enhet, sett den opp til å trigge på at multisensor registrerer "motion".

Velg så å kjøre en script kommando, endre da det første tallet i kommandoen til din "Reference ID".

"NOW" er jo en kjekk måte å sette inn tid/dato i en string, alternativt kan man gjøre som Iblis og benytte "DeviceLastChangeRef" som peker til device id for multisensor.

 

bev.png

 

I HSTouch Designer kan du nå legge til den virtuelle device i en visning, endre til StatusTrackingNormal, plukk frem den virtuelle devicen, endre til "Use Status Text".

 

hst.png

 

 

Endret av Nettopp
  • Like 3
Lenke til kommentar
Del på andre sider

  • 2 uker senere...
På 6.7.2016 den 10.46, Archos skrev:

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

 

 

 

Hei

 

Jeg får opp noe av den samme feilen, hva gjorde du for å fikse dette? @Moskus er det noe med en setup fil her?

På 6.7.2016 den 15.21, Moskus skrev:

OK, tror jeg får lage en egen Setup-funksjon som gjør dette her. Lager en device og setter den opp riktig.

 

Jeg har prøvd med Sum or Function som Main og main som ga 2 forskjellige feilmeldinger, se bildet

5a1fdafb2b8f6_Skjermbilde2017-11-3011_16_44.png.a303f479ff8861c2c7e348d273bb3030.png

 

er det bevegelseslogg devisen jeg har satt op feil?

Lenke til kommentar
Del på andre sider

9 timer siden, Moskus skrev:

Prøv med dette immediate scriptet:


&hs.SetDeviceString(DIN_DEV_REF, "Linje1<br>Line2<br>Linje3<br>Linje4", True)

 

Takk, det fungerte, i tillegg hadde jeg en bokstavfeil i scriptet men nå fungerer det, ?

Lenke til kommentar
Del på andre sider

Jeg kjører nyeste Mono, men får likevel dette:

Sitat
       
Dec-02 12:29:54   Error Compiling script /usr/local/HomeSeer/scripts/MotionLog.vb: 'ToList' is not a member of 'System.String[]'.
Dec-02 12:29:54   Error Compiling script /usr/local/HomeSeer/scripts/MotionLog.vb: 'ToList' is not a member of 'System.String[]'.
Dec-02 12:29:54   Error Compiling script /usr/local/HomeSeer/scripts/MotionLog.vb: The import 'System.Core' could not be found.

 

Tips? :) 

Lenke til kommentar
Del på andre sider

24 minutter siden, ZoRaC skrev:

Tips? :) 

Installer Windows...

 

Men seriøst:

Scriptet må skrives ganske mye om hvis Lamda-funksjoner som ".ToString()" ikke er støttes. Enten over til C# hvor det (visstnok og kanskje?) er støttet eller til å bruke Array istedenfor.

 

Et siste alternativ er å vente til den dagen HomeSeer eventuelt er bygd på .NET Core istedenfor mono på Linux.

Lenke til kommentar
Del på andre sider

Fikk «hacket» til en workaround. :) 

Sitat

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

    Dim newText As String = Now.Date & " " & Now.ToLongTimeString & " - " & input.ToString & "<br>" & hs.GetINISetting("Log", "1", "", "MotionLog.ini") & hs.GetINISetting("Log", "2", "", "MotionLog.ini") & hs.GetINISetting("Log", "3", "", "MotionLog.ini")

 hs.SaveINISetting("Log", "3", hs.GetINISetting("Log", "2", "", "MotionLog.ini"), "MotionLog.ini")
hs.SaveINISetting("Log", "2", hs.GetINISetting("Log", "1", "", "MotionLog.ini"), "MotionLog.ini")
hs.SaveINISetting("Log", "1", Now.Date & " " & Now.ToLongTimeString & " - " & input.ToString & "<br>" , "MotionLog.ini")

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

 

Lenke til kommentar
Del på andre sider

  • 2 måneder senere...
På 22.5.2016 den 12.54, Moskus skrev:

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.

Hei, jeg ønsker en ny versjon av dette scriptet, jeg prøvde å skrive det om selv men fikk det ikke helt til.

Jeg har EN device som har mange statuser. Ønsker er å ha en device som viser de 10 siste statusene fra denne ene Devicen.

 

Endring jeg ønsker er at scriptet skal skrive statusen til denne bestemte Device i stedet for teksten som skrives inn i parameter.

 

Er et noen som gidder og endre det for meg?

Lenke til kommentar
Del på andre sider

4 minutter siden, Ruud skrev:

Endring jeg ønsker er at scriptet skal skrive statusen til denne bestemte Device i stedet for teksten som skrives inn i parameter.

 

Er et noen som gidder og endre det for meg?

 

Prøv å bytt ut «input.ToString» med «hs.devicevalue(id)» :) 

 

Hvis det da er verdien av devicen du vil ha?

Lenke til kommentar
Del på andre sider

 

20 timer siden, ZoRaC skrev:

Prøv å bytt ut «input.ToString» med «hs.devicevalue(id)» :)

Fungerte nesten, jeg får nummeret på statusen men jeg ønsker  teksten som hører til nummeret.

Jeg måtte skrive GetDeviceString(ID)

det funket hvis jeg også la til 2 funksjoner:

Function GetDeviceString(ByVal DeviceRef As Integer) As String
        'Henter device string fra HS
        Dim devstring As String = hs.DeviceString(DeviceRef)
        If devstring <> String.Empty Then Return devstring
        'Henter devicestring directe fra CAPI-status, hvis den finnes
        devstring = hs.CAPIGetStatus(DeviceRef).Status
        If devstring <> String.Empty Then Return devstring
        'Henter devicestring fra CAPI beskrivelse (basert på value)
        devstring = GetCapiString(DeviceRef)
        If devstring <> String.Empty Then Return devstring
        'Henter devicestring fra device class
        Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(DeviceRef)
        devstring = dev.devString(Nothing)
        If devstring <> String.Empty Then Return devstring
        Return "String not found for " & DeviceRef & ", value = " & hs.DeviceValueEx(DeviceRef)
    End Function
    Function GetCapiString(ByVal DeviceRef As Integer) As String
        For Each CAPI As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(DeviceRef)
            If CAPI.ControlValue = hs.DeviceValue(DeviceRef) Then Return CAPI.Label.ToString
        Next
        Return String.Empty
    End Function

 

  • Like 1
Lenke til kommentar
Del på andre sider

22 minutter siden, Moskus skrev:

Hmmm, de så kjente ut. ;)

Jepp det er klipp og lim fra ditt fantastiske script: LogStatusToFile.vb

 

24 minutter siden, Moskus skrev:

Du kunne nok klart deg med kun "GetCapiString" siden det er en CAPIlabel du skal ha :)

hmmm.. prøvde å ta vekk funksjonen - GetDeviceString, da sluttet det å virke??

Lenke til kommentar
Del på andre sider

11 timer siden, Ruud skrev:

hmmm.. prøvde å ta vekk funksjonen - GetDeviceString, da sluttet det å virke??

Du må også endre kallet ditt fra "GeDeviceString(ID)" til "GetCapiString(ID)". :) 

  • Thanks 1
Lenke til kommentar
Del på andre sider

Har nå laget e ny versjon av scriptet. Den er vesentlig forenklet (og dermed betydelig kjappere) enn før, og skal nå kunne kjøre på Linux uten problemer. :)

 

Merket at med mye aktivitet i huset så gikk det overraskende seint, mulig det ble mye konverteringer som egentlig var unødvendige.

Denne versjonen er kjapp. :) 

  • Thanks 2
Lenke til kommentar
Del på andre sider

  • 2 måneder senere...

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.