Zabbix Ruckus Unleashed Template

I’ve created a Zabbix Template for Ruckus Unleashed access point, monitor if all your access point in the network are online.

You must “enable snmp” on master.

You must create a host with the ip of the master and add the macros  {$SNMP_COMMUNITY} with the name of your community (example: public).

Modify in Template the trigger “Rukus Access Point Offline” with the number of your access point.

Add in your zabbix server the mib of Ruckus in your snmp

 

Download:
Ruckus Mib Files.zip
zabbix Templates Ruckus Unleashed.zip

 

Estrarre Archivio DEB

Il file .DEB è un archivio che contiene 3 files:

  • debian-binary
  • control.tar.gz
  • data.tar.gz

Di solito quello che serve è il data.tar.gz che contiene il programma.

Per prima cosa dobbiamo estrarre i 3 pacchetti sopraindicati dal file .DEB:

ar vx mypackage.deb

 

Poi estrarre il contenuto di data.tar.gz utilizzando tar:

tar -xzvf data.tar.gz

 

 

Package DEBPer più informazioni sui comandi tar e ar consultate le pagine man : tar(1) e ar(1).

Concerto al Gran Buffet di Reggio Emilia

Era 08/02/2013 io e Gabriele Merli abbiamo suonato in duo al Gran Buffet di Reggio Emilia per la prima volta insieme in questa formazione, qualcosa di bello c’e’:

1. Intro

2. Softly

3. Mo’ Better Blues

4. Armando’s Rumba

5. A Child is Born

6. Devi May Care

7. In a Sentimental Mood

8. Sack of Blues

9. Lover Man

10. A Night in Tunisia

Arduino per domotica, collegato in rete come client/server

Con questo articolo parto a spiegarvi come utilizzare arduino e altri strumenti per autocostruirsi un impianto di domotica e relativo antifurto.

Con questo parte di progetto utilizzo arduino per inviare via UDP lo stato degli I/O e anche di ricevere pacchetti UDP per controllare 4 relay.
Tutto il progetto completo è formato da diversi blocchi come questo che comunicano con un server (raspberry pi) che in python controlla il tutto e agisce di conseguenza. Sul Rasberry è installato anche Asterisk che interfacciato con il mio programma python è in grado di ricevere telefonate per attivare l’antifurto o disattivarlo e decidere chi chiamare, tutto tramite voce i segnali DTMF.

Comunque senza perderci troppo con il primo pezzo, cioe’ arduino che invia e riceve pacchetti.

I messaggi che manda sono nel formato “NUMERO SCHEDA” + “NUMERO SENSORE” + “STATO”

ad esempio la scheda 5 arduino con il sensore 6 e lo stato 00001 = 050600001

In questo modo posso utilizzare quanti arduino voglio, di sensori in teoria fino a 99, teniamo conto che arduino si può facilmente espandere con I/O su i2c.
Per il valore utilizzo 5 cifre perchè oltre al segnale on/off posso trasmettere temperature, livello di Co2 e tutto quello può servirvi.

Come porte UDP ho utilizzato 5055 per la trasmissione e 5056 per la ricezione, poi potete comunque modificarle con altre se vi torna comodo.

Nel mio caso ho utilizzato:

  • un arduino nano
  • un ENC28J60 Ethernet Shield V1.0 per scheda di rete
  • un piccola espansione per fare dei collegamenti decenti
  • Scheda a 4 relay

 

baseenc28j60-shield-variations
relay
ArduinoNanoFront_3_sm

 

 

 

 

 

 

serve la libreria per gestire lo shield Ethernet, quindi scaricate la libreria qui: https://github.com/ntruchsess/arduino_uip

Installate la libreria in Arduino IDE e qui sotto c’e’ il programma ad hoc che utilizzo su una scheda, più’ sotto vi spiego i vari blocchi:

/*
 * pin 10 -11 -12 -13 occupati da ethernet
 * pin 2 -3 -4 -5 -6 -7 -8 -9 digitali
 * da A0 ad A7 analogici
 */

#include <UIPEthernet.h>

EthernetUDP udpserver;
EthernetUDP udp;

int success;
char IRF;
int counter; //lo utilizzo per il conteggio del client per mandare i messaggi al server


void setup() {
 
 pinMode(2, OUTPUT); //rele
 pinMode(3, OUTPUT); //rele
 pinMode(4, OUTPUT); //rele
 pinMode(5, OUTPUT); //rele
 pinMode(6, INPUT); // finestra cortile filo rosso
 pinMode(7, INPUT); // finestra vicino lavandino filo nero
 pinMode(8, INPUT); // porta cucina filo bianco
 pinMode(9, INPUT); // sensore lampada 500w portico
 
 
 Serial.begin(9600); //imposto la porta seriale per debug
 uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; //imposto mac address
 Ethernet.begin(mac,IPAddress(10,0,0,253)); //imposto ip
 success = udpserver.begin(5056); // apro la porta udp
 }

void loop() {
 
 //controllo nuovi udp-packet:
 int size = udpserver.parsePacket();
 if (size > 0) {
 do
 {
 char* msg = (char*)malloc(size+1);
 int len = udpserver.read(msg,size+1);
 msg[len]=0;
 Serial.print("received: ");
 Serial.println(msg);
 if (String(msg[0])=="1") {
 digitalWrite(2, HIGH);
 } else {
 digitalWrite(2, LOW);
 }

 if (String(msg[1])=="1") {
 digitalWrite(3, HIGH);
 } else {
 digitalWrite(3, LOW);
 }

 if (String(msg[2])=="1") {
 digitalWrite(4, HIGH);
 } else {
 digitalWrite(4, LOW);
 }

 if (String(msg[3])=="1") {
 digitalWrite(5, HIGH);
 } else {
 digitalWrite(5, LOW);
 }

 free(msg);
 }
 while ((size = udpserver.available())>0);
 //finish reading this packet:
 udpserver.flush();
 
 // restituisco la lettura delle uscite
 for (int i=20; i < 24; i++){
 success = udpserver.beginPacket(IPAddress(10,0,0,10),5056);
 String Messaggio = "050" + String(i) + "0000" + String(digitalRead(i-18));
 success = udpserver.print(Messaggio);
 success = udpserver.endPacket();
 delay(100);
 } 
 udpserver.stop();
 //restart with new connection to receive packets from other clients
 Serial.print("restart connection: ");
 Serial.println (udpserver.begin(5056) ? "success" : "failed");
 }

// qui parto con le letture dei sensori
 if (counter > 1200) {
 
 
 for (int i=6; i < 10; i++){
 success = udp.beginPacket(IPAddress(10,0,0,1),5055);
 String Messaggio = "050" + String(i-5) + "0000" + String(!digitalRead(i));
 success = udp.print(Messaggio);
 success = udp.endPacket();
 delay(100);
 } 
 
 for (int i=0; i < 2; i++){
 if (analogRead(i) > 300) { //leggo lo stato degli irf
 IRF='1';
 } else {
 IRF='0';
 }
 success = udp.beginPacket(IPAddress(10,0,0,1),5055);
 String Messaggio = "050" + String(i+5) + "0000" + IRF;
 success = udp.print(Messaggio);
 success = udp.endPacket();
 delay(100);
 } 

 counter=0;
 } else {
 counter = counter + 1;
 }

}

Lo shield per la scheda di rete utilizza i pin di Arduino 10 -11 -12 -13
Quindi questi non li possiamo utilizzare per la nostra domotica.

 uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; //imposto mac address
 Ethernet.begin(mac,IPAddress(10,0,0,253)); //imposto ip
 success = udpserver.begin(5056); // apro la porta udp

Dobbiamo impostare il mac address per la scheda di rete (utilizzare dei numeri esadecimali a caso), poi impostiamo un IP statico nel range della vostra rete; nella mia rete utilizzo 10.0.0.0/24 quindi ho preso un IP libero a caso  10.0.0.253.. Alla fine imposto la porta di ascolto 5056 per ricevere dati da server (utilizzare certe porte come uscite).

Nel ciclo di loop è tutto abbastanza semplice, leggo i valori degli input e li invio uno a uno via UDP al mio server.
Per la parte della gestione uscite in Arduino rimane in ascolto sulla porta 5056 e riceve una stringa di 4 caratteri che attivano o disattivano i relay (1 attiva 0 disattiva).
Quindi 0001 attiva il primo relay.

Questa è la prima parte del progetto, spero vi possa essere di spunto per i vostri progetti.

Nel prossimo articolo posterò un progetto quasi uguale per Arduino dove invece lo utilizzo solo per leggere ingressi e non ho uscite, quindi manca la parte server.

 

 

Sincronizzare orario sulla fonera parte:2

Dopo averla messa in rete tramite il wifi l’ho configurata in modo da avere l’orario sincronizzato con ntp visto, che tutte le volte che si spegne o si riavvia perde l’orario e la data non avendo un orologio interno.
Per fare questo ho utilizzato ntpclient e per installarlo eseguire il seguente comando:

ipkg install ntpclient

poi ho creato il file /etc/init.d/ntpclient con il seguente contenuto:

#!/bin/sh
/usr/sbin/ntpclient -c 1 -s -h pool.ntp.org &

per farlo andare in avvio automatico al boot ho fatto il seguente link in modo che l’ora parta prima dei vari servizi come il cron:

ln -s /etc/init.d/ntpclient /etc/rc.d/S49ntpclient

inoltre per tenerlo sincronizzato ho inserito nel cron un comando in modo che venga sincronizzata l’orario una volta al giorno che dovrebbe essere più che sufficiente; creare il file in /etc/crontabs/root e inserire il seguente codice:

# to timesync every day 5 del mattino
0 5 * * * /etc/init.d/S55ntpclient

L’ultimo tocco è quello di dargli in timezone corretto altrimenti sarà sempre 2 ore o 1 ora indietro a seconda del timesaving; per la corretta configurazione del timezone italiano creare il file TZ in /etc con il seguente contenuto:

CET-1CEST,M3.5.0,M10.5.0/3

fare un bel riavvio della fonera e trovete data ora aggiornata.

Ritorno sulla fonera con Openwrt parte:1

Dopo tanto tempo sono tornato sulla Fonera 2100 per modificarla e fargli pilotare l’apricancello collegandola all’antifurto.
Per il momento sono partito con Openwrt, una distro linux pulita che mi consenta di configurare la fonera utilizzando le porte gpio.

In questo articolo parte prima configuro la rete.

Mi sono collegato in seriale con la console utilizzando putty e per il wifi l’ho configurato utilizzando il wpa_supplicant per avere il supporto wpa della mia rete wifi domestica.

La confgurazione da mettere in /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=1000
update_config=1
network={
ssid="hidaba_house"
psk="PASSWORD DELLA RETE"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
}

Poi ho creato lo script per l’avvio automatico al boot in /etc/init.d/wpa_supplicant

#!/bin/sh /etc/rc.common
START=01
start () {
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ath0 -D wext
}

poi l’ho linkato in /etc/rc.d/S45wpa utilizzando 45 in modo che si avvii dopo che la rete è partita

ln -s /etc/init.d/wpa_supplicant /etc/rc.d/S45wpa

infine configurare la rete con l’indirizzo voluto in /etc/config/network

config interface wifi0
option ifname   ath0
option proto    static
option ipaddr   10.0.0.90
option gateway  10.0.0.5
option dns      10.0.0.5
option netmask  255.255.255.0

fare un bel riavvio e avremo la fonera funzionante in wifi come client.

Siamo a Natale

Finalmente siamo arrivati le feste che concludono l’anno. Si tirano le somme , si guarda indietro , si guarda avanti , si fanno progetti. È stato un anno di fuoco, atipico, brutto, pieno di brutte sorprese e incidenti di percorso ma soprattutto all’insegna della delusione; tante persone più o meno vicine mi hanno fortemente deluso e tradito. Non resta che sperare in un 2010 migliore. Tante belle cose a tutti!