Plugwise Smile P1 – Onder de loep
Wat mij opviel als ik de plugwise APP gebruik, dat de APP kon weergeven welke “smile versie” er draaide, dus dat is weer interessant hoe het daaraan komt, want deze kon ik niet vinden met de “basic” methode:
Ergens komt de APP erachter, dat gaan we even uitzoeken!, nu is het via de telefoon de software lastig te onderzoeken (APP op image bestand), maar er is ook een softwarepakket te downloaden voor windows hier.
Installeer de software:
Ik heb nu zelf op het moment van schrijven v1.5.4 geïnstalleerd, nu zien we (en dat staat ook op de downloadsite vermeld) dat de software is gemaakt met Adobe flash (air), dit kunnen we zien aan het SWF (ShockWave Flash) bestand:
De programmacode van het bestand kun je niet zien, om deze “zichtbaar” te maken heb je een flash decompiler nodig, deze is te vinden hier.
Installeer en gebruik het programma “ActionScriptExtractor” en open het bestand: PlugwiseStretchDesktop.swf
Ik heb even lopen zoeken, en het hoofdgedeelte van het programma speelt zicht af in het volgende gedeelten:
DoABC[frame2] \ com \ plugwise \ model \ PlugwiseModel
DoABC[frame2] \ models \ SmileModel
Let op: Bij het opslaan van bestanden crasht de applicatie bij DoABC[frame2] \flashx (dus deze niet bewaren), selecteer alles behalve “flashx” then selecteer dan vanuit het menu: file -> save selected
Als je er doorheen bladert vind je al gauw wat nuttige links.
Tip: Werkt je smile niet meer naar behoren?, druk dan de reset knop (naast de antenne) ongeveer 5 seconden in, hierdoor zullen de fabrieksinstellingen teruggezet worden en word de hardware opnieuw gestart, gebruik dan eventueel de APP om e.e.a. weer juist in te stellen!
Als je door de Plugwise app bladert in de source, zie je ook bepaalde POST commando’s staan, deze worden gebruikt om de smile in te stellen op het netwerk.
De /n /r /t in de POST regels horen bij een Linux formaat, deze betekenen:
\r = carriage return
\n = new line
\t = horizontal tab
Je zou nu zelf met wat programmeren een TCP POST commando kunnen schrijven met een XML format, dan kun je je eigen smile zelf instellen (dus zonder APP)
De WiFi XML heeft deze format:
1 |
<wifi>\r\n\t\t\t\t\t\t\t\t\t<mode>[MODE]</mode>\r\n\t\t\t\t\t\t\t\t\t<ssid>[SSID]</ssid>\r\n\t\t\t\t\t\t\t\t\t<encryption>\r\n\t\t\t\t\t\t\t\t\t\t<method>[VERSLEUTELING]</method>\r\n\t\t\t\t\t\t\t\t\t\t<key>[SLEUTEL]</key>\r\n\t\t\t\t\t\t\t\t\t</encryption>\r\n\t\t\t\t\t\t\t\t</wifi> |
Voor het script in Autoit3 heb ik een functie geschreven om deze Linux “macro’s” om te zetten in een Windows formaat:
1 2 3 4 5 |
Func Linux2WinString($data) $data = StringReplace($data, "\r", @CR) ; \r carriage return $data = StringReplace($data, "\n", @CRLF) ; \n new line $data = StringReplace($data, "\t", @TAB) ; \t horizontal tab Return $data |
Smile WiFi instellen:
Ik heb hier een Autoit3 script geschreven (ik zal later een programma maken), waarmee je zelf de smile kan instellen, je kan de variabelen zelf aanpassen. Als je Smile nog in AP (accesspoint) mode staat, dan zal je “direct” met de smile moeten verbinden, de Smile heeft dan altijd als IP adres: 192.168.40.40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
; ------------------------------------------------------------------------------ ; PlugWise SmileWrite example (2013-01-09) ; ; Author: Sebastiaan Ebeltjes (AKA Phoenix) ; phoenixinteractive -at- hotmail.com ; ; ------------------------------------------------------------------------------ Global $SmileIPAdres = "192.168.40.40" Global $SmileMode = "sta" ; AP = accesspoint / STA = station Global $SmileSSID = "[ROUTER SSID]" ; bij AP = uit te zenden SSID / Bij sta = connectie maken met SSID Global $SmileVersleuteling = "mixed-psk" ; Draadloze versleuteling, mixed-psk = WPA(2) Global $SmileSleutel = "[ROUTER WACHTWOORD]" ; Draadloze netwerksleutel Global $PostAdres = "http://" & $SmileIPAdres & "/configuration/wifi" Global $PostGegevens = "<wifi>\r\n\t\t\t\t\t\t\t\t\t<mode>" & $SmileMode & _ "</mode>\r\n\t\t\t\t\t\t\t\t\t<ssid>" & $SmileSSID & _ "</ssid>\r\n\t\t\t\t\t\t\t\t\t<encryption>\r\n\t\t\t\t\t\t\t\t\t\t" & _ "<method>" & $SmileVersleuteling & "</method>\r\n\t\t\t\t\t\t\t\t\t\t" & _ "<key>" & $SmileSleutel & "</key>\r\n\t\t\t\t\t\t\t\t\t</encryption>" & _ "\r\n\t\t\t\t\t\t\t\t</wifi>" $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") $oHTTP.Open("POST", $PostAdres, False) $oHTTP.SetRequestHeader("Connection", "Close") $oHTTP.SetRequestHeader("Content-Type", "application/xml") $oHTTP.Send(Linux2WinString($PostGegevens)) Global $PostRespons = $oHTTP.ResponseText If $PostRespons = "true" Then ; De smile reageert met "true" als de instellingen met succes zijn opgeslagen InetRead("http://" & $SmileIPAdres & "/configuration/wifi?action=apply", 1) ; Activeer de instellingen MsgBox(64, "SmileWrite", "Smile instellingen actief!") Else MsgBox(64, "SmileWrite", "Er is een fout opgetreden!, einde!") EndIf Func Linux2WinString($data) $data = StringReplace($data, "\r", @CR) ; \r carriage return $data = StringReplace($data, "\n", @CRLF) ; \n new line $data = StringReplace($data, "\t", @TAB) ; \t horizontal tab Return $data EndFunc |
Welke waarden te gebruiken?
De smile reageert meestal met een antwoord (Bij goed “true” en een foutmelding als je iets niet juist doet), in dit geval, als je een “DUMMY” waarde gebruikt, geeft de foutmelding van de Smile wel aan welke waarde(n) het moet zijn:
$SmileMode = “DUMMY” (in XML: <mode>)
1 2 3 4 5 6 |
<?xml version="1.0" encoding="ISO-8859-1"?> <error> <name>error</name> <description>/usr/lib/lua/pwutil/type/assertIs.lua:34: nil value DUMMY is not present as a value in table table: 0x4387d0: invalid wifi mode, supported modes: sta, ap</description> </error> |
$SmileVersleuteling = “DUMMY” (in XML = <method>):
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="ISO-8859-1"?> <error> <name>error</name> <description>/usr/lib/lua/pwutil/type/assertIs.lua:34: nil value DUMMY is not present as a value in table table: 0x485ba8: invalid encryption method, supported methods: psk2+tkip+ccmp, psk2+tkip+aes, psk2+tkip, psk2+ccmp, psk2+aes, psk2, psk+tkip+ccmp, psk+tkip+aes, psk+tkip, psk, psk+ccmp, psk+aes, mixed-psk+tkip+ccmp, mixed-psk+tkip+aes, mixed-psk, mixed-psk+tkip, mixed-psk+ccmp, mixed-psk+aes, wpa2+tkip+ccmp, wpa2+tkip+aes, wpa2+ccmp, wpa2+aes, wpa2, wpa2+tkip, wpa+tkip+ccmp, wpa+tkip+aes, wpa+ccmp, wpa+aes, wpa+tkip, wpa, mixed-wpa+tkip+ccmp, mixed-wpa+tkip+aes, mixed-wpa, mixed-wpa+tkip, mixed-wpa+ccmp, mixed-wpa+aes, wep, none</description> </error> |