La gestione del Bluetooth in LXDE sotto Debian non e' banalissima come in Gnome dato che non e' presente nessuna applet nella traybar ne' si puo' aggiungere direttamente
Volendo evitare l'utilizzo dei comandi da shell si puo' premere la combinazione ALT+F2 digitando in seguito
bluetooth-applet
si vedra' cosi' comparire nella tray il simbolo di BT cosi' come in Gnome
martedì 5 marzo 2013
lunedì 4 marzo 2013
Sensore di prossimita' Bluetooth
Uno degli utilizzi del bluetooth e' quello di utilizzare una apparecchiatura come una chiave per permettere l'accesso ad un servizio, nel momento in cui l'apparecchio ed il suo proprietario si allontana si puo' effettuare la disconnessione o lo spengimento
Questa modalita' e' definita come "sensore di prossimita'" e vi sono due modalita'
1) Modalita' con accoppiamento
In generale e' possibile ottenere la qualita' del segnale (RSSI) di un apparecchio BT (e quindi la sola lontananza/vicinanza) solamente quando e' stato effettuato l'accoppiamento (o connessione)
In modo manuale si puo' seguire la presente procedura il seguente script in cui deve essere inserito il MAC address Bluetooth del dispositivo da monitorare
--------------------------------------------------------
#!/bin/bash
#set -o verbose sh -v
# Copied from Steven on http://gentoo-wiki.com/Talk:TIP_Bluetooth_Proximity_Monitor
# These are the sections you'll need to edit
# You'll need to use the MAC address of your phone here
DEVICE="1C:66:AA:76:72:18"
# How often to check the distance between phone and computer in seconds
CHECK_INTERVAL=2
# The RSSI threshold at which a phone is considered far or near
THRESHOLD=-13
# The command to run when your phone gets too far away
FAR_CMD='echo lontano'
# The command to run when your phone is close again
NEAR_CMD='echo lontano'
HCITOOL="/usr/bin/hcitool"
STARTX_PID=0
DEBUG="/tmp/btproximity.log"
connected=0
function msg {
echo "$1" #>> "$DEBUG"
}
function check_connection {
connected=0;
found=0
for s in `$HCITOOL con`; do
if [[ "$s" == "$DEVICE" ]]; then
found=1;
fi
done
if [[ $found == 1 ]]; then
connected=1;
else
msg 'Attempting connection...'
if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
msg 'Connected.'
connected=1;
else
if [ -z "`l2ping -c 2 $DEVICE 2>&1`" ]; then
if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
msg 'Connected.'
connected=1;
else
msg "ERROR: Could not connect to device $DEVICE."
connected=0;
fi
fi
fi
fi
}
check_connection
while [[ $connected -eq 0 ]]; do
check_connection
sleep 3
done
name=`$HCITOOL name $DEVICE`
msg "Monitoring proximity of \"$name\" [$DEVICE]";
state="near"
while /bin/true; do
check_connection
if [[ $connected -eq 1 ]]; then
rssi=$($HCITOOL rssi $DEVICE | sed -e 's/RSSI return value: //g')
if [[ $rssi -le $THRESHOLD ]]; then
if [[ "$state" == "near" ]]; then
msg "*** Device \"$name\" [$DEVICE] has left proximity"
state="far"
$FAR_CMD > /dev/null 2>&1
fi
else
if [[ "$state" == "far" && $rssi -ge $[$THRESHOLD+2] ]]; then
msg "*** Device \"$name\" [$DEVICE] is within proximity"
state="near"
$NEAR_CMD > /dev/null 2>&1
STARTX_PID=$(pgrep startx)
fi
fi
msg "state = $state, RSSI = $rssi"
fi
sleep $CHECK_INTERVAL
done
--------------------------------------------------------
l'output e' di questo tipo
--------------------------------------------------------
Read RSSI failed: Input/output error
state = near, RSSI =
Attempting connection...
Connected.
state = near, RSSI = 0
state = near, RSSI = 0
Attempting connection...
Connected.
state = near, RSSI = 0
state = near, RSSI = -8
Attempting connection...
Connected.
state = near, RSSI = -11
*** Device "" [1C:66:AA:76:72:18] has left proximity
state = far, RSSI = -21
Attempting connection...
Connected.
state = far, RSSI = -23
state = far, RSSI = -24
Attempting connection...
state = far, RSSI = -20
state = far, RSSI = -22
-------------------------------------------------------
2) Modalita' senza accoppiamento
Negli esempi di PyBluez e' presente un esempio in examples/advanced denominato inquiry-with-rssi.py in cui e' possibile ottenere il valore di RSSI senza effettuare l'accoppiamento (ovviamente il dispositivo BT deve essere visibile)
L'output e' di questo tipo
--------------------------------------------------------
current inquiry mode is 1
[1C:66:AA:76:72:18] RSSI: [-46]
[00:1B:EE:58:93:22] RSSI: [-44]
current inquiry mode is 1
[00:1B:EE:58:93:22] RSSI: [-47]
[1C:66:AA:76:72:18] RSSI: [-46]
[30:17:C8:C7:9A:A4] RSSI: [-82]
current inquiry mode is 1
[00:1B:EE:58:93:22] RSSI: [-76]
[1C:66:AA:76:72:18] RSSI: [-79]
current inquiry mode is 1
[1C:66:AA:76:72:18] RSSI: [-72]
[30:17:C8:C7:9A:A4] RSSI: [-81]
[00:1B:EE:58:93:22] RSSI: [-79]
current inquiry mode is 1
[30:17:C8:C7:9A:A4] RSSI: [-83]
[1C:66:AA:76:72:18] RSSI: [-73]
[00:1B:EE:58:93:22] RSSI: [-79]
current inquiry mode is 1
[30:17:C8:C7:9A:A4] RSSI: [-81]
[00:1B:EE:58:93:22] RSSI: [-78]
current inquiry mode is 1
[30:17:C8:C7:9A:A4] RSSI: [-79]
[1C:66:AA:76:72:18] RSSI: [-73]
-------------------------------------------------
Il problema generale e' che il valore di RSSI non e' solo funzione della distanza ma anche della presenza di interferenze come i muri e della potenza delle antenne di ogni singolo dispositivo. Inoltre il valore, tenendo fermo il dispositivo, e'ì piuttosto oscillante per cui deve essere preso un valore medio. Per terminare la scansione dei dispositivi BT e' piuttosto lenta
Screenshot in LXDE
Per ottenere uno screenshot in LXDE si deve prima installare
apt-get install scrot
dopo di cio' si deve editare il file ~/.config/openbox/lxde-rc.xml inserendo le seguenti linee
--------------------------
<keybind key="Print">
apt-get install scrot
dopo di cio' si deve editare il file ~/.config/openbox/lxde-rc.xml inserendo le seguenti linee
--------------------------
<keybind key="Print">
<action name="Execute">
<command>scrot</command>
</action>
</keybind>--------------------------
i file saranno salvati in formato .png con nome l'ora e la data nella propria directory home
i file saranno salvati in formato .png con nome l'ora e la data nella propria directory home
Conferma uscita in Android
Per chiedere conferma dell'uscita da una applicazione si puo' usare il codice seguente che gestisce l'evento onBackPressed
--------------------------------
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setMessage("Vuoi uscire?")
.setCancelable(false)
.setPositiveButton("Si", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
--------------------------------
--------------------------------
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setMessage("Vuoi uscire?")
.setCancelable(false)
.setPositiveButton("Si", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
--------------------------------
giovedì 28 febbraio 2013
Semplice cronometro in Android
Una leggera modifica al post precedente per utilizzare il timer come cronometro
Alla partenza dell'Activity viene registrata l'ora in millisecondi, poi all'interno del thread viene effettuata la differenza in millisecondi tra la data attuale e quella della partenza ed il tutto viene formattato come ore:minuti:secondi
---------------------------------------------------------------------------
package com.example.timer;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.widget.TextView;
@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity {
private TextView txttimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txttimer = (TextView)findViewById(R.id.timer);
final long partenza = System.currentTimeMillis();
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
long attuale = System.currentTimeMillis();
String tempo = new SimpleDateFormat("HH:mm:ss").format(attuale-partenza);
txttimer.setText(tempo);
}
});
}
}, 0, 1000);
}
}
Alla partenza dell'Activity viene registrata l'ora in millisecondi, poi all'interno del thread viene effettuata la differenza in millisecondi tra la data attuale e quella della partenza ed il tutto viene formattato come ore:minuti:secondi
---------------------------------------------------------------------------
package com.example.timer;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.widget.TextView;
@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity {
private TextView txttimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txttimer = (TextView)findViewById(R.id.timer);
final long partenza = System.currentTimeMillis();
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
long attuale = System.currentTimeMillis();
String tempo = new SimpleDateFormat("HH:mm:ss").format(attuale-partenza);
txttimer.setText(tempo);
}
});
}
}, 0, 1000);
}
}
Timer in Android
Creare una semplice applicazione di orologio puo' sembrare una cosa banale ma non in Android.
Per gestire il timer infatti e' necessario a ricorrere ad un thread separato che aggiorni l'interfaccia
Nell'esempio viene aggiornata una textview con l'ora corrente ogni 1000 millisecondi (1 sec)
-----------------------------------------------------------
package com.example.timer;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.widget.TextView;
@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity {
private TextView txttimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txttimer = (TextView)findViewById(R.id.timer);
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
String tempo = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy").format(new Date(System.currentTimeMillis()));
txttimer.setText(tempo);
}
});
}
}, 0, 1000);
}
}
Per gestire il timer infatti e' necessario a ricorrere ad un thread separato che aggiorni l'interfaccia
Nell'esempio viene aggiornata una textview con l'ora corrente ogni 1000 millisecondi (1 sec)
-----------------------------------------------------------
package com.example.timer;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.widget.TextView;
@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity {
private TextView txttimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txttimer = (TextView)findViewById(R.id.timer);
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
String tempo = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy").format(new Date(System.currentTimeMillis()));
txttimer.setText(tempo);
}
});
}
}, 0, 1000);
}
}
mercoledì 27 febbraio 2013
Ricevitore infrarosso PVCA-IR5U
Un altro regalo che mi e' arrivato e' il ricevitore ad infrarosso PVCA-IR5U che in origine era legato all'acquisto di un desktop Sony Vaio con il suo telecomando RM-GP5U
Le informazioni su Internet sono piuttosto scarse ma connesso a Windows XP la periferica si installa senza necessita' di driver
---------------------------------------------------
Feb 27 14:28:41 debian kernel: [ 166.296207] usb 5-1: new low-speed USB device number 2 using uhci_hcd
Feb 27 14:28:41 debian kernel: [ 166.488299] usb 5-1: New USB device found, idVendor=054c, idProduct=00d4
Feb 27 14:28:41 debian kernel: [ 166.488314] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 27 14:28:41 debian kernel: [ 166.488325] usb 5-1: Product: Sony IR Receiver
Feb 27 14:28:41 debian kernel: [ 166.488333] usb 5-1: Manufacturer: Sony
Feb 27 14:28:41 debian mtp-probe: checking bus 5, device 2: "/sys/devices/pci0000:00/0000:00:1d.3/usb5/5-1"
Feb 27 14:28:41 debian mtp-probe: bus: 5, device: 2 was not an MTP device
Feb 27 14:28:42 debian kernel: [ 166.713726] input: Sony Sony IR Receiver as /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input12
Feb 27 14:28:42 debian kernel: [ 166.715806] generic-usb 0003:054C:00D4.0001: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [Sony Sony IR Receiver] on usb-0000:00:1d.3-1/input0
Feb 27 14:28:42 debian kernel: [ 166.718373] usbcore: registered new interface driver usbhid
Feb 27 14:28:42 debian kernel: [ 166.718387] usbhid: USB HID core driver
Le informazioni su Internet sono piuttosto scarse ma connesso a Windows XP la periferica si installa senza necessita' di driver
---------------------------------------------------
Feb 27 14:28:41 debian kernel: [ 166.296207] usb 5-1: new low-speed USB device number 2 using uhci_hcd
Feb 27 14:28:41 debian kernel: [ 166.488299] usb 5-1: New USB device found, idVendor=054c, idProduct=00d4
Feb 27 14:28:41 debian kernel: [ 166.488314] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 27 14:28:41 debian kernel: [ 166.488325] usb 5-1: Product: Sony IR Receiver
Feb 27 14:28:41 debian kernel: [ 166.488333] usb 5-1: Manufacturer: Sony
Feb 27 14:28:41 debian mtp-probe: checking bus 5, device 2: "/sys/devices/pci0000:00/0000:00:1d.3/usb5/5-1"
Feb 27 14:28:41 debian mtp-probe: bus: 5, device: 2 was not an MTP device
Feb 27 14:28:42 debian kernel: [ 166.713726] input: Sony Sony IR Receiver as /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input12
Feb 27 14:28:42 debian kernel: [ 166.715806] generic-usb 0003:054C:00D4.0001: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [Sony Sony IR Receiver] on usb-0000:00:1d.3-1/input0
Feb 27 14:28:42 debian kernel: [ 166.718373] usbcore: registered new interface driver usbhid
Feb 27 14:28:42 debian kernel: [ 166.718387] usbhid: USB HID core driver
---------------------------------------------------
stranamente nel log sembra che la periferica sia vista come una Human Interface e nel dettaglio come una tastiera. Non e' comunque compatibile con Windows Media Center
quesea la descrizione in cat /proc/bus/input/devices
---------------------------------------------------
I: Bus=0003 Vendor=054c Product=00d4 Version=0110
N: Name="Sony Sony IR Receiver"
P: Phys=usb-0000:00:1d.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input12
U: Uniq=
H: Handlers=sysrq kbd event12
B: PROP=0
B: EV=120013
B: KEY=10000 7 ff9f207a c140d7ff febeffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=ffff
---------------------------------------------------
Non puo' essere quindi usato per Lirc
stranamente nel log sembra che la periferica sia vista come una Human Interface e nel dettaglio come una tastiera. Non e' comunque compatibile con Windows Media Center
quesea la descrizione in cat /proc/bus/input/devices
---------------------------------------------------
I: Bus=0003 Vendor=054c Product=00d4 Version=0110
N: Name="Sony Sony IR Receiver"
P: Phys=usb-0000:00:1d.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input12
U: Uniq=
H: Handlers=sysrq kbd event12
B: PROP=0
B: EV=120013
B: KEY=10000 7 ff9f207a c140d7ff febeffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=ffff
---------------------------------------------------
Non puo' essere quindi usato per Lirc
Iscriviti a:
Commenti (Atom)
Analisi MNF su spettri di riflettanza di plastica
Devo cerca di lavorare su spettri di riflettanza di plastica e la prima domanda e': quale sono le bande significative? Sono partito dal ...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...




