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

Plugin til Adax


Gjelsvik

Anbefalte innlegg

Nå som adax sitt api er åpent, og siden vi har reine pluginfabrikken her på forumet.  - Er det noen som vil ta fatt på dette?

Jeg har dessverre ikke kunnskapen nok til å få gjort det selv. 

 

Kan bistå med adax konto og tilgang til denne om noen vil se på det.

Lenke til kommentar
Del på andre sider

22 hours ago, Guahtdim said:

Jeg vil helst ha/eie tingene selv for å gjøre plugin prosjekter. 

Og det går fort 10-20 timer i ren kodetid på å lage ett slikt prosjekt selv om jeg nå har mye jeg kan "kopiere inn" fra andre prosjekter. 

Skjønner at det er lettere å ha tilgang til produktet fysisk. Kan sende deg en ovn om du vil jeg. 

 

Begynte på utvikling av plugins for et par år siden selv. Men fant aldri ut hvor man skriver 'call-back' altså der du styrer devicene du lager via kontrollknapper i homeseer. 

 

Andre veien fikk jeg til. Altså spørre api om enheter, lage Devices i hs, og så spørre apiet om verdiene de forskjellige enhetene har. 

  • Like 2
Lenke til kommentar
Del på andre sider

20 hours ago, Moskus said:

SetIOMulti() :) 

 

Nå er vi litt utenfor topic her, men la oss ta et tenkt tilfelle.

 

Hvor "skriver" jeg koden/funksjonene som hver kontrollknapp skal trigge.

la oss si at jeg har to childdevicer, en for hver varmeovn. Disse har jeg  mulighet til å sette temperatur på.

 

Apiet kan vi tenke oss er noe slik som dette "http://server/api/temp?id=1234&temp=23,5"

 

Hvor i koden tar jeg med meg deviceID inn i funkjonen som setter temperaturen mot apiet til adax? Denne deviceid er da ikke homeseer sin, men en man får når man poller apiet. Den bør jo lagres på devicen i et skjult felt eller noe.

 

 

Lenke til kommentar
Del på andre sider

31 minutter siden, Gjelsvik skrev:

Nå er vi litt utenfor topic her, men la oss ta et tenkt tilfelle.

Vi er vel bang smack on topic. ;)

 

31 minutter siden, Gjelsvik skrev:

Hvor "skriver" jeg koden/funksjonene som hver kontrollknapp skal trigge.

la oss si at jeg har to childdevicer, en for hver varmeovn. Disse har jeg  mulighet til å sette temperatur på.

 

Apiet kan vi tenke oss er noe slik som dette "http://server/api/temp?id=1234&temp=23,5"

 

Hvor i koden tar jeg med meg deviceID inn i funkjonen som setter temperaturen mot apiet til adax? Denne deviceid er da ikke homeseer sin, men en man får når man poller apiet. Den bør jo lagres på devicen i et skjult felt eller noe.

Jeg hadde delt det opp i forskjellige klasser for å håndtere det, men det er SetIOMulti() som håndterer alle knappetrykker på devicer som tilhører plugin'en.

 

Du får sendt en deviceRef og en kommando, og bruker da dette videre. Hvordan du håndterer det er opp til deg. Her er SetIOMulti() fra TibberSeer:

 

Mye av teksten ligger i MoskusSample...

    Public Sub SetIOMulti(ByVal colSend As List(Of HomeSeerAPI.CAPI.CAPIControl))
        'Multiple CAPIcontrols might be sent at the same time, so we need to check each one
        For Each CC In colSend
            Log("SetIOMulti triggered, checking CAPI '" & CC.Label & "' on device " & CC.Ref, LogType.Debug)

            'CAPI doesn't magically store the new devicevalue, and I believe there's good reason for that:
            '  The status of the device migth depend on some hardware giving the response that it has received the command,
            '  and perhaps with an other value (indicating a status equal to "Error" or whatever). In that case; send the command,
            '  wait for the answer (in a new thread) and THEN update the device value

            'But here, we just update the value for the device
            hs.SetDeviceValueByRef(CC.Ref, CC.ControlValue, False)

            'Get the device sending the CAPIcontrol
            Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(CC.Ref)

            Select Case device.DeviceType_Get(hs).Device_SubType_Description.ToLower
                Case "root_price"
                    Log("Pressing update on price root...", LogType.Debug)
                    Dim ref As Integer = CC.Ref
                    Dim t As New Thread(AddressOf UpdateTibberData)
                    t.Start(ref)

                Case "root_consumption"
                    Log("Pressing update on consumption root...", LogType.Debug)
                    Dim ref As Integer = CC.Ref
                    Dim t As New Thread(AddressOf UpdateTibberData)
                    t.Start(ref)

                Case "root_realtime"
                    Log("Pressing restart on realtime root...", LogType.Debug)
                    Dim ref As Integer = CC.Ref
                    RestartRealtime(ref)
            End Select

        Next
    End Sub

 

Her fra TrådfriSeer:

    Public Sub SetIOMulti(ByVal colSend As List(Of HomeSeerAPI.CAPI.CAPIControl))
        'Multiple CAPIcontrols might be sent at the same time, so we need to check each one
        For Each CC In colSend
            Log("SetIOMulti triggered, checking CAPI '" & CC.Label & "' on device " & CC.Ref, LogType.Debug)

            'Get the device sending the CAPIcontrol
            Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(CC.Ref)

            Select Case GetTypeFromDevice(device)
                Case "Hub"
                    'There's nothing here

                Case "Bulb"
                    Dim b As TrådfriBulb = (From bs In Trådfri.Bulbs Where bs.MainDeviceRef = CC.Ref).FirstOrDefault
                    If b IsNot Nothing Then
                        b.SetDimLevelAsync(CC.ControlValue)
                    End If

                Case "Group"
                    Dim g As TrådfriGroup = (From bs In Trådfri.Groups Where bs.MainDeviceRef = CC.Ref).FirstOrDefault
                    If g IsNot Nothing Then
                        g.SetDimLevelAsync(CC.ControlValue)
                    End If

                Case "Scene"
                    Dim g As TrådfriGroup = (From bs In Trådfri.Groups Where bs.SceneDeviceRef = CC.Ref).FirstOrDefault
                    If g IsNot Nothing Then
                        g.SetSceneAsync(CC.ControlValue)
                    End If

                Case "ColorTemperature"
                    Dim b As TrådfriBulb = (From bs In Trådfri.Bulbs Where bs.TemperatureDeviceRef = CC.Ref).FirstOrDefault
                    If b IsNot Nothing Then
                        b.SetColorAsync(CC.ControlValue)
                    End If

                Case "TransitionTime"
                    hs.SetDeviceValueByRef(CC.Ref, Math.Round(CC.ControlValue, 1), True)
            End Select
        Next
    End Sub

 

Lenke til kommentar
Del på andre sider

Jeg har gjort alle mine plugins i C#

Du kan se på Moskus sine eksempelplugins for å få litt oversikt

https://github.com/Moskus/hspi_CsharpSample

 

(og han burde også ha lagt ut sin vb-versjon)

 

Slik jeg gjør det så pleier jeg å lagre ned endel info til PED (Plugin Extra Data) når jeg lager en device. Her ville det f.eks. vært at man kan ha deviceId som en property.

 

Når du da får noe inn på IOMulti så er det bl.a. deviceId for enheten som man trykket på (og "controlvalue"). Med dette henter du inn PED data og ut fra dette kan du da begynne å kalle mot f.eks. api når du skal endre noe.

 

Edit: Moskus slo meg og hadde også mye bedre forklaringer.

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

12 minutes ago, Gjelsvik said:

Er eksempelkoden din også et greit utgangspunkt for HS4 plugins?

Koden til Moskus er for HS3. Men jeg mener den skal klare å kjøre som legacy-plugin i HS4.

Det er litt variabelt hva som fungerer eller ikke. Så langt så virker det som om mine plugins fungerer greit. 

Endret av Guahtdim
Lenke til kommentar
Del på andre sider

  • 1 måned 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.