python-cozify eli epavirallinen API toteutus

ArtanicusArtanicus Viestejä: 14Member
Aluksi linkki: https://github.com/Artanicus/python-cozify

Kun sita kuuluisaa APIa on nyt hyva kotva odoteltu niin meni niinsanotusti hermo ja toteutin senverran rajapintaa kuin siita jo tiedetaan. Suuri kiitos siis Mika Kolarille pohjatyosta! (https://bitbucket.org/mikakolari/cozify)

Oli ylimaaraista aikaa ja halusin viimein Proove Multisensoreista datan talteen joten kirjoitin pienen Python kikkareen joka noukki datan ja tallensi InfluxDB puolelle. Idea jatkoi jalostumistaan ja on nyt siina pisteessa etta kehtaa mesota laajemmin.

Eli, python-cozify on MIT lisensoitu avoimen lahdekoodin Python kirjasto joka hoitaa autentikoinnin Cozify pilven kanssa ja antaa yksinkertaisen metodin noukkia laitteista dataa. Toistaiseksi siis read-only. (koodia ja pyyntoja otetaan vastaan!)

Yksinkertainen esimerkkiohjelma tuota kayttaen joka noukkii Multisensor dataa ja tuuppaa talteen InfluxDB aikasarjaan: https://github.com/Artanicus/cozify-temp
Tuolla saa nattia kappyraa talteen, esim Grafanan avulla tamannakoista: https://snapshot.raintank.io/dashboard/snapshot/MMa2ohY3pkp3V2JqWe2B8bIFl6J295BM


Parannettavaa on paljon ja yksi ihminen ei mitenkaan pysty kaikkea toteuttamaan koska ei omista kaikkia laitteita. Eli nyt Python taitajat nurkista esiin ja pull requesteja tulemaan. :-)

Viestejä yhteensä

  • Pasi StåhlPasi Ståhl Viestejä: 26Member, Beta-käyttäjä
    Oma Python osaaminen on aika tarkalleen noiden yllä kerrottujen esimerkkien pohjalta tehty viritys, joka lukee lämpötilat ja kirjoittaa ne thigspeak.com:iin. Koodi on vain aavistuksen haavoittuva. Lämpömittareita ei saa poistaa, eikä niiden nimeä saa muuttaa. Koitan kuitenkin elää tuon kanssa, kunnes joskus tulevaisuudessa luen data SQL:n.
    Eli jätän toistaiseksi pull requestit väliin.
    Yritin aluksi siirtää lämpötilat ihan kylmästi siinä järjestyksessä, kun hubi ne lähetti. Tämä järjestys kuitenkin muuttuu, jos hubin laitteita lisätään tai poistetaan. Siksi siirto on nyt kytketty lämpömittareiden nimiin.

    Voin kyllä tarvittaessa lähettää sen datan, jota minulta löytyvät laitteet lähettävät.

    Seuraavan kerran, kun minulla on aikaa tutustua tuohon Pythoniin, koitan koodailla pätkän, joka tarkistaa temojen tilan ja muuttaa niitä.
    Näin saisin tehtyä teeman, joka aktivoituessaan sammuttaa halutut teemat. Kun ei sitä kaivattua sammuta teema laitteesta/teemasta ominaisuutta ole vielä tullut. (Vai onko?)
    Teemojen tilat saa jo luettua, eli pitää varmaan vain lähettää "IsOn": false käskyjä.
  • ArtanicusArtanicus Viestejä: 14Member
    Laita ihmeessä jotain kautta niin saa lisää yleispätevyyttä. Teemat kiinnostavat itseänikin joten kerro miten käy. Tavoite olisi olla helppo ja kaikenkattava joten parannettava​a riittää ja kaikki apu kelpaa.
  • ArtanicusArtanicus Viestejä: 14Member
    Uusin hub softapaivitys nostaa API versioksi 1.4. Kirjaston uusin versio 0.2.4 tuo tahan yhteensopivuuden:
    https://github.com/Artanicus/python-cozify/releases/tag/v0.2.4
  • samppasamppa Viestejä: 76Member, Cozify mod
    Hienoa oma-aloitteisuutta :-)

    Ajattelin tehdä säännön, jolla lämpötila sensorin data lähetetään ThingSpeak palveluun.
    Olisiko sille käyttöä?

    t.Samppa / Cozify
  • ArtanicusArtanicus Viestejä: 14Member
    Se olisi varmasti monelle helpompi ratkaisu kuin rakentaa Pythonin päälle oma infra. Omaa tarvetta se ei olisi täyttänyt varmaan kovin kauaa mutta olenkin aina vaativa tapaus.
  • JussiSJussiS Viestejä: 3Member
    Meikäläisellä homma ei pelittänyt:

    >>> cloud.authenticate()
    Enter your Cozify account email address: xxx
    OTP from your email: xxx
    Traceback (most recent call last):
    File "", line 1, in
    cloud.authenticate()
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/cozify/cloud.py", line 45, in authenticate
    raise Exception('No LAN ip returned, is your hub registered?')
    Exception: No LAN ip returned, is your hub registered?
    >>>

    Mahtaako vaikuttaa, hubi ei ole samassa LANissa...(?)

    -Jussi
  • ArtanicusArtanicus Viestejä: 14Member
    Jep, johtuu juuri siitä. En ole vielä selvittänyt/purkanut miten etäyhteys toimii. Pilvi ei autentikoi IP pyyntöä mutta ei myöskään vastaa jos pyyntö ei ole samasta verkosta.
  • ArtanicusArtanicus Viestejä: 14Member
    Nyt kun tarkemmin ajatellen niin pystyn ainakin muokkaamaan authia sen verran että IP:n voi syöttää käsin. Eli stay tuned.
  • JussiSJussiS Viestejä: 3Member
    Kiitos @Artanicus ! Jään odottamaan. Olisi mahtavaa saada toisaalla olevan hubin laitteiden tilatietoja jemmattua.

    Ja @samppa :lle myös kiitos, olisi mahtavaa saada lähettyä tietoja mainittuun palveluun. Miten tätä pääsisi betatestaamaan?

    -JussiS
  • villetakanenvilletakanen Viestejä: 4Member
    Ja sit tässä kohdin se pakollinen: onko patreon/paypal tms. tapa tukea tätä työtä.
  • ArtanicusArtanicus Viestejä: 14Member
    Olen ihan palkkatyollistetty joka tekee tata vapaa-aikana joten en usko rahan olevan pahemmin motivaattori tai edesauttaja. Paljon suurempi apu olisi bugeista, feature requesteista tai ihan vaan koodia lisaamalla avoimeen projektiin. Sitten kun paastaan tuohon laitekohtaiseen abstraktioon niin voi tulla tarve testata erinaisia laitteita mutta silloinkin mielummin siten etta joku laitteen omistava testaa kuin etta itse hankkisin ihan vain testauksen vuoksi jos k.o. laite ei muuten itsea kiinnosta. Mutta hyva kysymys, tulipahan itsekin pohdittua asiaa.

    JussiS:lle senverran tilannetietoa etta aikaisemmista rakennevalinnoista johtuen tuo "purkkakorjaus" mita ajattelin ei onnistu joten aloin sensijaan toteuttamaan sita ihan kunnollista pilvi-relay tukea. Ymmarran jo miten se toimii ja rakenteet melkein valmiit. Haasteena siis integroida se rajapintaan siten etta koodissa tarvitsee mahdollisimman vahan ottaa huomioon ollaanko etana vaiko ei.
  • JussiSJussiS Viestejä: 3Member
    Artanicus kirjoitti:


    JussiS:lle senverran tilannetietoa etta aikaisemmista rakennevalinnoista johtuen tuo "purkkakorjaus" mita ajattelin ei onnistu joten aloin sensijaan toteuttamaan sita ihan kunnollista pilvi-relay tukea. Ymmarran jo miten se toimii ja rakenteet melkein valmiit. Haasteena siis integroida se rajapintaan siten etta koodissa tarvitsee mahdollisimman vahan ottaa huomioon ollaanko etana vaiko ei.

    Kiitos tilannepäivityksestä @Artanicus . Annan tässä hieman painetta @samppa :lle hoitaa rajapintakuvaus saataville, ettei tarvitse reverse-engineerata ja keksiä pyörää uudelleen... ;-)

    -JussiS
  • ArtanicusArtanicus Viestejä: 14Member
    Kyllahan se edes vajaavainen rajapintakuvaus auttaisi paljon. Kaytan rajapintaa jokatapauksessa, nyt vaan on osittain arvailun ja perstuntuman varassa etta mita kutsuja uskaltaa tehda paljon ja mita vahemman. Tai parhaana esimerkkina ymmarran suunnilleen miten mitkakin avaimet kestavat ja miten ne saadaan pysymaan elinvoimaisena mutta refresh syklista en voi kuin heittaa hyvan arvauksen.

    Eli toisinsanoen, julkaisi sita tai ei, sita kaytetaan jokatapauksessa. Nyt on vaan arvailujen varassa etta ei aiheuteta ylimaaraista kuormaa tyhmilla kutsuilla kun taas ohjeiden kera olisi edes joku ohjenuora mita kannattaa tehda ja mita ei. :-)
  • samppasamppa Viestejä: 76Member, Cozify mod
    @Artanicus
    Rajapintakuvauksen julkaiseminen pitäisi tehdä ainakin aluksi varoituksella, että se saattaa muuttua varoittamatta, koska sen jäädyttäminen ja takaisinpäin yhteensopivuuden varmistaminen vaatisi ylimääräisiä resursseja.
    Tuon sanottua, voisin aivan hyvin lähettää sen esimerkiksi joillekin valituille kehittäjille - vaikka sitten ensin sinulle :wink: Varmistan vain ensin, että tarvitseeko meidän tehdä NDA. Onko se sinulle ok?

    Laita minulle sähköpostia niin jatketaan keskustelua siellä: samppa (at) cozify.fi

    t. Samppa / Cozify
  • KattiKatti Viestejä: 40Member, Beta-käyttäjä
    Hei onko pilvi-accessi edistynyt? Kyselen malttamattomana kun "yleiskoneeni", josta käsin haluaisin niitä tilatietoja kysellä, ei sijaitse samassa LANissa.
Kirjaudu sisään tai Rekisteröidy kommentoidaksesi.