Montag, 18. Dezember 2017

Raspberry Pi 2 - Funksteckdosen steuern

Die Idee war folgende...

Ich kaufe mir ein Raspberry Pi und hoste auf diesem eine Website, auf die ich mit allen Geräten im Heimnetzwerk zugreifen kann. Die Website soll mittels php shell_exec Befehl meine GPIO Pins ansteuern an dem wiederum ein Funksendemodul angeschlossen ist. Der Funksender sendet vordefinierte Bitfolgen los, die eine Steckdose als AN oder AUS Signal interpretiert.

Hauptkomponenten:

1x Raspberry Pi 2
1x MicroSD Karte (Class 10)
1x 433 MHz Funkmodul
1x Funksteckdosenset ELRO AB440S

Diese Komponenten können auch durch vergleichbare Bauteile ausgetauscht werden.
Bei den Funksteckdosen kann es höchstens sein das ihr etwas herumprobieren müsst bis ihr die richtige Bitfolge zum An und Ausschalten herausgefunden habt.


Raspberry Pi vorbereiten & konfigurieren

Betriebssystem installieren

Zuerst brauchen wir natürlich ein Betriebssystem, dass auf dem Raspi läuft. Hier könnt ihr euch eines aussuchen, das euch gefällt. Ich habe mich für RASPBIAN JESSIE entschieden. Nach dem Herunterladen könnt ihr das Zip Archiv entpacken und ihr werdet eine Image Datei finden. Anschließend nehmt ihr die microSD Karte, steckt diese in einen Kartenlesegerät und verbindet dieses mit eurem PC. Nun müsst ihr das Tool Win32 Disk Imager von hier herunterladen. Nachdem ihr das Programm installiert und als Admin gestartet habt könnt ihr den Laufwerksbuchstaben eurer microSD Karte auswählen und die Image Datei die ihr vorher entpackt habt. Jetzt nur noch auf die Schaltfläche "Write" klicken und warten bis der Vorgang abgeschlossen ist.


SSH Zugriff einrichten

Das Betriebssystem ist ab jetzt komplett funktionsfähig. Also nehmt ihr die microSD Karte und steckt diese in den dafür vorgesehenen microSD Karten Slot im Raspi und stöpselt zusätzlich ein Netzwerkkabel und einen Bildschirm an. Jetzt könnt ihr dem Gerät mit einem handelsüblichen microUSB Kabel Saft geben und das Raspberry wird beginnen zu booten. Damit wir für jede neue Konfiguration am Betriebssystem nicht immer aufs neue zum Raspberry Pi rennen müssen wollen wir einen SSH Zugriff einrichten. Alle Schritte hierzu findet ihr hier super erklärt.

Apache und PHP installieren

Um eine Website im Netzwerk zu hosten wollen wir als nächstes einen Webserver hosten. Dazu updaten wir das System zuerst und installieren anschließend Apache2 und PHP.

sudo reboot

1 Minute warten bis der Raspberry wieder gebootet hat und anschließend wieder über SSH verbinden. Folgende Befehle "updaten" das System.

sudo apt-get update
sudo apt-get dist-upgrade
sudo groupadd www-data
sudo usermod -a -G www-data www-data
sudo apt-get install apache2 apache2-doc apache2-utils
sudo apt-get install libapache2-mod-php5 php5 php-pear php5-xcache


Wenn die Installation erfolgreich beendet wurde könnt ihr in das Verzeichnis /var/www/html eure Website hosten.
Diese ist dann im kompletten Netzwerk über folgenden Link erreichbar:

192.168.155.1/index.php
<ip_des_raspi>/<name_der_php_datei>.php


Website die Bash Code ausführt

Um einen der GPIO Pins ein Signal zu geben wollen wir nun im oben genannten Verzeichnis eine php Datei erstellen die Bash Code ausführen kann. Der php Befehl dafür lautet exec().

Also eine PHP Datei in /var/www/html/ anlegen. Ich habe diese einfach mal index.php genannt. Außerdem legen wir eine Shell Datei an die später die Pins steuern soll (sudo_bash.sh). In die Dateien schreibt ihr folgenden Code:

index.php:
<html>
  <head>
  </head>
 
  <body>
    <form action="index.php" method="POST">
    <input name="bash" type="submit" value="Bash Befehl starten" /> 
    </form>

    <?php
  
 if(isset($_POST['bash'])) 
 { 
 exec('sudo /var/www/html/port_control/sudo_bash.sh tv_an');
 } 
  
    ?>
  </body>
</html>


sudo_bash.sh:
#!/bin/bash

case "$1" in
    tv_an)
        rcswitch-pi/send 10000 1 1
    ;;
    tv_aus)
        rcswitch-pi/send 10000 1 0
    ;;
    pc_an)
        rcswitch-pi/send 01000 1 1
    ;;
    pc_aus)
        rcswitch-pi/send 01000 1 0
    ;;
    licht_an)
        rcswitch-pi/send 00100 1 1
    ;;
    licht_aus)
        rcswitch-pi/send 00100 1 0
    ;;
   *) echo "ERROR: invalid parameter: $1 (for $0)"; exit 1 ;;
esac

exit 0


Im nächsten Schritt wollen wir WiringPi und RCSwitch installieren. Dazu führen wir folgende Befehle aus:


cd /var/www/html/
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

cd ..
git clone https://github.com/r10r/rcswitch-pi.git
cd rcswitch-pi
make



Um nun einen der GPIO Pins am Raspberry auf HIGH oder LOW zu stellen verwenden wir folgenden Code:

sudo ./send (Systemcode)(Steckdosennummer)(Zustand 1 An, 0 Aus)



Ein Beispiel um eine Steckdose, die wie im Bild konfiguriert wurde zu schalten wäre dann also:


sudo ./send 10000 10000 1

Montag, 6. März 2017

SAPUI5 ältere Version laden (Eclipse)

Vielleicht hattet ihr auch schon des Öfteren das Problem, dass manche Funktionen von SAPUI5 bzw. OpenUI5 in eurer lokal installierten Version nicht verfügbar sind. Auch kann es natürlich vorkommen, dass ihr lokal eine andere Version wie auf dem SAP Netweaver Gateway installiert habt.
Es kann viele Gründe geben weshalb ein Downgrade oder Upgrade der UI5 Version Sinn macht. Leider ist das gar nicht so einfach möglich. Den für mich komfortabelsten Weg möchte ich euch hier kurz darstellen.

In eurem Projekt befindet sich eine index.html Datei. Dort findet ihr auch einen Codeabschnitt ähnlich wie:

<script
 id="sap-ui-bootstrap"
 src="resources/sap-ui-core.js"
 data-sap-ui-theme="sap_bluecrystal"
 data-sap-ui-libs="sap.m">
</script>

Hier ersetzt ihr einfach den src Tag mit einem Link der zu eurer gewünschten Version passt. Also könnte das ganze bei Version 1.40.17 wie folgt aussehen:

<script
 id="sap-ui-bootstrap"
 src="https://sapui5.hana.ondemand.com/1.40.17/resources/sap-ui-core.js"
 data-sap-ui-theme="sap_bluecrystal"
 data-sap-ui-libs="sap.m">
</script>

Um immer die aktuellste Version zu ziehen benutz man folgende URL im src Tag:
https://sapui5.hana.ondemand.com/resources/sap-ui-core.js

Samstag, 10. Dezember 2016

Excel - Einerkomplement mit führenden Nullen aus Binärzahl bilden (invertieren)

Hallo zusammen,
heute habe ich für euch eine kleine aber feine Excel Formel mit der ihr aus Binärzahlen das Einerkomplement bilden könnt. Manche sagen dazu auch "invertieren" wobei ich diesen Begriff hier nicht wirklich angebracht finde.

Beispiele:

11111110 -> 00000001
10101010 -> 01010101
01110000 -> 10001111
...


Die Formel:
= TEXT ( DEZINBIN ( 255 - BININDEZ ( A1 ) ); "00000000" )

Zur Erläuterung:

BININDEZ(A1)
Umrechnungsfunktion von Binär nach Dezimal - A1 ist die Zelle in welcher der ursprüngliche Wert steht.

DEZINBIN(#WERT#)
Umrechnungsfunktion von Dezimal nach Binär - Die "255-#WERT#" ist die eigentliche "Invertierung"

TEXT(#WERT#, "00000000")
Führende Nullen werden angezeigt. Bei 4 Bitzahlen als Parameter natürlich nur "0000".

Dienstag, 23. Februar 2016

C# CredentialPicker - Windows 8 Metro App

CredentialPickerOptions options = new CredentialPickerOptions()
{
 
  AuthenticationProtocol = AuthenticationProtocol.Basic,
   CredentialSaveOption = Windows.Security.Credentials.UI.CredentialSaveOption.Hidden,
   CallerSavesCredential = false,
   Caption = "SAP Login",
   Message = "Bitte geben Sie Ihre SAP Anmeldedaten an",
   TargetName = "."

}; 
CredentialPickerResults results = await CredentialPicker.PickAsync(options);

Sonntag, 21. Februar 2016

Marienkäfer "steht auf" Elektronik


Arduino - tone() - Super Mario Intro


Piezo Buzzer
Ich selbst war auch auf der Suche nach einer Anleitung wie man auf einfachste weise einen Piezo Buzzer zum laufen bekommt. Bei meinen Google Recherchen bin ich leider meistens nur auf viel zu komplexe und umständliche Lösungen gestoßen. Deshalb will ich euch im folgenden zeigen wie es mir letztendlich am einfachsten schien.

Die Funktion mit der wir arbeiten wollen heißt tone() und wird standardmäßig von der Arduino IDE unterstützt. Sie generiert eine Rechteckschwingung mit der als Parameter angegebenen Frequenz.
Außerdem kann die Länge des Tons als Parameter mitgegeben werden. Wird dies nicht gemacht wird solange bis die Funktion notone() ausgeführt ein Ton ausgegeben. Das Signal, welches durch die Funktion tone() an einem ebenfalls als Parameter definierten Pin anliegt kann ein Piezo Buzzer verwenden um damit einen Ton zu erzeugen. Damit das Signal auch wirklich korrekt ankommt muss ein PWM Pin verwendet werden.

Hinweis: Es kann immer nur 1 Ton gleichzeitig mit dem Arduino Board ausgegeben werden

Für alle AVR Boards gilt:
Minimale Frequenz: 31 Hz
Maximale Frequenz: 65535 Hz

Syntax
tone ( pin, freuquenz, dauer );

Der erste Parameter Pin sollte klar sein. Hier soll der Pin stehen, den ihr am Plus-Pol des Piezo Buzzers angeschlossen habt stehen.

Der zweite Prameter Frequenz sollte eine Zahl zwischen 31 und 65535 sein. Diese Angabe entspricht der Einheit Herz.

Der dritte Parameter Dauer entspricht der anzahl der Millisekunden, die der Ton ausgegeben werden soll.


Als Beispiel habe ich hier das Super Mario Intro verwendet. Für fast alle Melodien finden sich im Internet zahlreiche Hilfen wenn ihr zum Beispiel "Super Mario Song Frequencies" oder ähnliches bei Google sucht.

Beispiel:

tone(piezoPin, 660, 100) ; 
delay(150);
tone(piezoPin, 660, 100) ; 
delay(300);
tone(piezoPin, 660, 100) ; 
delay(300);
tone(piezoPin, 510, 100) ; 
delay(100);
tone(piezoPin, 660, 100) ; 
delay(300);
tone(piezoPin, 770, 100) ; 
delay(550);
tone(piezoPin, 380, 100) ; 
delay(575);
noTone(piezoPin);