09.12.2021
Raspberry Pi as a 3g (Huawei E303) wireless (Edimax ESet up the Raspberry Pi as a wireless router using the Raspbian OS. The internet connection will be provided by a Huawei E303 USB 3g dongle on the safaricom network in Kenya, though the setup should be similar on most Huawei dongles and 3g networks. The wireless access point will be provided by an Edimax Nano USB Wifi adapter.
The USB ports of the Pi seem to struggle to provide the power for a 3g dongle, so a powered USB hub is necessary.
After a lot of reading and messing around, I’ve come up with a step by step guide for setting up my Pi as a wireless internet router. I use this every time I make a fresh setup of Raspbian, which is a fairly regular event. Stumbling round my latest install like a drunken elephant, it never takes me long to screw something up so badly that it’s easier just to start from scratch.
As such, this guide assumes that the Raspbian operating system is ‘fresh’. It has been tested with the 2012-12-16 release - as soon as I have the time free, I’ll update the guide for the newest release. So, the steps I use to set up the ‘Pifi’ Router are as follows:
Step 1: Make sure the Pi can see the 3g Dongle
Gather Information
To get more information about the USB devices connected to the Pi, we use the command ‘lsusb’. Open a terminal window and type:
lsusb
should give an output similar to this:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 008: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub
Bus 001 Device 005: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS\]
Bus 001 Device 006: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
lsusb lists the usb devices connected to the Pi, either directly or through the hub. I’ve highlighted the parts of the output that indicates the 3g dongle can be seen by the Pi. Yours should look similar to this, although it will vary from model to model - most 3g dongles on the market seem to be a Huawei of one flavour of another at the moment. So long as there is a mention of ‘modem’ or ‘UMTS’, you should be laughing. What you don’t want to see is this:
Bus 001 Device 004: ID 12d1:1f01 Huawei Technologies Co., Ltd.
This is an issue that arises because your 3g dongle has a small partition on it containing the ‘dashboard’ software for windows. Your Pi has detected this partition, and labeled the dongle as a storage device before it had chance to notice the 3g modem waving its arms frantically in the background.
This happened occasionally with my 3g dongle - I would suggest following the next step even if you are feeling smug about your lsusb output at the moment. The next time you reboot your Pi it could detect your dongle as a storage device, throwing you into a fit of depression. Dangerous times
This can all be overcome with the use of usb_modeswitch. To install, in the terminal window type:
sudo apt-get install usb-modeswitch ppp wvdial
The clue is in the name - its going to switch the mode of the usb device from ‘storage’ to ‘modem. Yaaaaay. You need to give it some direction though, which will require some googling. The hexidecimal values highlighted here:
Good: Bus 001 Device 006: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Bad: Bus 001 Device 004: ID 12d1:1f01 Huawei Technologies Co., Ltd.
tell the operating system the vendor ID and device ID. More information on USB identification can be found on the debian wiki. Notice that the first 4 characters of the device ID (vendor ID) are the same in both examples, but the last 4 (device ID) have changed. Usb-modeswitch forces the operating system to use the combination that corresponds to the 3g modem.
usb-modeswitch usage
Die Zahlenkolonne “12d1:1f01” liefert die Hersteller- und Produkt-ID. 12d1 steht also hier für Huawei, 1446 für den Stick selbst. Der Stick muss nun mit Hilfe des Tools usb_modeswitch auf den Modemmodus umgestellt werden. Der dafür notwendige Befehl sieht so aus:
usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000100000000000000000000'
Diese 12d1:1f01 Nummer ist wichtig. 12d1 ist der Hersteller und 1f01 ist das Produkt. In meinem Fall ist das dass CD-ROM.
After usb-modeswitch has installed, an entry for your 3g dongle has to be made in /etc/usb_modeswitch.conf. If your device has already been detected, you can find the Device ID in the output from ’lsusb’ - the portion highlighted in the examples above. If, however, you have the ‘bad’ example in your output, you need to find the correct Device ID (second part) for your 3g dongle - a good bet is a google search for ‘3g dongle model number usb_modeswitch’. Failing that, the search function of the usb-modeswitch forums. Your model number can normally be found somewhere on the device - try popping the cover off and looking for a sticker near where you insert the sim if you cant find it on the outside. We can assume the first part (vendor ID) is correct in both situations.
After a bit of research, the information I had to amend to the config file amounted to this:
For debugging of the automated system integration, edit (as root or su) /etc/usb_modeswitch.conf in a text editor and change the line
EnableLogging=0
to
EnableLogging=1
This gives you a verbose output of the hotplug activity to /var/log/usb_modeswitch_.
DefaultVendor = 12d1
DefaultProduct = 12d1:1001
MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000 000000000000"
oder:
DefaultVendor = 0x12d1
DefaultProduct = 0x1f01
TargetVendor = 0x12d1
TargetProduct = 0x1001
MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000 000000000000"
weiteres Beispiel:
DefaultVendor=0x19d2
DefaultProduct=0x2000
TargetVendor=0x19d2
TargetProduct=0x2002
MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"
MessageContent3="55534243123456702000000080000c85010101180101010101000000000000"
Once you have found the correct device ID, copy and paste the information above into a text editor. Amend the information to suit your own setup, deleting the bottom two lines if they are not needed - I’m not going to claim to understand the MessageEndPoint or MessageContent fields: They were part of the solution I found here - credit goes to krishnamohan of the fedoraforum.org site. Your device may or may not require them. Make sure to include the ‘0x’ before the vendor and device IDs - this lets the Pi know that they are hexidecimal values.
To add this information to the usb-modeswitch config file, open the file for editing by issuing the following command in the terminal window:
sudo vi /etc/usb_modeswitch.conf
Paste the Device ID information from the text editor to the bottom of the config file you just opened in the terminal window. Enter :wq to exit and save changes.
Reboot your Pi and run ’lsusb’, observing the output - if you found the right Device ID, you should see something to the ‘good’ output example shown above.
Änderung dauerhaft speichern
Allerdings ist nach einem Neustart alles wieder wie vorher. Um die Änderung dauerhaft zu speichern und nicht nach jedem Reboot usb_modeswitch bemühen zu müssen, legt man sich die Datei /etc/udev/rules.d/70-usb-modeswitch.rules mit folgendem Inhalt an (jeweils wieder mit angepassten IDs):
eigene udev-Regeln fuer Huawei UMTS Sticks
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446",
RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1446 -M '55534243123456780000000000000011062000000100000000000000000000'"
Damit bleibt der Modemmodus auch nach einem Reboot aktiv (genauer: Er wird nach Anstecken des Sticks automatisch wieder aktiviert).
Fonic: Name: Fonic
APN: pinternet.interkom.de
Proxy: Nicht festgelegt
Port: Nicht festgelegt
Nutzername: Nicht festgelegt
Passwort: Nicht festgelegt
Server: Nicht festgelegt
MMSC:
[http://10.81.0.7:8002](http://10.81.0.7:8002)
MMS-Proxy: 82.113.100.6
MMS-Port: 8080
MMS-Protokoll WAP 2.0
MCC: 262
MNC: 07
Authenthfizierungstyp: CHAP
APN-Typ: Nicht festgelegt
Step 2: Download and setup ppp, UMTSKeeper and Sakis3g
pppd
The ppp package will install the point to point protocol daemon, which will manage the connection between you and your 3g provider. The package can be installed via the terminal with the command:
sudo apt-get install ppp
Nothing further needs to happen with pppd, it should just sit there in the background, as a daemon is supposed to, waiting for Sakis3g to poke it in the ribs. Want to learn more? Here is a link to the Wikipedia page on daemons in linux.
UMTSKeeper
UMTSkeeper is used to automatically reconnect the 3g dongle using the Sakis3g script should the connection drop, which actually happens with monotonous regularity in Kenya.
Download and unpack UMTSkeeper by issuing the following commands from the terminal window:
sudo mkdir umtskeeper
cd umtskeeper
sudo wget "http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz"
sudo tar -xzvf umtskeeper.gz
sudo chmod +x umtskeeper
The first command created a folder called ‘umtskeeper’ in the current directory you are in. To confirm what this directory is, type ‘pwd’. Make note of the output, as we will need the full path to automate UMTS keeper later. Now we will download Sakis3g into the same directory to keep things simple.
Sakis3g
Sakis3g is a script used to make a 3g connection. You need to be able to provide a few details: your APN, the PIN for your sim card and your username and password if your provider requires them. This information can (hopefully) be found on your providers website or in the documentation that came with your simcard/dongle. If not, a search on google for ‘your provider APN settings’ should unearth them.
The sakis-3g.org website has been down for some time. Fortunately somebody has uploaded a copy of the script to sourceforge. To download and unpack it, issue the following commands from the terminal window:
sudo wget "http://downloads.sourceforge.net/project/vim-n4n0/sakis3g.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fvim-n4n0%2Ffiles%2F&ts=1363537696&use_mirror=tene~t" -O sakis3g.tar.gz
sudo tar -xzvf sakis36.tar.gz
sudo chmod +x sakis3g
Before going further, you should attempt to make a 3g connection using the sakis3g script alone, proving everything you’ve done up till now works. Sakis3g has an interactive mode, which will prompt you for information regarding your 3g connection. In the terminal window, type:
./sakis3g --interactive
and follow the prompts on screen. If you have no APN user or password, enter ‘0’. Once a connection has been made, make sure you can browse the internet, or issue a ping from the terminal window:
ping -c 4 google.com
Now test UMTSkeeper. The command at first may look a bit confusing (the details are for my connection):
./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1001' APN='CUSTOM_APN' CUSTOM_APN='pinternet.interkom.de'
SIM_PIN='6648' APN_USER='nix' APN_PASS='nix'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no'
Let’s check operations, ha open log in other window:
tail /var/log/umtskeeper.log -f 2015-07-01 10:37:38 Start: interval=4\*8s Internet status: Modem plugged, not connected to internet. 2015-07-01 10:38:27 Internet connection is DOWN. Calling Sakis3G connect... Sakis3G cmdLine: nice ./sakis3g connect --sudo --console USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1003' APN='CUSTOM_APN' CUSTOM_APN='internet' SIM_PIN='1234' APN_USER='megafon' APN_PASS='megafon' Sakis3G says... E1550 connected to MegaFon (25002). 2015-07-01 17:51:20 Testing connection... 2015-07-01 17:51:37 Success... we are online!
Now we will edit / etc/rc.local for start when loading system:
nano /etc/rc.local
/root/3g/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1003' APN='CUSTOM_APN' CUSTOM_APN='internet'
SIM_PIN='1234' APN_USER='megafon' APN_PASS='megafon'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' &
Also we will check up after reboot.
Breaking it down a little, these are the areas that you will need to change:
USBMODEM: The Device ID we found using the lsusb command earlier CUSTOM_APN, APN_USER, APN_PASS, SIM_PIN: Information about your sim card and your providers data network.
A full breakdown of the paramaters can be found on the UMTSKeeper site..
Once you are satisfied UMTSKeeper is working in harmony with Sakis3g, we can edit /etc/rc.local so that it starts when the operating system boots. In the terminal window, type:
sudo vi /etc/rc.local
and add the following single line, edited to show your path to the umtsfolder you found with the ‘pwd’ command earlier:
PATH GOES HERE/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN'
CUSTOM_APN='safaricom' SIM_PIN='1234' APN_USER='saf' APN_PASS='data'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no' &
Exit, saving changes.
Step 3: Setup Wireless Access Point
The final hurdle involves setting up the wireless access point.
The chiipset in the Edimax Wifi adapter does not work ‘out of the box’ as an access point, so the process is a little disjointed. One step at a time:
Install ‘hostapd’ specifically built for Edimax adapter
hostapd manages the authentication on your wireless network. The version in the debian repositories in not compatible with the Edimax adapter - thankfully someone has put together a version which includes the correct drivers.
Follow this guide to install the updated version of hostapd.
The guide mentions creating a configuration file. This should contain the following:
interface=wlan0
ssid=NAME OF YOUR WIRELESS NETWORK GOES HERE
channel=10
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8188CUS
manufacturer=Realtek
wpa=2 # This sets the security settings to WPA2
wpa_passphrase=PASSWORD FOR NETWORK GOES HERE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
# Other settings
beacon_int=100
auth_algs=3
wmm_enabled=1
Step 4: Configure NAT
NAT allows many clients on your private network to use the single public (internet side) ip address of the 3g dongle. The config for this part is stolen from the elinux.org guide.
First, edit the file /etc/sysctl.conf and add the following line to the bottom of the file:
net.ipv4.ip_forward=1
This will enable NAT in the kernel. Second, run the following commands:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Your Pi is now NAT-ing. To make this permanent so you don’t have to run the commands after each reboot, run the following command:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
Now edit the file /etc/network/interfaces and add the following line to the bottom of the file:
up iptables-restore < /etc/iptables.ipv4.nat
Step 5: Configure wireless interface and DHCP
The Edimax adapter needs to be given a static IP address. In the terminal window, type:
sudo nano /etc/network/interfaces
Amend the wlan0 entry so it looks like this:
# /etc/network/interfaces
allow-hotplug wlan0
iface wlan0 inet static
address 10.0.0.1
network 10.0.0.0
netmask 255.255.255.0
To turn our Pi into a DHCP server, we will install dnsmasq from the terminal:
sudo apt-get install dnsmasq
Once dnsmasq has been installed, we need to edit its config file. As usual, from the terminal:
sudo nano /etc/dnsmasq.conf
amend these 2 lines to the end of the config file:
interface=wlan0dhcp-range=10.0.0.2,10.0.0.10,255.255.255.0,12h
These lines set the DHCP server to listen on wlan0, and hand out a 12 hour lease to a maximum of 9 clients. If you need more clients, increase the number highlighted.
Fingers crossed!
Your Pi has now been configured to connect automatically to your providers 3g network via the USB dongle, and set the Edimax adapter as a wireless access point for up to 9 clients on the 10.0.0.0 network.
Now cross your fingers, reboot your Pi and try to connect from one of the client machines! If it doesn’t work or you receive any errors during any of this guide, please leave a comment and I’ll do my best to help you.
Dynamic-DNS Client-Software auf dem RaspberryPI einrichten
Als Software zum abgleichen empfehle ich ddclient - darüber könnt ihr auch mehrere verschiedene Dynamic-DNS abgleichen lassen, mit nur einer Software
Es gäbe aber auch andere Programme wie zum Beispiel inadyn
ddclient installieren:
apt-get install ddclient
Bei der Installation werdet ihr bereits gefragt welchen Anbieter ihr verwenden wollt und ob der Abgleich über eine externe Seite stattfinden soll usw - das könnt ihr aber erstmal ignorieren und einfach überall drücken, da wir das gleich sowieso bearbeiten werden
ddclient prüft standardmässig alle 300 Sekunden, also 5 Minuten, ob sich die IP der Dynamic-DNS von der aktuellen Internet-IP unterscheidet. Eigentlich reicht dieser Intervall aber wer unbedingt meint das ändern zu müssen kann dies in der Datei /etc/default/ddclient anpassen - aber beachtet das ihr das keinesfalls unter 60 Sekunden stellt da ihr sonst wegen ‘abuse’ (Missbrauch) vom Anbieter gesperrt werdet!
Die Konfigurationsdatei befindet sich hier /etc/ddclient.conf und würde für DynDNS.org wie folgt aussehen:
protocol=dyndns2
use=web, web=checkip.dyndns.com, web-skip='IP Address'
server=members.dyndns.org
[email protected]
password='bla'
meine-host.dyndns.tv
Für NO-IP.com würde /etc/ddclient.conf etwas anders aussehen:
use=web, web=checkip.dyndns.com, web-skip='IP Address'
server=members.dyndns.org
[email protected]
password='bla'
meine-host.dyndns.tv
protocol=noip
use=web, web=checkip.dyndns.com, web-skip='IP Address'
server=dynupdate.no-ip.com
[email protected]
password=’bla’
meine-host.redirectme.net
..Damit würdet ihr gleichzeitig eine DyDNS.org und eine NO-IP.com updaten
Der ddclient wird mit dieser Konfiguration so eingestellt das eine externe Webseite genutzt wird um eure aktuelle Internet IP-Adresse zu ermitteln. Das liegt daran das die IP-Adresse des Raspberry Pi eine interne ist und über das Internet nicht direkt angesprochen werden kann.
Bevor der Dienst gestartet wird, sollte getestet werden, ob auch alles funktioniert. Leider ist der ddclient sehr sprachlos, wenn etwas nicht funktioniert. Man muß ihm also mit ein paar Parametern und dem manuellen Aufruf alle Informationen entlocken:
ddclient -daemon=0 -debug -verbose -noquiet 2 /etc/ddclient.conf
Der Aufruf zeigt sowohl die Ermittlung der eigenen IP durch die angegebene Website als auch Anmeldung und Aktualsierung des IP-Eintrages.
Nach erfolgreichem Test kann der Dämon nun per
/etc/init.d/ddclient restart
neu gestartet werden um die geänderte Konfiguration zu übernehmen
Weitere Infos zu freedns.afraid.org:
ddclient - Client Requirement: Perl
ddclient supports many services, including ‘freedns’
Sample config:
daemon=5m
timeout=10
syslog=no # log update msgs to syslog
#mail=root # mail all msgs to root
#mail-failure=root # mail failed update msgs to root
pid=/var/run/ddclient.pid # record PID in file.
ssl=yes # use ssl-support. Works with # ssl-library
use=if, if=eth0
server=freedns.afraid.org
protocol=freedns
login=login_name
password=the_password
somedomain.mooo.com
# Sample #2
# use=your_router #If supported, can be listed with ddclient --help
# server=freedns.afraid.org
# protocol=dyndns1
# login=login_name
# password=the_password
# somedomain.mooo.com
Using ddclient for afraid.org requires ddclient version 3.8.1 (that’s the latest version available) and “protocol” *must* be set to “freedns”. Using ddclient 3.8.0 produces weird results and a couple of protocol options sort-of work, but not really. Maybe you can update your info for the benefit of the next person struggling with setting ddclient.
Username" must be lowercase or else you will receive “could not authenticate” error.
Beispiel für /etc/ddclient.conf:
# Configuration file for ddclient generated by debconf
# /etc/ddclient.conf
pid=/var/run/ddclient.pid
protocol=dyndns2
use=if, if=ppp0
# use=web, web=checkip.dyndns.org
server=members.dyndns.org
login=loginname
password=geheim
dyndnsdomainname1.dyndns.org,dyndnsdomainname2.dyndns.org
oder man wiederholt die Konfiguration des ddclient-Paketes in einem Terminal mit
sudo dpkg-reconfigure ddclient
Eine zweite Konfigurationsdatei für ddclient ist die /etc/default/ddclient. In dieser Datei wird festgelegt, wie ddclient arbeiten soll. Es gibt zwei Modi:
- “Daemon”: Im Daemon- oder Dienst-Modus läuft ddclient permanent im Hintergrund und überwacht, ob sich die Internet-Adresse ändert.
- “Dial-on-demand”: In diesem Modus wird ddclient automatisch aufgerufen, sobald eine Internetverbindung aufgebaut wurde. Dieser Modus eignet sich besonders gut, wenn man eine Internetverbindung nutzt, die nur bei Bedarf hergestellt wird.
# Configuration for ddclient scripts
# generated from debconf on Do Jan 12 22:54:36 CET 2006
#
# /etc/default/ddclient
# Set to "true" if ddclient should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand run_ipup="false"
# Set to "true" if ddclient should run in daemon mode run_daemon="true"
# Set the time interval between the updates of the dynamic DNS name in seconds.
# This option only takes effect if the ddclient runs in daemon mode.
daemon_interval="300"
Sollten Probleme auftreten, kann man mit dem folgenden Befehl Debug-Informationen ausgeben lassen:
ddclient -daemon=0 -debug -verbose -noquiet
ddclient mit PPPoE
Aktualisieren beim Verbindungsaufbau über PPPoE: Es ist möglich, beim Aufbau oder Trennen der Verbindung Befehle automatisch ausführen zu lassen. Dazu muss die Datei /etc/ppp/ip-up.local angelegt werden. Als Befehl müsste in diesem Fall bspw. einfach nur
#!/bin/bash
ddclient
eingetragen werden.
Reverse SSH
For remote connection to PwnPi through 3G we will adjust a raising of Reverse SSH of the tunnel (the server with public IP are for this purpose necessary).
That PwnPi were connect to the server in an automatic mode, without password entry, on PwnPi private/public keys and we will copy a public key on the server:
ssh-keygen
scp /root/.ssh/id_rsa.pub root@<lxu.io>:/root/
On the server (if it are Debian) we will add a public key in the list of the authoriz:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
We will try to be connect to the server with PwnPi:
ssh root@<lxu.io>
Connection should happen without request of the password. In a case if the password are all the same request and connection with usage of keys are adjust for the first time, it are necessary to set access rights to this file (and a folder as a whole):
chmod 755 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Now we will install the tunnel with redirection of ports. From PwnPi:
ssh -q -N -R 1221:localhost:22 root@<lxu.io>
With server side now the port 1221 waited for connections, but only on the interface 127.0.0.1:
netstat -an |grep 1221 tcp 0 0 127.0.0.1:1221 0.0.0.0:* LISTEN
With server side we will check up connection through Reverse SSH, ha connect to local port:
ssh root@localhost -p 1221
If all are correct, after password entry of the root user of system of PwnPi we should get access to PwnPi. With server side we will resolve redirections of ports for all interfaces:
nano /etc/ssh/sshd_config GatewayPorts yes
Now it are necessary, that sshd re-reading a configuration file. Let’s look, what PID at it:
ps aux|grep sshd
...
root 23511 0.0 2.1 9920 5376 ? Ss 13:09
0:00 /usr/sbin/sshd
...
Also we will send it a signal of HUP:
kill -hup 23511
tail /var/log/sshd.log
Now after establishment of connection with PwnPi we will see that process expected connection on all interfaces:
netstat -an -p |grep 1221 tcp 0 0 0.0.0.0:1221 0.0.0.0:* LISTEN 21990/ sshd: root
Let’s create the scenario for auto start and we will grant to it the rights to execution:
nano /root/reverse_ssh_tunnel.sh
#!/bin/sh
USERHOST=root@<lxu.io>
RPORT=22 # Порт SSH сервера
FPORT=1221 # Порт, который будет открыт на сервере
CONN=localhost:22 # Порт SSH Listener на PwnPi
COMMAND="ssh -q -N -R $FPORT:$CONN $USERHOST -p $RPORT"
pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND
ssh $USERHOST -p $RPORT netstat -an | egrep "tcp.*:$FPORT.*LISTEN">/dev/null 2>&1
if [ $? -ne 0 ] ; then
echo "Restarting connection"
pkill -f -x "$COMMAND"
$COMMAND
else
echo 'Connection OK'
fi
chmod +x reverse_ssh_tunnel.sh
Let’s add a line with instructions to launch every minute in crontab:
crontab -e \*/1 \* \* \* \* /bin/sh /root/reverse_ssh_tunnel.sh
Automatic saving of the data in Evernote
There was many variants for automatic transmission and data storage, from traditional mail before popular cloudy services, from Google Drive to Evernote. To send the data in Evernote it are possible by means of the utility of Geeknote (www.geeknote.me):
wget http://www.geeknote.me/dist/geeknote_latest.deb
sudo dpkg -i geeknote_latest.deb
geeknote login
Let’s specify the data for an input in Evernote (it are necessary to make only once if the user did not change). Let’s create a new notebook and we will add test record:
geeknote notebook-create --title "PwnPi data"
geeknote create --notebook "PwnPi" --title "Test" --content "Test note"
Geeknote supported automatic synchronization of text files in the specif directory by means of the utility of gnsync enter into a packet. For synchronization it are necessary for launch with the following keys (the directory are synchroniz / root):
gnsync --path /root --mask *.log --notebook "PwnPi"
Control through SMS
Unfortunately, operation 3G at us did not differ stability. So as addition it are possible to implement transmission of commands (for example, reboots) and notification messages by means of SMS with usage of a packet of Gammu.
apt-get install gammu
gammu-config
#In the menu we will install port/dev/ttyUSB1 (for 3G dev/ttyUSB0 were adjust/). Let's request the description of the device:
gammu --identify
root : /dev/ttyUSB1
Manufacturer: Huawei : E1550 (E1550)
Firmware : 11.608.12.10.209
IMEI : 351911043904005
Номер SIM (IMSI) : 250026700613366
It are possible to include a mode of monitoring and we will try to send the test message:
gammu --monitor # echo "test from PwnPi" | gammu sendsms TEXT +7
For Russian (yunikodny lokal in PwnPi by default it are not expos) it are possible to use a key - unicode.
Reception of SMS
#For obtaining of SMS it are necessary to install
apt-get install gammu-smsd
#And to specify the same port of the 3G-modem in a configuration:
nano /etc/gammu-smsdrc [gammu\]?port=/dev/ttyUSB1
#Let's launch as service and we will look at log:
gammu-smsd --daemon? # tail -f /var/log/syslog
#Enter messages was sav in a folder:
cd /var/spool/gammu/inbox && ls IN20130402_193338_00_+7<xxx>_00.txt
#Inside the receiv text of SMS contained. Let's create the scenario for execution of commands from SMS. In an example more low, when obtaining the text of 'uptime' the message with result of execution of a command of uptime are sen to the sender:
nano smscheck
#!/bin/bash
for file in \`ls /var/spool/gammu/inbox\`
do
cmd=\`cat /var/spool/gammu/inbox/$file\`
case "$cmd" in? "uptime")
echo \`uptime\` > /var/spool/gammu/outbox/OUT+7<xxx>.txt
;;
esac
rm -f /var/spool/gammu/inbox/$file
done?
chmod +x smscheck
As in folder/var/spool/gammu/inbox our test messages already should lie, we will launch this scenario and we will be convinc that he sent the necessary message. Let’s add it in crontab with periodicity of execution one minute by means of the following record:
crontab -e \*/1 \* \* \* \* /home/pi/smscheck
We overloaded system and we checked operability of our configuration.
Who tracked the follow-up
In the modern microcontrollers a row of the means rais reliability of operation of embeddable devices in an unattended mode could be appl. One of the mechanisms intend for this purpose — the hardware watchdog-timer, allow to reboot the device of hangup in case of it. The program, which operability should be check, periodically should drop this timer. If it stopped it to do, the timer will exceed threshold value, and on on the processor the signal of reset will be g. In Linux the software of support of watchdog consisted of two parts: the driver of the watchdog-timer and the watchdog-demons supervis operability of system as a whole.
Watchdog-driver
Loading of the unit of the driver:
sudo modprobe bcm2708_wdog
Adding in the list of autoloadable modules:
echo "bcm2708_wdog" | sudo tee -a /etc/modules
The Watchdog-timer started at discovery of the device. Reset it are carr out by sending of any character. The character of V disconnected the timer. To be convinc of operability it are possible so:
cat > /dev/watchdog
Now from reboot the system are separat only by input of lines with the keypad (the command of cat transferred the typ text line by line). Input of the character of V with the subsequent will stop reverse counting.
Watchdog-demon
Das Paket der Watchdog bestand aus zwei Dämonen: die simplif - wd_keepalive und dem core. Damit ist die Hilfe, die es möglich, nicht nur Belastung des Systems, sondern auch solche Parameter wie Lautstärke überwachen
zugänglicher Lagerung, Zugang zu separaten Dateien, die Verfügbarkeit von Websites, auf Befehl ping und eine Reihe von anderen.
apt-get install watchdog
# Einstellungen
update-rc.d watchdog defaults
# Hinzufügen zum Startup
# Für die Einstellungen in der Datei /etc/watchdog.conf ist Auskommentieren einiger Zeilen notwendig
# nano /etc/watchdog.conf
watchdog-device = /dev/watchdog max-load-1 = 24
# Manueller Start-Modus
/etc/init.d/watchdog start
Watchdock Check
Die einfachste Möglichketi die Bedienbarkeit von Watchdog zu testen ist die sog. “Fork-Bomb auf der Befehlszeile:
: (){ :|:& };:
Das System wird dadurch sehr schnell nicht mehr reagieren und wenn alles korrekt eingestellt ist wird das system in wenigen Sekunden rebooten.
Unabhängige Strom Versorgung
Raspberry Pi mit dem angeschlossenen und aktiven Wi-Fi-Adapter (D-Link DWA-140 B2) und 3G (Huawei E1550) verbraucht etwa in der Größenordnung von 700-800 mA Strom. Erhältlich sind mittlerweile Akkus die eine Kapazität von 20 Amperstunden über die Dauer von einem Tag bieten.
Aim:
Set up the Raspberry Pi as a wireless router using the Raspbian OS. The internet connection will be provided by a Huawei E303 USB 3g dongle on the safaricom network in Kenya, though the setup should be similar on most Huawei dongles and 3g networks. The wireless access point will be provided by an Edimax Nano USB Wifi adapter.
Power Source -------->RPI ----> Powered USB HUB -----> 3g Dongle | | Edimax Wifi
The USB ports of the Pi seem to struggle to provide the power for a 3g dongle, so a powered USB hub is necessary.
After a lot of reading and messing around, I’ve come up with a step by step guide for setting up my Pi as a wireless internet router. I use this every time I make a fresh setup of Raspbian, which is a fairly regular event. Stumbling round my latest install like a drunken elephant, it never takes me long to screw something up so badly that it’s easier just to start from scratch.
As such, this guide assumes that the Raspbian operating system is ‘fresh’. It has been tested with the 2012-12-16 release - as soon as I have the time free, I’ll update the guide for the newest release. So, the steps I use to set up the ‘Pifi’ Router are as follows:
This guide and more like it can be found on my blog.
Step 1: Make sure the Pi can see the 3g Dongle
Gather Information
To get more information about the USB devices connected to the Pi, we use the command ‘lsusb’. Open a terminal window and type:
lsusb
should give an output similar to this:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 008: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub Bus 001 Device 005: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS] Bus 001 Device 010: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
lsusb lists the usb devices connected to the Pi, either directly or through the hub. I’ve highlighted the parts of the output that indicates the 3g dongle can be seen by the Pi. Yours should look similar to this, although it will vary from model to model - most 3g dongles on the market seem to be a Huawei of one flavour of another at the moment. So long as there is a mention of ‘modem’ or ‘UMTS’, you should be laughing. What you don’t want to see is this:
Bus 001 Device 010: ID 12d1:14d1 Huawei Technologies Co., Ltd.
This is an issue that arises because your 3g dongle has a small partition on it containing the ‘dashboard’ software for windows. Your Pi has detected this partition, and labeled the dongle as a storage device before it had chance to notice the 3g modem waving its arms frantically in the background.
This happened occasionally with my 3g dongle - I would suggest following the next step even if you are feeling smug about your lsusb output at the moment. The next time you reboot your Pi it could detect your dongle as a storage device, throwing you into a fit of depression. Dangerous times
This can all be overcome with the use of usb_modeswitch. To install, in the terminal window type:
sudo apt-get install usb-modeswitch
The clue is in the name - its going to switch the mode of the usb device from ‘storage’ to ‘modem. Yaaaaay. You need to give it some direction though, which will require some googling. The hexidecimal values highlighted here:
Good: Bus 001 Device 010: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
Bad: Bus 001 Device 010: ID **12d1:14d1** Huawei Technologies Co., Ltd.
tell the operating system the vendor ID and device ID. More information on USB identification can be found on the debian wiki. Notice that the first 4 characters of the device ID (vendor ID) are the same in both examples, but the last 4 (device ID) have changed. Usb-modeswitch forces the operating system to use the combination that corresponds to the 3g modem. usb-modeswitch usage
After usb-modeswitch has installed, an entry for your 3g dongle has to be made in /etc/usb_modeswitch.conf. If your device has already been detected, you can find the Device ID in the output from ’lsusb’ - the portion highlighted in the examples above. If, however, you have the ‘bad’ example in your output, you need to find the correct Device ID (second part) for your 3g dongle - a good bet is a google search for ‘3g dongle model number usb_modeswitch’. Failing that, the search function of the usb-modeswitch forums. Your model number can normally be found somewhere on the device - try popping the cover off and looking for a sticker near where you insert the sim if you cant find it on the outside. We can assume the first part (vendor ID) is correct in both situations.
After a bit of research, the information I had to amend to the config file amounted to this:
DefaultVendor = 0x12d1 DefaultProduct = 0x1506 MessageEndPoint = "0x01" MessageContent = "55534243000000000000000000000011060000000000000000 000000000000"
Once you have found the correct device ID, copy and paste the information above into a text editor. Amend the information to suit your own setup, deleting the bottom two lines if they are not needed - I’m not going to claim to understand the MessageEndPoint or MessageContent fields: They were part of the solution I found here - credit goes to krishnamohan of the fedoraforum.org site. Your device may or may not require them. Make sure to include the ‘0x’ before the vendor and device IDs - this lets the Pi know that they are hexidecimal values.
To add this information to the usb-modeswitch config file, open the file for editing by issuing the following command in the terminal window:
sudo nano /etc/usb_modeswitch.conf
Paste the Device ID information from the text editor to the bottom of the config file you just opened in the terminal window. Hit Ctrl+X, y, Enter to exit and save changes.
Reboot your Pi and run ’lsusb’, observing the output - if you found the right Device ID, you should see something to the ‘good’ output example shown above.
Step 2: Download and setup ppp, UMTSKeeper and Sakis3g
pppd
The ppp package will install the point to point protocol daemon, which will manage the connection between you and your 3g provider. The package can be installed via the terminal with the command:
sudo apt-get install ppp
Nothing further needs to happen with pppd, it should just sit there in the background, as a daemon is supposed to, waiting for Sakis3g to poke it in the ribs. Want to learn more? Here is a link to the Wikipedia page on daemons in linux.
UMTSKeeper
UMTSkeeper is used to automatically reconnect the 3g dongle using the Sakis3g script should the connection drop, which actually happens with monotonous regularity in Kenya.
Download and unpack UMTSkeeper by issuing the following commands from the terminal window:
sudo mkdir umtskeeper
cd umtskeeper
sudo wget "http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz"
sudo tar -xzvf umtskeeper.gz
sudo chmod +x umtskeeper
The first command created a folder called ‘umtskeeper’ in the current directory you are in. To confirm what this directory is, type ‘pwd’. Make note of the output, as we will need the full path to automate UMTS keeper later. Now we will download Sakis3g into the same directory to keep things simple.
Sakis3g
Sakis3g is a script used to make a 3g connection. You need to be able to provide a few details: your APN, the PIN for your sim card and your username and password if your provider requires them. This information can (hopefully) be found on your providers website or in the documentation that came with your simcard/dongle. If not, a search on google for ‘your provider APN settings’ should unearth them.
The sakis-3g.org website has been down for some time. Fortunately somebody has uploaded a copy of the script to sourceforge. To download and unpack it, issue the following commands from the terminal window:
sudo wget "http://downloads.sourceforge.net/project/vim-n4n0/sakis3g.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fvim-n4n0%2Ffiles%2F&ts=1363537696&use_mirror=tene~t" -O sakis3g.tar.gz sudo tar -xzvf sakis36.tar.gz sudo chmod +x sakis3g
Before going further, you should attempt to make a 3g connection using the sakis3g script alone, proving everything you’ve done up till now works. Sakis3g has an interactive mode, which will prompt you for information regarding your 3g connection. In the terminal window, type:
./sakis3g --interactive
and follow the prompts on screen. If you have no APN user or password, enter ‘0’. Once a connection has been made, make sure you can browse the internet, or issue a ping from the terminal window:
ping -c 4 google.com
Now test UMTSkeeper. The command at first may look a bit confusing (the details are for my connection):
./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='safaricom' SIM_PIN='1234' APN_USER='saf' APN_PASS='data'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no'
# Breaking it down a little, these are the areas that you will need to change:
USBMODEM: The Device ID we found using the lsusb command earlier
#CUSTOM_APN, APN_USER, APN_PASS, SIM_PIN:
Information about your sim card and your providers data network.
A full breakdown of the paramaters can be found on the UMTSKeeper site..
Once you are satisfied UMTSKeeper is working in harmony with Sakis3g, we can edit /etc/rc.local so that it starts when the operating system boots. In the terminal window, type:
sudo nano /etc/rc.local
and add the following single line, edited to show your path to the umtsfolder you found with the ‘pwd’ command earlier:
PATH GOES HERE/umtskeeper --sakisoperators "
USBINTERFACE='0' OTHER='USBMODEM'
USBMODEM='12d1:1506'
PN='CUSTOM_APN'
CUSTOM_APN='safaricom'
SIM_PIN='1234' APN_USER='saf'
APN_PASS='data'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no' &
Exit, saving changes.
Step 3: Setup Wireless Access Point
The final hurdle involves setting up the wireless access point.
The chiipset in the Edimax Wifi adapter does not work ‘out of the box’ as an access point, so the process is a little disjointed. One step at a time:
Install ‘hostapd’ specifically built for Edimax adapter
hostapd manages the authentication on your wireless network. The version in the debian repositories in not compatible with the Edimax adapter - thankfully someone has put together a version which includes the correct drivers. Follow this guide to install the updated version of hostapd.
The guide mentions creating a configuration file. This should contain the following:
interface=wlan0
ssid=NAME OF YOUR WIRELESS NETWORK GOES HERE
channel=10
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8188CUS
manufacturer=Realtek
wpa=2
# This sets the security settings to WPA2 wpa_passphrase=PASSWORD FOR NETWORK GOES HERE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
Other settings beacon_int=100 auth_algs=3 wmm_enabled=1
Step 4: Configure NAT
NAT allows many clients on your private network to use the single public (internet side) ip address of the 3g dongle. The config for this part is stolen from the elinux.org guide.
First, edit the file /etc/sysctl.conf and add the following line to the bottom of the file:
net.ipv4.ip_forward=1
# This will enable NAT in the kernel. Second, run the following commands:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
# Your Pi is now NAT-ing. To make this permanent so you don't have to run the commands after each reboot, run the following command:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
# Now edit the file /etc/network/interfaces and add the following line to the bottom of the file:
up iptables-restore < /etc/iptables.ipv4.nat
Step 5: Configure wireless interface and DHCP
The Edimax adapter needs to be given a static IP address. In the terminal window, type:
sudo nano /etc/network/interfaces
Amend the wlan0 entry so it looks like this:
# /etc/network/interfaces Config
allow-hotplug wlan0
iface wlan0 inet static
address 10.0.0.1
network 10.0.0.0
netmask 255.255.255.0
# To turn our Pi into a DHCP server, we will install dnsmasq from the terminal:
sudo apt-get install dnsmasq
# Once dnsmasq has been installed, we need to edit its config file. As usual, from the terminal:
sudo nano /etc/dnsmasq.conf
# amend these 2 lines to the end of the config file:
interface=wlan0 dhcp-range=10.0.0.2,10.0.0.10,255.255.255.0,12h
# These lines set the DHCP server to listen on wlan0, and hand out a 12 hour lease to a maximum of 9 clients. If you need more clients, increase the number highlighted.
Fingers crossed!
Your Pi has now been configured to connect automatically to your providers 3g network via the USB dongle, and set the Edimax adapter as a wireless access point for up to 9 clients on the 10.0.0.0 network.
Now cross your fingers, reboot your Pi and try to connect from one of the client machines! If it doesn’t work or you receive any errors during any of this guide, please leave a comment and I’ll do my best to help you.
Thanks for the tutorial, but it didnt seem to work for me. I got the AP up and running but my clients were not able to use the Internet connection.
It almost drove me crazy, since I’m a linux noob and I wasn’t able to solve this…
Until I realized that there’s an error in the Nat script.
You wrote:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEP
Problem is, that at least for me, using a 3G connection, you don’t have to forward “eth0”(there is no cable plugged in anyway), but rather forward “ppp0”.
So all you got to do is to change
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEP
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEP
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
Thanks for the helpful instructable. Now I can connect my devices wirelessly to the internet here in Guinea. I had a bit of trouble getting things to work. Finally, I realized that I had a static address on the RPi that wasn’t in the range you gave here. I was connecting headless via WiFi and needed the set IP address to do that. What I did was change the range of IP addresses
In step 5. I edited /etc/network/interfaces so it now has:
# wireless adapter
allow-hotplug wlan0
iface wlan0 inet static
address 169.254.0.1
network 169.254.0.0
netmask 255.255.255.0
And then I changed the end of /etc/dnsmasq.conf to say:
interface=wlan0
dhcp-range=169.254.0.3,169.254.0.13,255.255.255.0,12h
My iptables-restore file is like following
Generated by iptables-save v1.4.14 on Sun Feb 2 01:41:20 2014
*filter
:INPUT ACCEPT [105:18135]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [99:22038]
-A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o ppp0 -j ACCEPT COMMIT
# Completed on Sun Feb 2 01:41:20 2014
# Generated by iptables-save v1.4.14 on Sun Feb 2 01:41:20 2014
*nat
:PREROUTING ACCEPT [39:3046]
:INPUT ACCEPT [23:1674]
:OUTPUT ACCEPT [28:2989]
:POSTROUTING ACCEPT [7:1539]
-A POSTROUTING -o ppp0 -j MASQUERADE COMMIT
# Completed on Sun Feb 2 01:41:20 2014
What ist wrong? DNS seems to work, clients are getting the IP from DNS but no ping, nothing is possible.
sudo tar -xzvf sakis36.tar.gz instead of sudo tar -xzvf sakis3g.tar.gz
Small typo the command for unzip of utms keeper should be sudo tar -xzvf umtskeeper.tar.gz
- http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=1734&hilit=E303
- http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=1734
- https://wiki.ubuntuusers.de/USB_ModeSwitch/
- https://playsms.org/about/
How to install a Raspberry Pi SMS Server
This tutorial will show you how you can set up an SMS server on a Raspberry Pi 2 Model B, running Raspbian.
We will use playsms and smstools. In my example, I have used a Huawei E3131 3G modem.
Raspbian Pi / Raspy
First we need to download raspbian, you can grab the latest version at https://www.raspberrypi.org/downloads/
Direct url: http://downloads.raspberrypi.org/raspbian_latest
Now we need unzip the file: 2015-05-05-raspbian-wheezy.zip:
unzip 2015-05-05-raspbian-wheezy.zip
You will get a file named 2015-05-05-raspbian-wheezy.img, this file must be written to your micro-sd card.
If you need to know some basics on how to work with raspberry pi, and writing the image to micro-sd, you could start with reading this tutorial:
Write image file to micro-sd card, on my PC the micro-sd card is seen as /dev/mmcblk0 on Linux you can use dd:
dd bs=4M if=2015-05-05-raspbian-wheezy.img of=/dev/mmcblk0
- Please note that block size set to 4M will work most of the time; if not, please try 1M, although this will take considerably longer.
- Also, note that if you are not logged in as root you will need to prefix this with sudo.
When the image is written, insert the micro-sd card into your Raspberry Pi, and turn it on.
When the Raspberry Pi is booted, you should see a screen like this, on first startup.
Now I select following options:
1 Expand Filesystem
3 Enable Boot To Desktop/Scratch
-> Select Console Text Console,
requiring login (default)
8 Advanced Options
-> A4 SSH
-> Enable 8
Advanced Options
-> A0 Update Finish
-> Reboot
Now you can login with following username: pi and password: raspberry.
First we setup the network configuration for our server by editing
sudo nano /etc/network/interfaces
My /etc/network/interfaces file looks like this (change the setup of your needs):
auto lo iface lo inet loopback auto eth0 allow-hotplug eth0 iface eth0 inet static address 10.255.50.30 netmask 255.255.255.0 gateway 10.255.50.1 dns-nameservers 8.8.8.8 8.8.4.4
Now we restart the network service on the Pi:
sudo /etc/init.d/networking restart
Then we disable DHCP on startup with this command:
sudo update-rc.d -f dhcpcd remove
If you somehow would like to enable it again later, just run following command:
sudo update-rc.d dhcpcd defaults
Now we can use an SSH client such as PuTTY to connect from our PC to the Raspberry Pi.
Now we update raspbian with following command:
sudo apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
PlaySMS
Download and install playsms 1.1:
sudo -s apt-get install apache2 libapache2-mod-php5 mysql-server php5 php5-cli php5-mysql php5-mcrypt php5-gd php5-imap php5-curl php5enmod mcrypt service apache2 restart
When asked for the new password for the MySQL “root” user, use a strong password, in this example I have used MyP@$$w0rd
Now we can go to http://your-ip, in my case http://10.255.50.30 ,and we will see a page showing: “It Works!”.
cd /tmp/
wget http://downloads.sourceforge.net/project/playsms/playsms/Version%201.1/playsms-1.1.tar.gz
tar -zxf playsms-1.1.tar.gz -C /usr/local/src
ls -l /usr/local/src/ cd /usr/local/src/playsms-1.1/
cp install.conf.dist install.conf
nano install.conf
Copy install.conf.dist to install.conf and edit install.conf
Read install.conf and make changes to suit your system configuration.
I’ve edited the file, so it looks like this:
INSTALL DATA
# ============
# Please change INSTALL DATA below to suit your system configurations
# Please do not change variable name, you may change only the value
# MySQL database username DBUSER="root"
# MySQL database password DBPASS="MyP@$w0rd"
# MySQL database name DBNAME="playsms"
# MySQL database host DBHOST="localhost"
# MySQL database port DBPORT="3306"
# Web server's user, for example apache2 user by default is www-data
# note: please make sure your web server user WEBSERVERUSER="www-data"
# Web server's group, for example apache2 group by default is www-data
# note: please make sure your web server group WEBSERVERGROUP="www-data"
# Path to playSMS extracted source files PATHSRC="$(pwd)"
# Path to playSMS web files # note: please make sure your web root path, in this example its /var/www/html PATHWEB="/var/www/html/playsms"
# Path to playSMS additional files PATHLIB="/var/lib/playsms"
# Path to playSMS daemon and other binary files PATHBIN="/usr/local/bin"
# Path to playSMS log files PATHLOG="/var/log/playsms"
# END OF INSTALL DATA
# ===================
Now Run:
./install-playsms.sh
Press Y if everything looks OK.
Now we want to make sure playsms starts on boot by adding a line into rc.local file.
nano /etc/init.d/rc.local
Add following to the file: /usr/local/bin/playsmsd start on the bottom of the file (before exit if there’s an exit command). This way playsmsd will start automatically on boot.
.. /usr/local/bin/playsmsd start
Edit the apache vhost file:
nano /etc/apache2/sites-available/default
My vhost file looks like this:
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/playsms
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks
MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<directory "="" usr="" lib="" cgi-bin"="">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Now reload the Aapache2 configuration to apply the changes.
service apache2 reload
Then you should be able to access the playsms website at following url:
Go to http://your-ip etc.
http://10.255.50.30
You can login with:
username: admin
password: admin
Gateway - SMS Server Tools 3
First we install build tools to build the latest version. Run:
apt-get install build-essential libusb-1.0 libusb-1.0-0-dev
Now I have plugged in the Huawei E3131 modem, and I can see it listed with lsusb:
lsusb
lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 12d1:14fe Huawei Technologies Co., Ltd.
We would like it to be with ID: 12d1:1506, but it’s detected with 12d1:14fe right now. To change this, we install usb_modeswitch to the system, you can grab the latest version from here:
http://www.draisberghof.de/usb_modeswitch/#download
cd /tmp wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-2.2.5.tar.bz2 tar jxvf usb-modeswitch-2.2.5.tar.bz2 cd usb-modeswitch-2.2.5 make install cd /tmp wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20150627.tar.bz2 tar xjvf usb-modeswitch-data-20150627.tar.bz2 cd usb-modeswitch-data-20150627 make install
Now unplug the modem, and plug it in again, then run:
lsusb
lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 006: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
Now we got the desired mode: 12d1:1506.
Next we proceed with SMS Server Tools 3.
First we download it, then unpack it and install it.
cd /usr/local/src wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz tar -zxvf smstools3-3.1.15.tar.gz cd smstools3 make
If you see an error like in my case, when you run make:
make cd src && make - make[1\]: Entering directory '/usr/local/src/smstools3/src' Makefile:51: \*\*\* recipe commences before first target. Stop. make[1\]: Leaving directory '/usr/local/src/smstools3/src' Makefile:10: recipe for target 'compile' failed make: \*\*\* [compile\] Error 2
Then do following:
nano src/Makefile
The problem is a missing tab, now look for:
ifeq (,$(findstring DISABLE_INET_SOCKET,$(CFLAGS))) override LFLAGS += -lsocket -lnsl endif
And move the line override
LFLAGS += -lsocket -lnsl with a TAB
ifeq (,$(findstring DISABLE_INET_SOCKET,$(CFLAGS))) override LFLAGS += -lsocket -lnsl endif
And try to run make again:
make make install
Now we create some required folders:
mkdir -p /var/log/sms/stats mkdir -p /var/spool/sms/{checked,failed,incoming,outgoing,sent}
mkdir /var/spool/sms/modem1
chown www-data:www-data -R /var/spool/sms
chmod 777 -R /var/spool/sms
And then move the original configuration file and download a sample from PlaySMS:
mv /etc/smsd.conf /etc/smsd.conf.dist cd /tmp wget -c https://raw.githubusercontent.com/antonraharja/playSMS/master/contrib/smstools/smsd.conf cp smsd.conf /etc/
To make sure I always will use the correct device, I will use a dynamic device file.
Read more about dynamic device files at following URL: http://antonraharja.com/2015/05/14/persistent-paths-for-dynamic-device-file/
nano /etc/udev/rules.d/80-ttyusb-map.rules
ACTION=="add", KERNEL=="ttyUSB[0-9\]\*", PROGRAM="/etc/udev/rules.d/ttyusb-map.sh %p", SYMLINK+="gsm%c"
touch /etc/udev/rules.d/ttyusb-map.sh chmod 755 /etc/udev/rules.d/ttyusb-map.sh nano /etc/udev/rules.d/ttyusb-map.sh
#!/usr/bin/perl -w
@items = split("/", $ARGV[0\]);
for ($i = 0; $i < @items; $i++) {
if ($items[$i\] =~ m/^usb[0-9\]+$/) {
print $items[$i + 1\] . "\\n";
last; } }
Now unplug, and replug your modem, and it should be located at /dev/gsm*:
ls -l /dev/gsm\*
lrwxrwxrwx 1 root root 7 Jul 24 01:39 /dev/gsm1-1 -> ttyUSB0
lrwxrwxrwx 1 root root 7 Jul 24 01:39 /dev/gsmmodem -> ttyUSB0
# I made some changes to the file, so here is my config, my modem is located at /dev/gsm1-1 replace that with your location.
### Global configuration
#devices = modem1, modem2
devices = modem1 loglevel = 5
# logfiles
stats = /var/log/sms/stats
logfile = /var/log/sms/smsd.log
# Default queue directory = /var/spool/sms
outgoing = /var/spool/sms/outgoing c
hecked = /var/spool/sms/checked
failed = /var/spool/sms/failed
incoming = /var/spool/sms/incoming
sent = /var/spool/sms/sent
# do not set report folder, let status report files saved in incoming
#report = /var/spool/sms/report
delaytime = 2
errorsleeptime = 10
blocktime = 180
autosplit = 3
#receive_before_send = yes
incoming_utf8 = yes
# Queue configurations
[queues]
modem1 = /var/spool/sms/modem1
#modem2 = /var/spool/sms/modem2
# Modem configurations
# Modem name: modem1
# Modem type: Wavecom USB
[modem1]
#init = AT+CNMI=2,2,0,1,0;+CMEE=1
#init = AT+CPMS="ME","ME","ME"
device = /dev/gsm1-1
baudrate = 19200
incoming = yes
pin = 3391
report = yes
queues = modem1
decode_unicode_text = yes
cs_convert = yes
# Modem name: modem2
# Modem type: Wavecom USB
#[modem2]
#init = AT+CNMI=2,2,0,1,0;+CMEE=1
#device = /dev/ttyUSB1 #baudrate = 115200
#incoming = yes
#report = yes
#queues = modem2
# Restart the SMS Server Tools 3:
/etc/init.d/sms3 restart
# Verify if SMS Server Tools 3 is running:
ps ax | grep -v grep | grep smsd
# Monitor SMS Server Tools 3 log file:
tail -f /var/log/smsd.log
Login and configure smstools in playsms webpanel
Login to your playsms installation my address is http://10.255.50.30/
Username is admin Password is admin
Now go to Settings => Manage gateway and SMSC.
You should see a screen like this:
Now click to edit the smstools gateway.
And ensure it’s setup like this:
Click Save, and when it’s saved click back.
Now you have to setup the SMSC, so please select the + sign at SMSTools.
You should fill in the SMSC Details like this, in receiver number write your modem phone number.
When you are done click save.
Now go to Settings => Main configuration
And fill following fields:
Default sender ID Default prefix or country code
And set Default SMSC to smstools, like shown on the image below.
Click save, we are ready to send first SMS.
Send an SMS
Now go to My account => Compose message
Write your cell phone number in Send To, and a message etc. Hello World! in message field, and click send.
If the message get’s queued, you can follow transaction here:
Go to Reports => All sent messages
Incoming messages that are unhandled is kept in sandbox, you will this in Reports => Sandbox
And log if something doesn’t is located in Reports => View log
If you have any trouble with your setup, a good place seek some help is playsms forum.
Raspberry Pi Camera How-To
In diesem Tutorial zeige ich euch wie man die Raspberry Pi Camera installiert, Foto- oder Videoaufnahmen macht und einen Stream an einen anderen Raspberry Pi / Rechner schickt.
#Abmessungen
25mm × 20mm × 9mm
#Sensor
5 Megapixel mit Fixfokusobjektiv
#Fotoauflösung
bis 2592 x 1944 Pixel
#Videoauflösung
1920 × 1080 / 30 Frames 1280 x 720 / 60 Frames 640 x 480 / 60 oder 90 Frames
Raspberry Pi Camera installieren
Zunächst einmal schließen wir die Kamera an der vorgesehenen CSI-Schnittstelle an (Abbildung oben) und starten das Konfigurationstool des Raspberry Pi.
sudo raspi-config
Weiter unten sollte die Zeile “Enable Camera” zu sehen sein. Falls ja, einfach mit Enter bestätigen, Speichern und den Raspberry Pi mit “sudo reboot” neustarten. Falls die Zeile fehlt muss das System mit den folgenden zwei Befehlen auf den neuesten Stand gebracht werden:
sudo apt-get update
sudo apt-get upgrade
Fotos aufnehmen
#Aufnahme im Jpeg-Format**
raspistill -o image.jpg
#Aufnahme im PNG-Format Mit dem Parameter -e kann man die Formate jpg, bmp, gif und png erzeugen.
raspistill -o image.png –e png
#Aufnahme ohne Preview
raspistill -o image.jpg -n
#Aufnahme auf Knopdruck (Enter) Ersetzt man image.jpg durch image%02d.jpg wird bei jedem Knopdruck eine neue Datei im Format image01.jpg erstellt.
raspistill -t 0 -k -o image.jpg
#Zeitverzögerte Aufnahme (3 Sekunden)
raspistill -o image.jpg -t 3000
#Aufnahme in einer niedrigeren Auflösung (640x480)
raspistill -o image.jpg -w 640 -h 480
#Aufnahme in einer niedrigeren Qualität Die Reduzierung der Qualität spart Speicherplatz. Es sind Werte von 0 bis 100 möglich.
raspistill -o image.jpg -q 20
#Zeitrafferaufnahme Mit dem folgendem Befehl wird eine Stunde (-t 3600000) lang alle 5 Sekunden (-tl 5000) ein Bild aufgenommen. Dabei steht die Bezeichnung %04d im Dateinamen für eine vierstellige Nummerierung (z.B. image_0001.jpg).
raspistill -o image_%04d.jpg -tl 5000 -t 3600000
#Die erstellten Aufnahmen können mit dem Tool ffmpeg in eine mp4 Videodatei umgewandelt werden.
ffmpeg -qscale 5 -r 4 -b 9600 -i img_%04d.jpg zeitraffer.mp4
Videos aufnehmen
5 Sekündiges Video in 1080p (1920 x 1080) Mit dem Parameter -t gibt man die Aufnahmezeit in Millisekunden an. Für eine unendliche Aufnahme (z.B. für einen Stream) einfach den Wert auf 0 setzen.
raspivid -o video.h264 -t 50000
#5 Sekündiges Video in 720p (1280 x 720)
raspivid -o video.h264 -t 50000 -w 1280 -h 720
#Video mit individueller Bitrate (3.5MBits/s)
raspivid -o video.h264 -t 50000 -b 3500000
#Video mit individueller Framerate (10 Frames/Sekunde)
raspivid -o video.h264 -t 50000 -f 10
#Videostream an stdout schicken
raspivid -t 50000 -o -
Videos konvertieren H264 nach mp4
apt-get install gpac
MP4Box -fps 30 -add video.h264 video.mp4
LED an-/ausschalten
1. Methode
Füge folgende Zeile zur Datei “/boot/config.txt” hinzu und mache einen Reboot. Leider kann es passieren das die Einstellungen nach einem Neustart verloren gehen. Das hängt mit Kompatibilitätsroblemen einiger SD-Karten zusammen. Sollte dies der Fall sein, bearbeitet die Datei an einem anderem Linuxrechner und benutzt die zweite Methode.
disable_camera_led=1
2. Methode
Einmal mit der obigen Methode deaktiviert, lässt sich die LED über den GPIO 5 steuern.
sudo echo "5" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio5/direction
echo "1" > /sys/class/gpio/gpio5/value
Stream auf anderen Raspberry Pi oder Rechner
Vorbereitung des Servers Mithilfe dem Tool Netcat kann man den von raspivid erzeugten Stream direkt an einen anderen Rechner oder Raspberry Pi schicken. Dazu muss man lediglich die IP-Adresse des Empfängers (Client) wissen. Diese zeigt man unter Unix mit ifconfig und bei Windowsrechnern mit ipconfig an. Im folgendem Beipiel wird der Stream an einen anderen Raspberry Pi mit der IP-Adresse 192.168.178.20 auf den Port 5001 geschickt:
apt-get install netcat
raspivid -t 0 -o - | nc 192.168.178.20 5001
Vorbereitung des des Clients - Linux Auf dem Raspberry Pi / Linux Client wird zusätzlich zu Netcat der Videoplayer MPlayer nachinstalliert um den Stream direkt auf der grafischen Oberfläche anzuzeigen.
apt-get install mplayer netcat
nc -l -p 5001 | mplayer -fps 31 -cache 1024 -
Zeitraffer-Aufnahmen mit Raspberry PI Camera
Es ist recht einfach mit der Raspberry Pi Camera automatisiert Bilder aufzunehmen und aus diesen eine Zeitraffer-Aufnahme zusammenzustellen. Um den Weg dorthin etwas zu erleichtern findet ihr anbei eine schrittweise Anleitung mit Code-Beispielen um selbst Zeitraffer-Aufnahmen zu erstellen.
Auf dem Raspberry Pi laufen unterschiedliche Linux-Distributionen. Für dieses kleine How-To ist am Raspberry Pi die aktuelle Raspbian (Debian Wheezy) Version installiert. (Release Date: 2014-01-07)
Für die weiteren Schritte wird die Console (Bash) und Python als Programmiersprache verwendet.
Verzeichnis für Bilder erstellen
mkdir -p /home/pi/cam/pic
Python Script für automatisierte Aufnahmen öffnen
nano /home/pi/cam/raspcam.py
Das folgende Script macht alle 60 Sekunden eine Aufnahme. Durch die Variable „sleeptime“ wird der Zeitabstand zwischen den Aufnahmen definiert. In diesem Fall ist diese auf 60 Sekunden gesetzt. Es gibt noch viele weitere Parameter in dem Script, die je nach belieben geändert werden können. Eine Dokumentation ist hier zu finden: http://picamera.readthedocs.org/
#!/usr/bin/env python2.7
import picamera from time import sleep
camera = picamera.PiCamera()
#sleep time in seconds
sleeptime = 60 try:
camera.sharpness = 0
camera.contrast = 0
camera.brightness = 50
camera.saturation = 0
camera.ISO = 100
camera.video_stabilization = False
camera.exposure_compensation = 0
camera.exposure_mode = 'auto'
camera.meter_mode = 'average'
camera.awb_mode = 'auto'
camera.image_effect = 'none'
camera.color_effects = None
camera.rotation = 0
camera.hflip = False
camera.vflip = False
camera.crop = (0.0, 0.0, 1.0, 1.0)
camera.resolution = (1280, 720)
for i, filename in
enumerate
(camera.capture_continuous
('{timestamp:%Y-%m-%d-%H-%M-%S}.jpg')): sleep(sleeptime)
finally: camera.close()
Das Skript soll einige Zeit laufen bis es Sinn macht aus den Bildern eine Zeitraffer-Aufnahme zu erstellen. Bei einer Bildwiederholfrequenz von 10 Bildern/s sollten, damit ein brauchbare Ergebnis zu sehen ist, mehr als 50 Bilder zur Verfügung stehen. -> In diesem Fall würde das Video 5 Sekunden dauern.
Um ein Timelapse Video zu erstellen verwenden wir das Tool „mencoder“.
sudo apt-get install mencoder
ffmpeg / avconv / mencoder all replaced. libav-tools and mpv are the updated packages in Jessie: https://packages.debian.org/jessie/libav-tools https://packages.debian.org/jessie/mpv http://mpv.io https://libav.org
Wechseln in das Verzeichnis welches für die Raspberry Pi Camera angelegt wurde.
cd /home/pi/cam
Erstellen einer Liste aller Bilder für das Tool mencoder
ls -tr pic/\* > frames.txt
Konvertierung des Videos mittels dem Tools mencoder. Hiermit werden die Bilder in der Auflösung 1280×720 in ein „avi“ verwandelt bei einer Bildwiederholfrequenz von 10 Bildern pro Sekunde.
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect:vqscale=3 -vf scale=1280:720 -mf type=jpeg:fps=10 mf://@frames.txt -o timelapse.avi
Damit das Script direkt beim Start ausgeführt wird muss kann folgender Befehl in die Datei /etc/rc.local hinzugefügt werden.
/home/pi/cam/raspcam.py &
Diese Zeile muss vor der Zeile „exit 0“ stehen.
Wenn der Raspberry Pi nun startet werden automatisch Bilder aufgenommen.
Wenn sich jemand selbst einen kaufen möchte dann nutzt bitte gleich unsere Affilate-Links zu Raspberry-Pi und Camera-Modul