Ankündigung

Einklappen
Keine Ankündigung bisher.

SmartHomeNG aus Garmin Connect IQ App (bspw. von Garmin Fenix Uhren)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    SmartHomeNG aus Garmin Connect IQ App (bspw. von Garmin Fenix Uhren)

    Besteht Interesse an einer SHNG App für Garmin Uhren via des Connect IQ SDKs? Ich stelle mir das entweder mit unterstütztender Android App vor, die die REST Schnittstelle von SHNG anspricht, oder alternativ direkt via Bluetooth LE Verbindung auf einen RaspberryPi - sofern das mit dem SDK geht... Schätze aber um die Android App kommt man aber nicht drumrum.
    Hat hier in dem Garmin Umfeld schon jemand Erfahrungen? Werde mir das sonst über die nächsten Wochen mal anschauen.. Das Tor via Uhr zu öffnen bzw. die Hausdaten anzuzeigen wäre schon was feines...

    https://developer.garmin.com/connect-iq/sdk/

    #2
    Bei Fitbit Ionic würde ich „hier“ schreien!

    Kommentar


      #3
      will ich haben!

      Kommentar


        #4
        Kleines Update: der technische Durchstich war jetzt schneller als gedacht erbracht:
        IMAG0389-20171129-160115318.jpg

        Clou ist, dass man JSON Webservices über die Garmin Connect App routen kann (https://developer.garmin.com/connect.../communication). Via Basic Auth habe ich jetzt das in 1.4 neue Webservices REST Plugin angesprochen.

        Ich muss nur noch bauen, dass bei einem Item nicht die ganzen Metadaten mitkommen, das dauert ganz schön via BlueTooth LE..
        Zuletzt geändert von psilo; 29.11.2017, 16:04.

        Kommentar


          #5
          warm in Deinem Büro!

          Kommentar


            #6
            die 1080ti halt

            Kommentar


              #7
              ich hoffe die wurde beim hydraulischen Abgleich mitberechnet.

              Ist das eine fenix 5x?
              Verbindung geht jetzt aber über die Android app oder direkt über Bluetooth mit einem raspi?

              Kommentar


                #8
                Marcov "normale" Fenix 5 (kein X). Das Routing geht dort auch, aber halt ohne Karte. Die 5X war mir zudem zu klobig und für die 5 kam am Freitag ein Angebot von 440 Euro, was wirklich ein Top-Angebot war... Bisher bin ich mehr als zufrieden, die Pulsmessung ist bisher auch genauer als bei meiner alten Forerunner 225. Habe aber erst einen Trainingslauf hinter mir. Die Sensordaten sind super umfangreich, ich überlege schon, ob ich das berechnete Stresslevel an das Haus übertrage und dann bspw. den Wecker danach anpasse :>

                Verbindung: Die ConnectIQ Api (in einer Programmiersprache namens "Monkey C") kann einfach die Garmin Connect App am Handy nutzen und über diese Webservice Calls rausschicken. Daher Verbindung via Handy - ich will das ja auch unterwegs nutzen.
                Ich habe das REST Webservices Plugin aus dem DEV jetzt so erweitert, dass man sich Itemsets zusammenstellen kann die am Stück ausgeliefert werden. Zudem kann man sagen, ob man die vollen Itemdaten oder nur Pfad => Value haben will, um die Datenmenge einzugrenzen.
                Davor hängt ein NGINX ReverseProxy mit Basic Auth. Ob das Ding auch mit Clientzertifikaten klarkommen würde, muss ich noch testen.

                Wenn man schon mal Android programmiert hat, ist das erstellen einer App für die Uhr übrigens Kindergarten.. Alles sehr identisch aufgebaut.

                Aktueller Code der App selber (es fehlen aber mehrere weitere nötige Dateien). Aufgebaut habe ich auf https://github.com/abs0/GarminWebRequestTest:
                Code:
                using Toybox.Application as App;
                using Toybox.WatchUi as Ui;
                
                const URL = "https://<mydomain>.myds.me/rest/itemset/1";
                
                class SmartHomeNG_on_a_WatchApp extends App.AppBase {
                
                    function initialize() {
                        AppBase.initialize();
                    }
                
                    // onStart() is called on application start up
                    function onStart(state) {
                        makeRequest();
                    }
                
                    // onStop() is called when your application is exiting
                    function onStop(state) {
                    }
                
                    // Return the initial view of your application here
                    function getInitialView() {
                        return [ new SmartHomeNG_on_a_WatchView("Loading") ];
                    }
                
                    function onReceive(responseCode, data) {
                       if (responseCode == 200){
                           System.println("Request Successful, Data: "+data);          
                           var tempValue = data["eta_unit.temperature_outside.value"];  
                           var heatingStr = data["eta_unit.boiler.status.value_string"]+" / "+data["eta_unit.heating_circle.status.value_string"];                
                           var zone = data["general.location.person1.zone"];    
                           var presence = "Keiner";
                           var travelTime = data["general.location.person1.travel_time"];
                
                           if (data["general.presence.state"] == 1) {
                                   presence = "Frau";
                           } else if (data["general.presence.state"] == 2) {
                                   presence = "Mann";
                           } else if (data["general.presence.state"] == 3) {
                                   presence = "Beide";
                           }
                           Ui.switchToView(new SmartHomeNG_on_a_WatchView("Wasser: "+
                           data["knx.cellar.utility_room.water_meter.consumption_since_midnight.cost_since_midnight"].format("%.1f")+" €\n"+
                           "Temperatur: "+tempValue.format("%.1f")+" °C\n"+heatingStr+"\nDaheim: "+presence+"\nFahrt: "+travelTime+" Min.\nZone: "+zone), null, Ui.SLIDE_IMMEDIATE);
                       }
                       else {
                           System.println("Response: " + responseCode + ", Data: "+data);            // print response code
                       }
                    }
                
                    function makeRequest() {
                       var url = URL;      
                       var params = null;      
                       var headers = {
                       "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON,
                       "Authorization" => "Basic " + StringUtil.encodeBase64(Lang.format("$1$:$2$", [ "user", "passwort" ])),
                       "Accept" => "application/json"};
                
                       var options = {                                          
                           :method => Communications.HTTP_REQUEST_METHOD_GET,  
                           :headers => headers,                                                                
                           :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON
                       };
                
                       var responseCallback = method(:onReceive);              
                       Communications.makeWebRequest(url, params, options, method(:onReceive));
                    }
                
                }
                Zuletzt geändert von psilo; 30.11.2017, 06:08.

                Kommentar


                  #9
                  Ich habe die 5X, da ich fürs Wandern auch die Karten haben wollte. Habe dies aber in der Praxis noch nicht wirklich genutzt.

                  Ich bin momentan noch auf 1.2. und muss dann wohl mal dringend updaten.
                  Ich habe noch nicht mit einem Proxyserver gearbeitet und finde in Deinem Code auch keine Stelle, an der er sich mit User und Passwort authentifiziert. Ginge ja wahrscheinlich auch über VPN?!

                  Gruß Marco

                  Kommentar


                    #10
                    Marcov "Authorization" => "Basic " + StringUtil.encodeBase64(Lang.format("$1$:$2$", [ "user", "passwort" ])), für user und passwort natürlich die konkreten werten der basic auth.. das direkt in der url zu machen geht offenbar über die api nicht, da es nicht standard-konform ist.

                    lokale ips gingen im Simulator nicht. muss das mal auf dem device testen. wenn es nicht geht, wäre vpn nicht mgl.

                    @Markov: lohnt sich das mit den Karten wirklich fürs Wandern? Routing würde ja so oder so gehen, auch ohne Karte (war für mich für Trails wichtig). Und für ne richtige Karte ist beim Wandern sowieso das Handy und das Oregon 700 dabei. Wie performant ist die Karte? Man kann ja auch Bilder auf die normale Fenix 5 schieben, ist aber offenbar sehr limitiert was die Größe angeht.
                    Zuletzt geändert von psilo; 01.12.2017, 06:36.

                    Kommentar


                      #11
                      Mein Tutorial findet sich nun als Blog-Post hier: https://www.smarthomeng.de/smarthome...an-smarthomeng

                      Kommentar

                      Lädt...
                      X