driver spb16ch: eseguito mappatura dei 128 relè distribuito sulle 8 possibili schede installabili
This commit is contained in:
@@ -5,3 +5,6 @@ Questo driver richiede l'interprete python e la libreria python-smbus. Inoltre l
|
||||
sudo apt-get install python python-smbus
|
||||
sudo usermod -a -G i2c pi
|
||||
|
||||
Oltre a quanto sopra indicato, il raspberry deve avere caricato i moduli di gestione del bus i2c:
|
||||
sudo raspi-config
|
||||
Interfacing Options / I2C / Yes
|
||||
|
||||
@@ -1,20 +1,157 @@
|
||||
#
|
||||
# Mapping rele spb16ch: l'indice indica il relè, ogni elemento deve essere lungo quattro caratteri,
|
||||
# i primi due indicano il mux channel, mentre gli ultimi tre caratteri indicano il numero del rele sul canale
|
||||
# Mapping rele spb16ch: l'indice indica il relè, ogni elemento deve essere lungo 8 caratteri,
|
||||
# 1-2: i primi due indicano l'indirizzo della scheda
|
||||
# 3-3: separatore
|
||||
# 4-4: il quarto carattere indica il mux channel
|
||||
# 5-5: separatore
|
||||
# 6-8: gli ultimi tre caratteri indicano il numero del rele sul canale
|
||||
#
|
||||
SPB16CH_RELE_MAP[1]=" 0 1"
|
||||
SPB16CH_RELE_MAP[2]=" 0 2"
|
||||
SPB16CH_RELE_MAP[3]=" 0 4"
|
||||
SPB16CH_RELE_MAP[4]=" 0 8"
|
||||
SPB16CH_RELE_MAP[5]=" 0 16"
|
||||
SPB16CH_RELE_MAP[6]=" 0 32"
|
||||
SPB16CH_RELE_MAP[7]=" 0 64"
|
||||
SPB16CH_RELE_MAP[8]=" 0128"
|
||||
SPB16CH_RELE_MAP[9]=" 1 1"
|
||||
SPB16CH_RELE_MAP[10]=" 1 2"
|
||||
SPB16CH_RELE_MAP[11]=" 1 4"
|
||||
SPB16CH_RELE_MAP[12]=" 1 8"
|
||||
SPB16CH_RELE_MAP[13]=" 1 16"
|
||||
SPB16CH_RELE_MAP[14]=" 1 32"
|
||||
SPB16CH_RELE_MAP[15]=" 1 64"
|
||||
SPB16CH_RELE_MAP[16]=" 1128"
|
||||
|
||||
# Scheda 1 - address 70h - GS1:chiuso, GS2:chiuso, GS3:chiuso
|
||||
SPB16CH_RELE_MAP[1]="70|0| 1"
|
||||
SPB16CH_RELE_MAP[2]="70|0| 2"
|
||||
SPB16CH_RELE_MAP[3]="70|0| 4"
|
||||
SPB16CH_RELE_MAP[4]="70|0| 8"
|
||||
SPB16CH_RELE_MAP[5]="70|0| 16"
|
||||
SPB16CH_RELE_MAP[6]="70|0| 32"
|
||||
SPB16CH_RELE_MAP[7]="70|0| 64"
|
||||
SPB16CH_RELE_MAP[8]="70|0|128"
|
||||
SPB16CH_RELE_MAP[9]="70|1| 1"
|
||||
SPB16CH_RELE_MAP[10]="70|1| 2"
|
||||
SPB16CH_RELE_MAP[11]="70|1| 4"
|
||||
SPB16CH_RELE_MAP[12]="70|1| 8"
|
||||
SPB16CH_RELE_MAP[13]="70|1| 16"
|
||||
SPB16CH_RELE_MAP[14]="70|1| 32"
|
||||
SPB16CH_RELE_MAP[15]="70|1| 64"
|
||||
SPB16CH_RELE_MAP[16]="70|1|128"
|
||||
|
||||
# Scheda 2 - address 71h - GS1:aperto, GS2:chiuso, GS3:chiuso
|
||||
SPB16CH_RELE_MAP[17]="71|0| 1"
|
||||
SPB16CH_RELE_MAP[18]="71|0| 2"
|
||||
SPB16CH_RELE_MAP[19]="71|0| 4"
|
||||
SPB16CH_RELE_MAP[20]="71|0| 8"
|
||||
SPB16CH_RELE_MAP[21]="71|0| 16"
|
||||
SPB16CH_RELE_MAP[22]="71|0| 32"
|
||||
SPB16CH_RELE_MAP[23]="71|0| 64"
|
||||
SPB16CH_RELE_MAP[24]="71|0|128"
|
||||
SPB16CH_RELE_MAP[25]="71|1| 1"
|
||||
SPB16CH_RELE_MAP[26]="71|1| 2"
|
||||
SPB16CH_RELE_MAP[27]="71|1| 4"
|
||||
SPB16CH_RELE_MAP[28]="71|1| 8"
|
||||
SPB16CH_RELE_MAP[29]="71|1| 16"
|
||||
SPB16CH_RELE_MAP[30]="71|1| 32"
|
||||
SPB16CH_RELE_MAP[31]="71|1| 64"
|
||||
SPB16CH_RELE_MAP[32]="71|1|128"
|
||||
|
||||
# Scheda 3 - address 72h - GS1:chiuso, GS2:aperto, GS3:chiuso
|
||||
SPB16CH_RELE_MAP[33]="72|0| 1"
|
||||
SPB16CH_RELE_MAP[34]="72|0| 2"
|
||||
SPB16CH_RELE_MAP[35]="72|0| 4"
|
||||
SPB16CH_RELE_MAP[36]="72|0| 8"
|
||||
SPB16CH_RELE_MAP[37]="72|0| 16"
|
||||
SPB16CH_RELE_MAP[38]="72|0| 32"
|
||||
SPB16CH_RELE_MAP[39]="72|0| 64"
|
||||
SPB16CH_RELE_MAP[40]="72|0|128"
|
||||
SPB16CH_RELE_MAP[41]="72|1| 1"
|
||||
SPB16CH_RELE_MAP[42]="72|1| 2"
|
||||
SPB16CH_RELE_MAP[43]="72|1| 4"
|
||||
SPB16CH_RELE_MAP[44]="72|1| 8"
|
||||
SPB16CH_RELE_MAP[45]="72|1| 16"
|
||||
SPB16CH_RELE_MAP[46]="72|1| 32"
|
||||
SPB16CH_RELE_MAP[47]="72|1| 64"
|
||||
SPB16CH_RELE_MAP[48]="72|1|128"
|
||||
|
||||
# Scheda 4 - address 73h - GS1:aperto, GS2:aperto, GS3:chiuso
|
||||
SPB16CH_RELE_MAP[49]="73|0| 1"
|
||||
SPB16CH_RELE_MAP[50]="73|0| 2"
|
||||
SPB16CH_RELE_MAP[51]="73|0| 4"
|
||||
SPB16CH_RELE_MAP[52]="73|0| 8"
|
||||
SPB16CH_RELE_MAP[53]="73|0| 16"
|
||||
SPB16CH_RELE_MAP[54]="73|0| 32"
|
||||
SPB16CH_RELE_MAP[55]="73|0| 64"
|
||||
SPB16CH_RELE_MAP[56]="73|0|128"
|
||||
SPB16CH_RELE_MAP[57]="73|1| 1"
|
||||
SPB16CH_RELE_MAP[58]="73|1| 2"
|
||||
SPB16CH_RELE_MAP[59]="73|1| 4"
|
||||
SPB16CH_RELE_MAP[60]="73|1| 8"
|
||||
SPB16CH_RELE_MAP[61]="73|1| 16"
|
||||
SPB16CH_RELE_MAP[62]="73|1| 32"
|
||||
SPB16CH_RELE_MAP[63]="73|1| 64"
|
||||
SPB16CH_RELE_MAP[64]="73|1|128"
|
||||
|
||||
# Scheda 5 - address 74h - GS1:chiuso, GS2:chiuso, GS3:aperto
|
||||
SPB16CH_RELE_MAP[65]="74|0| 1"
|
||||
SPB16CH_RELE_MAP[66]="74|0| 2"
|
||||
SPB16CH_RELE_MAP[67]="74|0| 4"
|
||||
SPB16CH_RELE_MAP[68]="74|0| 8"
|
||||
SPB16CH_RELE_MAP[69]="74|0| 16"
|
||||
SPB16CH_RELE_MAP[70]="74|0| 32"
|
||||
SPB16CH_RELE_MAP[71]="74|0| 64"
|
||||
SPB16CH_RELE_MAP[72]="74|0|128"
|
||||
SPB16CH_RELE_MAP[73]="74|1| 1"
|
||||
SPB16CH_RELE_MAP[74]="74|1| 2"
|
||||
SPB16CH_RELE_MAP[75]="74|1| 4"
|
||||
SPB16CH_RELE_MAP[76]="74|1| 8"
|
||||
SPB16CH_RELE_MAP[77]="74|1| 16"
|
||||
SPB16CH_RELE_MAP[78]="74|1| 32"
|
||||
SPB16CH_RELE_MAP[79]="74|1| 64"
|
||||
SPB16CH_RELE_MAP[80]="74|1|128"
|
||||
|
||||
# Scheda 6 - address 75h - GS1:aperto, GS2:chiuso, GS3:aperto
|
||||
SPB16CH_RELE_MAP[81]="75|0| 1"
|
||||
SPB16CH_RELE_MAP[82]="75|0| 2"
|
||||
SPB16CH_RELE_MAP[83]="75|0| 4"
|
||||
SPB16CH_RELE_MAP[84]="75|0| 8"
|
||||
SPB16CH_RELE_MAP[85]="75|0| 16"
|
||||
SPB16CH_RELE_MAP[86]="75|0| 32"
|
||||
SPB16CH_RELE_MAP[87]="75|0| 64"
|
||||
SPB16CH_RELE_MAP[88]="75|0|128"
|
||||
SPB16CH_RELE_MAP[89]="75|1| 1"
|
||||
SPB16CH_RELE_MAP[90]="75|1| 2"
|
||||
SPB16CH_RELE_MAP[91]="75|1| 4"
|
||||
SPB16CH_RELE_MAP[92]="75|1| 8"
|
||||
SPB16CH_RELE_MAP[93]="75|1| 16"
|
||||
SPB16CH_RELE_MAP[94]="75|1| 32"
|
||||
SPB16CH_RELE_MAP[95]="75|1| 64"
|
||||
SPB16CH_RELE_MAP[96]="75|1|128"
|
||||
|
||||
# Scheda 7 - address 76h - GS1:chiuso, GS2:aperto, GS3:aperto
|
||||
SPB16CH_RELE_MAP[97]="76|0| 1"
|
||||
SPB16CH_RELE_MAP[98]="76|0| 2"
|
||||
SPB16CH_RELE_MAP[99]="76|0| 4"
|
||||
SPB16CH_RELE_MAP[100]="76|0| 8"
|
||||
SPB16CH_RELE_MAP[101]="76|0| 16"
|
||||
SPB16CH_RELE_MAP[102]="76|0| 32"
|
||||
SPB16CH_RELE_MAP[103]="76|0| 64"
|
||||
SPB16CH_RELE_MAP[104]="76|0|128"
|
||||
SPB16CH_RELE_MAP[105]="76|1| 1"
|
||||
SPB16CH_RELE_MAP[106]="76|1| 2"
|
||||
SPB16CH_RELE_MAP[107]="76|1| 4"
|
||||
SPB16CH_RELE_MAP[108]="76|1| 8"
|
||||
SPB16CH_RELE_MAP[109]="76|1| 16"
|
||||
SPB16CH_RELE_MAP[110]="76|1| 32"
|
||||
SPB16CH_RELE_MAP[111]="76|1| 64"
|
||||
SPB16CH_RELE_MAP[112]="76|1|128"
|
||||
|
||||
# Scheda 8 - address 77h - GS1:aperto, GS2:aperto, GS3:aperto
|
||||
SPB16CH_RELE_MAP[113]="77|0| 1"
|
||||
SPB16CH_RELE_MAP[114]="77|0| 2"
|
||||
SPB16CH_RELE_MAP[115]="77|0| 4"
|
||||
SPB16CH_RELE_MAP[116]="77|0| 8"
|
||||
SPB16CH_RELE_MAP[117]="77|0| 16"
|
||||
SPB16CH_RELE_MAP[118]="77|0| 32"
|
||||
SPB16CH_RELE_MAP[119]="77|0| 64"
|
||||
SPB16CH_RELE_MAP[120]="77|0|128"
|
||||
SPB16CH_RELE_MAP[121]="77|1| 1"
|
||||
SPB16CH_RELE_MAP[122]="77|1| 2"
|
||||
SPB16CH_RELE_MAP[123]="77|1| 4"
|
||||
SPB16CH_RELE_MAP[124]="77|1| 8"
|
||||
SPB16CH_RELE_MAP[125]="77|1| 16"
|
||||
SPB16CH_RELE_MAP[126]="77|1| 32"
|
||||
SPB16CH_RELE_MAP[127]="77|1| 64"
|
||||
SPB16CH_RELE_MAP[128]="77|1|128"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,11 +3,53 @@
|
||||
#
|
||||
function drv_spb16ch_init {
|
||||
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py 72 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py 72 1
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py 72 0
|
||||
declare -a address_used
|
||||
address_used=()
|
||||
|
||||
local address=""
|
||||
|
||||
# Cerca gli indirizzi delle schede spb16ch utilizzate per i rele utilizzati per le zone
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
local a=EV"$i"_GPIO
|
||||
local gpio="${!a}"
|
||||
if [[ "$gpio" == drv:spb16ch:* ]]; then
|
||||
local rele_id=`echo $gpio | $CUT -d':' -f3,3`
|
||||
local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
|
||||
local address_num=${rele_data:0:2}
|
||||
if [[ ! -z $rele_data ]]; then
|
||||
if [[ ! " ${address_used[@]} " =~ " ${address_num} " ]]; then
|
||||
address_used+=("$address_num")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Cerca gli indirizzi delle schede spb16ch utilizzate per i rele utilizzate per la gestione alimentazione
|
||||
for gpio in "$SUPPLY_GPIO_1" "$SUPPLY_GPIO_2"
|
||||
do
|
||||
if [[ "$gpio" == drv:spb16ch:* ]]; then
|
||||
local rele_id=`echo $gpio | $CUT -d':' -f3,3`
|
||||
local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
|
||||
local address_num=${rele_data:0:2}
|
||||
if [[ ! -z $rele_data ]]; then
|
||||
if [[ ! " ${address_used[@]} " =~ " ${address_num} " ]]; then
|
||||
address_used+=("$address_num")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Esegue l'inizializzazione delle schede spb16ch trovate
|
||||
for address_num in ${address_used[@]}
|
||||
do
|
||||
echo "****** address_num = $address_num *******"
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 1
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 0
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -22,13 +22,15 @@ function drv_spb16ch_rele_open {
|
||||
log_write "$message"
|
||||
message_write "warning" "$message"
|
||||
fi
|
||||
local channel_num=${rele_data:0:2}
|
||||
local rele_num=${rele_data:2:3}
|
||||
local address_num=${rele_data:0:2}
|
||||
local channel_num=${rele_data:3:1}
|
||||
local rele_num=${rele_data:5:3}
|
||||
|
||||
echo address_num=$address_num
|
||||
echo channel_num=$channel_num
|
||||
echo rele_num=$rele_num
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py 72 $channel_num
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 72 $rele_num 0
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num $channel_num
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py $address_num $rele_num 0
|
||||
|
||||
}
|
||||
|
||||
@@ -46,13 +48,15 @@ function drv_spb16ch_rele_close {
|
||||
log_write "$message"
|
||||
message_write "warning" "$message"
|
||||
fi
|
||||
local channel_num=${rele_data:0:2}
|
||||
local rele_num=${rele_data:2:3}
|
||||
local address_num=${rele_data:0:2}
|
||||
local channel_num=${rele_data:3:1}
|
||||
local rele_num=${rele_data:5:3}
|
||||
|
||||
echo address_num=$address_num
|
||||
echo channel_num=$channel_num
|
||||
echo rele_num=$rele_num
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py 72 $channel_num
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 72 $rele_num 1
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num $channel_num
|
||||
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py $address_num $rele_num 1
|
||||
|
||||
}
|
||||
|
||||
|
||||
10
piGarden.sh
10
piGarden.sh
@@ -10,11 +10,9 @@
|
||||
#
|
||||
function initialize {
|
||||
|
||||
#lock
|
||||
|
||||
log_write "Run initialize"
|
||||
|
||||
# Iniziazlizza i driver gpio
|
||||
# Inizializza i driver gpio
|
||||
for drv in "${list_drv[@]}"
|
||||
do
|
||||
echo "$(date) drv_${drv}_init"
|
||||
@@ -62,8 +60,6 @@ function initialize {
|
||||
|
||||
log_write "End initialize"
|
||||
|
||||
#unlock
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
@@ -588,6 +584,7 @@ function show_usage {
|
||||
echo -e "\t$NAME_SCRIPT check_rain_sensor check rain from hardware sensor"
|
||||
echo -e "\t$NAME_SCRIPT close_all_for_rain close all solenoid if it's raining"
|
||||
echo -e "\t$NAME_SCRIPT close_all [force] close all solenoid"
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT start_socket_server [force] start socket server, with 'force' parameter force close socket server if already open"
|
||||
echo -e "\t$NAME_SCRIPT stop_socket_server stop socket server"
|
||||
echo -e "\n"
|
||||
@@ -750,6 +747,9 @@ LAST_INFO_FILE="$STATUS_DIR/last_info"
|
||||
LAST_WARNING_FILE="$STATUS_DIR/last_worning"
|
||||
LAST_SUCCESS_FILE="$STATUS_DIR/last_success"
|
||||
|
||||
if [ -z $LOG_OUTPUT_DRV_FILE ]; then
|
||||
$LOG_OUTPUT_DRV_FILE="/dev/null"
|
||||
fi
|
||||
|
||||
# Elimina il file di lock se più vecchio di 11 secondi
|
||||
if [ -f "$LOCK_FILE" ]; then
|
||||
|
||||
Reference in New Issue
Block a user