HomeKit HomeBridge Enabled Arduino ESP8266 Self Powered 110v Wifi Controlled Powerswitch

http://www.instructables.com/id/HomeKit-Enabled-Arduino-ESP8266-Self-Powered-110v-/

Why buy a UL Listed iDevices Switch when you can potentially electrocute yourself or start a fire with a self built alternative instead?

Here’s how!

First, you must install HomeBridge on a Raspberry Pi, and configure it as a HomeKit bridge device. Instructions below.

Once you have HomeKit / HomeBridge working on your Pi and your iPhone, we can build a wireless power switch that can be controlled by Siri and the HomeKit app.

We start with a PowerTail2, and use the ESP8266 to control the on/off line.

We power the ESP8266 with a AMS1117 3.3V Power Supply Module. This brings the 5v from the charger down to the proper 3.3v that the ESP8266 needs.

We provide the power with a used cell phone charger. 110v -> 5v. This is wired directly to the ‘Line’ side of the PowerTail2 circuit board. It is always ‘Live’ or ‘Hot’ and will shock you.

We Load the code into the ESP8266 via your favorite USB/Serial converter (FTDI).

We plug it in. Homekit sees the device via the HomeBridge configuration file addition (accessory) on the Raspberry Pi.

You control the device on your iPhone, and turn electricity on and off at will.

More info to come.

Resources:

https://github.com/esp8266/Arduino/tree/master/lib…

http://www.electrodragon.com/w/ESP8266_AT_Commands

https://www.google.com/search?q=esp8266+arduino&es…

http://www.powerswitchtail.com/Documents/PSTK%20In…

Homekit:

https://github.com/nfarina/homebridge

https://github.com/nfarina/homebridge/wiki/Running…

https://www.npmjs.com/package/homebridge-indigo

https://www.google.com/webhp?sourceid=chrome-insta…

https://github.com/lagunacomputer/homebridge-Curre…

Step 1 Build It:

Solder it together.

1x PowerTail II Power switch kit $19.99 + shipping

1x ESP8266 ESP-01 module $5.50

1x AMS1117-3.3 Power Module AMS1117 3.3V Power Supply Module With Heat Sink $0.99

1x 110v to 5v/1A used cell phone charger

1x small Perfboard for circuit approx 2″x1.25″ inch

2x 110v extension cord to cut up $1.99 each at Home Depot

1x small SPST on/off switch

Step 2: Edit the HomeBridge /var/homebridge/config.json file on the Raspberry Pi HomeBridge

the file may alternatively be in /home/.homebridge or /root/home/./homebridge. read the docs from the github link

https://github.com/nfarina/homebridge

Ensure this plugin is installed. It may be installed by default in the newer versions:

https://www.npmjs.com/package/homebridge-http

Program the ESP8266. Upon powering up (3.3v do not use 5V!) it should be seen on the network.

Try something like http://192.168.1.110/gpio/1 . You should get a webpage returned.

Assuming your ESP8266 pulls a DHCP ip of :192.168.1.110

(you should probably set a DHCP reservation on your router, for each ESP8266 you add)

add this code to the config.json file. ( sudo nano /var/homebridge/config.json) etc:

mind the last comma, you may or may not need it if you have other accessories, or Homebridge is crashing on load.

{ “accessory”: “Http”,
“name”: “PowerTail”,
“on_url”: “http://192.168.1.110/gpio/1”,
“off_url”: “http://192.168.1.110/gpio/0”,
“http_method”: “GET”
},

Step 3: ESP8266 Arduino Code

/* * This sketch demonstrates how to set up a simple HTTP-like server.
* The server will set a GPIO pin depending on the request
* http://server_ip/gpio/0 will set the GPIO0 low,
* http://server_ip/gpio/1 will set the GPIO0 high
* server_ip is the IP address of the ESP8266 module, will be
* printed to Serial when the module is connected.
*/

#include

const char* ssid = "EDITMEWITHYOURWIFISSIDNAME";
const char* password = "EDITMEWITHYOURWIFIPASSWORD";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
Serial.begin(115200);
delay(10);
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
// prepare GPIO0
pinMode(0, OUTPUT);
digitalWrite(0, 0);

// Connect to WiFi network
//Serial.println();
//Serial.println();
//Serial.print("Connecting to ");
//Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
//Serial.print(".");
}
//Serial.println("");
//Serial.println("WiFi connected");

// Start the server
server.begin();
//Serial.println("Server started");

// Print the IP address
//Serial.println(WiFi.localIP());
}

void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Wait until the client sends some data
//Serial.println("new client");
while(!client.available()){
delay(1);
}

// Read the first line of the request
String req = client.readStringUntil('\r');
//Serial.println(req);
client.flush();

// Match the request
int val;
if (req.indexOf("/gpio/0") != -1)
val = 0;
else if (req.indexOf("/gpio/1") != -1)
val = 1;
else {
//Serial.println("invalid request");
client.stop();
return;
}

// Set GPIO0 according to the request
digitalWrite(0, val);
digitalWrite(LED_BUILTIN, val); // Turn the LED on (Note that LOW is the voltage level
client.flush();

// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n
\r\nGPIO is now ";
s += (val)?"high":"low";
s += "

\n";

// Send the response to the client
client.print(s);
delay(10);
//Serial.println("Client disonnected");

// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}

Step 4: Test the new Accessory in iOS HomeKit App

Step 5: Don’t Electrocute Yourself.

https://lagunabeachcomputer.com/wp-content/uploads/2016/10/image1-150×150.png

https://lagunabeachcomputer.com/wp-content/uploads/2016/10/homekit_siri-150×150.png

http://52.27.64.85/wp-content/uploads/2016/10/pst_ii_rev_6a_oct_2013.bmp

https://lagunabeachcomputer.com/wp-content/uploads/2016/10/esp8266-reflash-firmware-150×150.png

https://lagunabeachcomputer.com/wp-content/uploads/2016/10/IMG_4286-150×150.jpg

https://lagunabeachcomputer.com/wp-content/uploads/2016/10/IMG_4283-150×150.jpg

EvilRuxpin – The Chippy Ruxpin Alternative – Hacking a Teddy Ruxpin with Next Thing Co. C.H.I.P $9 Linux Computer to Play Heavy Metal

EvilRuxpin – The Chippy Ruxpin Alternative – Hacking a Teddy Ruxpin with Next Thing Co. C.H.I.P $9 Linux Computer to Play Heavy Metal

So, I modified a Chippy Ruxpin into a more ‘evil’ form as a gift for a coworker.

1. Build a Chippy Ruxpin out of a C.H.I.P. and an old Teddy Ruxpin
2. Make it evil. Make it say random evil scary things every few minutes, and make the eyes glow red with an LED
3. Make it wifi. It is now ad-hoc so no keyboard is needed. Smartphone controllable!
4. Add DHCP server, so your smartphone can connect and pull an IP, so you can load the web gui over wifi
5. Add an 3W stereo audio amplifier. Stock ruxpin speaker + CHIP audio is kinda wimpy.  DC 5V PAM8403 Audio Stereo Amplifier Board Volume Control Class D Kit Module
6. Add a big battery, maybe a 5w solar panel to charge the battery.
7. put a heavy metal t shirt on Teddy.
8. option to play stored heavy metal .mp3’s using mplayer in linux, controllable on the webgui page from a smartphone.
I chose Blackened by Metallica as the first Heavy Metal song played thru a Teddy Ruxpin ever in the history of the Earth. Yes my Teddy Ruxpin plays Metallica in stereo on command via wifi from my smartphone.
Dont’ forget to put an .mp3 file in /home/chip/Desktop/m.mp3. Obviously we are going to change this to play many many metal .mp3’s. ‘Cause that’s rad. Teddy Ruxpin Metal Beats Pill. If only I could figure out how to make the mouth/eyes move while mplayer plays an .mp3…………hmmmmmmmmmmmmmm
9. do it all as a boot script so no user input is needed after power on.

I’ve done it! (except the LED/GPIO part)

More to come! to do:
to do: integrate amazon echo hack, so that replys move the mouth and eyes of Ruxpin.

So, here are the basic steps (updates to come):
flash CHIP with 4.3 headless. 4.4 wifi? doesn’t seem to work even if you modify the GPIO variables in the .py script.
enable a wifi connection, apt-get update and apt-get upgrade
install all the chippy crap from the link below

sudo apt-get install python-setuptools python-dev build-essential espeak alsa-utils
sudo apt-get install python-alsaaudio python-numpy python-twitter python-bottle mplayer

-get chippy working
apt-get install isc-dhcp-server, again see link below
apt-get install bc , this lets ./battery.sh work, so you can monitory your LiPo 3.7v battery from linux
apt install wireless-tools     (this step may break your normal wifi managed mode connection setup.  its ad-hoc w no internet from here out, so if you want to install more software from the internet, do it before this step)

edit /etc/NetworkManager/NetworkManager.conf:
wired device not managed

Most probably your interface appears in /etc/network/interfaces. By default, NetworkManager does not manage interfaces that appear in /etc/network/interfaces. You can change this behaviour.

To do this – in a terminal:

sudo nano /etc/NetworkManager/NetworkManager.conf

change the line managed=false to managed=true

Save, stop and start network manager:

sudo service network-manager restart

-configure that bitch /etc/dhcp/dhcp.conf
-configure /etc/network something/ interfaces to use 192.168.1.66 ip and dns, see links below
-configure wlan0 to always use 192.168.1.66 because we are evil
-config wlan0 as ad-hoc wifi on channel 6 see just below this
-config /etc/rc.local to do all this crap at boot, no login needed to turn on wifi and dhcp, and python script

edit /etc/network/interfaces make the ip 192.168.1.66 cause we are evil:
source-directory /etc/network/interfaces.d
auto wlan0
iface wlan0 inet static
address 192.168.1.66
netmask 255.255.255.0
gateway 192.168.1.1

edit /etc/rc.local code:
iwconfig wlan0 mode ad-hoc channel 6 essid “EvilRuxpin”
ifconfig wlan0 up 192.168.1.66
sudo service isc-dhcp-server start
cd ChippyRuxpin cause i installed under root
python /root/ChippyRuxpin/chippyRuxpin.py

sample /etc/dhcp/dhcp.conf code for ez ip’s baby:
option domain-name “Evil.Ruxpin”
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.20;
option subnet-mask 255.255.255.0;
option routers 192.168.1.66;
option domain-name-servers 192.168.1.66;
}

after a editing /etc/rc.local, /etc/network/interfaces and /etc/dhcp/dhcp.conf, reboot.
once booted up, you should be able to connect to ad-hoc wifi “EvilRuxpin”
it should serve up a DHCP address between 192.168.1.10-20.
goto http://192.168.1.66:8080 or 80
page should load

note: my stupid dell laptop would not connect to the ad-hoc wifi, but my iphone 5s would.

Resources:
Chippy Ruxpin:

https://github.com/NextThingCo/ChippyRuxpin/blob/experimental/chippyRuxpin.py
http://makezine.com/projects/chippy-ruxpin/
http://www.dreeyoreshospital.net/Teddy_Ruxpin-fix-1.html
Pinouts H Bridge
http://espeak.sourceforge.net/voices.html
https://www.hackster.io/LagunaComputer/evil-ruxpin-a7afc6

C.H.I.P wifi adhoc/dhcp server:
https://bbs.nextthing.co/t/does-c-h-i-ps-wireless-radio-supports-adhoc-mode/3425/10
https://wiki.debian.org/NetworkConfiguration
http://www.binarytides.com/disable-ipv6-ubuntu/
http://askubuntu.com/questions/71159/network-manager-says-device-not-managed
https://wiki.debian.org/DHCP_Server

Amazon Echo Hack for CHIP(to do!):

http://sammachin.com/the-10-echo/

Next Thing Co CHIP GPIO:
https://github.com/xtacocorex/CHIP_IO
http://docs.getchip.com/chip.html#physical-connectors
https://bbs.nextthing.co/t/programming-with-gpio/2110/7
https://github.com/connornishijima/chipGPIO
http://docs.getchip.com/chip.html#gpio
https://bbs.nextthing.co/t/adafruit-gpio-library-for-chip/2696/5

CHIP Linux misc:

http://serverfault.com/questions/727943/auto-root-login-in-linux-servers
http://stackoverflow.com/questions/11421399/how-to-fix-bad-interpreter-error-when-using-yum
https://bbs.nextthing.co/t/configure-vnc-without-display/1334/5
3.7v lipo battery
battery.sh python-run-external-command-and-get-output/

Evil Ruxpin

Rear of Evil Ruxpin

H Bridge

Chippy Ruxpin

CHIP 3.7v LiPO battery

CHIP $9 Linux Computer

Back of Ruxpin

Chippy Ruxpin Audio Amp

chippyRuxpin.py:

#!/usr/bin/python
# Chippy Ruxpin by Next Thing Co
# Powered by C.H.I.P., the world's first $9 computer!

# apt-get install python-setuptools python-dev build-essential espeak alsa-utils
# apt-get install python-alsaaudio python-numpy python-twitter python-bottle mplayer

# IMPORTANT NOTE ABOUT TWITTER STUFF!
# In order to retrieve tweets, you need to authorize this code to use your twitter account.
# This involves obtaining some special tokens that are specific to you.
# Please visit Twitter’s website to obtain this information and put the values in the variables below.
# For more information, visit this URL:
# https://dev.twitter.com/oauth/overview/application-owner-access-tokens

consumerKey=’INSERT YOUR CONSUMER KEY HERE FROM TWITTER’
consumerSecret=’INSERT YOUR CONSUMER SECRET HERE FROM TWITTER’
accessTokenKey=’INSERT YOUR ACCESS TOKEN KEY HERE FROM TWITTER’
accessTokenSecret=’INSERT YOUR ACCESS TOKEN SECRET HERE FROM TWITTER’

import sys
import time
import subprocess
import os
from random import randint
from threading import Thread
from chippyRuxpin_audioPlayer import AudioPlayer
from chippyRuxpin_gpio import GPIO
from chippyRuxpin_twitter import ChippyTwitter
from chippyRuxpin_webFramework import WebFramework

fullMsg = “”

MOUTH_OPEN = 408 # GPIO pin assigned to open the mouth. XIO-P0
MOUTH_CLOSE = 412 # GPIO pin assigned to close the mouth. XIO-P2
EYES_OPEN = 410 # GPIO pin assigned to open the eyes. XIO-P4
EYES_CLOSE = 414 # GPIO pin assigned to close the eyes. XIO-P6

io = GPIO() #Establish connection to our GPIO pins.
io.setup( MOUTH_OPEN )
io.setup( EYES_OPEN )
io.setup( MOUTH_CLOSE )
io.setup( EYES_CLOSE )

print(“start”)

audio = None
wasRunning = False
isRunning = True
print(“isRunning t”)
rcount = 0

def updateMouth():
print(“def updateMouth”)
lastMouthEvent = 0
lastMouthEventTime = 0

while( audio == None ):
time.sleep( 0.1 )
print(“while audio none”)

while isRunning:
if( audio.mouthValue != lastMouthEvent ):
lastMouthEvent = audio.mouthValue
lastMouthEventTime = time.time()

if( audio.mouthValue == 1 ):
io.set( MOUTH_OPEN, 1 )
io.set( MOUTH_CLOSE, 0 )
else:
io.set( MOUTH_OPEN, 0 )
io.set( MOUTH_CLOSE, 1 )
else:
if( time.time() – lastMouthEventTime > 0.4 ):
io.set( MOUTH_OPEN, 0 )
io.set( MOUTH_CLOSE, 0 )

# A routine for blinking the eyes in a semi-random fashion.
def updateEyes():
print(“def updateEyes”)

while isRunning:
print(“before updateEyes”)
io.set( EYES_CLOSE, 1 )
io.set( EYES_OPEN, 0 )
time.sleep(0.6)
print(“io updateEyes”)
io.set( EYES_CLOSE, 0 )
io.set( EYES_OPEN, 1 )
time.sleep(0.6)
#io.set( EYES_CLOSE, 1 )
#io.set( EYES_OPEN, 0 )
#time.sleep(0.2)
io.set( EYES_CLOSE, 0 )
io.set( EYES_OPEN, 0 )
time.sleep( randint( 0,1) )
print(“while updateEyes”)
#rtalk()
#wasRunning=True

def rtalk():

while isRunning:
#cmd = “sudo sh -c ‘echo 1 > /sys/class/gpio/gpio412/value'”
#subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE)
time.sleep(1)
global rcount
myTextIndex = 1
rcount = rcount + 1
myTextIndex = ( randint( 0,2) )
print(myTextIndex)
print(rcount)
if rcount >= 60:
#myTextIndex == 0

if myTextIndex == 0:
myText = “hello fucker!”
elif myTextIndex == 1:
myText = “I can hear you Adam. I know you are talking about me. You don’t want to make me angry ”
elif myTextIndex == 2:
myText = “Hey! give me the pipe back”
else:
myText = ‘single quotes this is option 4’
#return MyText
rcount = 0
talk(myText)

def talk(myText):
print(“talk”)
global rcount
rcount = 0
if( myText.find( “playmetal” ) >= 0 ):
myText += “0”
myText = myText[7:-1]
cmd = “mplayer /home/chip/Desktop/m.mp3”
subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE)

#try:
# myText = twitter.getTweet( myText )
#except:
# print( “!!!ERROR: INVALID TWITTER CREDENTIALS. Please read README.md for instructions.”)
return

os.system( “espeak \”,…\” 2>/dev/null” ) # Sometimes the beginning of audio can get cut off. Insert silence.
time.sleep( 0.5 )
subprocess.call([“espeak”, “-w”, “speech.wav”, myText, “-s”, “130”])
audio.play(“speech.wav”)
#audio.play(“m.mp3”)

# cmd = “mplayer /home/chip/Desktop/m.mp3”
# subprocess.call(cmd,shell=True, stdout=subprocess.PIPE)
#cmd = “mplayer /home/chip/Desktop/m.mp3”
#subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE)

#cmd = “sudo echo 0 > /sys/class/gpio/gpio408/value”
#subprocess.call(cmd,shell=True, stdout=subprocess.PIPE)

print(“done talking”)

return myText
rtalk

#os.system( “sudo axp209 –no_limit” )
mouthThread = Thread(target=updateMouth)
mouthThread.start()
eyesThread = Thread(target=updateEyes)
eyesThread.start()
rtalkThread = Thread(target=rtalk)
rtalkThread.start()

print(“started aand played”)

audio = AudioPlayer()

if( consumerKey.find( ‘TWITTER’ ) >= 0 ):
print( “WARNING: INVALID TWITTER CREDENTIALS. Please read README.md for instructions.” )
else:
twitter = ChippyTwitter(consumerKey,consumerSecret,accessTokenKey,accessTokenSecret)

print(“def userinput”)
def userInput():
print(“start userinput”)
time.sleep(6)
while isRunning:
user_input = raw_input(“some input:”)
talk(user_input)
print(“while userinput”)

print(“userinput thread”)
inputThread = Thread(target=userInput)
inputThread.start()

print(“webframe”)
web = WebFramework(talk)
print(“webframe done”)
isRunning = False
print(“isrunning false”)

io.cleanup()
print(“io cleanup”)

sys.exit(1)

chippyRuxpin-webFramework.py:

#!/usr/bin/env python
#
# Chippy Ruxpin by Next Thing Co 2015
# Powered by C.H.I.P., the world's first $9 computer!

from bottle import run, get, post, request, route, redirect
import socket

preset1=”Hello Adam, would you like to hear some Heavy Metal?”
preset2=”Hello Adam, would you like to hear some Heavy Metal?”

print(“web start”)
class WebFramework:
def __init__(self,func):
self.ip = [(s.connect((‘192.168.1.66’, 80)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]
print( “———“)
print( “CHIPPY RUXPIN IS ONLINE!”)
print( “In your browser, go to ” + str(self.ip) + “:8080”)
print( “———“)
self.talkFunc = func

@route(‘/’)
def index():
return ”’

What do you want Chippy Ruxpin to say? (Or type \”playmetal\” followed by some search terms):

preset01:

preset02:

preset03:

preset04:

preset05:

preset06:

preset07:

preset08:

preset09:

preset10:

preset11:

”’
@post(‘/’)

def speak():
speech = request.forms.get(‘speech’)
self.talkFunc( speech )
redirect(‘/’)

print(“def speak”)

run(host=self.ip, port=8080, debug=True)

this part of the code does not format well in wordpress . it is:
LESS THAN SYMBOL form action=”/” method=”post” GREATER THAN SYMBOL
preset11: LESS THAN SYMBOL input name=”speech” type=”text” size=”96″ value=”one of these days, _ _ _ _ I am going to kill that fucking cat'” / GREATER THAN SYMBOL

LESS THAN SYMBOL input value=”Go!” type=”submit” / GREATER THAN SYMBOL

chippyRuxpin_audioPlayer.py:

#!/usr/bin/env python
#
# Chippy Ruxpin by Next Thing Co 2015
# Powered by C.H.I.P., the world's first $9 computer!

#!/usr/bin/env python
#

import alsaaudio as aa
import audioop
from time import sleep
import struct
import math
import array
import numpy as np
import wave
import os
import subprocess

class AudioPlayer:
def __init__(self):
subprocess.Popen(‘amixer cset numid=1 100%’ ,shell=True, stdout=subprocess.PIPE ) # Set PA mixer volume to 100%
subprocess.Popen(‘amixer cset numid=2 2’ ,shell=True, stdout=subprocess.PIPE ) # Set right mixer to be “right” (2)
subprocess.Popen(‘amixer cset numid=3 1’ ,shell=True, stdout=subprocess.PIPE ) # Set left mixer to be “left” (1)
subprocess.Popen(‘amixer cset numid=4 1′ ,shell=True, stdout=subprocess.PIPE ) # Set DAC self.output to be “Direct” (2… or 1 for “Mixed” if you prefer)
self.prevAudiovalue = 0
self.mouthValue = 0

def play(self,fileName):
# Initialise matrix
matrix=[0,0,0,0,0,0,0,0]

# Set up audio
wavfile = wave.open(fileName,’r’)
chunk = 1024
output = aa.PCM(aa.PCM_PLAYBACK, aa.PCM_NORMAL)
output.setchannels(1)
output.setrate(22050)
output.setformat(aa.PCM_FORMAT_S16_LE)
output.setperiodsize(chunk)

data = wavfile.readframes(chunk)
try:
while data!=”:
output.write(data)
# Split channel data and find maximum volume
channel_l=audioop.tomono(data, 2, 1.0, 0.0)
channel_r=audioop.tomono(data, 2, 0.0, 1.0)
max_vol_factor =5000
max_l = audioop.max(channel_l,2)/max_vol_factor
max_r = audioop.max(channel_r,2)/max_vol_factor

for i in range (1,8):
self.generateMouthSignal((1<<max_r)-1)

data = wavfile.readframes(chunk)
except:
data = None

os.system( ‘/etc/init.d/alsa-utils restart’ )
sleep( .25 )

def generateMouthSignal(self,val):
delta = val – self.prevAudiovalue
if( delta < -2 or val == 0 ): self.mouthValue = 0 elif( delta > 0 ):
self.mouthValue = 1

self.prevAudiovalue = val

Controlling Lights with Arduino Uno and Ethernet Shield from Cell Phone SMS text using Twilio and Temboo over the Internet

Here is the meat of this project.
http://www.instructables.com/id/Controlling-your-Christmas-lights-with-Text-Messag/?ALLSTEPS
Controlling your Christmas lights with Text Messages by VisionaryNutcases

The original code is for an Arduino YUN. The YUNs have built in ethernet and some code had to be changed to get it to work with my standard Uno with an ethernet shield.
Basically i had to strip out the Console.print and the Bridge.h commands, changing them to Serial.print . Also ,I had to shift the response string lookup digits a few places, because it was offset with the original YUN code. I just copied the RESPONSE from the serial monitor into Notepad, and counted the digits by using the right arrow key, taking note to count the spaces as well.

Here is the modified code that works on an Arduino Uno with an Ethernet shield. Dont forget to get your TembooAccount.h file from the temboo site.
Also, I had issues with the header code box not populating correctly while following the instructions. Try hitting refresh, switch between Arduino YUN and Arduino code using the box at the top of the temboo website.

You will need to edit the code below to include YOUR twilio auth code and ID. This code will turn a LED on digital pin7 if you send a text as “lights on” and turn the led off if you send “lights off”


header
/* Setup shield-specific #include statements */
/*Use the pic above, for the header setup, my WordPress software hides the code from this part in this post */
#include
#include
#include
#include
#include
#include
#include "TembooAccount.h" // Contains Temboo account information
#include

/*REPLACE THE FIRST 10 Lines with those shown in the pic above ^ */

byte ethernetMACAddress[] = ETHERNET_SHIELD_MAC;
EthernetClient client;

int numRuns = 1; // Execution count, so this doesn't run forever
int maxRuns = 5; // Maximum number of times the Choreo should be executed
int ledPin = 13; // Led for debug
int buzzerPin = 2; // buzzer's connected to pin 2
int lightsPin = 7; // The pin where your Xmas lights are connected to.
int timeToWait = 600000; //Delay between calls
String bodyMsgLast = "none"; // This variable holds the last text message read.

void setup() {
Serial.begin(9600);

// For debugging, wait until the serial console is connected.
delay(4000);
while(!Serial);

Serial.print("DHCP:");
if (Ethernet.begin(ethernetMACAddress) == 0) {
Serial.println("FAIL");
while(true);
}
Serial.println("OK");
delay(5000);

Serial.println("Setup complete.\n");

//Set Outputs
pinMode(ledPin, OUTPUT);
pinMode(lightsPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);

//Turn lights off on boot up
digitalWrite(lightsPin, HIGH);
delay(5000); //simulates a button press for 5 seconds
digitalWrite(lightsPin, LOW);
delay(1000);

//Bridge.begin();
//Console.begin();

}

void loop() {
if (numRuns <= maxRuns) { Serial.println("Running GetLastMessageThatContains - Run #" + String(numRuns++)); TembooChoreo GetLastMessageThatContainsChoreo(client); // Invoke the Temboo client GetLastMessageThatContainsChoreo.begin(); // Set Temboo account credentials GetLastMessageThatContainsChoreo.setAccountName(TEMBOO_ACCOUNT); GetLastMessageThatContainsChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME); GetLastMessageThatContainsChoreo.setAppKey(TEMBOO_APP_KEY); // Set Choreo inputs String AuthTokenValue = "6e0aecedb5461c4ccbc7f72535c7c569"; GetLastMessageThatContainsChoreo.addInput("AuthToken", AuthTokenValue); String FilterValue = "lights"; GetLastMessageThatContainsChoreo.addInput("Filter", FilterValue); String AccountSIDValue = "AC25eb0f996fbe268825f00405885f6fba"; GetLastMessageThatContainsChoreo.addInput("AccountSID", AccountSIDValue); // Set Choreo inputs GetLastMessageThatContainsChoreo.addInput("AuthToken", " PUT YOUR TWILIO AUTH TOKEN HERE "); //Twilio Authentication Token GetLastMessageThatContainsChoreo.addInput("Filter", "ights"); // Filter for incoming messages holding this word GetLastMessageThatContainsChoreo.addInput("AccountSID", " PUT YOUR TWILIO ACCOUNT ID HERE "); //Twilio account ID GetLastMessageThatContainsChoreo.addInput("ResponseMode", "simple"); //Response Mode // Identify the Choreo to run GetLastMessageThatContainsChoreo.setChoreo("/Library/Twilio/SMSMessages/GetLastMessageThatContains"); // Run the Choreo; when results are available, print them to serial GetLastMessageThatContainsChoreo.run(); String bodyMsg; // This contains the whole Message while(GetLastMessageThatContainsChoreo.available()) { char c = GetLastMessageThatContainsChoreo.read(); Serial.print(c); bodyMsg += c; //The characters are being fed to the bodyMsg string } //Serial.println(bodyMsg+ "<-- is bodyMsg" ); if (bodyMsg != bodyMsgLast) { //Only runs if this message is different than the one stored. if (bodyMsg.substring(33, 35) == "on") { //This only works if the 17th to 19 letters are "on"". // This works if you're seinding the message "Lights on" // Characters before Lights on are other info from Twilio // Turn lights on //digitalWrite(ledPin, HIGH); //turns on debug LED digitalWrite(lightsPin, HIGH); //delay(800); //digitalWrite(lightsPin, LOW); //Simulated button press for less than a second Serial.println("Lights are on"); //tone(buzzerPin, 2000, 3000); //beeps for 3 seconds } else if (bodyMsg.substring (33, 36) == "off") { //17 20reads "off" from a message saying "Lights off" //digitalWrite(ledPin, LOW); //turns off debug LED //tone(buzzerPin, 4200, 1000); //beeps digitalWrite(lightsPin, LOW); //delay(5000); //simulates a 5 second button press to turn the lights off //digitalWrite(lightsPin, LOW); //delay(1000); Serial.println("Lights are off"); } bodyMsgLast = bodyMsg; //Copies this message to the Last message variable } else { Serial.println("Identical to Last"); //if identical, do nothing. } Serial.println(); Serial.println("Waiting..."); delay(timeToWait); // wait a period between GetLastMessageThatContains calls GetLastMessageThatContainsChoreo.close(); } Serial.println("\nWaiting...\n"); delay(30000); // wait 30 seconds between GetLastMessageThatContains calls }

TembooAccount.h

you must edit your tembooaccount.h file as well. make sure you get an up to date app key FOR YOUR APP from the temboo website.


/*
IMPORTANT NOTE about TembooAccount.h

TembooAccount.h contains your Temboo account information and must be included
alongside your sketch. To do so, make a new tab in Arduino, call it TembooAccount.h,
and copy this content into it.
*/

#define TEMBOO_ACCOUNT "lagunabeachcomputer" // Your Temboo account name
#define TEMBOO_APP_KEY_NAME "myFirstApp" // Your Temboo app key name
#define TEMBOO_APP_KEY "2761f18fae384543af4f... xxxx " // Your Temboo app key

#define ETHERNET_SHIELD_MAC {0xFE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFD}

/*
The same TembooAccount.h file settings can be used for all Temboo SDK sketches.
Keeping your account information in a separate file means you can share the
main .ino file without worrying that you forgot to delete your credentials.
*/

TP-Link TL-WR703n External Antenna Mod

TP-Link TL-WR703n 3G Router External Antenna Mod

Here are some helpful links:

http://blagg.tadkom.net/2012/09/15/better-wr703n-antenna-mod/

http://blagg.tadkom.net/2012/09/01/wr-703n-external-antenna-mod-diy/

http://www.modlog.net/?p=429

Step 1. Drill A Hole

20130816-161529.jpg

 

Step 2. Cut the two Internal Antenna PCB Traces as shown here: http://blagg.tadkom.net/2012/09/01/wr-703n-external-antenna-mod-diy/

I decided to keep the J1 resistor and C114 capacitor as they orignally were after reading some comments suggesting the signal strength would be better leaving them alone.

Step 3. Solder on Antenna Pigtail Cable.  My cable was scavenged from a broken cheapie $5 USB Wifi adapter.  The soldering was hard.  It is just really small down there.  Here is a trick: put a blob of solder on the tip of your hot iron.  Now smear that melted blob OFF onto a dry sponge.  Now you should be able to PICK UP a SMALLER BLOB of solder and place it where you want.

I used tape to hold down the wire.  As you bend the cable, it puts a lot of tension on the two little solder points.  If you do not hold down the wire somehow, your precious little solders will eventually break off.  Since the tape will eventually fail, it would be far better to hold the wire down with a blob of hot glue gun stuff.20130816-161545.jpg

 

Step 4. Insulate, Assemble and Test.  Make sure you insulate the two little R82 resistors under the antenna fitting metal.  You do not want to short out the circuit board with the metal from the antenna screw fitting inside the case.  A small piece of sturdy electrical tape under the brass nut should cover and protect R82.20130816-161559.jpg

Finished!20130816-164449.jpg

Made My Planetarium Star Projector Spin with Arduino Motor

Made My Planetarium Star Projector Spin with Arduino Motor

Ingredients:

This updated code removes the switch seen in the video and makes the motor spin automatically about .5 degrees every second. Here is the beta Arduino code sketch:

#include <SoftwareSerial.h>

/*
* Switch and LED test program
*/

int ledPin = 5; // LED is connected to pin 12
int switchPin = 0; // switch is connected to pin 2
int val; // variable for reading the pin status
int ledPin6 = 6; // LED is connected to pin 12
int switchPin1 = 1; // switch is connected to pin 2
int val1; // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT); // Set the LED pin as output
pinMode(switchPin, INPUT); // Set the switch pin as input
pinMode(ledPin6, OUTPUT); // Set the LED pin as output
pinMode(switchPin1, INPUT); // Set the switch pin as input
//Setup Channel A
pinMode(12, OUTPUT); //Initiates Motor Channel A pin
pinMode(9, OUTPUT); //Initiates Brake Channel A pin

}
void loop(){

//delay(10);

//val = digitalRead(switchPin); // read input value and store it in val
//if (val == LOW) { // check if the button is pressed
//digitalWrite(ledPin, HIGH); // turn LED on
//Serial.begin(9600); // set up Serial library at 9600 bps
//Serial.print(“sw0 on: “);Serial.println(digitalRead(switchPin));

//forward @ full speed
digitalWrite(12, HIGH); //Establishes forward direction of Channel A
digitalWrite(9, LOW); //Disengage the Brake for Channel A
analogWrite(3, 200); //Spins the motor on Channel A at full speed

delay(.1); //// ***** THIS SETS THE ROTATION SPEED .1 is good for slow spin, 10 or 100+ will rotate further

//delay(10);
// }
if (val == HIGH) { // check if the button is not pressed
digitalWrite(ledPin, LOW); // turn LED off
delay(10);

digitalWrite(9, HIGH); //Eengage the Brake for Channel A

//delay(1000);

}

// delay(10);

val = digitalRead(switchPin1); // read input value and store it in val
if (val == LOW) { // check if the button is pressed
digitalWrite(ledPin6, HIGH); // turn LED on
//Serial.print(“on: “);Serial.println(digitalRead(switchPin1));

//backward @ half speed
digitalWrite(12, LOW); //Establishes backward direction of Channel A
digitalWrite(9, LOW); //Disengage the Brake for Channel A
analogWrite(3, 255); //Spins the motor on Channel A at half speed

delay(3000);

delay(10);
}
if (val == HIGH) { // check if the button is not pressed
digitalWrite(ledPin6, LOW); // turn LED off
//Serial.print(“1=off: “);Serial.println(digitalRead(switchPin1));

digitalWrite(9, HIGH); //Eengage the Brake for Channel A

delay(1000);

delay(10);
}

}

 

I plan on adding a potentiometer to control the rotation speed.

BitCoin Falls Another %10-15 in Last 24 Hours June 28, 2013

BitCoin Falls Another %10-15 in Last 24 Hours June 28, 2013

Bitcoin has been steadily falling since the ASIC hardware based bitcoin mining machines have started shipping.  ASIC miners such as Butterfly Labs 5GH/s ‘Jalapeno’ unit have finally shipped to customers, causing a new flood wave of advanced high speed mining.  This in turn has caused the valuation of the virtual currency Bitcoin to fall dramatically.

Standard economics dictate this will continue until the last block is hashed out and the currency will then rise again.

Bitcoin Value Falls Another %10 Late June 28th, 2013
Bitcoin Value Falls Another %10 Late June 28th, 2013

Solar Powered Linksys WRT54g Router w DD-wrt and HotSpotSystem

I have built a solar powered Linksys WRT54g router setup.

1. WRT54g router 12v 1a with DDwrt v24 and HotSpotSystem.com ($20 ebay)
2. 10amp solar charger controller 12v ($10 ebay)
3. 2x 10watt solar panels 12v ($22 each ebay)
4. 1.4 Ah 12v battery ($16 Frys)
5. 20dB gain Yagi directional antenna ($10 ebay)
6. Reverse RP-TNC male to RP-SMA female adapter ($2 ebay)
7. (will purchase waterproof box) $10 or similar

 

20130310-155838.jpg

RESULTS:
Works perfectly but needs a bigger battery. The 1.4Ah 12v sealed battery only lasts about 2 hours when the charge stops. I read somewhere that a 7.2Ah battery should work, which makes sense if I want to get roughly 7x more power time (if 1.4Ah=2hours then 7.2Ah should equal about 10 hours…)

20130217-122609.jpg

The solar charge controller is awesome! Each panel puts out about 15-18v in medium cloudy sunlight at about 0.6amps each. The controller charges the battery to about 13.8v, then automatically switches to a float charge to about 14.1v. After full charge I could disconnect 1 panel and still maintain power to the router and a positive charge to the battery.

20130217-124938.jpg

The panels are chinese 10Watt models from ebay. They seem to be pretty good, as it does not take much sunlight to generate 12-14v (in the medium shade). They will easily produce 18v each in full direct sunlight.

20130217-124954.jpg

The Yagi is a 20 or 24 dB gain directional with a 30 degree cone spread signal. Haven’t done any testing as I am still in crutches after knee surgery and don’t want to go across the street and walk around.

20130217-125008.jpg

Update:

Here is the 7.5 AH 12volt battery installed. The unit will power the WRT54G router for well over 8 hours. I put the whole thing in a waterproof box, however I am planning on drilling some holes for PVC pipes to vent and to affix the antennas to.

20130309-102357.jpg

I found this cool Solar Powered Brewery bottlecap and decided it was perfect for a heatsink. So I glued it onto the main Broadcom chip for some heat dispersion.

20130309-103105.jpg

Bottlecap heatsink on WRT54G router.

20130309-103126.jpg

Installed in waterproof box. Must provide ventilation. Using stock antennas until the RP-TNC and RP-BNC adapters come in the mail.

20130310-155838.jpg

Setup in action on a sunny day.

20130310-155944.jpg

 

 

 

 

UPDATE:

I have put together an Arduino Solar Panel Sun Tracker. Check out the code and project page!

20130331-015638.jpg

How To UNLOCK a Password Protected Western Digital WD SATA Hard Drive Without Knowing the Master or User Password

How To UNLOCK a Password Protected Western Digital WD, IBM or Hitachi SATA Hard Drive Without Knowing the Master or User Password 

NEW INSTRUCTIONS (Oct 12, 2020)

Boot CD is now free. Newer versions exist, but not free from viruses like this download. Bitcoin Donations Welcome.

Download the old clean boot iso here: https://mega.nz/file/4llxUK7L#1H62fgGsOQAGcH7oS-lPo2QObYcdjZg_OCdW08ewkKQ

NEW INSTRUCTIONS (May 4, 2019)

Look, you are here for a reason.  You are stuck.  The drive is locked and you’re screwed. The whole reason for this post is to HELP YOU OUT. I’m not the author. This software can be found in its bare form for free.  I made this available because as a fellow man, I know what its like to help a bro out.

What I’m trying to say is if this works for you, please help out the next guy by posting your experiences at the bottom of this page as a comment.  Thanks! :>

I have made everything easier and more clear.  Now you just boot from an .iso file and it does the rest automatically.

*This guide was intended for Western Digital drives only at this time. I have some reports that software also works on IBM and Hitachi IDE/SATA drives, but I have not confirmed that yet by myself, so I do not claim that it will here yet.  If you unlock a non-WD drive, please post your results as a comment.  See Step 8 for IBM/Hitachi command line switches. Thanks.

1. Read everything on this page.  You need to understand that you need a compatible chipset, proper SATA/IDE BIOS settings, and that the WD Unlocker Software only unlocks hard drive bios passwords, and has *only been tested on Western Digital drives.  It has not been tested on SED self encrypted drives.

NOTE: UNTESTED ON WD My PASSPORT USB DRIVES.

SATA/IDE ONLY! NO USB!

SATA/IDE ONLY! NO USB!

2. Repeat Step 1.

3. You will need:

SATA/IDE hard drive connected to the primary 1 or secondary 2 slot or plug.

Updated list of supported drives (no guarantees):

Maxtor (except STM),WD,Toshiba,Quantum
Fujitsu (except MHW,MHZ,MHY,MJA). There is a mistake for MHX
Nikimi (former Quantum & Maxtor)
MDT (former WD)
Native Hitachi (DK-xx,HTC..G7AT00)
IBM/HGST (many models,except 100h_byte_NVRAM & 4K-NVRAM & 2.5″ with blue controllers. (mcu=ARM & B9A3..), disks without NVRAM)
ExcelStore(former HGST).
Seagate(with parallel flash)+Grand(UX with serial flash).

NOTE: UNTESTED ON WD My PASSPORT USB DRIVES.

SATA/IDE ONLY! NO USB! (not tested, no guarantees)

Compatible chipset.  I recommend early Intel based with both IDE+SATA support such as Pentium4 based. I know for a fact that a modern quad core based system such as a Dell T3500 or Lenovo s20 Thinkstation DO NOT WORK.  You need an OLDER chipset. I can confirm a HP Compaq d530 desktop WILL WORK. The first time I unlocked a drive, the software failed to detect the drive on two more modern motherboards, until I tried a different third older motherboard and it worked. Knowing this will save you hours of frustration.

YOU MUST HAVE A COMPATIBLE CHIPSET!

YOU MUST HAVE A COMPATIBLE CHIPSET!

YOU MUST HAVE A COMPATIBLE CHIPSET!

BIOS SATA/IDE controllers set to the most NATIVE and non-AHCI or non-RAID mode you can set. This setting will vary greatly between motherboards. Try every setting if something fails or the unlocker does not see a drive.  You can test a good setting by booting and running a copy of MHDD 4.x (mhdd32ver4.5.iso). If MHDD detects and lists the hard drive, then your BIOS settings are correct.  If you cannot see the drive, try different drive controller settings in your bios, or get another motherboard.

USB flash drive  or  blank cd/dvd disc and burner drive to burn the .iso file.

-the WD Unlocker Software .exe file (*written by Moltke) and a boot .iso. This software is freely available on the internet. I have done all the other extra hard work and created a complete boot package with all the files you need ready to go. This includes the hours of research, file procurement, creating a boot .iso, modified and optimized the startup configuration, and then repackaged these up with nice easy instructions. No fucking viruses here. If you don’t want to donate, go click around and download from the russian forums and try your luck. Either way you still need a boot package.  The prepared package is available if you like for a small donation here:

2020 I made the download free, please donate.

Buy with Crypto

TERMS OF SALE:

NO REFUNDS   DO NOT PURCHASE IF YOU WANT A REFUND

NO RETURNS

NO SUPPORT

NO GUARANTEES THAT IT WORKS ON YOUR HARDWARE

DO NOT BUY THIS SOFTWARE UNLESS YOU KNOW WHAT YOU ARE DOING.

 **** Warning the .rar file you might be tempted to download from OTHER untrusted links has a very nasty new variant of the Win32/Virut virus.  DON’T DOWNLOAD IT!  You get what you pay for! Look you can mess around and register at a dozen Russian forums, download and open a hundred infected zip files, but I’m telling you, don’t waste your time, I’ve already done all the work for you.

****

 No Guarantees. No Refunds. No Support. No Returns. All Transactions are FINAL.

I didn’t write the unlocker software, it will either work or it won’t. I have only compiled and repackaged into a easy to use ready to go download. Your small donation goes to offset my site server costs…   but hey! It’s only two bucks! Otherwise, your drive is a guaranteed useless dead brick.

4. Download the above software file and save itOpen the .zip/compressed folder.

5. Insert USB Flash Drive. (you could alternatively burn the .iso file to CD or DVD and boot from that instead and skip to Step 8):

6.  ——> From the .zip package file you downloaded n Step 3 <——— , Run YUMI-0.0.9.5.exe and install the Unlocker_Boot_Image.iso file on the USB Drive.  YUMI will format and erase all data on the USB drive, so backup any important files first. See the readme.jpg graphic.  (The Unlocker_Boot_Image.iso file is only available/downloadable from the shopping cart in step 3.)

Install Unlocker Boot Image on USB Drive
Install Unlocker Boot Image on USB Drive

7. After your boot USB flash drive has been created, Open the USB drive folder and copy the file /multiboot/menu/menu.lst to the root / and /multiboot folders.  Copy/Paste it back to the USB drive into these two folders-> ‘ / ‘ (root) and  ‘/multiboot/’ .  This fixes a GRUB error that sometimes keeps the boot menu from showing.  Basically just copy the menu.lst file to every folder on the USB Drive to enable GRUB to find it. If you do not do step 7, your boot will probably (but not necessarily) fail at the GRUB prompt.     YUMI boot menuunlocker

8. Boot to the USB drive on the computer with the locked drive attached. Choose “Directly Bootable ISOs or Windows XP” from the YUMI boot menu.  Then Choose  “Boot Unlocker_Boot_Image.iso” from the GRUB boot menu. The unlocker software should automatically load some drivers and start.  My drive took 80 minutes to unlock.  Just let it work.  If you must quit hit CTRL+C.   You may restart the unlocker by typing ‘unlock.exe /A‘ (all) or ‘unlock.exe /P‘ (primary) or ‘unlock.exe /S‘ (slave/secondary) at the dos prompt. For Hitachi Global Star HGST / IBM drives add a ‘.’   Type ‘unlock.exe /P.‘   “.” for .  For Native Hitachi drives add an ‘8’. If you have success at unlocking a drive, please post a comment adding any additional knowledge that you can share, thanks! :>

Examples:

unlock.exe /A = Western Digital drive on (A)ll controllers

unlock.exe /S. =  IBM or Hitachi Global Star drive on secondary controller

unlock.exe /P8  = native Hitachi drive on primary controller

Grub Boot Error? You didn't read Steps 1, 2 & 7
Grub Boot Error? Read Step  7 then Step 1.

If You Have Success In Unlocking Your Hard Drive Using This Software, Please Post Your Results As a Comment to This Page So That You May Help Others.  Thanks

 THANK YOU MOLTKE !  You Deserve all the Credit.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           OLD INSTRUCTIONS:

NOTE: This Guide Was Intended for WESTERN DIGITAL drives only. IT MAY WORK ON OTHER DRIVES AS WELL

So, you have a WD hard drive that has been password locked on the drives own bios, and you can’t format or partition it at all….

WHAT YOU NEED:

-Hiren’s Boot CD .iso file (i used a combo of v9.2 and 14) -a dos program called ZU.  There is a download link below in the instructions.

-your locked SATA drive hooked up to a computer with a compatible controller chipset. -The motherboard bios must be set to SATA NATIVE.  It Cannot be set to AHCI, RAID modes.  So play around with setting your sata controllers to NATIVE.  We want no IDE controllers! Just Sata.

A FEW KEY POINTS: This tutorial is only for IF YOU DO NOT HAVE THE MASTER, USERhi or USERmax hard drive lock password. This is not the computers bios password. However, the hard drive unlock password is set from within the computers BIOS. This is not the bios password set on the motherboard bios, this is the Password locking the drive from IO read/writes from below the computer’s bios level.

The HEX dump / MHDD 4.5 method did not work on my drive.  The scripts would error out and not dump the hex 22.bin file.  But i was still able to unlock the drive……. The SATA controller on the motherboard matters.  I tried two modern computers with no avail (Lenovo thinkstation s20 and Dell T3500).  I only got it to work when hooked up to an older P4 based computer with IDE and SATA plugs.  I tried for 2 whole days on the new systems before i moved to an older chipset and got it to work.

ALL THE CRAP I READ THAT DOESN’T REALLY MATTER IF YOU DON”T HAVE THE PASSWORD:

http://forum.hddguru.com/unlocking-ata-password-for-western-digital-t8374-360.html http://elettrofreak.blogspot.com/2011/02/estrarre-le-password-ata-da-un-hard.html http://www.tomshardware.com/forum/280346-32-lock-bios http://forum.hddguru.com/wd5000avvs-problem-pls-help-t22667.html http://forum.hddguru.com/unlocking-ata-password-for-western-digital-t8374-20.html http://forum.hddguru.com/unlocking-ata-password-for-western-digital-t8374-80.html http://www.rohitab.com/discuss/topic/35733-removing-hard-disk-password/ http://ipv5.wordpress.com/2008/04/10/4/ http://ipv5.wordpress.com/2008/04/14/list-of-hard-disk-ata-master-passwords/ http://forum.hddguru.com/ata-password-bypassing-t12257-20.html http://linux.die.net/man/8/hdparm http://mackonsti.wordpress.com/2011/11/22/ssd-secure-erase-ata-command/ http://participant.mykonicaminolta.com/productsattachments/manuals/bizhubHDDSecurityGuide362_282_222_350_250_200.pdf

ALL THE CRAP YOU CAN SKIP AND NOT EVEN BOTHER TRYING IF YOU DONT HAVE THE PASSWORD or MFG MASTER PASSWORD:

HDDUNLOCKER = its $50 im not paying

A-FF Repair Station = again, its $50 and im not paying

hdparm linux commands = Secure Erase and all those commands are worthless without a password

HDDERASE.exe = still need the password

HDDHACKR.exe = wouldn’t dump sectors 16-21 for me due to NO DRQ error.  i suspect this is related to hooking up to a motherboard drive controller that isnt compatible.

Victoria = still need the password

MHDD 4.6 = You need the mhdd.exe scripts anyways.  download and find dump, dump2 and dump48 scripts in the zip file called “mhdd.zip”. google it.  it also contains a perfect 512byte cs.bin file.  I tried for 2 days to get the scripts to dump my hex password 22.bin file  but they wouldn’t.  I could never get past the NO DRQ or DRIVE ERROR msg in the last line of the dump scripts.  READ ON BRAVE UNLOCKER!  there is a way!

MFG MASTER PASSWORDs: Didn’t work for me.  I suspect this is because this drive came from a secure bizhub konica minolta copier and the MASTER pw was changed from  default.   ‘WDCWDCWDCWDCWDCWDCWDCWDCWDCWDCWD’ , ‘h20insyde’ and all the rest did not work BUT YOU SHOULD PROBABLY TRY THEM IN MHDD FIRST! here is a list:

SEAGATE -> “Seagate” +25 spaces

MAXTOR series N40P -> “Maxtor INIT SECURITY TEST STEP ” +1 or +2 spaces series N40P -> “Maxtor INIT SECURITY TEST STEP F” series 541DX -> “Maxtor” +24 spaces series Athena (D541X model 2B) and diamondmax80 -> “Maxtor”

WESTERN DIGITAL -> “WDCWDCWDCWDCWDCWDCWDCWDCWDCWDCWD”

FUJITSU -> 32 spaces

SAMSUNG -> “ttttttttttttttttttttttttttttttttt” (32 times t)

IBM series DTTA -> “CED79IJUFNATIT” +18 spaces series DJNA -> “VON89IJUFSUNAJ” +18 spaces series DPTA -> “VON89IJUFSUNAJ” +18 spaces series DTLA -> “RAM00IJUFOTSELET” +16 spaces series DADA-26480 (6,4gb) -> “BEF89IJUF__AIDACA” +15 spaces

HITACHI series DK23AA, DK23BA and DK23CA -> 32 spaces

TOSHIBA -> 32 spaces For xbox hdds try “XBOXSCENE” or “TEAMASSEMBLY” too

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BASICALLY HERE ARE THE INSTRUCTIONS:

SOFTWARE YOU DO NEED!:   zu = THIS IS THE MAGIC program.  As far as I know it ONLY WORKS ON WESTERN DIGITAL HARD DRIVES (although I could be wrong). You may download ZU WD Drive Unlocker here: Add to CartView CartBuy Now


You will be emailed a download link after checkout. No Guarantees. No Refunds. No Support. No Returns. All Transactions are FINAL. Do not contact me about refunds. There aren’t any. I didn’t write it, it will either work or it won’t. I do not make any money from this, your small donation is used to offset server costs…

(optional) MHDD 4.5 = still need the password to UNLOCK, but it tells you everything you need to know about the state of the locked drive.  Run from a bootable ISO cd or USB key.  DONT USE VERSION 4.6 that is in Hiren’s Boot CD.  GOOGLE AND FIND VERSION 4.5.  Google the file mhdd32ver4.5.iso, and create a bootable cd or usb out of it.

1. plug the drive into an older sata motherboard computer.

2. set your BIOS sata controllers to the most NATIVE and non AHCI or RAID mode you can.

3. Boot to your mhdd iso cd that you created.  This sets the DOS environment and memory manager and stuff.

4. MHDD -> press Shift+F3 and choose your drive.  if its not listed then either edit \mhdd\cfg\mhdd.cfg to enable the controllers or use another computer/motherboard/controller.

5. MHDD -> Press Shift+F2 to view the drive properties, it should say LOCKED (Note: it may also tell you the SECURE ERASE time in minutes.  Mine was ’80 Minutes’.  this is important to note)

6. Exit MHDD with ALT+X.  You should now drop to dos.

7. Run ZU.  you will obviously have to copy the file over, this is why i use a USB drive to boot my ISO, i can copy the file to the USB drive, Boot my ISO using YUMI Bootloader, Exit MHDD, change dos path to ‘C:\’ and then run my C:\ZU.exe program

try them all ‘ZU /’ or ZU /S or ZU /A, one of them should start and not error.

If you get an error or ‘Drive still locked’ msg then try a different command ie ZU /A

If you get something that says ‘ELAPSED TIME xxxxxxx’ then LET IT RUN FOR AS MANY MINUTES AS DENOTED IN step 5.  I let mine run for over 80 minutes.

So, after 80 minutes nothing happeded.  I hit CTRL+C and exited out of ZU.

Then I ran MHDD again, picked the drive using Shift+F3, then checked the status with Shift F2.  Then I exited MHDD

FINALLY, i ran ZU.exe /P as my drive was on the primary controller.  This time it worked! ZU betta reported ‘DRIVE UNLOCKED’ and i was able to now format, partition and otherwise use the drive as normal!

SUCCESS! WD SATA HARD DRIVE UNLOCKED!

In the previous release were actually  simple methods remove passwords. To remove the password on HDD HGST / IBM and Native Hitachi (cery _DK23DA, _DK23FA ..)
 they should be transferred to the so-called SafeMode.
 Support in this mode, and implemented with ZU2
 Since the screws go into this specialized treatment for different times (eg Native Hitachi to 2 minutes), for convenience, is now at the start of ZU, runs per second output message like ELAPSED 00:00:22 (00:00:23 ..) with naturally occurs poll preparedness on the specified parameter kanale.  poll if it continues obscenely long You can simply press any key. Work prg.budet finished with the message UNLOCK NOT DONE.
 To distinguish between vendors vvedny 2 qualifier
 "." for HGST / IBM
 "8" for Native Hitachi.
 Ie the type of command would for example be in the form
 ZU / S. :) battle with HGST on Secondary channel
 ZU / P8 disclaim NativeHitachi on Primary
 Translation SafeMode performed in different ways.
 From jumpers to PATA (for HGST) to "closing" NVRAM or special points on the PCB.
 In general, you can just try to power the controller otkruchenny from HDA.
 (Or unscrew the two screws on the side opposite the controller interface and slightly lift it
 toothpick :))
After ZU detect the drive and attack him, the PWG. will signal to Native Hitachi message "NOW YOU CAN SCREW IT IN.PRESS ANY KEY WHEN READY".
 HGST Message "POWER OFF / ON AND EXECUTE ZU AGAIN".
 In the first case, you just need [to the controller in place] neatly back bolts and press any key.
 In the second, turn off the power to fasten the controller to power the HDD and run ZU again with the same
 For IBM / HGST (ExcelStore) supported models from DTLA to HTS7225xxK9SA00 (5K250)

Building Grendel’s 3dpVert for Sidewinder Joystick

I’m building the circuit now. Got the Teensy micro controller for the prjc store. The capacitors and resistors I got off eBay for less than $5 delivered. I will note that I should have bought a half sized breadboard, this one won’t fit in the USB hub case I’m going to use to encase the 3dpVert circuit.

20121009-195801.jpg

20121010-002746.jpg

20121010-002757.jpg