Hei vieras, tervetuloa!

Näyttää siltä, että olet uusi täällä. Kirjaudu sisään tai rekisteröidy aloittaaksesi.

python-cozify eli epavirallinen API toteutus

ArtanicusArtanicus Member Viestejä: 24
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 Member, Beta-käyttäjä Viestejä: 50
    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 Member Viestejä: 24
    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 Member Viestejä: 24
    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 Member, Cozify Viestejä: 651 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
    t. Samppa \ Cozify
  • ArtanicusArtanicus Member Viestejä: 24
    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 Member Viestejä: 3
    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 Member Viestejä: 24
    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 Member Viestejä: 24
    Nyt kun tarkemmin ajatellen niin pystyn ainakin muokkaamaan authia sen verran että IP:n voi syöttää käsin. Eli stay tuned.
  • JussiSJussiS Member Viestejä: 3
    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 Member Viestejä: 4
    Ja sit tässä kohdin se pakollinen: onko patreon/paypal tms. tapa tukea tätä työtä.
  • ArtanicusArtanicus Member Viestejä: 24
    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 Member Viestejä: 3
    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 Member Viestejä: 24
    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 Member, Cozify Viestejä: 651 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
    t. Samppa \ Cozify
  • KattiKatti Member, Beta-käyttäjä Viestejä: 48
    Hei onko pilvi-accessi edistynyt? Kyselen malttamattomana kun "yleiskoneeni", josta käsin haluaisin niitä tilatietoja kysellä, ei sijaitse samassa LANissa.
  • jounimjounim Member Viestejä: 141
    Mikäs on tilanne, virallisen "säännön" kanssa? Tuolla toisessa ketjussa sanoinkin että itselle "riittävä" taso on ollut käyttää TellStickin kanssa Anroid RemoteStick appia mikä on kirjannut sensoreilta tulevaa dataa riittävällä tasolla. Nyt harkitsen päivittää TellStickin mahdollisesti joko niiden Zwaveen tai Cosifyyn, harmittaa vain jos sensorien dataa ei saa minnekään lämpötiloista talteen.
  • TinKETinKE Member Viestejä: 5
    Onko muilla sama ongelma, eli uusin hub päivitys (hub versio 1.6.0.13) lopetti python-cozifyn toiminnan? Ping @Artanicus
  • ArtanicusArtanicus Member Viestejä: 24
    Varmaan API versio noussut päivityksen myötä, hyvä että huomasit. Tuuppaan heti huomenna uutta versiota ulos. Tähän hätään jos on hätä niin tod.näk. riittää jos nostat API versiota 0.1 cozify/cloud.py tiedoston alussa.
  • ArtanicusArtanicus Member Viestejä: 24
    v0.2.5 nostaa hub API version oikeaan eli nyt 1.6. Eli uutta versiota vaan paivitykseen tai erikseen asentumaan:
    https://pypi.python.org/pypi/cozify/0.2.5

    Pilvipuolen kayttoonotto ei ole paljoa edennyt omien kiireiden vuoksi (lue: kesa) mutta hitaasti kuitenkin pala kerrallaan. 0.2.x sarja pitaa kirjaston nyt toimintakuntoisena, 0.3.x haarassa sitten tulee noita uusia ominaisuuksia! Ja olen hyvin avoin jos joku haluaa ottaa jotain sarkaa tyostaakseen, autan mielellani alkuun. :-)
  • ArtanicusArtanicus Member Viestejä: 24
    Jos joku on henkeaan pidattanyt odottaen pilvi accessia eli scriptailua oman lahiverkon ulkopuolelta niin nyt olisi eksperimentaalia koodia testattavaksi:
    https://github.com/Artanicus/python-cozify/tree/cloud-remote

    Omissa testeissa toimii, jos ei niin mulle vaikka privana tests/hub/tz.py output niin katotaan mika sita risoo. Tai sitten vaan suoraan GitHubiin kommentoimaan: https://github.com/Artanicus/python-cozify/issues/9
  • ArtanicusArtanicus Member Viestejä: 24
    v0.2.7 on julki ja tuo etakayton mukanaan. Tomii kaytannossa lapinakyvasti eli senkun kayttaa normaalisti ja _pitaisi_ automaattisesti tunnistaa tarpeen etakaytolle ja kytkeytya paalle.

    Jos haluaa tarkempaa kontrollia onko yhteys paikallinen vai eta, voi yhteystyypin maaritella myos manuaalisesti;
    http://python-cozify.readthedocs.io/en/latest/hub.html#cozify.hub.remote
  • liljestkliljestk Member Viestejä: 8
    editoi lokakuu 2017
    Loistavaa töitä! Onko muuten tarkoituksella jätetty read-onlyksi (API kutsut)? Kokeilin pikkasen ja ainakin sain tällaisella paketilla esim. teeman sammutettua [{"id":"device-id","type":"CMD_SCENE_OFF"}].
  • ArtanicusArtanicus Member Viestejä: 24
    Enemmänkin keskittynyt ensin auth vakauteen ja yleisiin rakenteisiin. Seuraavana listalla on rakenteet tuoda enemmän hub toimintoja saataville. Kunhan saadaan jotain perus rakennetta pystyyn niin sitten vaan mukaan lisäämään toimintaa. ;-)
  • timolavitimolavi Member, Beta-käyttäjä Viestejä: 143 ✭✭
    editoi syyskuu 2019
    Näin sain yrityksen ja erehdyksen metodilla ja katselemalla noita Arctanicusin dokumentteja yhteyden hubiin ja esimerkkiohjelmalla cozify-temp tietoja ulos hubista ja talletettua niitä influx tietokantaan. Tämä on muistiinpano omista komentoriveistä ja siitä voi puuttua jotain python kirjastojen asennuksia, jotka minulla oli jo aikaisemmin asennettuna sääsema-ohjelmiston Weewx takia.

    Toimii varmaan kaikissa Linuxeissa, minulla on Lubuntu 18.04 lts ja komennot ajoin root-käyttäjänä.

    #############################################
    apt install python3-pip

    pip3 install cozify pytz

    apt install influxdb influxdb-client

    influx -execute 'CREATE DATABASE cozify'

    cd /omat/ohjelmia

    git clone https://github.com/Artanicus/cozify-temp.git

    cd cozify-temp

    lisää tiedosto auth.py ja siihen nämä kolme riviä

    #!/usr/bin/env python3
    from cozify import cloud, config
    cloud.authenticate()

    chmod +x auth.py
    ./auth.py

    ohjelma kysyy hubiin kirjautumissähköpostin ja tallettaa hubin avaustiedot tiedostoon "~/.config/python-cozify

    ./cozify-single-sample.py

    hakee itsellä nämä tiedot:

    [1569756854253] 2019-09-29 14:34:14.253000+03:00: DeveLiike autotalli, 11.68 C, None %H
    [1569756378935] 2019-09-29 14:26:18.935000+03:00: Philips Liike YT, 19.92 C, None %H
    [1569756852039] 2019-09-29 14:34:12.039000+03:00: Kasvih sisäl, 21.3 C, 82.0 %H
    [1569756857035] 2019-09-29 14:34:17.035000+03:00: Kasvih ulkol, 20.1 C, None %H
    [1569756650993] 2019-09-29 14:30:50.993000+03:00: Develco Vuotovahti, 19.0 C, None %H
    [1569756600538] 2019-09-29 14:30:00.538000+03:00: Philips ulko liike, 12.15 C, None %H
    [1569756814233] 2019-09-29 14:33:34.233000+03:00: Komposti, 48.1 C, None %H
    [1569756754233] 2019-09-29 14:32:34.233000+03:00: Kompostilla, 11.4 C, 86.0 %H
    [1569756847068] 2019-09-29 14:34:07.068000+03:00: Keittiö, 22.8 C, 49.0 %H
    [1569756850240] 2019-09-29 14:34:10.240000+03:00: Yläpakastin, -18.7 C, None %H
    [1569756787067] 2019-09-29 14:33:07.067000+03:00: Keittiöpakast, -19.0 C, None %H
    [1569756790230] 2019-09-29 14:33:10.230000+03:00: Ylätasanne, 23.2 C, 48.0 %H

    ./cozify-sample-loop.py

    hakee tietoja hubista ja tellettaa ne influx-tietokantaan minuutin välein:

    writing to InfluxDB...
    write(12) successful!
    writing to InfluxDB...
    write(12) successful!
    writing to InfluxDB...

    cntrl+c

    influx

    >use cozify
    >SELECT * FROM "multisensor"

    name: multisensor
    time humidity name temperature
    ---- -------- ---- -----------
    1569756378935000064 Philips Liike YT 19.92
    1569756600538000128 Philips ulko liike 12.15
    1569756650992999936 Develco Vuotovahti 19
    1569756754232999936 86 Kompostilla 11.4
    1569756787066999808 Keittiöpakast -19
    1569756790230000128 48 Ylätasanne 23.2
    1569756814232999936 Komposti 48.1
    1569756847068000000 49 Keittiö 22.8
    1569756850240000000 Yläpakastin -18.7
    1569756852039000064 82 Kasvih sisäl 21.3
    1569756854252999936 DeveLiike autotalli 11.68
    1569756857035000064 Kasvih ulkol 20.1
    1569756874250999808 86 Kompostilla 11.5
    1569756900432000000 Philips ulko liike 12.15
    1569756907055000064 Keittiöpakast -19.3

    jne.

    >exit
    #########################################################################3

  • Jukka KilpiöJukka Kilpiö Member, Beta-käyttäjä Viestejä: 44
    Vieläkö tämä hanke on hengissä eli toimii nykyisen API:n kanssa?
  • ArtanicusArtanicus Member Viestejä: 24

    Hengissä on ja juttelee uusimman APIn kanssa. Itselläni jatkuvassa ajossa joten yleensä päivän sisään saan päivityksen ulos jos API versio päivittyy ja unit testit varmistaa että toiminnallisuus säilyy.

    Kehitys ollut hidasta kun ei tämä mikään primääriprojekti aina ole mutta jos tiedät mitä tarvitset lisää niin helpompi puskea kohti tavoitetta.

Kirjaudu sisään tai Rekisteröidy kommentoidaksesi.