Category: DIY Projekte

MagicMirror v2 – Major update

The first major update of the MagicMirror project is currently in active development! Version 2.0 now supports modules which makes using my extensions simpler than ever before. My helper-scripts now no longer have to be started by init.d or systemd but instead get loaded by the mirrors software automatically.

I am currently rewriting my modules for the new system, already published and useable are the following:

Happy hacking and I am open for new ideas! 🙂

MagicMirror – Voice Control

Icon License: Linkware (Backlink to http://www.pelfusion.com required)Spracherkennung

I just startet to implement some basic voice control by using annyang for my MagicMirror. Since annyang uses the Google APIs for speech recognition I do not really want the mirror to send a constant audiostream to Google, instead I plan on using my facial recognition system to toggle the voice controlling. If a face is detected in front of the mirror it will be turned on and if not it will stay turned of. Right now you can only ask the mirror what time it is and it can tell you some Chuck Norris jokes but of course I will be adding some more useful stuff soon.

You can find the code here: MMM-Voice-Control

I love it, when I open my mail application in the morning and the first thing I see is an email from a fellow MagicMirror builder asking a question or telling me something about his mirror. It’s definitely the main reason I love open source projects so much, the amazing community!

Magic Mirror – Face Recognition and general Update

After being absent from this blog for quite some time, I’d like to give you a quick update on my mirror project. The filesystem of my Raspberry Pi’s SD-card got corrupted some time ago and I haven’t found the motivation to reinstall the system and all my scripts since then, well at least not until two days ago. Because I had to setup the system from scratch again anyway I used the opportunity to use the newest Raspbian version “Jessie” this time and also to match my modified mirror interface code with the original from Michael Teeuw again. Some thoughts about the new Linux version: I really like the way systemd handles process managing and starting, seems a lot simpler to me than it was before but that’s not the topic today.

A few months ago I took the code from the Raspberry Pi Face Recognition Treasure Box and modified it in a way so that it’s no longer just able to recognize one valid face but to differentiate between multiple faces and therefore to know who’s standing in front of the mirror. The python script  is now constantly trying to match people to a known set of trained faces and if one is recognized displays a welcome message and personalized information for that user.

Because the number of my components and running processes keeps increasing, I sketched a quick schematic yesterday to not loose sight of who is talking to whom.
Software:Hardware magischer Spiegel

On the bottom of the software side, we have the mirrorcontroller. It is responsible for all kind of GPIO-stuff, like monitoring the motion sensor and a button. In the future it will also controls the colors of some RGB LED’s I will use for lighting up the person in front of the mirror but that’s still to be implemented. If something moves, a relay turns on the display and a signal is send to the face recognition service, which then starts to take pictures and searches them for faces. If the service recognizes a face the data is send to the SocketIOServer, which further sends it to the web interface to display the welcome message and the information for the user. Other features of the SocketIOServer are:

  • Online Banking, to show the users current bank balance
  • Collecting statistics from my Vimeo-videos
  • Investigating how much space is still left on my server
  • Detecting incoming calls via the Fritz!Box (a German internet router and phone system) call monitor
  • Pulling invoices my clients still need to pay from Invoice Ninja

In a future update I will also add gathering my ToDo’s from Wunderlist but until now that’s it.

The Magic Mirror – Update

_MG_3464

I replaced the Raspberry Pi 1 model A with a Pi 2 model B. The mirror is now stating up at more than twice the speed and the animations of the interface also got a bit smoother.
Pi2

Because semitransparent mirrors logically don’t reflect as much as real ones, I decided to add some LED lighting behind milk glass inside the mirror’s housing, to lighten up the person in front of it and therefore making him or her more visible.
LEDs Spiegel

The light is activated through a button. A short press triggers the light, a longer button press switches between two views of the web interface.
Schalter Spiegel

Node.js – Python Bridge

The method I used to transfer information from my Python script over to my Node.js script by using zerorpc kind of worked but every time the scripts were running for some time they suddenly stopped transferring my data for no apparent reason. Since I wasn’t really a fan of the way I setup the connection in the first place, I didn’t bother finding a solution for my problem and directly started looking for a different way altogether and thanks to John Hobbs I found one. Searching for examples on how to use UNIX sockets I found this article  and after I left a comment on his blog, John Hobbs quickly added a socket server written for Node.js, which could then successfully communicate with my Python script.

import RPi.GPIO as GPIO
import os, os.path
import socket

GPIO.setup(27, GPIO.IN)

def node_bridge(command):
    if os.path.exists( "/tmp/python_node_bridge" ):
        client = socket.socket( socket.AF_UNIX, socket.SOCK_STREAM )
        client.connect( "/tmp/python_node_bridge" )
        client.send( command )
        client.close()
    else:
        print "Couldn't Connect!"

def switchview(27):
    node_bridge("switchview")

try:
    GPIO.add_event_detect(27, GPIO.FALLING, callback=switchview, bouncetime=600)
    while 1:
        time.sleep(100)
var io = require('socket.io').listen(1234);
var net = require('net');

var server = net.createServer(function(python_bridge) {
  python_bridge.on('data', function(data) {
    if(data.toString() == "switchview") {
      io.sockets.emit('switchview');
    }
  });
});
server.listen("/tmp/python_node_bridge");
var socket = io.connect('http://localhost:1234');
view = "view1";

function switchview() {
  if (view == "view1") {
    $('#view1').fadeOut(700);
    $('#view2').fadeIn(700);
    view = "view2"
  } else if (view == "view2") {
    $('#view2').fadeOut(700);
    $('#view1').fadeIn(700);
   view = "view1"
  }
};

socket.on('switchview', function () {
  switchview();
});

These three pieces of code switch between different views for displaying different kind of information on my mirror UI after pressing a Button.

The Python script monitors the GPIO-Pin and waits for the 3.3V to drop to 0V, it then sends a message to my Node.js script, which sends a message to the web interface where the different views are then triggered by a JavaScript function.

Copyright © 2024 MeType

Theme by Anders NorenUp ↑