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

SCRIPT: IFTTT.vb - send pushvarsel på en enkel måte


ZoRaC

Anbefalte innlegg

EDIT:

Ny versjon av scriptet, nå med mulighet for å sende med info fra en device i meldingen! :) 

 

Skrevet for IFTTT, men kan jo enkelt endres til hva som helst. 

 

Formål:

Send pushvarsel til meg, samboer eller begge og evt bare hvis vi er hjemme/borte. 

 

Se scriptet:

Spoiler

Sub Main(ByVal params as Object) 
    ' @Author: Sven-Ove Bjerkan
    ' @Version: 3 (2017-01-22)

    ' @Syntax: him|her|message|deviceid

    ' Values for "him"/"her":
    ' 0 = no notify
    ' 1 = if home
    ' 2 = if away
    ' 3 = always notify

    ' Replacement-variables in "message":
    ' %name%, %value%, %string%, %loc1%, %loc2%
    
    ' deviceid is optional


    ' SETTINGS
    Dim APIkeyHim As String = "KEY"
    Dim APIkeyHer As String = "KEY"
    Dim deviceHimHome As Integer = 53
    Dim deviceHerHome As Integer = 167
    Dim isHomeValue as Integer = 1
    Dim isAwayValue as Integer = 0


    Dim parameters() as String = params.ToString.Split("|")
    Dim him As Integer = parameters(0)
    Dim her As Integer = parameters(1)
    Dim message As String = parameters(2)
    Dim deviceid As Integer = 0

    If parameters.length = 4 Then
       deviceid  = parameters(3)
    End If

    Dim dvName As String
    Dim dvString As String
    Dim dvLoc1 As String
    Dim dvLoc2 As String
    Dim dvValue As Long


    If deviceid <> 0 Then
       dvValue = hs.DeviceValue(deviceid)
       ' Strip HTML from DeviceString
       dvString = System.Text.RegularExpressions.Regex.Replace(hs.DeviceString(deviceid),"<(.|\n)*?>",String.Empty)
       
       Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceid)
       dvLoc1 = dv.Location(Nothing)
       dvLoc2 = dv.Location2(Nothing)
       dvName = dv.Name(Nothing)

       message = message.Replace("%name%",dvName).Replace("%value%",dvValue).Replace("%string%",dvString).Replace("%loc1%",dvLoc1).Replace("%loc2%",dvLoc2)
    End If


    Dim urlHim As String = "https://maker.ifttt.com/trigger/notify/with/key/" & APIkeyHim & "?value1=" & message
    Dim urlHer As String = "https://maker.ifttt.com/trigger/notify/with/key/" & APIkeyHer & "?value1=" & message
    Dim alertHim As Boolean = False
    Dim alertHer As Boolean = False

    '' if he's home
    If him = 1 And hs.DeviceValue(deviceHimHome) = isHomeValue Then
	alertHim = True
    End If
    '' if he's away
    If him = 2 And hs.DeviceValue(deviceHimHome) = isAwayValue Then
        alertHim = True
    End If
    '' always notify him
    If him = 3 Then    
        alertHim = True
    End If


    '' if she's home
    If her = 1 And hs.DeviceValue(deviceHerHome) = isHomeValue Then
        alertHer = True
    End If
    '' if she's away
    If her = 2 And hs.DeviceValue(deviceHerHome) = isAwayValue Then
        alertHer = True
    End If
    '' always notify her
    If her = 3 Then    
        alertHer = True
    End If
 
    If alertHim Then
        hs.URLAction(urlHim, "GET", "", "")
	hs.WriteLog("Info", "Sending IFTTT-notify to him (" & message & ")")
    End If
    If alertHer Then
        hs.URLAction(urlHer, "GET", "", "")
	hs.WriteLog("Info", "Sending IFTTT-notify to her (" & message & ")")
    End If
End Sub

 

 

Guide for bruk:

Først, registrer konto på IFTTT.com for begge brukere og last ned IFTTT-appen på telefonene til begge brukere.

Lag en "applet" med "Maker" som "This", den skal ha "event name" satt som "notify".

"That" skal fortsatt være "Notification", men den skal ha "{{Value1}}" som innhold (settes inn via "ingredient"-knappen).

 

makerv2.PNG

 

I scriptet må man legge inn API-key for begge brukere. Det er siste del av URL man finner her: https://ifttt.com/services/maker/settings

 

I HomeSeer trenger du 2 devicer som sier om hver av dere er hjemme eller ikke.

Jeg bruker PHLocation-plugin og har satt opp "home location":

maker5.PNG

 

Da får man en device hver som er enten "Near" eller "Not near" "hjemme":

maker3.PNG

 

I scriptet må man sette IDen til "near"-devicene.

"isHomeValue" settes til "1" og "isAwayValue settes til "0" hvis man bruker PHLocation ("Near" er verdi 1 og "Not near" er verdi 0).

 

Eksempel:

iftttv3.PNG

 

Parameter her er: "3|0|Warning: %name% is at %value%!|300"

Det vil føre til at jeg får varsel uansett, hun vil ikke motta varsel og teksten vil være "Warning: %name% is at %value%!" (hvis device 300 er en temp.sensor, så kan teksten bli f.eks: "Warning: Fryser is at -5!".

  • Like 4
Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Da har jeg "oppgradert" til den nye versjonen, og det fungerer glimrende!

 

Idé til videre utvikling, er det mulig å ta med en parameterverdi inn til IFTTT? F.eks. en referanse som man definerer i parametere.

F.eks. har jeg en alarm som varsler meg når temperaturen i fryseboksen er over en viss grense, det hadde jo vært enda mer lekkert om den faktiske temperaturen ble sendt over i varselet.

Lenke til kommentar
Del på andre sider

Den 16.1.2017 klokken 8.34, Moskus skrev:

Du kunne vel med fordel skrevet over førsteposten (den originale kan skjules). :) 

 

Ja, skal "rydde" litt senere, skulle bare skyndte meg å legge den ut før jeg tok kvelden. :)

 

Den 19.1.2017 klokken 8.40, Nettopp skrev:

Idé til videre utvikling, er det mulig å ta med en parameterverdi inn til IFTTT? F.eks. en referanse som man definerer i parametere.

F.eks. har jeg en alarm som varsler meg når temperaturen i fryseboksen er over en viss grense, det hadde jo vært enda mer lekkert om den faktiske temperaturen ble sendt over i varselet.

 

Utestet, men prøv dette:

Spoiler

Sub Main(ByVal params as Object) 
    ' Syntax: him|her|message|deviceid

    ' 0 = no notify
    ' 1 = if home
    ' 2 = if away
    ' 3 = always notify

    ' SETTINGS
    Dim APIkeyHim As String = "KEY"
    Dim APIkeyHer As String = "KEY"
    Dim deviceHimHome As Integer = 53
    Dim deviceHerHome As Integer = 167
    Dim isHomeValue as Integer = 1
    Dim isAwayValue as Integer = 0
    

    Dim parameters() as String = params.ToString.Split("|")
    Dim him As Integer = parameters(0)
    Dim her As Integer = parameters(1)
    Dim message As String = parameters(2)
    Dim deviceid As Integer = parameters(3)


    Dim urlHim As String = "https://maker.ifttt.com/trigger/notify/with/key/" & APIkeyHim & "?value1=" & message & "&value2=" & hs.DeviceValue(deviceid)
    Dim urlHer As String = "https://maker.ifttt.com/trigger/notify/with/key/" & APIkeyHer & "?value1=" & message & "&value2=" & hs.DeviceValue(deviceid)
    Dim alertHim As Boolean = False
    Dim alertHer As Boolean = False

    '' if he's home
    If him = 1 And hs.DeviceValue(deviceHimHome) = isHomeValue Then
	alertHim = True
    End If
    '' if he's away
    If him = 2 And hs.DeviceValue(deviceHimHome) = isAwayValue Then
        alertHim = True
    End If
    '' always notify him
    If him = 3 Then    
        alertHim = True
    End If


    '' if she's home
    If her = 1 And hs.DeviceValue(deviceHerHome) = isHomeValue Then
        alertHer = True
    End If
    '' if she's away
    If her = 2 And hs.DeviceValue(deviceHerHome) = isAwayValue Then
        alertHer = True
    End If
    '' always notify her
    If her = 3 Then    
        alertHer = True
    End If
 
    If alertHim Then
        hs.URLAction(urlHim, "GET", "", "")
	hs.WriteLog("Info", "Sending IFTTT-notify to him (" & message & ")")
    End If
    If alertHer Then
        hs.URLAction(urlHer, "GET", "", "")
	hs.WriteLog("Info", "Sending IFTTT-notify to her (" & message & ")")
    End If
End Sub

 

I IFTTT legger du da til "value2" i meldingen i tillegg til "value1". :)

 

PS: Slik scriptet er skrevet nå, så MÅ du ha med device-id-parameter og den vil prøve å sende med en verdi. Mulig jeg endrer på det senere, slik at deviceid blir optional. :) 

Endret av ZoRaC
  • Like 1
Lenke til kommentar
Del på andre sider

2 minutter siden, Nettopp skrev:

Takker igjen, dette fungerte fint! Den eneste endringen jeg gjorde var å lage en ny IFTTT id/action som jeg kalte "notifyID", så velger jeg mellom to scripts avhengig av om jeg ønsker device eller ikke.

 

Ja, det er et alternativ. :)

Regner meg jeg oppdaterer scriptet en dag slik at man kan sende "0" som siste parameter (eller droppe siste parameter helt) for å ikke ta med verdi fra device. Da kan man forholde seg til ett script og en "IFTTT-hendelse". :) 

Lenke til kommentar
Del på andre sider

Kult! Kan gi deg en ting til å tygge på, hehe...

 

I dag har jeg et alarm-oppsett der man må ha en event pr. alarm/rom, for å kunne sende med tekst om hvilket rom det gjelder.

Det hadde vært nyttig å kunne samle dette til en enkelt event, der man sender over en string som forteller hvilket rom alarmen har gått i.

I den modifiserte versjonen med device value så kan jeg vel kun sende "255" eller hva det er som disse rapporterer ved bevegelse. Finnes det en HS-funksjon som leser ut floor/room til en string eller liknende? Jeg ser for meg at et alternativ er å lage en virtuell device som rett og slett settes til en string med romnavn, og at sciptet viser til denne (samt at man endrer parameter til string).

Lenke til kommentar
Del på andre sider

Tror dette kan hjelpe deg på rett vei:

Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceid)

Dim loc As String = dv.location

Dim loc2 As String = dv.location2

 

Så kan du kanskje sende med loc og loc2 som value3?

Endret av ZoRaC
  • Like 1
Lenke til kommentar
Del på andre sider

55 minutter siden, ZoRaC skrev:

Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceid)

Dim loc As String = dv.location

Dim loc2 As String = dv.location2

 

må korrigeres til:

Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceid)
Dim loc As String = dv.Location(Nothing)
Dim loc2 As String = dv.Location2(Nothing)

... fordi DeviceClass'en trenger en referanse til et HS-object, men siden dette er et script, så er det allerede satt. Men man må likevel spesifisere "Nothing" istedenfor "hs".

Lenke til kommentar
Del på andre sider

26 minutter siden, Moskus skrev:

 

må korrigeres til:


Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceid)
Dim loc As String = dv.Location(Nothing)
Dim loc2 As String = dv.Location2(Nothing)

... fordi DeviceClass'en trenger en referanse til et HS-object, men siden dette er et script, så er det allerede satt. Men man må likevel spesifisere "Nothing" istedenfor "hs".

 

Ah, trodde location og location2 var public parametere, ikke funksjoner. :) 

Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Ny versjon (igjen :P)!

Velger å bare dele den her og la første post stå som den er.

Den nye versjonen benytter "Pushover"-plugin for meg og IFTTT for samboeren. 

Skulle man ønske å endre begge til Pushover, så er det også kurant. :)

 

Sub Main(ByVal params as Object) 
    ' @Author: Sven-Ove Bjerkan
    ' @Version: 5 (2018-02-01)

    ' @Syntax: him|her|message|priority|deviceid

    ' Values for "him"/"her":
    ' 0 = no notify
    ' 1 = if home
    ' 2 = if away
    ' 3 = always notify

    ' Replacement-variables in "message":
    ' %name%, %value%, %string%, %loc1%, %loc2%
    
    ' priority is default "normal", could be "low", "normal", "high" or "emergency"

    ' deviceid is optional


    ' SETTINGS
    Dim identifierHim As String = "f.eks iPhone - device må finnes i pushover og i plugin"
    Dim identifierHer As String = "IFTTT-key"
    Dim deviceHimHome As Integer = 0
    Dim deviceHerHome As Integer = 0
    Dim isHomeValue as Integer = 1
    Dim isAwayValue as Integer = 0

    Dim parameters() as String = params.ToString.Split("|")
    Dim him As Integer = parameters(0)
    Dim her As Integer = parameters(1)
    Dim message As String = parameters(2)
    Dim deviceid As Integer = 0
    Dim pri As String = "normal"

    If parameters.length = 4 Then
       pri = parameters(3)
    End If
    If parameters.length = 5 Then
       deviceid  = parameters(4)
    End If

    Dim dvName As String
    Dim dvString As String
    Dim dvLoc1 As String
    Dim dvLoc2 As String
    Dim dvValue As Long


    If deviceid <> 0 Then
       dvValue = hs.DeviceValue(deviceid)
       ' Strip HTML from DeviceString
       dvString = System.Text.RegularExpressions.Regex.Replace(hs.DeviceString(deviceid),"<(.|\n)*?>",String.Empty)
       
       Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceid)
       dvLoc1 = dv.Location(Nothing)
       dvLoc2 = dv.Location2(Nothing)
       dvName = dv.Name(Nothing)

       message = message.Replace("%name%",dvName).Replace("%value%",dvValue).Replace("%string%",dvString).Replace("%loc1%",dvLoc1).Replace("%loc2%",dvLoc2)
    End If

    Dim urlHer As String = "https://maker.ifttt.com/trigger/notify/with/key/" & identifierHer & "?value1=" & message
    Dim alertHim As Boolean = False
    Dim alertHer As Boolean = False

    '' if he's home
    If him = 1 And hs.DeviceValue(deviceHimHome) = isHomeValue Then
	alertHim = True
    End If
    '' if he's away
    If him = 2 And hs.DeviceValue(deviceHimHome) = isAwayValue Then
        alertHim = True
    End If
    '' always notify him
    If him = 3 Then    
        alertHim = True
    End If


    '' if she's home
    If her = 1 And hs.DeviceValue(deviceHerHome) = isHomeValue Then
        alertHer = True
    End If
    '' if she's away
    If her = 2 And hs.DeviceValue(deviceHerHome) = isAwayValue Then
        alertHer = True
    End If
    '' always notify her
    If her = 3 Then    
        alertHer = True
    End If
 
    If alertHim Then
        Dim pushArr(8) As Object
        pushArr(0) = identifierHim
        pushArr(1) = message
        pushArr(2) = "HomeSeer"
        pushArr(3) = pri
        pushArr(4) = Nothing
        pushArr(5) = Nothing
        pushArr(6) = Nothing
        pushArr(7) = Nothing
        pushArr(8) = Nothing
        hs.PluginFunction("Pushover 3P", "", "Pushscript", pushArr)
	hs.WriteLog("Info", "Sending Pushover-notify to him (" & message & " / pri: "& pri & ")")
    End If
    If alertHer Then
        hs.URLAction(urlHer, "GET", "", "")
	hs.WriteLog("Info", "Sending IFTTT-notify to her (" & message & ")")
    End If
End Sub

 

Har forresten også funnet ut at det opprinnelig scriptet enkelt kan brukes til å sende SMS i stedet for IFTTT-push - bare sett opp "that" til SMS i stedet for "Notification". :) 

Endret av ZoRaC
  • Like 2
Lenke til kommentar
Del på andre sider

  • 10 måneder senere...

Siste innlegg er endret litt, da det ikke fungerer med nyeste Pushover-plugin.

Det er bare en liten endring, etter at de la til støtte for bildevedlegg (endring i rødt):

Sitat

        Dim pushArr(8) As Object
        pushArr(0) = identifierHim
        pushArr(1) = message
        pushArr(2) = "HomeSeer"
        pushArr(3) = pri
        pushArr(4) = Nothing
        pushArr(5) = Nothing
        pushArr(6) = Nothing
        pushArr(7) = Nothing
        pushArr(8) = Nothing

 

Lenke til kommentar
Del på andre sider

2 timer siden, Moskus skrev:

Ja, det var litt synd at han ikke lagde en override funksjon der, måtte også endre på et par scripts.

 

Menig. Jeg hadde bare ett script da, så var overkommelig. :P 

 

2 timer siden, Moskus skrev:

Men det er genialt deilig med bilder! :) 

 

Skuffende at de ikke har implementert «rich notifications» for iOS. 

iOS-Custom-Layouts.jpg 

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.