Pi-Rex – Un HAT-ATX per RasperryPi4

Un HAT disegnato per RaspberryPi4 la cui funzione principale e’ di poter utilizzare un normale alimentatore ATX

Il RaspberryPi4 e’ una SBC (single board computer) con una discreta potenza che con una sua versione arriva ad avere ben 8GB di RAM. Processore e Ram sono in grado di svolgere compiti importanti. Il principale pregio del Pi4 e’ che consuma poco e fa’ molto e ci si puo’ collegare molta roba… che va’ alimentata!

Spesso mi trovavo con un alimentatore per il Pi4, uno per disco USB collegato (anche piu’ di uno alla volta) e quelli di eventuali aggeggi vari.

Ho pensato di creare una board da collegare al Pi4 e fargli gestire tutta l’alimentazione a lui collegato. L’ATX e’ un alimentatore pratico, ha tutte le tensioni che mi servivano, filtrate e belle. Tanta ma tanta disponibilita’ di potenza e,sopratutto, facilmente reperibili a basso costo! (Usati te li regalano praticamente).

Ecco quindi l’idea e come la ho sviluppata con Kicad.

Quella che trovate qui sotto e’ la versione di prova (0.1). Per la stampa del PCB mi sono affidato questa volta a www.pcbway.com che ha prezzi ottimi e spedizioni economiche. Inoltre KiCad ha un plugin di esportazione sul loro sito per me perfetto..

Sono possibili errori visto che non la ho ancora montata ne SCONSIGLIO per il momento la produzione.

Le caratteristiche che ho voluto sono le seguenti:

  • Alimentazione di tutti gli apparati (compreso il RaspberryPi4) connessi attraverso un alimentatore standard ATX da pc.
  • Accensione e spegnimento COMPLETO (no sospensioni) attraverso un unico pulsante. Funzione ottenuta per il momento con un integrato FlipFlop e un NAND Gate. In pratica:
    • RPI Spento: Pressione breve -> Accensione
    • RPI Acceso: Pressione breve -> Richiesta di reboot/spegnimento al sistema (pin dedicato)
    • RPI Acceso: Pressione lunga -> Spegnimento BRUTALE togliendo completamente l’alimentazione
  • Gestione di piu’ ventole in standard PWM (4pin) per poter gestire la temperatura al meglio all’interno delle realizzazione dove viene impiegata
  • Esposizione di tutte le possibili interfacce di comunicazione
    • SPI
    • UART
    • I2C ( 2 canali possibili per gestire piu’ sensori uguali)
    • Pin del RaspberryPi inutilizzati
  • Controllo di un carico importante (220V) per apparati subordinati al RPI
  • Gestione di una striscia a LED RGB 5050 di alemno 3metri (ho un piccolo rack da illuminare 🙂 )
  • Beep! A chi non piace una cosa che possa fare BEEP!

Il tutto completato con connessioni che si possano portare esternamente su di un case.

Alimentare cosi il mio RaspberryPi4 mi ha permesso di collegare una quantità infinita di apparati esterni, prima non mi era possibile se non con numerosi alimentatori dedicati.

L’esempio piu’ pratico e’ collegare 4 Hard Disk rotazionali di recupero utilizzando un bridge usb unico (tipo QUESTO).

Ok, me ne sono accorto pure io, il throughput non e’ il massimo ma funziona (con un piccolo escamotage software) e esistono ancora scenari in cui la velocità assoluta non e’ indispensabile (cavolo… stai usando un RPI, accontentati!)

Purtroppo, dopo aver ricevuto la prima stampa delle schede mi sono reso conto di alcuni errori che richiedono interventi di una certa rilevanza per far funzionare la scheda, appena posso cercherò di rimediare 🙂

DOWNLOAD dei file per la produzione

DOWNLOAD del software per il Pi4 per gestire al meglio la scheda (non ancora scritto ma si fara’!)

Proxmox – Aggiungere dischi fisici ad una VM

Ipotiziamo di avere un server proxmox con alcune macchine virtuali.

Ad una di queste macchine virtuali si vuole collegare uno o piu’ dischi fisici, cioe gli si vuole dedicare un nuovo disco, magari non per espandere il sistema ma semplicemente per aggiungere storage.

immaginiamo di voler collegare due nuovi dischi alla VM con id 250.

Una volta collegati e riavviato il server dobbiamo identificarli con il comando lsblk

{root@proxmox-server /}$ lsblk 
NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda        8:0    0 953.9G  0 disk 
├─sda1     8:1    0  1007K  0 part 
├─sda2     8:2    0     1G  0 part 
└─sda3     8:3    0 952.9G  0 part 
sdb        8:16   0 953.9G  0 disk 
├─sdb1     8:17   0  1007K  0 part 
├─sdb2     8:18   0     1G  0 part 
└─sdb3     8:19   0 952.9G  0 part 
sdc        8:32   0 465.8G  0 disk 
sdd        8:48   0 465.8G  0 disk 
zd0      230:0    0    50G  0 disk 
├─zd0p1  230:1    0  1007K  0 part 
├─zd0p2  230:2    0   512M  0 part 
└─zd0p3  230:3    0  49.5G  0 part 
zd16     230:16   0  16.5G  0 disk 
├─zd16p1 230:17   0     2G  0 part 
└─zd16p2 230:18   0  14.5G  0 part 

I due dischi che ci interessano sono SDC e SDD, infatti una volta installati nella VM li gestiremo in raid1 con zfs.

Ora dobbiamo trovarne l’id e per farlo lo crechiamo con ls -n /dev/disk/by-id/

{root@proxmox-server /}$ ls -n /dev/disk/by-id/
total 0
lrwxrwxrwx 1 0 0  9 Aug  4 17:21 ata-F -> ../../sda
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-F1-part1 -> ../../sda1
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-F-part2 -> ../../sda2
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-F-part3 -> ../../sda3

lrwxrwxrwx 1 0 0  9 Aug  4 17:52 ata-Hitachi_HDP725050GLA360_TANTAROBA1 -> ../../sdd
lrwxrwxrwx 1 0 0  9 Aug  4 17:52 ata-Hitachi_HDP725050GLA360_TANTAROBA2 -> ../../sdc

lrwxrwxrwx 1 0 0  9 Aug  4 17:21 ata-SSD -> ../../sdb
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-SSD-part1 -> ../../sdb1
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-SSD-part2 -> ../../sdb2
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-SSD-part3 -> ../../sdb3
lrwxrwxrwx 1 0 0 12 Aug  4 17:21 lvm- -> ../../zd16p2
lrwxrwxrwx 1 0 0 11 Aug  4 17:49 lvm- -> ../../zd0p3

Una volta individuati gli id si collegano semplicemente alla macchina con il comando:

{root@proxmox-server /}$ /sbin/qm set 250 -virtio2 /dev/disk/by-id/ata-Hitachi_HDP725050GLA360_TANTAROBA1 
{root@proxmox-server /}$ /sbin/qm set 250 -virtio3 /dev/disk/by-id/ata-Hitachi_HDP725050GLA360_TANTAROBA2

Una volta collegati li si ritrovera’ all’interno delle configurazioni della VM.

Ed ora si possono utilizare per cio’ che si vuole direttamente nella VM.

Cisco IP PHONE SPA504G aggiornare firmware e lingua

Foto 1 di 4

Mi hanno recentemente regalato un paio di datati IP Phone della Cisco, dopo aver verificato che si accendano ho pensato di perderci un po’ di tempo ed aggiornarli all’ultimo firmware disponibile, girovagando un po su internet ho trovato la procedura giusta e la riporto qui con i file che ho usato io.

Tanto per iniziare ho resettato l’apparato alle impostazioni di fabbrica.

Per farlo e’ stato sufficiente selezionare nel menu delle impostazioni del telefono la voce

14 ripristino impostazioni di fabbrica

Una volta fatto questo il telefono si resetta e, una volta collegato alla rete via cavo, acquisisce un indirizzo al quale e’ possibile risalire sempre dal menu di configurazione ( 9 Rete) o dal proprio router.

Conoscendo l’ip del telefono sulla propria rete si puo accedere alla sua interfaccia web digitandolo in un browser

Una volta avvenuto l’accesso e’ possibile gestire il telefono in ogni sua parte.

I miei telefoni dopo il reset non avevano nessuna password registrata quindi e’ stato possibile accedere in alto a destra anche alla sezione Admin + Advanced.

Ora serve il nuovo firmware che io ho trovato QUI

Il nuovo firmware deve essere messo a disposizione via http per il download sul telefono… in pratica deve essere disponibile sulla rete locale via http

Con la stringa :

serv=tftp://IP LOCALE DEL SERVERTFTP/;d0=English;x0=spa50x_30x_en_v756.xml;d1=Italian;x1=spa50x_30x_it_v756.xml

Inserita alla voce delle impostazioni: Regional -> Miscellaneous -> Dictionary Server Script

Per pubblicare velocemente un file in http io su linux ho usato webfs con uno scriptino che mi sono fatto per gestirlo velocemente

# !/bin/bash
#       _                             _      __         _ 
#  __ _| |__   __ _     __      _____| |__  / _|___  __| |
# / _` | '_ \ / _` |____\ \ /\ / / _ \ '_ \| |_/ __|/ _` |
#| (_| | |_) | (_| |_____\ V  V /  __/ |_) |  _\__ \ (_| |
# \__,_|_.__/ \__,_|      \_/\_/ \___|_.__/|_| |___/\__,_|
#                                            
##############################################################################
# Semplice script che avvia webfsd nella carella attuale o altra specificata
# Per comodita' elenca i file condivisi e l'ip:porta necessari per accedervi
#
##############################################################################
#   OVVIAMENTE:
#
#             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#                     Version 2, December 2004
#
#  Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
#
#  Everyone is permitted to copy and distribute verbatim or modified
#  copies of this license document, and changing it is allowed as long
#  as the name is changed.
#
#             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
#   0. You just DO WHAT THE FUCK YOU WANT TO.
##############################################################################
#   OPPURE:
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
##############################################################################
#  Script-source by Paolo Baviero  <aba@baviero.it>  https://baviero.com

function usage()
        {
        echo "================= USO DI ${progname} ===================
        Script per condividere velocemente una cartella via http
        Basta indicare la cartella e questa viene condivisa sulla rete
        locale. Se non viene indicata alcuna cartella condivide quella
        attuale.

        Sintassi: ${progname}  /dir/desiderata

        hint to abadon@baviero.it"
        exit
        }

progname=$(basename ${0})

#Controllo se eseguito come utente root
if test $(id -u) = 0 ; then
    echo "Utente root, esecuzione script non permessa per motivi di sicurezza"
    exit
fi
# Verifica se è presente un parametro da riga di comando (non-vuota)
if [ -n "$1" ];then
        if [[ "$1" == "-h" || "$1" == "h" ]]; then
                usage
        fi
        if [[ -d "$1" ]]; then
                WEBFS_DIR="$1"
        else
                echo "Directory inesistente"
                exit
        fi
else
        WEBFS_DIR="."
fi

echo -e "Web share $WEBFS_DIR dir"
echo -e " Files-subdir shared are:\n"
ls -lh $WEBFS_DIR
# Trovo l'ip del pc nella rete locale
WEBFS_IP=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
# Imposto la porta
WEBFS_PORT="8080"
# Scrivo le info
echo -e "\nIP ADDRESS and PORT"
echo -e "$WEBFS_IP:$WEBFS_PORT\n"
echo "Press Control-C to EXIT"
# Eseguo comando vero e proprio, rimuovere "&> /dev/null" per vederne l'output 
webfsd -d -r $WEBFS_DIR -p $WEBFS_PORT &> /dev/null