Here’s an interesting use of a Raspberry Pi to control the PSU on a server. [Martin Peres] is going to be away for a few months and still wants access to his PC. This isn’t really all that tough… it’s what SSH is made for. But he also wants lower-level access to the hardware. Specifically he needs to control and get feedback on what the PSU is doing, and even wanted to have access to the serial console without having to go through the computer’s NIC.
The image above shows one part of his solution. This is a custom Ethernet port that connects to his Rasberry Pi header breakout board. Inside the computer the jack is wired to the motherboard power LED to give feedback about the current state of the power supply. It also patches into the green wire on the PSU, which lets him turn on the power by pulling it to ground. After working out the cable routing he developed a web interface that makes it easy to interact with the setup.
As with other hacks along these lines letting an embedded computer run 24/7 is a lot less wasteful than leaving a PC on. That’s a concept we can really get behind.
I like it, a poor man’s BMC. I’m sure the whole setup costs less than the option to add one to a commercial server.
Next step would be to piggyback on the SMBUS to read the motherboard sensors.
Well the RPI is $50, I imagine you could make a wake over lan solution for cheaper, I’m not sure but I bet some routers support that, or maybe a basic netbook would work too.
Yeah, WOL makes more sense. Install ddwrt on any router, ssh in, and run /usr/sbin/wol -i -p
WOL doesn’t do shutdown though.
LOL if the computer is on already why would you need WOL? You could just shut it down with anything (remote desktop protocol, VNC, LogMeIn, etc.).
You can shutdown it via ssh.
I think it can, UPS systems can issue a shutdown command to computers on a network, I’m not sure if it is something software based or not though,
WOL and S5 don’t generally work together well.
The raspberry pi isn’t 50, it’s $25.
+1 on the BMC.
HP 54L BMC = 60 GBP
RPi = 30 GBP
BMC will do VNC all the way from BIOS to OS, temp, voltage and fan RPM monitoring, SNMP, remote CD emulation, remote serial and other things I’ve forgotten.
This is a nice hack – but at the end of the day you get a hell of a lot more with a BMC. Of course your server has to support it. IPMI / vPRO+AMT FTW.
You could do full blown BNC with rpi. You would need
$5 USB Video grabber
$14 vga to video Converter
some code to emulate ps2 keyboard/mouse with rpi GPIOs or additional ATTINY.
Yes, it wont be perfect, but it will work and still be cheaper than HP thingie :)
I’ve never seen a USB video grabber for less than twice that. Similar for the VGA / video converter, only seen those for MUCH more! Where are you getting your prices?
I suppose one might FPGA something up to use HDMI, over in projects-that-never-happened land.
But wouldn’t it be easier to just install software to do the screencapping? For the boot sequence, I think quite a few servers can divert the BIOS screens to a serial port.
ebay, both almost first results with free shipping
gotta love china
I’ve done firmware development for servers for a little while. I too have learned how useful a BMC can be and would love to duplicate some of the functionality as some sort of inexpensive add in for commodity hardware.
Video redirection is one of the few things this needs to be a real powerful tool.
It might be beyond hacker level, but being able to connect a raspi to the system’s PCIe interface and have it present an option ROM to the system (or two in order to cover legacy 16 and UEFI systems), there is a lot more things that would be possible :)
Google has been kind enough to write an option ROM (sgabios) that allows a serial port to display the text portion of the video interface and emulate a keyboard. For textmode only servers this is great, as you can get BIOS-to-prompt control of a system.
If you’re lucky enough to have a board supported by Coreboot, this is easy, but if you don’t you might be able to abuse an old PCI NIC’s option ROM socket.
Check your BIOS for ‘legacy serial redirection’, it may already have this feature. For something like Linux and some MS server OSes, they can do a seamless handoff of this serial port so you keep a text console seamlessly from preboot through bootloader through to the OS.
We might get to see new systems start to make use of networking in the not to distant future to provide a preboot console interface without the need for add in hardware.
@matt:
sgabios uses int 10h like some of the commercial BIOS legacy redirection, so it gets shut down once the IDT gets rewritten by the kernel. Anyway I thought it might be a good option stuffed into an option ROM somehow for BIOSes that don’t have it. Since OP didn’t have the option for a BMC like most servers do, I’d be surprised if he had the option for serial redirection in BIOS. It’s been a while since I’ve had my hand in BIOS, but I think AMI makes you pay extra for all but a very basic legacy redirection module in Aptio, and consumer board OEMs don’t like paying for anything but the bare minimum…
This is why I really like u-boot’s netconsole.
Sure, ssh in is great. I had a BFG graphics card act burn up whilst I was away for 2weeks in China. No more ssh. Nothing a remote power switch could contol either. Of course, this could be any part in a chain of low cost vendors in a PC that could send the machine south. HDs, cards etc.
Bitcoin mining? Know the feeling! A crash when away is gutting!
an easier and more extendible option is to set your bios to start the server after power failure. Then it is a matter of relay switching (multiple projects for home automation/remote light switching available). multiple relays give control over multiple pc’s without soldering when replaced.
That said, it is a cool and integrated solution.
But with this you could force power off if the software crashes.
I think that was Bitflusher’s idea. Have some relays, controlled by a networked-up microcontroller, in the mains power lines to each server. So a simple login and command to your MCU can cut the power. Then power back on, and the PC sorts itself out, as per the BIOS settings he mentions. Bit ugly. but practical.
A refinement would be to tie in with the power button on the front of the PC. Use a relay, or just a transistor, to simulate pressing the power button, from the MCU I mention. Then if it doesn’t seem to have worked, cut the power for real. Or cut the power anyway after a minute or so to shut down.
That’s basically what I did. I wanted to use an external relay for cutting the PSU’s power supply, but relays require some power to operate and I was afraid the power supply for my RPi wouldn’t be sufficient (USB cable connected to a USB switch).
Seriously though, what you propose is very close to what I provide. Except that I decided to go for the RPi instead of a networked-up µc. But if you know about an of-the-shelf µc with ethernet capabilities cheaper than the RPi, I’m interested!
The RPi’s benefit too is that is runs Linux and I was able to set up a real nice web service (written in C++/Wt) with updates handled in a push-fashion. So, the logs and the state of the LED are updated in real time!
Yes you could do the same thing with a Pogo plug, Arduino, or hacked router. Still a neat hack with a Pi because it is not expensive and frankly you could add other functions to it.
Or have a wifi/internet router running your favorite flavor of -WRT and then use WOL (Wake-on-Lan – https://en.wikipedia.org/wiki/Wake-on-LAN ).
To make it even more environmentally friendly, make sure to setup a sleep/shutdown timeout on the computer so that it turns off when idle.
Here’s another interesting link with more details: http://www.dd-wrt.com/wiki/index.php/WOL
but remember, the point is to have fun doing it !
Something like the small expandable up to 8 port – mains relay gadget I built a few years ago with addressable outputs controlled over serial / USB serial. (PIC 16F628 / FT232 / Crydom SSRs)
One configuration option is to have the serial/USB port monitor for a heartbeat from a host – and if it times-out – then output 0 turns off for 10 secs, and powers on again (if it was on previously – with appropriate beeps and warnings!)
Hey, thanks for featuring my project on Hackaday.
For people suggesting me to use WoL or any other software-based solution, there is one thing you must know about this computer. This computer is used for the sole purpose of reverse engineering nvidia cards. I work on power management and fiddle with the clocks. Often, when I crash a card, everything just freezes (BIOS included) and the only option that’s left for me is to unplug the power plug.
This isn’t a big deal usually, but now that I am away of the computer, I needed to be able to cut the power remotely –> that’s the hack :)
For the full story, check out my website: http://mupuf.org/blog/2013/05/11/wtrpm-a-web-based-wt-suite-to-power-up-slash-down-your-computers/
Have you considered a hardware watchdog? Your chipset may already have one built in, and if not it should be easy enough to rig your RasPi to do the deed.
Yeah, I considered it (it is explained in the full article) and I actually used that on the other computer (cathaou) because I didn’t have time to build the circuit for it. The problem is that I haven’t tested how reliable it is and when I’m reverse engineering, I don’t want to wait 30 seconds before the computer reboots (yes, I crash the computer THAT often). Oh, and using a software solution doesn’t tell you when you computer is booting or why it doesn’t boot. The LED indicator + the serial console help for that.
Hey, thanks for featuring my project on Hackaday.
For people suggesting me to use WoL or any other software-based solution, there is one thing you must know about this computer. This computer is used for the sole purpose of reverse engineering nvidia cards. I work on power management and fiddle with the clocks. Often, when I crash a card, everything just freezes (BIOS included) and the only option that’s left for me is to unplug the power plug.
This isn’t a big deal usually, but now that I am away of the computer, I needed to be able to cut the power remotely –> that’s the hack :)
For the full story, check out my website: http://mupuf.org/blog/2013/05/11/wtrpm-a-web-based-wt-suite-to-power-up-slash-down-your-computers/
Why did you not also use the hardware reset? Seems easier than the power and should work as well most of the time. That way you could save the big power down for really major events.
Wake-on-LAN can do the other half, and Reset-on-LAN is the other half:
http://www.i3detroit.com/reset-on-lan-an-ethernet-aware-remote-reboot-device-from-junkbox-parts/
After publishing that, I discovered that there was prior art called Whack-on-LAN:
http://www.cs.utah.edu/flux/papers/whol-ftn-draft1.pdf
You can do this for $12 with a HP lights out board
Where do you suppose he could find one for $12 that works with this motherboard?
Hello
I think you are just wasting a lot of money for this…
this is what i made and use for my website server:
http://avrmp.com/site/?p=184
it costs less than 5$ if you get freesamples from microchip and atmel, or if not maximum cost is 15$ !!! and it never crashes!
Well done! This is indeed what I should have done.
The main reason I went for the RPi was that I didn’t have much time available to work on the hw-side of things (I can only work on that at my hackerspace, one night every week). But since I got a RPi, I also use it to get a serial console on this server along with some other small services.
Anyway, you did a very good job with your project!
Hello..
Thank you… and you can use serial port on the atmega 8 or add inoute/outputs tooo, and yeop thats right haha…
it “never crashes” untill you sent more than couple of KiloBytes to it :)
Did you ever work with those SPI ethernet modules? try fuzzing one.
and $20 is TPlink 703N territory
Yes i have done and never crashed for me! but raspberry pi crashes a lot of times! I have had both and work with both arm,avr micro controllers too and they are super good and cheap .
You are so right. I bought some cheap rs232/usb adaptors and they are doing such a poor job! I’ll check with a pricier one soon and see if they help!
WOL is great and everything but it only works if the computer is in a state that will allow being woken up. Sometimes, it is useful to reboot a machine, and this does that job very well. I have wanted a remote management solution for a desktop PC that I use as a server for a long time and this does the trick. Of course it would be nice to remotely view the video output too, and allow remote keyboard/mouse so that BIOS changes can be made, but that is less necessary (My requirement does not justify server class hardware).
It’s quite cool. Although wouldn’t auto-boot (bios feature) and one NC relay work (spliced into the power), than all these features?
Yes it would. But why trust the BIOS, if you design the suite to be able to control this relay, you can control the PSU and the power button just as easily.
The problem with having a relay is that I have very limited power available (the RPi is driven by USB) and I was afraid it would drain too much current. In the end, driving the PSU was easier and safer (not dealing with 230V).
One little SNAFU in waiting is having an RJ45 port right near where the real Ethernet port should be. At least, it’d be good to know that neither end would fail too disastrously if you plugged a real network cable in. That’s the reason computers used to have so many different shaped and sized sockets! You might want to think about using some otherwise-unused type of socket, maybe a D-type or DIN or whatever else. It doesn’t matter what I suppose, since it’s all slow signals and low DC voltages.
That’s a valid proposition, but I had many ethernet cables and could salvage some ethernet connectors hence why I went this way.
I’ve had remote management servers (the tiny chip providing the BMC, iKVM, etc) crash. That’s quite an annoyance because they are separate from the front chassis power-button, and requires literally yanking the plug to fix. This (with external relays) would reboot them.
I did something similar but more limited in scope. Had a remote machine that I would connect to over dail-up only (no internet service where it was). Basically, I put together a separate DC power source, a 4017 decade counter, a 555 timer, and a relay hooked up to the reset switch on the remote machine and to the phone line looking for a ring signal. Remote machine was supposed to answer on the 6th ring. The counter counted each ring, and if the remote PC didn’t answer by the 8th ring (i.e., machine was locked up or unresponsive), it would close the reset switch for about 4 seconds and reboot the remote PC. I just had to wait a couple minutes and dial in again.