+ Antworten
Seite 2 von 17 ErsteErste 1 2 3 4 12 ... LetzteLetzte
Ergebnis 11 bis 20 von 169
  1. #11
    Registriert seit
    Sep 2017
    Beiträge
    5

    Senden von Befehlen geht ohne Probleme wenn man sich die Signatur generiert... wie folgt (anhand der Daten aus dem ersten Post:
    Code:
            SignatureBuilder signatureBuilder = new SignatureBuilder(<<<GroupKey>>>);
            String httpMethod = "GET";
            String resourcePath = "/Devices/";
            String date = "Sun, 12 Mar 2017 12:42:09 GMT";
            String accept = "application/vnd.miele.v1+json";
    		signatureBuilder
    			.httpMethod(httpMethod)
    			.host(ip)
    			.resourcePath(resourcePath)
    			.date(date)
    			.acceptHeader(accept)
    			.contentTypeHeader(null)
    			.requestBody(null);
            String signature = signatureBuilder.build();
    Ergibt die im Eröffnungspost genannte Zeichenfolge "733979F4F79A0E4D638E040DF0C218D355A85E7DA9D4BCE43 F6A85A5D9FE1684".

    Code:
    package de.phenx.mieletest;
    
    import java.nio.charset.Charset;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import javax.crypto.Mac;
    import javax.crypto.spec.SecretKeySpec;
    
    public class SignatureBuilder {
    	    private String mAcceptHeader;
    	    private String mContentTypeHeader;
    	    private String mDate;
    	    private String mHost;
    	    private String mHttpMethod;
    	    private byte[] mKey;
    	    private String mRequestBody;
    	    private String mResourcePath;
    	    private String mSignature;
    	    private static final Charset CHARSET_ASCII = Charset.forName("US-ASCII");
    	    private static final String SIGNATURE_TYPE = "HmacSHA256";
    	    
    	    public SignatureBuilder(byte[] p1) {
    	        mKey = p1;
    	    }
    	    
    	    public SignatureBuilder acceptHeader(String p1) {
    	        mAcceptHeader = p1;
    	        return this;
    	    }
    	    
    	    public String build() throws IllegalStateException {
    	        String sourceString = buildSignatureString();
    	        byte[] sourceStringASCII = sourceString.getBytes(CHARSET_ASCII);
    	        byte[] signatureBytes;
    	        try {
    	            signatureBytes = sign(sourceStringASCII);
    	        } catch(Exception e) {
    	            return sourceString;
    	        }
    	        mSignature = javax.xml.bind.DatatypeConverter.printHexBinary(signatureBytes).toUpperCase();
    	        return mSignature;
    	    }
    	    
    	    public SignatureBuilder contentTypeHeader(String p1) {
    	        mContentTypeHeader = p1;
    	        return this;
    	    }
    	    
    	    public SignatureBuilder date(String p1) {
    	        mDate = p1;
    	        return this;
    	    }
    	    
    	    public SignatureBuilder host(String p1) {
    	        mHost = p1;
    	        return this;
    	    }
    	    
    	    public SignatureBuilder httpMethod(String p1) {
    	        mHttpMethod = p1;
    	        return this;
    	    }
    	    
    	    public SignatureBuilder requestBody(String p1) {
    	        mRequestBody = p1;
    	        return this;
    	    }
    	    
    	    public SignatureBuilder resourcePath(String p1) {
    	        mResourcePath = p1;
    	        return this;
    	    }
    	    
    	    private String buildSignatureString() throws IllegalStateException {
    	        if(mHttpMethod == null) {
    	            throw new IllegalStateException("HTTP Method is not set");
    	        }
    	        if(mHost == null) {
    	            throw new IllegalStateException("Host is not set");
    	        }
    	        if(mDate == null) {
    	            throw new IllegalStateException("Date is not set");
    	        }
    	        StringBuilder sb = new StringBuilder(mHttpMethod);
    	        sb.append("\n");
    	        sb.append(mHost);
    	        if(mResourcePath != null) {
    	            sb.append(mResourcePath);
    	        }
    	        sb.append("\n");
    	        if(mContentTypeHeader != null) {
    	            sb.append(mContentTypeHeader);
    	        }
    	        sb.append("\n");
    	        if(mAcceptHeader != null) {
    	            sb.append(mAcceptHeader);
    	        }
    	        sb.append("\n");
    	        sb.append(mDate);
    	        sb.append("\n");
    	        if(mRequestBody != null) {
    	            sb.append(mRequestBody);
    	        }
    	        return sb.toString();
    	    }
    	    
    	    private byte[] sign(byte[] p1) throws NoSuchAlgorithmException, InvalidKeyException {
    	        Mac mac = Mac.getInstance(SIGNATURE_TYPE);
    	        if(mKey != null) {
    	            SecretKeySpec secretKey = new SecretKeySpec(mKey, SIGNATURE_TYPE);
    	            mac.init(secretKey);
    	        }
    	        return mac.doFinal(p1);
    	    }
    }
    Damit ist es möglich, mit dem Gerät zu kommunizieren.

    Mich würde interessieren, ob jemand eine Übersicht der möglichen Befehle und Antworten hat?

  2. #12
    Registriert seit
    Sep 2017
    Beiträge
    5

    Wer selbst ein wenig damit spielen will und Befehle an sein Miele Gerät senden möchte (auf eigene Gefahr!):

    • Eclipse herunterladen
    • jce_policy-8.zip (bei Java 8) in das Java Verzeichnis entpacken (google gibt Details) damit die Verschlüsselungsstärke unterstützt wird
    • Neues Projekt anlegen
    • http://dl.phenx.de/miele_xkm3100w.zip enthält den Source
    • In die Config.java Hostnamen, GroupId und Groupkey eintragen (z.B. per Wireshark mitgelesen oder aus der SQLite Datenbank der Android App extrahiert, Verzeichnis /data/data/de.miele...../databases/mieleathome.db auf dem Handy)
    • Test.java ausführen


    In der Test.java kann dann je nach Bedarf herumgespielt werden.. der interessanteste Parameter war für mich erst einmal request.setResourcePath. Hier noch ein paar Beispiele:

    "/":

    Code:
    Response Status: 200
    Decrypted:
    {
    	"Devices":{"href":"Devices/"},
    	"Subscriptions":{"href":"Subscriptions/"},
    	"Host":"Miele-000000000000000.local.",
    	"Info":"",
    	"Diagnose":{"href":"Diagnose/"},
    	"WLAN":{"href":"WLAN/"},
    	"Homebus":{"href":"Homebus/"},
    	"Update":{"href":"Update/"}
       }
    Im Prinzip kann über alles wo "href" steht navigiert werden, z.B.

    "/Devices/":

    Code:
    Response Status: 200
    Decrypted:
    {
    	"000000000000":
    	{
    		"href":"00000000000000000/",
    		"Group":"000000000000000000",
    		"Pairing":"false"
    	}
              }
    "/Devices/000000000000/":

    Code:
    Response Status: 200
    Decrypted:
    {
    	"Ident":{"href":"Ident/"},
    	"State":{"href":"State/"},
    	"DOP":{"href":"DOP/"},
    	"Settings":{"href":"Settings/"}
                }
    }
    "/Devices/000000000000/State/":

    Code:
    Response Status: 200
    Decrypted:
    {
    	"Status":5,
    	"InternalState":3,
    	"ProgramType":0,
    	"ProgramID":1,
    	"ProgramPhase":514,
    	"RemainingTime":[0,37],
    	"StartTime":[0,0],
    	"TargetTemperature":[4000],
    	"Temperature":[-32768,-32768,-32768],
    	"SignalInfo":false,
    	"SignalFailure":false,
    	"SignalDoor":false,
    	"RemoteEnable":[15,0,0],
    	"ProcessAction":0,
    	"Light":0,
    	"ElapsedTime":[3,5],
    	"ExtendedState":"0018010203A006400102010111003A98025801C2025801C2019000A30000000000000003000000000000000000000008000000000000000056B8000002010300000102"
            }
    "/Update/":

    Code:
    Response Status: 200
    Decrypted:
    {
    	"NewerAvailable":false,
    	"CurrentVersion":"2.10",
    	"AvailableVersion":"",
    	"Type":"XKM3100W",
    	"ReleaseNotes":"",
    	"UpdateInProgress":false
    }
    Viel Spaß damit.

  3. #13
    Registriert seit
    Jul 2009
    Ort
    Berlin
    Beiträge
    103

    Wow sehr gut!!!

    Nächster Schritt wäre hierfür eine IPS Integration zum erst einmal Rumspielen zu entwickeln.

  4. #14
    Registriert seit
    Oct 2017
    Beiträge
    6

    Hallo Symcon-Community,

    zunächst einmal Glückwunsch und unsere Anerkennung für Eure bisherige Leistung bei der Analyse unseres Kommunikationsprotokolls. Wir lesen schon eine ganze Zeit lang mit und sind bisher bewusst nicht eingeschritten, da wir schauen wollten wie weit Ihr kommt

    Wir haben uns schon gefragt, wann der oder die Erste auf die Idee kommt sich die Android APP genauer anzusehen. Auch an dieser Stelle nochmal unsere Anerkennung an Phenx, dem ohne entsprechende Dokumentation gelungen ist die Logik zu verstehen.

    Wer sind wir? Wir sind das Miele@home Entwicklungsteam aus Gütersloh, also diejenigen die sich die Protokolle ausgedacht, sowie die zugehörigen Kommunikationsmodule (XKM, etc.) implementiert haben.

    Da Ihr ja nun die meisten Details herausgefunden habt, haben wir uns entschieden Euch ein paar Hintergrundinformationen zu geben und Euch natürlich dabei auch ein paar Tips zu geben. Das Kommunikationsprotokoll, das im Heimbereich genutzt wird ist eine klassische REST-API mit JSON-Payload. Unser Hauptanwendungsfall ist die Kommunikation zwischen den Geräten, also zum Beispiel für die Anwendung SuperVision. Aktuell nutzt auch unsere APP teilweise die direkte Kommunikation mit den Geräten, sofern sich diese im gleichen Netzwerk befinden. Die Kommunikation selbst ist mit AES-256 und HMAC-SHA256 gegen unbefugten Zugriff im Heimbereich geschützt. Für die Kommunikation über das Internet nutzen wir Standard TLS 1.2.

    Die Schnittstelle selbst haben wir bewusst nicht selbst veröffentlicht, obwohl sie vermutlich sehr einfach zu implementieren ist, wie User Phenx gezeigt hat. Grund ist, dass wir an den REST-Ressourcen häufig Änderungen durchführen und dabei nur die Kompatibilität mit unseren Anwendungen (SuperVision, Miele@mobile, usw.) sicherstellen können. Warum ist das so? Das liegt daran, dass wir auf dem Kommunikationsmodul im optimierten Embedded-Bereich unterwegs sind und nicht wirklich ein dafür erforderliches API-Management realisieren können. Aber es wird dafür sehr bald eine offizielle Lösung von Miele geben (im Rahmen einer API).

    So, jetzt aber zurück zum eigentlichen Thema. Natürlich alles unter dem offiziellen Disclaimer, das wir uns Änderungen an der Schnittstelle jederzeit vorbehalten. Für Eure geplante Integration sind die beiden Ressourcen Ident und State interessant. Wie man daran kommt hat der User Phenx ja bereits beschrieben

    Bisher habt Ihr GET Operationen ausgeführt. Es sind auch einige (nicht alle) Felder mit einem PUT schreibbar. Jetzt gibt es daher ein paar Hintergrundinformationen, die in der APP (noch) nicht implementiert sind.

    1) Unter /Ident/ könnt Ihr dem Feld "DeviceName" einen individuellen Namen geben. Dieser taucht dann auch in der Miele@mobile APP, sowie im Display mancher Haushaltsgeräte auf (die Gen6000 Einbaugeräte).

    2) Unter /State/ findet Ihr das Feld "StartTime", damit kann die Startzeit verschoben werden. Natürlich nur dann wenn eine Startvorwahl läuft.

    3) Unter /State/ gibt es noch das Feld "Light", dort bedeutet NULL=Funktion unterstützt aber Zustand nicht bekannt, 0=Aus, 1=An, 2=Funktion nicht unterstützt

    Viel Erfolg beim Ausprobieren. Wir freuen uns natürlich auch über jede Art von Feedback oder Verbesserungsvorschläge, vielleicht ist ja auch Lob dabei

    Viele Grüße aus Gütersloh

    Euer Miele@home Enwicklungsteam

    PS
    Wir schauen von Zeit zu Zeit hier vorbei, Ihr könnt uns auch gerne eine PN schicken. Bitte habt Verständnis dafür, wenn wir nicht sofort antworten sondern das etwas Zeit in Anspruch nimmt. Wir machen das auch aus privatem Interesse "nebenbei".

  5. #15
    Registriert seit
    Sep 2017
    Beiträge
    5

    Hallo Miele@home Entwicklungsteam,

    danke für eure Rückmeldung. Finde ich sehr schön von euch, dass ihr euch hier so positiv zu dem Thema einklingt. Hut ab dafür, da kann sich so mancher Hersteller eine Scheibe abschneiden. Ich freue mich jedenfalls sehr über euren Kommentar von offizieller Seite :-)

    Es ist verständlich, dass ihr eine proprietäre Schnittstelle nicht veröffentlicht, so lange sie nicht stabil ist und jederzeit Änderungen auftreten können. Da entstehen dann natürlich zahlreiche zusätzliche Verpflichtungen hinsichtlich Abwärtskompatibilität etc.

    Umso interessanter ist die angesprochene offizielle API. Dürft ihr da schon Details zu verraten? Es wäre ja sehr schade, wenn jetzt einige Manntage in das "reverse Engineering" der inoffiziellen Schnittstelle fließen, wenn die offizielle Lösung schon vor der Tür steht. Insbesondere der zeitliche Horizont und eine grobe Abschätzung des Funktionsumfanges wären interessant. Und ob die Lösung frei nutzbar sein wird oder an Auflagen (finanziell oder lizenztechnisch) gebunden sein wird ;-)

    Es juckt mich ja schon in den Fingern, die in der APP noch nicht dokumentierten Befehle auszuprobieren.. mal schauen wann ich dafür ein wenig freie Zeit finde. Abgesehen davon bin ich an dieser Stelle erst einmal heraus mit der weiteren Entwicklung, da bei mir zunächst die weitere Renovierung der mit Smart Home Komponenten zu versorgenden Wohnung ansteht, danach geht es dann ans Eingemachte mit der Steuerung und Einbindung der Systeme. IP Symcon werde ich mir bei der Gelegenheit dann auch einmal anschauen, ggf. wird es aber auch eine andere Lösung (homematic, openHAB). Je nachdem welche Lösung es wird, werde ich dann schauen, wie sich mein Miele Waschtrockner am schönsten ingetrieren lässt.

    Was mich tatsächlich noch interessieren würde: Ich habe neulich in der Anleitung meines neuen Miele Kochfeldes die Möglichkeit der Smart Home Integration entdeckt. Allerdings waren keine Details angegeben, wie diese technsich herzustellen ist. Auf meine Nachfragen beim Miele Support hat sich dann herausgestellt, dass sämtliche Kochfelder, auch gerade neu erschienene, zur Anbindung das Miele Gateway benötigen, also noch auf Zigbee setzen. Im Gegensatz zu den anderen Geräten, die mittlerweile auf WLAN umgestellt sind. Was ist der Grund hierfür? Ich hätte vermutet, dass Zigbee durch WLAN komplett abgelöst wird, aber das scheint nicht der Fall zu sein. Gibt es noch eine andere Kommunikationsmöglichkeit mit den Kochfeldern, ohne das ~300€ Gateway hierfür extra anschaffen zu müssen?

    Viele Grüße

  6. #16
    Registriert seit
    Oct 2017
    Beiträge
    6

    Hallo phenx,

    vielen Dank für Deine Rückmeldung und Dein Verständnis. Im ersten Schritt wird auf unserer offiziellen API eine Teilmenge von /Ident/ und /State/ mit zusätzlichen Lokalisierungsinformationen (=Übersetzungen und Einheiten) verfügbar sein. Damit wird man den aktuellen Gerätezustand von seinen Geräten anzeigen können. Das werden wir dann nach und nach ausbauen. Die API wird offen und frei verfügbar sein.

    Wenn Du Interesse hast, können wir Dich auch gerne informieren sobald wir eine Version verfügbar haben. Wir posten das auf jeden Fall in diesem Forum. Eventuell möchtest Du auch schon etwas mit einer Vorab-Version machen? Die Ideen von einem openHAB Binding oder einer Symcon Integration klingen spannend.

    Jetzt hätten wir aber auch eine Frage an Dich und alle anderen hier. Welche Informationen würdet Ihr Euch denn auf solch einer API wünschen? Wir würden dann jetzt mal schauen, was wir davon vielleicht direkt ergänzen können.

    Viele Grüße aus Gütersloh

    Euer Miele@home Enwicklungsteam

    PS
    Zu Deiner Frage mit dem Kochfeld: Die Möglichkeit das Kochfeld mit ZigBee aktuell einzubinden ist über das XGW3000. Alternativ geht das natürlich auch über ZigBee Am XGW3000 haben wir aber noch eine weitere API, die schon jetzt offen und frei verfügbar ist. Das ist die sog. Homebus-Schnittstelle. Das ist eine XML-RPC API auf der neben den ZigBee Geräten auch die IP-Geräte abgefragt werden können.

  7. #17
    Registriert seit
    Jan 2010
    Ort
    Ginsheim-Gustavsburg
    Beiträge
    104

    Hallo MieleDevelopmentTeam.
    Für mich wären das Auslesen der verbrauchswerte (Strom, Wasser) und Füllstände am wichtigsten.
    Und wenn ich noch einen wusch frei hätte das neu anlegen/editieren von Favoriten Programmen!

    Aktuell setzte ich folgende Miele Produkte ein:
    Miele XGW 3000 Gateway
    Wäschetrockner TMV840WP ZigBee
    Waschmaschine WMV960WPS ZigBee
    Geschirrspüler G 6895 SCVi XXL K2O Wlan

    Viele Grüße, Raul.

  8. #18
    Registriert seit
    Sep 2010
    Beiträge
    177

    - Da ich eine PV-Anlage mit höherer Förderung der Eigenverbrauchsleistung habe, würde ich gerne Geräte wie Spül- und Waschmaschine bei bestimmten Zuständen starten lassen.

    - Da ich einen Holzofen habe, möchte ich gerne die Dunstabzugshaube sperren/drosseln.
    Tschö Marcus
    ----------------------------------------------------------------------
    Was man anfängt sollte man auch zu Ende bri

  9. #19
    Registriert seit
    Oct 2017
    Beiträge
    6

    Hallo luar und integrator,

    vielen Dank für Eure Ideen. Der Wunsch nach den Verbrauchswerten und Füllständen ist notiert. Wir schauen, wann und für welche Geräte das möglich ist.

    @luar: Du nutzt ja ein XGW3000. Hast Du Dir dabei schonmal die Homebus Schnittstelle angesehen? Da bekommst Du eine erste Prognose für den Verbrauch. Die Schnittstelle ist im Handbuch vom XGW3000 vollständig dokumentiert. Da sind auch jetzt schon Funktionen enthalten, um Geräte zu starten/stoppen.

    @integrator: Die Idee klingt spannend. Dafür müsste man bei einem Gerät "SmartGrid" aktivieren und könnte es dann vor dem geplanten Zeitpunkt starten. Die Funktion SmartGrid wird aktuell bei einigen Geräten für Wäschepflege (z.B. Waschmaschine, Trockner) und Geschirrspülern unterstützt. Wir sehen Du hast eine Dunstabzugshaube. Dann hast Du vermutlich ein XGW3000, um die Einbindung in das IP Netzwerk zu realisieren? Wenn dem so ist, kannst Du auch heute schon über die Homebus Schnittstelle sowohl ZigBee Geräte als auch WLAN Geräte Starten (wenn SmartGrid aktiviert ist). Schau Dir die Schnittstelle einfach mal an.

    Viele Grüße aus Gütersloh

    Euer Miele@home Enwicklungsteam

  10. #20
    Registriert seit
    Sep 2010
    Beiträge
    177

    Thumbs up Vielen Dank für diesen konstruktiven Dialog

    Zitat Zitat von MieleDevelopmentTeam Beitrag anzeigen
    Die Idee klingt spannend. Dafür müsste man bei einem Gerät "SmartGrid" aktivieren und könnte es dann vor dem geplanten Zeitpunkt starten. Die Funktion SmartGrid wird aktuell bei einigen Geräten für Wäschepflege (z.B. Waschmaschine, Trockner) und Geschirrspülern unterstützt.
    Danke ... ich schaue mir "SmartGrid" mal näher an. Wo gibt es Infomaterial darüber?

    Zitat Zitat von MieleDevelopmentTeam Beitrag anzeigen
    Wir sehen Du hast eine Dunstabzugshaube. Dann hast Du vermutlich ein XGW3000, um die Einbindung in das IP Netzwerk zu realisieren? Wenn dem so ist, kannst Du auch heute schon über die Homebus Schnittstelle sowohl ZigBee Geräte als auch WLAN Geräte Starten (wenn SmartGrid aktiviert ist). Schau Dir die Schnittstelle einfach mal an.
    Eine XGW 3000 habe ich, der Dunstabzug ist aber noch konventionell.

    Ich möchte ehrlich sein, ich beobachte den Bereich "Smarte Küchengeräte" schon seit 2002 und eine weitere Investition mache ich nur wenn die Hersteller endlich ihre Versprechen und Ideen in die Tat umsetzen. In der Vergangenheit fühlte man sich schon sehr verar****. Hierfür ist mir sehr wichtig/unabdingbar ...
    - offene Schnittstelle
    - kein Cloudzwang
    - Investitionsschutz
    - Kompatibilität
    Tschö Marcus
    ----------------------------------------------------------------------
    Was man anfängt sollte man auch zu Ende bri

Ähnliche Themen

  1. Antworten: 81
    Letzter Beitrag: 03.11.17, 15:57
  2. Antworten: 72
    Letzter Beitrag: 27.10.17, 11:41
  3. Anbindung Miele@Home
    Von nofo im Forum Haustechnik
    Antworten: 29
    Letzter Beitrag: 20.11.15, 14:02
  4. Miele @ Home - updates?
    Von dmeyer8803 im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 8
    Letzter Beitrag: 26.04.15, 21:12
  5. Miele@home
    Von Sven im Forum Allgemeine Diskussion
    Antworten: 5
    Letzter Beitrag: 02.11.08, 13:24

Stichworte