Category Archives: Uncategorized

Yet another Freeboard widget plugin

freeboard-widget-plugins

Two new widget plugins are available for Freeboard.io

  1. Slider widget plugin
  2. Switch widget plugin

Freeboard

A damn-sexy, open source real-time dashboard builder for IOT and other web mashups.

What is It?

Freeboard is a turn-key HTML-based “engine” for dashboards. Besides a nice looking layout engine, it provides a plugin architecture for creating datasources (which fetch data) and widgets (which display data)— freeboard then does all the work to connect the two together. Another feature of freeboard is its ability to run entirely in the browser as a single-page static web app without the need for a server. The feature makes it extremely attractive as a front-end for embedded devices which may have limited ability to serve complex and dynamic web pages.

See it in action @ https://goo.gl/hbAXXU

All plugins are available for download from the following Github repository: https://github.com/onlinux/freeboard-plugins

Slider widget plugin for freeboard.io

slider

 

 

slider-settings

At each value change, a request is sent with the argument pattern %VALUE% replaced with the value set by the slider.

 

Switch widget plugin for freeboard.io

switch

 

switch-settings

Freeboard INSTALLATION

Follow the instructions from Freeboard github site

Freeboard can be run entirely from a local hard drive. Simply download/clone the repository and open index.html. When using Chrome, you may run into issues with CORS when accessing JSON based APIs if you load from your local hard-drive— in this case you can switch to using JSONP or load index.html and run from a local or remote web server.

 

  1. git clone https://github.com/Freeboard/freeboard.git
  2. npm install
  3. grunt

Then run a index.html or index-dev.html through a webserver.

 

PLUGIN INSTALLATION

Copy the plugin file  to your freeboard installation, for example:

$ cp ./slider.js /var/www/freeboard/plugins/

Edit the freeboard index.html file and add a link to the plugin near the end of the head.js script loader, like:

head.js(
  'js/freeboard_plugins.min.js',
  'plugins/slider.js',
  'plugins/switch.js',
  $(function() {
    //DOM Ready
    freeboard.initialize(true);
  })

 

Visualiser le flux vidéo des caméras ZMODO ZH.IXY1D, ZMODO SH75D0001

zmodo-zh-ixy1dDéterminer l’adresse ip de la caméra

Avant tout, il faut connaître l’adresse IP de la caméra et pour cela se reporter au post précédent: Déterminer l’adresse IP de la caméra

Visualiser le flux avec mplayer

Flux vidéo 1280×720

#! /bin/bash
#
#  https://blog.onlinux.fr/
#
IP_CAMERA=192.168.0.210
dir=/tmp
keep_pipe_open=$dir/keep_pipe_open
touch $keep_pipe_open
(echo -ne '\x55\x55\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x50'; \
 while [ -f $keep_pipe_open ]; \
 do sleep 1; done ) | \
 netcat ${IP_CAMERA} 8000 | \
 mplayer -fps 24.976 -demuxer h264es - 

Pour le flux vidéo 320×240 remplacer ‘\x55\x55\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x50’ par

‘\x55\x55\xaa\xaa\x00\x00\x00\x00\x00\x00\x02\x90’

Visualiser le flux vidéo avec tinycam

Tinycam est une application Android. download (1)

 

 

Entrer l’adresse IP de la caméra

Et choisir comme Paramètres:
Zmodo ZP-NE-14S
Port: 8000
User:admin
Password:111111

On obtiendra le flux 320*240

Comment Obtenir une clé API OpenWeatherMap?

Page d’inscription OpenWeatherMap

Pour les personnes qui ne comprennent pas l’anglais, voici les étapes pour obtenir sa clé API afin d’obtenir les données météo de votre localité sur le widget Alertes Météorologiques.google-play-badge

 

 

 

 

 

Lorsque vous cliquez sur le bouton ”JE M’INSCRIS POUR OBTENIR MA CLÉ” depuis le panneau  de configuration  du widget Alertes Météorologiques, vous ouvrez la page d’inscription (sign up) du site OpenWeatherMap.

dynamic-highcharts-plugin-7

 

 

  1. Entrez un nom d’utilisateur qui qualifiera votre compte dans le champ Username
  2. Entrez votre adresse mél (messagerie électronique) dans le champ Enter Email
  3. Entrez un mot de passe dans le champ Password. Ce mot de passe doit être composé d’au moins 8 caractères alphanumériques. Ce mot de passe n’est pas nécessairement votre mot de passe de votre compte email. Il ne sera lié qu’à vodynamic-highcharts-plugin-8tre compte Api OpenWeatherMap.
  4. Confirmez à nouveau de mot de passe dans le champ Repeat Password
  5. Cliquez dans le petit carré où il est écrit ‘I agree to The Terms of Service and Privacy Policy’ afin d’accepter les conditions d’utilisation.
  6. Pour finir cliquez dans le carré où il est inscrit ‘Je ne suis pas un Robot’
  7. Ensuite sur le bouton Create Account( Création de compte).

 

Arrivé à cette étape vous obtenez la page suivante:

Cliquez sur la case Cancel de la fenêtre qui s’affiche en superposition.

dynamic-highcharts-plugin-9

 

Vous tombez alors sur la page suivante:
Encore quelques clics et ouf, vous obtenez votre clé.
dynamic-highcharts-plugin-10

Tout en haut de la page, cliquez sur l’onglet API keys et vous obtiendrez votre clé API.

dynamic-highcharts-plugin-11
Votre clé API est la suite de caractères alphanumériques qui se trouve dans l’encadré sous le mot Key. Je vous suggère de faire un copier/coller depuis votre mobile (clic long sur la clé -> puis copier).
Dans le panneau de configuration du widget, il ne reste plus qu’à coller la clé (clic long dans le champ ‘Entrer la clé API’ -> puis coller).

L’activation de la clé peut prendre 10 minutes.
Vous pouvez générer autant de clé qu’il vous est nécessaire ( Champ Name -> puis Generate).

Dynamic Highcharts plugin for freeboard.io

Freeboard

A damn-sexy, open source real-time dashboard builder for IOT and other web mashups.

What is It?

Freeboard is a turn-key HTML-based “engine” for dashboards. Besides a nice looking layout engine, it provides a plugin architecture for creating datasources (which fetch data) and widgets (which display data)— freeboard then does all the work to connect the two together. Another feature of freeboard is its ability to run entirely in the browser as a single-page static web app without the need for a server. The feature makes it extremely attractive as a front-end for embedded devices which may have limited ability to serve complex and dynamic web pages.

Dynamic Highcharts widget plugin for freeboard.io

This widget plugin is  based on the highcharts widget plugin created by Hugo Sequeira.

Github repository: https://github.com/onlinux/freeboard-dynamic-highcharts-plugin

See it in action @ https://goo.gl/hbAXXU

dynamic-highcharts-plugin-4

dynamic-highcharts-plugin-1

dynamic-highcharts-plugin-2

INSTALLATION

Copy the file (plugin_highcharts.js from https://github.com/onlinux/freeboard-dynamic-highcharts-plugin) to your freeboard installation, for example:

$ cp ./plugin_highcharts.js /freeboard/plugins/thirdparty

Edit the freeboard index.html file and add a link to the plugin near the end of the head.js script loader, like:

head.js(
  'js/freeboard_plugins.min.js',
  'plugins/thirdparty/plugin_highcharts.js',
  $(function() {
    //DOM Ready
    freeboard.initialize(true);
  })

 

Actuator widget plugin for freeboard.io

Freeboard

A damn-sexy, open source real-time dashboard builder for IOT and other web mashups.

What is It?

Freeboard is a turn-key HTML-based “engine” for dashboards. Besides a nice looking layout engine, it provides a plugin architecture for creating datasources (which fetch data) and widgets (which display data)— freeboard then does all the work to connect the two together. Another feature of freeboard is its ability to run entirely in the browser as a single-page static web app without the need for a server. The feature makes it extremely attractive as a front-end for embedded devices which may have limited ability to serve complex and dynamic web pages.

Actuator widget plugin for freeboard.io

This widget plugin is based on the interactive-indicator created by Stufisher.

See it in action @ https://goo.gl/hbAXXU

Actuator Widget

Actuator Widget

 

Github repository: https://github.com/onlinux/freeboard-plugins

 

I modified it  mainly to fit my needs. It merely links the states ON and OFF to URLs.

actuator-2A click on the indicator switches the state ON/OFF of the actuator which is bound to a http request.

INSTALLATION

Copy the plugin (actuator.js  from https://github.com/onlinux/freeboard-actuator-plugin) to your freeboard installation, for example:

$ cp ./actuator.js /freeboard/plugins/

Edit the freeboard index.html file and add a link to the plugin near the end of the head.js script loader, like:

head.js(
  'js/freeboard_plugins.min.js',
  'plugins/actuator.js',
  $(function() {
    //DOM Ready
    freeboard.initialize(true);
  })

 

Activer l’accès FTP des caméras ZMODO ZH.IXY1D, ZMODO SH75D0001

zmodo-zh-ixy1dDéterminer l’adresse IP de la caméra

L’adresse MAC de la caméra doit commencer par 7c:c7:09 qui correspond à la compagnie Shenzhen

basic hardware information
Device mac address: 7C:C7:09 Base16 encoding: 7CC709
vendor name: Shenzhen RF-LINK Elec&Technology.,Ltd

vendor address:
Bldg56A, 6/F, Baotian Rd3
Baoan
Shenzhen Guangdong 518100
CHINA

 Plusieurs solutions sont disponibles

Installer l’application gratuite Android Fing

https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=fr

Un scan de votre réseau indiquera l’adresse IP de la caméra dont l’adresse MAC commence par  7c:c7:09

fing-snapshot

Par commande arp sous windows/linux

Sous linux:

nmap-zmodo-linux

windows:

Un scan de votre réseau indiquera l’adresse IP de la caméra dont l’adresse MAC commence par  7c-c7-09, ici  on trouve 192.168.0.116

windows-arp

Une fois l’adresse ip de la caméra connue, une analyse des ports ouverts sur la caméra nous indique que l’on peut y accéder via telnet (port 23/tcp)

snapshot2

Accès telnet (root et password vide)

A présent, nous sommes connectés root sur la caméra.

telnet-zmodo

Activer l’accès ftp

Entrez la commande

tcpsvd -vE 0.0.0.0 21 ftpd -w / &

Vous avez validé l’accès ftp ( pas de compte  ni de mot de passe)

ftp-zmodo

Depuis une machine distante accédez à la caméra par ftp:

ftp2-zmodo1

Voilà! Vous pouvez à présent explorer l’ensemble des fichiers du système de la caméra.

A suivre

Accès au flux vidéo avec mplayer sous linux.

Remarque: Le flux vidéo est déjà accessible sous Windows IExplorer via le port 80 , sans compte MeShare

 

Dynamic Highcharts plugin for freeboard.io – Add New Area style

Plugin

Dynamic Highcharts widget plugin for freeboard.io

NEW: Two styles available dynamic-highcharts-plugin-4 spline or area

Github repository: https://github.com/onlinux/freeboard-dynamic-highcharts-plugin

See it in action @  https://goo.gl/hbAXXU

 INSTALLATION

dynamic-highcharts-plugin-1

INSTALLATION

Copy the file (plugin_highcharts.js from https://github.com/onlinux/freeboard-dynamic-highcharts-plugin) to your freeboard installation, for example:

$ cp ./plugin_highcharts.js /freeboard/plugins/thirdparty

Edit the freeboard index.html file and add a link to the plugin js file near the end of the head.js script loader, like:

head.js(
  'js/freeboard_plugins.min.js',
  'plugins/actuator.js',
  $(function() {
    //DOM Ready
    freeboard.initialize(true);
  })head.js(
 'js/freeboard_plugins.min.js',
 'plugins/thirdparty/plugin_highcharts.js',
 $(function() {
 //DOM Ready
 freeboard.initialize(true);
 })

actuator-1

Détecteur de choc & TX 433Mhz pilotés avec le Microcontrôleur AVR ATTINY85

Circuit monté sur breadboard

Circuit monté sur breadboard

Avec la mise en veille (SLEEP_MODE_PWR_DOWN) et l’utilisation des interruptions , le circuit au repos ne consomme que 4µA avec un microcontrôleur Attiny85 (1€89 sur ebay) . J’alimente le circuit avec une pile bouton CR2032 3V achetée chez Ikea par lot de 8 pour quelques €uros. Le circuit devrait tourner beaucoup plus d’une année. 20160122_104647

300px-KY002

Détecteur de choc

A chaque détection de choc, le transmetteur 433Mhz émet un signal RF qui est reconnu par une Zibase en périphérique E10. Ce signal RF est défini dans le code de l’Attiny85 à la ligne n°46 (mySwitch.switchOn(‘e’, 3,2); // Test Zibase signal id E10) Dans mon circuit, je n’alimente pas le détecteur  en 5V, mais je l’utilise comme simple contacteur qui déclenche une interruption lorsqu’il y a détection de choc ( voir code: digitalWrite(WAKEUP_PIN, HIGH); // Activate internal pullup resistor ).

sku_334387_1
Tx 433MHz

Le détecteur,  grâce à la zibase, est intégré au système d’alarme . Présentement, il m’est inutile de monter une antenne de 17,3cm. En effet le signal est suffisamment puissant pour être reçu 5/5 à environ 7 mètres du récepteur RF ( la zibase, ou mon stick RTL-SDR connecté à un Raspberry Pi).

Détection niveau batterie faible

Un niveau de batterie faible est indiqué par la led qui flashe toutes les 8 secondes. Pour la détection de niveau de batterie faible, je me suis inspiré du post de Nick Gammon http://www.gammon.com.au/power

uint16_t readVcc(void) {
  uint16_t result;
  // Read 1.1V reference against Vcc
  ADMUX = (0<<REFS0) | (12<<MUX0);
  delay(2); // Wait for Vref to settle
  ADCSRA |= (1<<ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCW;
  return 1018500L / result; // Back-calculate AVcc in mV
}

Consommation du circuit avec un Arduino et Attiny85

sku_334387_1

TX 433.92MHz

  1. Attiny85: 4µA 
  2. Avec un arduino Nano : 43mA !!!
  3. Arduino M.J duino uno: 6,5mA
  4. Arduino XDRduino: 25mA
  5. Arduino Mini Pro: 3,5 mA . En ôtant la LED (on) et le régulateur de tension 5V, on pourrait tomber à moins d’1mA

RF Shock sensor Sketch_bb

Le script pour Attiny85

Pour programmer l’Attiny85 à l’aide d’un arduino, je me suis inspiré du post d’Erwan http://labalec.fr/erwan/?p=1508. Éventuellement, ne pas oublier de graver la séquence d’initialisation (bootloader) de l’Attiny85.

// https://blog.onlinux.fr/
//
//
//                           +-\/-+
//          Ain0 (D 5) PB5  1|    |8  Vcc
//          Ain3 (D 3) PB3  2|    |7  PB2 (D 2) Ain1 -
// LED +pin Ain2 (D 4) PB4  3|    |6  PB1 (D 1) pwm1 - Shock sensor pin
//                     GND  4|    |5  PB0 (D 0) pwm0 - RF433 tx pin
// 
// **** INCLUDES *****
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <RCSwitch.h>

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#define LOW_BATTERY_LEVEL 2500 //mV. Led will flash if battery level is lower than this value
#define WDT_COUNT  225  // wdt is set to 8s, 8x225=1800 seconds = 30 minutes

volatile boolean f_wdt = 0;
volatile byte count = WDT_COUNT;
volatile boolean f_int = 0;
volatile boolean lowBattery = 0;
volatile boolean switchState = HIGH;

const byte TX_PIN   = PB0;  // Pin number for the 433mhz OOK transmitter
const byte LED_PIN  = PB4;
const byte WAKEUP_PIN = PB1;  // Use pin 1 as wake up pin

RCSwitch mySwitch = RCSwitch();

/******************************************************************/
 
void setup()
{
  setup_watchdog(9);
  pinMode(TX_PIN, OUTPUT);
  pinMode(WAKEUP_PIN, INPUT);        // Set the pin to input
  digitalWrite(WAKEUP_PIN, HIGH);    // Activate internal pullup resistor  
  mySwitch.enableTransmit(TX_PIN);
  
  mySwitch.switchOn('e', 3,2);      // Test Zibase signal id E10
  
  lowBattery =  !(readVcc() >= LOW_BATTERY_LEVEL); // Initialize battery level value
  
  PCMSK  |= bit (PCINT1);  // set pin change interrupt PB1
  GIFR   |= bit (PCIF);    // clear any outstanding interrupts
  GIMSK  |= bit (PCIE);    // enable pin change interrupts  
  sei();         
}


// set system into the sleep state 
// system wakes up when watchdog is timed out
void system_sleep() {
  cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF

  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
  sleep_enable();

  sleep_mode();                        // System sleeps here

  sleep_disable();                     // System continues execution here when watchdog timed out 
  sbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter ON
}

// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9=8sec
void setup_watchdog(int ii) {

  byte bb;
  int ww;
  if (ii > 9 ) ii=9;
  bb=ii & 7;
  if (ii > 7) bb|= (1<<5);
  bb|= (1<<WDCE);
  ww=bb;

  MCUSR &= ~(1<<WDRF);
  // start timed sequence
  WDTCR |= (1<<WDCE) | (1<<WDE);   
  // set new watchdog timeout value   
  WDTCR = bb;   WDTCR |= _BV(WDIE); 
}
    
// Watchdog Interrupt Service / is executed when watchdog timed out 
ISR(WDT_vect) {   
  if (count >= WDT_COUNT) {
   f_wdt=true;  // set WDTl flag
   count=0;
  }
  count++;
} 

ISR (PCINT0_vect){
  f_int=true; // set INT flag
}
 
void loop()
{
  system_sleep();
  
  if (lowBattery)        // lowBattery is at setup().
    lowBatteryWarning(); // Flash for 1ms every 8s http://www.gammon.com.au/power
  
  
  if (f_int) {
    blink(2);
    cli();
    mySwitch.switchOn('e', 3,2);      // Zibase signal id E10
    f_int=false;  // Reset INT Flag
    sei();
  } 
  else if ( f_wdt ) {
    blink(5);
    cli(); // disable interrupts
    lowBattery = !(readVcc() >= LOW_BATTERY_LEVEL);
    f_wdt=false; // reset WDT Flag
    sei(); // enable interrupts
  }
    
}


void blink(int ii) {
  pinMode(LED_PIN, OUTPUT);
  for (byte i = ii ;  i > 0 ; i--){
     digitalWrite(LED_PIN, HIGH);
     delay(50);
     digitalWrite(LED_PIN, LOW); 
     delay(50);
  }
  
  pinMode(LED_PIN, INPUT); // reduce power
}

void lowBatteryWarning () {
  pinMode(LED_PIN, OUTPUT);
  digitalWrite (LED_PIN, HIGH);  
  delay (1);       // mS        
  digitalWrite (LED_PIN, LOW);    
  //delay (999); 
  pinMode(LED_PIN, INPUT); // reduce power  
}

uint16_t readVcc(void) {
  uint16_t result;
  // Read 1.1V reference against Vcc
  ADMUX = (0<<REFS0) | (12<<MUX0);
  delay(2); // Wait for Vref to settle
  ADCSRA |= (1<<ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCW;
  return 1018500L / result; // Back-calculate AVcc in mV
}

Et la suite…

Le circuit pourrait ếtre encore plus miniaturisé en se passant du breadboard.
Maintenant il ne reste qu’à trouver un joli boîtier pour cacher toute l’électronique.
Malheureusement je n’ai pas d’imprimante 3D!

20160122_121130_cut

Le détecteur de choc et en haut le détecteur d’ouverture

Si vous avez des idées pour une solution esthétique, n’hésitez pas!