Cosa e come installare hostapd per Realtek RTL8188

Se state provando a configurare il vostro Raspberry Pi come hotspot Wi-Fi (seguite la mia guida per il Pi Zero e su come creare un hotspot Wi-Fi) ma la vostra antenna Wi-Fi sembra non funzionare, perché magari non supporta hostapd.
Cosa fate? Impazzite? Provate con una versione diversa!

Provate innanzitutto ad aggiornare tutto con il classico apt update upgrade. Se nel caso avete comunque dei problemi, è perché evidentemente la versione che c’è nelle vostre repository non va bene.

Proviamo quindi ad installarne una versione diversa:

wget https://github.com/jenssegers/RTL8188-hostapd/archive/v2.0.tar.gz
unzip v2.0.tar.gz
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.edimax
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd
sudo chown root.root /usr/sbin/hostapd
sudo chmod 755 /usr/sbin/hostapd

E per farlo partire:

sudo update-rc.d hostapd enable

Ora potete passare alla configurazione, come indicato nella guida per il Pi Zero:

sudo nano /etc/hostapd/hostapd.conf

Come configurare un Raspberry Pi senza monitor, tastiera o mouse

Le due cose fondamentali che bisogna effettuare ogni volta che installate Raspbian è quella di connettere il Wi-Fi e attivare la connessione SSH.

E ogni volta, può essere una rottura dover collegare mouse, tastiera e monitor se avete intenzione di utilizzarlo come server sempre acceso e non come dispositivo desktop.
Le due cose che dovrete fare, dopo aver scritto la microSD con Raspbian, sarà quella di montare la partizione boot e navigarci all’interno con:

cd /Volumes/boot

Poi create un file ssh per attivare la connessione SSH sulla porta 22 (l’username sarà pi e la password raspberry):

touch ssh

Invece per configurare il Wi-Fi (nel caso non possiate utilizzare la porta Ethernet):

sudo nano wpa_supplicant.conf

E incollare dentro e salvare con CTRL+X:

country=IT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="Wi-Fi name"
    psk="your secret password"
}

Ora potrete estrarre la microSD, inserirla dentro il vostro piccolo Pi e connetterlo alla rete elettrica! Buon divertimento!

Cosa fare se il vostro Raspberry Pi perde la connessione Wi-Fi

Se di punto in bianco il vostro Pi si disconnette dal WiFi senza riconnettersi più (cosa che può capitare se avere un Pi Zero o Pi Zero W), eseguite:

sudo iw dev wlan0 set power_save off

Potete controllarlo facendo:

iwconfig

Se compare ancora: Power Management:off

Modificate:

sudo nano /etc/network/interfaces

Aggiungendo una linea:

wireless-power off

Come switchare tra WiFi e Cellular con Shortcuts

Photo by Bernard Hermant on Unsplash

Se anche voi quando siete a casa con il WiFi disattivare i dati cellulare (3G o 4G che sia) e quando uscite disattivate il Wifi e riattivate i dati cellulare… sapete bene che è una rottura ogni volta dover attivare, disattivare ecc.

Ecco a voi una bella Shortcuts che vi permetterà di automatizzare questa operazione:

https://www.icloud.com/shortcuts/10a710396e8b4a86ab36e4ea44f9a988

Come realizzare una Time Machine con un Raspberry Pi

Personalmente vi consiglio un Raspberry Pi Zero W, costa sui 10 euro e ha Wi-Fi integrato. Con l’aggiunta di un hard disk esterno (costo sui 40 euro per 1TB) potrete realizzare una Time Machine per il vostro Mac.

Allora iniziamo con l’aggiornare il Raspberry (qualunque esso sia, presupponendo che abbiate l’ultima versione di Raspian installata):

sudo apt update
sudo apt upgrade
sudo apt install netatalk hdparm

Ora identificate l’UUID del vostro hard disk (anche qua presupponendo che l’abbiate formattato in ext4) e copiatelo:

sudo blkid

Modifichiamo questo file:

sudo nano /etc/fstab

Aggiungendo in fondo (cambiando 0123456789abc con quello copiato prima):

UUID=0123456789abc /media/disk ext4 defaults 0 2

Poi create la cartella dove andrà montato e montiamo l’hard disk:

sudo mkdir /media/disk
sudo chmod 777 -R /media/disk
sudo mount -a

Ora modifichiamo il parametro di spinning dell’hard disk (per evitare di tenerlo sempre attivo anche quando non c’è nulla che scrive):

sudo nano /etc/hdparm.conf

E incollate al fondo questo:

/dev/sda {
spindown_time = 60
}

Poi modifichiamo l’ultima riga di questo file:

sudo nano /etc/netatalk/AppleVolumes.default

Incollando questo (ovviamente se non volete chiamarlo Tardis, dategli il nome che preferite):

/media/disk "Tardis" options:tm allow:pi

Ora aggiungete questo per avere un’icona nel Finder uguale a quella di una Time Capsule:

sudo nano /etc/avahi/services/afpd.service

Incollando questo:

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">Tardis</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=TimeCapsule8,119</txt-record>
</service>
</service-group>

E riavviate i processi con:

sudo service avahi-daemon restart
sudo service netatalk restart

E voilà, ecco a voi una Time Machine Wi-Fi (o nel caso ethernet) con meno di 50 euro! Che ne pensate?

Dimenticavo, vi dovrete connettere con l’username pi e la password vostra (nel caso non l’abbiate ancora cambiata dovrebbe essere raspberry).

Come gestire e monitorare i consumi con Domoticz e la presa TP-Link HS100/HS110

Se non conoscete ancora la presa intelligente della TP-Link è ora di conoscerla… e acquistarla! Qui potete acquistare la HS100 che ha solo lo swtich on e off. Mentre qua per soli 5 euro in più potete acquistare quella con anche il monitoraggio della corrente.

Dovete prima di tutto creare un sensore virtuale che sia di tipo Wall socket. Inserite in on e off questi due (cambiate ovviamente gli IP).

Per il tasto on:

script:///home/pi/domoticz/scripts/tplink-smartplug.py -t 172.24.1.123 -c on

Per il tasto off:

script:///home/pi/domoticz/scripts/tplink-smartplug.py -t 172.24.1.123 -c off

Non premetelo ancora! Prima create lo script monitorare il consumo:

sudo nano /home/pi/domoticz/scripts/HS110.py

E incollate:

#!/usr/bin/env python
#
# TP-Link Wi-Fi Smart Plug Protocol Client
# For use with TP-Link HS110: energy monitor
#
# Gets current power (W) and cumulative energy (kWh)
# and sends to Domoticz
import socket
import argparse
import json
import urllib
import urllib2
# ip, port, and command for HS110
ip = '172.24.1.123'
port = 9999
cmd = '{"emeter":{"get_realtime":{}}}'
# Domoticz command stub and IDx of HS110
baseURL = 'http://127.1.1.1:8080/json.htm?type=command&param=udevice&nvalue=0'
HSIdx = 456
# Encryption and Decryption of TP-Link Smart Home Protocol
# XOR Autokey Cipher with starting key = 171
def encrypt(string):
key = 171
result = "\0\0\0\0"
for i in string:
a = key ^ ord(i)
key = a
result += chr(a)
return result
def decrypt(string):
key = 171
result = ""
for i in string:
a = key ^ ord(i)
key = ord(i)
result += chr(a)
return result
def domoticzrequest (url):
request = urllib2.Request(url)
#   request.add_header("Authorization", "Basic %s" % base64string)
response = urllib2.urlopen(request)
return None;
# Send command and receive reply
try:
sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock_tcp.connect((ip, port))
sock_tcp.send(encrypt(cmd))
data = sock_tcp.recv(2048)
sock_tcp.close()

#   print "Sent:     ", cmd
result = decrypt(data[4:])
jsonData = json.loads(result)
#   print "Received: "
#   print json.dumps(jsonData, indent=4, sort_keys=True)
power = jsonData['emeter']['get_realtime']['power']
total = jsonData['emeter']['get_realtime']['total'] * 1000
#   print power, total
except socket.error:
quit("Cound not connect to host " + ip + ":" + str(port))
# Send data to Domoticz
try:
url = baseURL + "&idx=%s&svalue=%s;%s" % (HSIdx, power, total)
domoticzrequest(url)
except urllib2.URLError, e:
print e.code

Create un altro sensore virtuale per monitorare il consumo:

Mentre questo sudo nano /home/pi/domoticz/scripts/tplink-smartplug.py incollate:

#!/usr/bin/env python
#
# TP-Link Wi-Fi Smart Plug Protocol Client
# For use with TP-Link HS-100 or HS-110
#
# by Lubomir Stroetmann
# Copyright 2016 softScheck GmbH
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
import socket
import argparse
version = 0.1
# Check if IP is valid
def validIP(ip):
try:
socket.inet_pton(socket.AF_INET, ip)
except socket.error:
parser.error("Invalid IP Address.")
return ip
# Predefined Smart Plug Commands
# For a full list of commands, consult tplink_commands.txt
commands = {'info'     : '{"system":{"get_sysinfo":{}}}',
'on'       : '{"system":{"set_relay_state":{"state":1}}}',
'off'      : '{"system":{"set_relay_state":{"state":0}}}',
'cloudinfo': '{"cnCloud":{"get_info":{}}}',
'wlanscan' : '{"netif":{"get_scaninfo":{"refresh":0}}}',
'time'     : '{"time":{"get_time":{}}}',
'schedule' : '{"schedule":{"get_rules":{}}}',
'countdown': '{"count_down":{"get_rules":{}}}',
'antitheft': '{"anti_theft":{"get_rules":{}}}',
'reboot'   : '{"system":{"reboot":{"delay":1}}}',
'reset'    : '{"system":{"reset":{"delay":1}}}'
}
# Encryption and Decryption of TP-Link Smart Home Protocol
# XOR Autokey Cipher with starting key = 171
def encrypt(string):
key = 171
result = "\0\0\0\0"
for i in string:
a = key ^ ord(i)
key = a
result += chr(a)
return result
def decrypt(string):
key = 171
result = ""
for i in string:
a = key ^ ord(i)
key = ord(i)
result += chr(a)
return result
# Parse commandline arguments
parser = argparse.ArgumentParser(description="TP-Link Wi-Fi Smart Plug Client v" + str(version))
parser.add_argument("-t", "--target", metavar="<ip>", required=True, help="Target IP Address", type=validIP)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("-c", "--command", metavar="<command>", help="Preset command to send. Choices are: "+", ".join(commands), choices=commands)
group.add_argument("-j", "--json", metavar="<JSON string>", help="Full JSON string of command to send")
args = parser.parse_args()
# Set target IP, port and command to send
ip = args.target
port = 9999
if args.command is None:
cmd = args.json
else:
cmd = commands[args.command]
# Send command and receive reply
try:
sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock_tcp.connect((ip, port))
sock_tcp.send(encrypt(cmd))
data = sock_tcp.recv(2048)
sock_tcp.close()
print "Sent:     ", cmd
print "Received: ", decrypt(data[4:])
except socket.error:
quit("Cound not connect to host " + ip + ":" + str(port))

Ora potete impostare un’automazione che esegua lo script di controllo del consumo e che aggiorni l’IDX corrispettivo.

Per comodità ho messo come IP della presa 172.24.1.123 e come IDX 456 (cercateli nei due script e modificateli).

Se non volete creare l’automazione che controlli il consumo, semplicemente create un altro sensore virtuale che al tasto on abbia come parametro:

script:///home/pi/domoticz/scripts/HS110.py

Abbastanza semplice no?

Dopo che avrete monitorato i consumi per qualche mese avrete a disposizione un bel grafico su cui poter lavorare:

Come visualizzare l’elenco dei Wi-Fi conosciuti del Mac

Se volete visualizzare una lista completa di tutti gli hotspot Wi-Fi al quale il vostro Mac si è connesso, vi basterà aprire il terminale ed eseguire:

networksetup -listpreferredwirelessnetworks en0

Oppure, nel caso:

defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences |grep SSIDString
Photo by Avel Chuklanov on Unsplash

Come usare il Raspberry Pi da router di Tor

Per semplicità di utilizzo e trasporto, utilizzerò due chiavette Wi-Fi invece del classico ponte tra Ethernet al wireless. So che ovviamente comporta un rallentamento considerevole, però è difficile che abbiate il Raspberry Pi sempre attaccato alla porta ethernet.

Prima di tutto attaccate le due chiavette alle porte usb e configuratene una alla vostra connessione di casa facendo:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

E aggiungete al fondo:

network={
ssid="Nome rete"
psk="password"
}

Poi configurate:

sudo nano /etc/network/interfaces

Cancellate tutte le righe tranne quella riferita all’ethernet e incollate questo:

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0

auto wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

up iptables-restore < /etc/iptables.ipv4.nat

Ora iniziamo installando:

sudo apt update
sudo apt install hostapd isc-dhcp-server

E modificate:

sudo nano /etc/dhcp/dhcpd.conf

Aggiungendo due commenti a queste righe (aggiungete un asterisco davanti):

#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

E toglietelo alla riga authoritative:

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

Andate fino in fondo e incollate questo:

subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Salvate con CLTR+X+invio.

Ora modifichiamo con:

sudo nano /etc/default/isc-dhcp-server

E cambiate l’ultima riga in:

INTERFACES="wlan0"

Poi eseguite:

sudo ifconfig wlan0 192.168.42.1

E modifichiamo:

sudo nano /etc/hostapd/hostapd.conf

Incollate:

interface=wlan0
driver=nl80211
ssid=Onion
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Ora andiamo a modificare questo:

sudo nano /etc/default/hostapd

Cambiando una delle ultime righe in:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Per ultimo modificate questo:

sudo nano /etc/sysctl.conf

Aggiungendo alla fine del file:

net.ipv4.ip_forward=1

Salvate ed eseguite:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
sudo iptables -A FORWARD -i wlan1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Provate se funziona con:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Nel caso non andasse, provate a cambiare chiavetta Wi-Fi, a volte danno problemi di compatibilità nel creare un hotspot.

Eseguite poi:

sudo service hostapd start
sudo service isc-dhcp-server start
sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable

Ora installiamo Tor con:

sudo apt install tor
sudo nano /etc/tor/torrc

E incollate all’inizio del file:

Log notice file /var/log/tor/notices.log
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.42.1
DNSPort 53
DNSListenAddress 192.168.42.1

Ora modifichiamo la iptables con:

sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 22 -j REDIRECT --to-ports 22
sudo iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 53
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040

Controllate che sia tutto giusto con:

sudo iptables -t nat -L

E salviamo in modo che al prossimo riavvio continui a funzionare:

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Attiviamo anche Tor e riavviamo!

sudo update-rc.d tor enable
sudo reboot now

Ora collegatevi all’hotspot Onion e inserite la password raspberry. E voilà, siete connessi direttamente a Tor senza dover utilizzare il browser.

Come emulare HomeKit di Apple con Raspberry Pi

Consiglio di base, partite da una distribuzione di Raspbian (anche Lite va bene, ma dovete attivare l’SSH con raspi-config).

Allora, innanzitutto collegatevi al Raspberry tramite SSH con:

ssh pi@raspberrypi.local

Ed eseguite i seguenti comandi:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git make
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install libavahi-compat-libdnssd-dev
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
cd /usr/lib/node_modules/homebridge/
sudo npm install --unsafe-perm bignum
cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
sudo node-gyp BUILDTYPE=Release rebuild
mkdir /home/pi/.homebridge/
cd /home/pi/.homebridge/
sudo nano config.json

Ed incollate:

{
"bridge": {
"name": "Homebridge",
"username": "AA:BB:CC:DD:EE:FF",
"port": 55555,
"pin": "111-22-333"
},
"description": "This is an example configuration file with one fake accessory and one fake platform.",
"platforms": [
{
"platform" : "yeelight",
"name" : "yeelight"
},
{
"platform" : "Hs100"
}
]
}

Nel caso abbiate la presa Wi-Fi della Tp-Link e le lampadine Yeelight, installate questi due pacchetti (nel caso rimuovete le due piattaforme nel file config.json) con:

sudo npm install -g homebridge-yeelight
sudo npm install -g homebridge-hs100

Ed avviate il vostro Homebridge:

homebridge

Ora aprite l’app Casa sul vostro dispositivo iOS e cliccare sul + in alto a destra per aggiungere il vostro Homebridge!

Per far partire l’Homebridge all’accensione, seguite questa guida.

Come connettere il Raspberry Pi al Wi-Fi

Per connettere il vostro Raspberry Pi al Wi-Fi innanzitutto dovete averlo connesso o tramite ethernet (e quindi tramite terminale dal vostro computer) o tramite HDMI e tastiera fisica.

In ogni caso, aprite il terminale e modificate questo file con le regole per connettervi al Wi-Fi.

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Ad esempio potete inserire (modificando l’ssid e il psk) questa connessione.

network={
ssid="Network name"
psk="password"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

Ora il vostro Raspberry Pi si connetterà automaticamente al Wi-Fi con quel nome e quella password (a meno che non abbiate modificato anche l’interface).