China Arduinos an Mac OSX betreiben

Erste Tests mit der CNC Fräse sind abgeschlossen und das gute Stück ist vom Büro in das Bastelzimmer gewandert. Dort steht aber im Moment kein PC zur Steuerung und ich muss die Steuerung übergangsweise mit meinem MacBook regeln.

Mein Desktop PC hatte keinerlei Probleme mit dem Arduino Uno Clone zu sprechen. Mein MacBook allerdings weigerte sich das USB Gerät auch nur zu erkennen. Der Mac akzeptiert scheinbar den virtuellen FTDI Controller des China-Arduinos nicht und will nur mit den originalen Controllern sprechen.

Um das zu umgehen muss man selbst einen usb-to-serial Treiber installieren: Download – Link

Im Anschluss muss man noch das kext-signing von Mac OSX deaktivieren:

sudo nvram boot-args=“kext-dev-mode=1″

Im Anschluss ein Reboot des Mac und men Arduino Clone wurde erkannt und konnte verwendet werden.

! Achtung, das kext signing ist ein wichtiges Sicherheitsfeature von OSX und sollte nicht deaktiviert werden. Nur im Notfall verwenden und lieber einen originalen Arduino kaufen.

[twoclick_buttons]


Präsenz / Anwesenheitserkennung Smart Mirror – Geofence

Eigentlich wollte ich die Anwesenheitserkennung meines Smart Mirrors über einen Bluetooth Ping regeln, was sich aber leider aufgrund von Problemen mit dem Bluetooth Stack bluez als nicht machbar herausgestellt hat. Ich habe hier darüber geschreiben.

Das schöne am l2ping wäre die sehr einfache Implementierung gewesen und man wäre nicht auf das Smartphone als Partnergerät angewiesen gewesen. Auch Geräte wie z.B. Wearables hätte man einbinden können.

Geofence

Mit Apps wie z.B. Geofency (iPhone) oder EgiGeoZone (Android) kann man einen virtuellen Zaun um den eigenen Wohnort ziehen und bei dessen Betreten und Verlassen Events triggern.

Ich habe meine App Geofency so eingerichtet, dass mein Smartphone beim Betreten des Grundstücks eine URL mit Parametern auf meinem Smart Mirror aufruft und dort ein Flag setzt, das für meine Anwesenheit steht.

Damit der Smart Mirror nicht nur auf meine Anwesenheit sondern auch auf die meiner Freundin reagiert, ist der HDMI Port nur dann aus, wenn wir beide nicht anwesend sind.
Auf dem Smart Mirror läuft ein Webserver mit einem .php Script, das die Befehle unserer Geofence Apps entgegennimmt und verarbeitet. Es werden die Befehle unterteilt in die Zugehörigkeit von „Silvan“ und „Sabine“ sowie „Ist anwesend – 1“ und „Ist abwesend – 0“.

Die beiden Werte werden in zwei Textdateien festgehalten auf die im weiteren Schritt ein Code Snippet zugreift, das den Innhalt auswertet und den HDMI Port abschaltet, sobald beide Werte auf „Ist abwesend – 0“ stehen.

Geofency arbeitet mit POST und EgiGeoZone mit GET. Deshalb muss ich beide Varianten auswerten.

In dem Code Snippet sind noch Log- und Diagnosefunktionen auskommentiert, die bei der Einrichtung helfen und euch z.B. die ID zeigen mit der sich das iPhone meldet.

Zu beachten ist, dass die Logfiles auf dem Apache die entsprechenden Zugriffsrechte besitzen und der Gruppe www-data gehören.

Bildschirmfoto 2016-03-21 um 00.00.10

geofence.php

<?php
        //print_r($_POST);
if(isset($_GET['entry'])){
$entry=$_GET["entry"];
$device=$_GET["device"];
$name=$_GET["name"];
$id=$_GET["id"];
}
 
else if(isset($_POST['entry'])){
$entry=$_POST["entry"];
$device=$_POST["device"];
$name=$_POST["name"];
$id=$_POST["id"];
}else{
$entry="";
$device="";
$name="";
$id="";
}
 
if ($device == "D07D3xxx-Bxxx-4xxx-Bxxx-4BE759DE9xxx"){
        if($entry == 1)
                file_put_contents("silvan.log", "1");
        else
                file_put_contents("silvan.log", "0");
        }
 
if ($device == "sabine"){
        if($entry == 1)
                file_put_contents("sabine.log", "1");
        else
                file_put_contents("sabine.log", "0");
        }
 
$t_sabine = file_get_contents('sabine.log');
$t_silvan = file_get_contents('silvan.log');
 
if ($t_sabine == "1" || $t_silvan == "1")
        exec("sudo /var/www/html/modules/geofence/onoff.sh 1");
else
        exec("sudo /var/www/html/modules/geofence/onoff.sh 0");
 
//    $filename = "geofence.log";
//    file_put_contents($filename, $_POST, FILE_APPEND);
?>

onoff.sh

Das Script „onoff.sh“ wird entweder mit den Parametern „1“ (on) und „0“ (off) aufgerufen und steuert den HDMI Port.

#!/bin/bash
if [ $1 == "0" ]
 then
 vcgencmd display_power 0
 else
 vcgencmd display_power 1
fi

[twoclick_buttons]