<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.raspibo.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dariomas</id>
	<title>raspibo - Contributi utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://www.raspibo.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dariomas"/>
	<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php/Speciale:Contributi/Dariomas"/>
	<updated>2026-05-07T19:14:00Z</updated>
	<subtitle>Contributi utente</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5597</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5597"/>
		<updated>2016-06-21T14:40:31Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* graphite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializzare il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  &amp;lt;del&amp;gt;arkiweb.conf&amp;lt;/del&amp;gt;&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* &amp;lt;del&amp;gt;'''TODO''' aggiungere dal repo svn il file&amp;lt;/del&amp;gt;&lt;br /&gt;
  &amp;lt;del&amp;gt;'''''/etc/arkimet/scan-bufr/generic.lua'''''&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/RemoteProcedure&amp;diff=5560</id>
		<title>Gruppo Meteo/RemoteProcedure</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/RemoteProcedure&amp;diff=5560"/>
		<updated>2016-05-31T08:58:19Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* configure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= r-map implementation overview =&lt;br /&gt;
&lt;br /&gt;
=== Remote procedure supportate ===&lt;br /&gt;
&lt;br /&gt;
Ogni comando/risposta Jsonrpc sarebbe meglio rimanesse entro i 144 caratteri.&lt;br /&gt;
&lt;br /&gt;
==== configure ====&lt;br /&gt;
configura il modulo.&lt;br /&gt;
&lt;br /&gt;
parametri:&lt;br /&gt;
* bool reset: riporta le configurazioni ai valori di default&lt;br /&gt;
* char mqttrootpath: prima parte del path di pubblicazione su MQTT&lt;br /&gt;
* int mqttsampletime: intervallo tra le minure in secondi&lt;br /&gt;
* char mqttserver:  server MQTT&lt;br /&gt;
* char mqttuser: MQTT user&lt;br /&gt;
* char mqttpassword: MQTT password&lt;br /&gt;
* int[16] key: AES key&lt;br /&gt;
* int[16] iv: AES CBC iv&lt;br /&gt;
* char ntpserver:  server MQTT&lt;br /&gt;
* int[6] date: set date and time [2014,2,10,18,45,18]&lt;br /&gt;
* long int thisnode: RF24Network node address&lt;br /&gt;
* int channel: RF 24 channel&lt;br /&gt;
* byte mac[6]= ethernet mac address; use (0,0,0,0,0,1) for master1, use (0,0,0,0,0,2) for master2&lt;br /&gt;
* bool save: save configuration into EEPROM&lt;br /&gt;
&lt;br /&gt;
relativi a un sensore (aggiunge un sensore):&lt;br /&gt;
* char mqttpath: seconda parte del path di pubblicazione su MQTT&lt;br /&gt;
* char driver: driver locale del sensore&lt;br /&gt;
* int node: RF24Network node&lt;br /&gt;
* char type: driver remoto&lt;br /&gt;
* int address: address I2C&lt;br /&gt;
&lt;br /&gt;
==== prepare ====&lt;br /&gt;
prepare sensors for successive read&lt;br /&gt;
return waittime in ms; the time to wait before read the data from sensor&lt;br /&gt;
&lt;br /&gt;
parametri:&lt;br /&gt;
* char driver: driver locale del sensore&lt;br /&gt;
* int node: RF24Network node&lt;br /&gt;
* char type: driver remoto&lt;br /&gt;
* int address: address I2C&lt;br /&gt;
&lt;br /&gt;
==== prepandget ====&lt;br /&gt;
get the measure from sensor&lt;br /&gt;
&lt;br /&gt;
parametri:&lt;br /&gt;
* char driver: driver locale del sensore&lt;br /&gt;
* int node: RF24Network node&lt;br /&gt;
* char type: driver remoto&lt;br /&gt;
* int address: address I2C&lt;br /&gt;
&lt;br /&gt;
==== getjson ====&lt;br /&gt;
return json with btable and values&lt;br /&gt;
torna i valori di una o più osservazione/campionamento.&lt;br /&gt;
&lt;br /&gt;
parametri:&lt;br /&gt;
* char driver: driver locale del sensore&lt;br /&gt;
* int node: RF24Network node&lt;br /&gt;
* char type: driver remoto&lt;br /&gt;
* int address: address I2C&lt;br /&gt;
&lt;br /&gt;
==== rf24rpc ====&lt;br /&gt;
Esegue una procedura remota su un altro nodo tramite trasporto RF24Network.&lt;br /&gt;
In pratica incapsula una RPC in una RPC.&lt;br /&gt;
* node&amp;quot;: nodo su cui eseguire la remote call procedure&lt;br /&gt;
*  tutti parametri standard di una json-rpc del tipo &lt;br /&gt;
 &amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;method&amp;quot;:&amp;quot;configure&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;reset&amp;quot;:true},&amp;quot;id&amp;quot;:0},&amp;quot;id&amp;quot;:0&lt;br /&gt;
&lt;br /&gt;
==== togglepin ====&lt;br /&gt;
Attuatore che accende/spegne uno o più pin.&lt;br /&gt;
&lt;br /&gt;
parametri:&lt;br /&gt;
* integer n: pin number (pins 4,5,6,7 are supported)&lt;br /&gt;
* bool s: true=on; false=off&lt;br /&gt;
 {&amp;quot;jsonrpc&amp;quot;: &amp;quot;2.0&amp;quot;, &amp;quot;method&amp;quot;: &amp;quot;togglepin&amp;quot;, &amp;quot;params&amp;quot;: [{&amp;quot;n&amp;quot;:4,&amp;quot;s&amp;quot;:true},{&amp;quot;n&amp;quot;:5,&amp;quot;s&amp;quot;:false}], &amp;quot;id&amp;quot;: 0}&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5555</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5555"/>
		<updated>2016-05-11T12:32:10Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* mosquitto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializzare il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  &amp;lt;del&amp;gt;arkiweb.conf&amp;lt;/del&amp;gt;&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* &amp;lt;del&amp;gt;'''TODO''' aggiungere dal repo svn il file&amp;lt;/del&amp;gt;&lt;br /&gt;
  &amp;lt;del&amp;gt;'''''/etc/arkimet/scan-bufr/generic.lua'''''&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5554</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5554"/>
		<updated>2016-05-11T12:29:29Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* arkimet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializzare il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  &amp;lt;del&amp;gt;arkiweb.conf&amp;lt;/del&amp;gt;&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* &amp;lt;del&amp;gt;'''TODO''' aggiungere dal repo svn il file&amp;lt;/del&amp;gt;&lt;br /&gt;
  &amp;lt;del&amp;gt;'''''/etc/arkimet/scan-bufr/generic.lua'''''&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5542</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5542"/>
		<updated>2016-05-05T07:44:38Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializzare il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  &amp;lt;del&amp;gt;arkiweb.conf&amp;lt;/del&amp;gt;&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5541</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5541"/>
		<updated>2016-05-05T07:43:53Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializzare il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  &amp;lt;del&amp;gt;arkiweb.conf&amp;lt;/del&amp;gt;&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5540</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5540"/>
		<updated>2016-05-05T07:43:20Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializzare il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5539</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5539"/>
		<updated>2016-05-05T07:42:34Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt; Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5538</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5538"/>
		<updated>2016-05-05T07:41:55Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;del&amp;gt;* Copiare http2mqtt in /var/www/html/http2mqtt&amp;lt;/del&amp;gt;&lt;br /&gt;
 &amp;lt;del&amp;gt; http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5534</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5534"/>
		<updated>2016-05-03T10:57:17Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm&lt;br /&gt;
 yum install  http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5533</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5533"/>
		<updated>2016-05-03T10:56:28Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 https ://github.com/r-map/rmap/blob/master/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5532</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5532"/>
		<updated>2016-05-03T10:55:25Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
 rpm --import https ://www.rabbitmq.com/rabbitmq-signing-key-public.asc&lt;br /&gt;
 yum install http ://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm http ://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5531</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5531"/>
		<updated>2016-05-03T10:02:08Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
''file rabbitmq.config''&lt;br /&gt;
&lt;br /&gt;
'''disk_free_limit'''&lt;br /&gt;
&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Controlling System Limits on Linux'''&lt;br /&gt;
&lt;br /&gt;
The main setting that needs adjustment is the max number of open files, also known as ulimit -n. &lt;br /&gt;
The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). &lt;br /&gt;
We recommend allowing for at least 65536 file descriptors for user rabbitmq in production environments. &lt;br /&gt;
4096 should be sufficient for most development workloads.&lt;br /&gt;
&lt;br /&gt;
''file /etc/security/limits.d/50-rabbitmq.conf''&lt;br /&gt;
 #&lt;br /&gt;
 #&amp;lt;domain&amp;gt;      &amp;lt;type&amp;gt;  &amp;lt;item&amp;gt;         &amp;lt;value&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 rabbitmq         soft    nofile          4096&lt;br /&gt;
 rabbitmq         hard    nofile          65536&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5527</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5527"/>
		<updated>2016-04-28T14:27:40Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* graphite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* cambiare i permessi di /var/log/graphite-web&lt;br /&gt;
 chown rmap /var/log/graphite-web&lt;br /&gt;
 chmod g+w /var/log/graphite-web&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5499</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5499"/>
		<updated>2016-04-19T14:54:05Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* graphite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In /etc/graphite-web/local_settings.py&lt;br /&gt;
configurare&lt;br /&gt;
 DATABASES = {}&lt;br /&gt;
come in rmap&lt;br /&gt;
ed eventualmente configurare anche la sezione EMAIL&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/graphite-manage migrate&lt;br /&gt;
Al un seccessivo httpd restart i db di rmap e graphite dovrebbero essere unificati.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'NAME': 'rmapadmin',&lt;br /&gt;
        'ENGINE': 'django.db.backends.mysql',&lt;br /&gt;
        'USER': 'rmapadmin',&lt;br /&gt;
        'PASSWORD': 'rmapadmin',&lt;br /&gt;
        'HOST': '',&lt;br /&gt;
        'PORT': ''&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5498</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5498"/>
		<updated>2016-04-19T13:30:51Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* graphite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
 UDP_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5497</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5497"/>
		<updated>2016-04-19T10:55:22Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* mosquitto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/aclfile&lt;br /&gt;
 /etc/mosquitto/pwfile&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5496</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5496"/>
		<updated>2016-04-19T09:40:52Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5495</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5495"/>
		<updated>2016-04-19T09:39:28Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5494</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5494"/>
		<updated>2016-04-19T09:18:23Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* mariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5489</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5489"/>
		<updated>2016-04-18T11:58:32Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* mariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 mkdir -p /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl start mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5488</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5488"/>
		<updated>2016-04-18T11:52:45Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare Apache HTTP Server: pacchetti httpd mod_wsgi&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5487</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5487"/>
		<updated>2016-04-18T11:50:57Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* mariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare il pacchetto httpd (Apache HTTP Server)&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server mariadb-libs&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file rmap.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 &lt;br /&gt;
 datadir = /rmap/mysql&lt;br /&gt;
 skip-networking&lt;br /&gt;
 server-id       = 1&lt;br /&gt;
 default-storage-engine = InnoDB&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
 innodb_data_home_dir = /rmap/mysql&lt;br /&gt;
 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
 innodb_log_group_home_dir = /var/lib/mysql&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5486</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5486"/>
		<updated>2016-04-18T11:33:35Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare il pacchetto httpd (Apache HTTP Server)&lt;br /&gt;
* Installare [[#mariaDB|MariaDB]]&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5485</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5485"/>
		<updated>2016-04-18T10:32:58Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: Annullata la modifica 5484 di Dariomas (discussione)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5484</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=5484"/>
		<updated>2016-04-18T10:27:12Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* RMAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* Installare rmap.noarc&lt;br /&gt;
* Installare mariadb-server mariadb-libs (se il DB è sullo steso server di rmap)&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
&lt;br /&gt;
modificare:&lt;br /&gt;
 /usr/lib/python2.7/site-packages/tagging/forms.py&lt;br /&gt;
inserendo:&lt;br /&gt;
 fields = &amp;quot;__all__&amp;quot;&lt;br /&gt;
dopo:&lt;br /&gt;
 model = Tag&lt;br /&gt;
&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4422</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4422"/>
		<updated>2015-07-17T14:55:43Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq_auth_backend_http */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riavviare il servizio&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4421</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4421"/>
		<updated>2015-07-17T14:54:58Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq_auth_backend_http */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
&lt;br /&gt;
Risulterà, per esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4420</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4420"/>
		<updated>2015-07-17T14:50:26Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
 [&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
  {rabbitmq_auth_backend_http,&lt;br /&gt;
   [{user_path,     &amp;quot;http://localhost:8000/auth/user&amp;quot;},&lt;br /&gt;
    {vhost_path,    &amp;quot;http://localhost:8000/auth/vhost&amp;quot;},&lt;br /&gt;
    {resource_path, &amp;quot;http://localhost:8000/auth/resource&amp;quot;}]}&lt;br /&gt;
 ].&lt;br /&gt;
&lt;br /&gt;
service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4419</id>
		<title>Gruppo Meteo/HowTo/server</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowTo/server&amp;diff=4419"/>
		<updated>2015-07-17T10:46:04Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* rabbitmq-server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installazione = &lt;br /&gt;
== repo rmap ==&lt;br /&gt;
* copiare in /etc/yum.repos.d/ il file dal link&lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmapcentos.repo&lt;br /&gt;
oppure &lt;br /&gt;
 http://rmapv.rmap.cc/repo/rmap/rmap.repo&lt;br /&gt;
&lt;br /&gt;
* installare rmap con le dipendenze&lt;br /&gt;
 yum groupinstall rmap&lt;br /&gt;
* installare monit&lt;br /&gt;
 yum install monit&lt;br /&gt;
* configurare monit&lt;br /&gt;
 /etc/monit.d/rmap&lt;br /&gt;
 /etc/monitrc&lt;br /&gt;
&lt;br /&gt;
== RMAP ==&lt;br /&gt;
&lt;br /&gt;
* Installare il pacchetto MySQL-python&lt;br /&gt;
* installare rmap.noarc&lt;br /&gt;
* Inizializza il DB di rmap (file di configurazione in /etc/rmap )&lt;br /&gt;
 rmapctrl --syncdb&lt;br /&gt;
  '''rmap:pamr'''&lt;br /&gt;
* Modificare /etc/httpd/conf/httpd.conf&lt;br /&gt;
 User rmap&lt;br /&gt;
 Group rmap&lt;br /&gt;
* installare PHP &lt;br /&gt;
&lt;br /&gt;
per aggiungere il modulo HTTP2MQTT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* aggiungere in /etc/httpd/conf.d&lt;br /&gt;
  arkiweb.conf&lt;br /&gt;
  graphite-web.conf&lt;br /&gt;
  http2mqtt.conf&lt;br /&gt;
  rmap.conf&lt;br /&gt;
* agiungere la directory per i socket WSGI&lt;br /&gt;
 mkdir /run/wsgirmap/&lt;br /&gt;
 chown rmap:rmap /run/wsgirmap/&lt;br /&gt;
* Cambiare le impostazioni di invio SMTP&lt;br /&gt;
 /etc/rmap/rmap-site.cfg&lt;br /&gt;
&lt;br /&gt;
* Copiare http2mqtt in /var/www/html/http2mqtt&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/php/&lt;br /&gt;
&lt;br /&gt;
== mariaDB ==&lt;br /&gt;
&lt;br /&gt;
 yum install mariadb-server&lt;br /&gt;
&lt;br /&gt;
* copiare in  /etc/my.cnf.d il file&lt;br /&gt;
 rmap.cnf&lt;br /&gt;
&lt;br /&gt;
* creare la directory /rmap/mysql&lt;br /&gt;
 chown mysql:mysql /rmap/mysql&lt;br /&gt;
&lt;br /&gt;
* far partire il DB server&lt;br /&gt;
 systemctl status mariadb.service&lt;br /&gt;
&lt;br /&gt;
* creare il DB&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 create database rmap;&lt;br /&gt;
 CREATE USER 'rmap'@'%' IDENTIFIED BY 'rmap';&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmap.* TO 'rmap'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 CREATE USER 'rmapadmin'@'%' IDENTIFIED BY 'rmapadmin';&lt;br /&gt;
 create database rmapadmin;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON rmapadmin.* TO 'rmapadmin'@'%' with GRANT option;&lt;br /&gt;
&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
== rabbitmq-server ==&lt;br /&gt;
&lt;br /&gt;
* è necessario installare due pacchetti&lt;br /&gt;
python-pika per i client&lt;br /&gt;
rabbitmq-server per il server&lt;br /&gt;
&lt;br /&gt;
* attivazione server e plugin&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
 service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_management&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_shovel_management&lt;br /&gt;
&lt;br /&gt;
* cambio password amministrazione:&lt;br /&gt;
rabbitmqctl change_password guest 123456&lt;br /&gt;
&lt;br /&gt;
* verifica risoluzione nome; nel caso fare:&lt;br /&gt;
The next thing to do is add the hostname’s short names in&lt;br /&gt;
your /etc/hosts file. Why? Because RabbitMQ does not like FQDN&lt;br /&gt;
(Attempting to do this will result in the following error: ** System NOT&lt;br /&gt;
running to use fully qualified hostnames **).&lt;br /&gt;
&lt;br /&gt;
* gestione porta TCP&lt;br /&gt;
la porta dedicata a AMQP è la 15672&lt;br /&gt;
grantire l'accesso dove e come necessario&lt;br /&gt;
&lt;br /&gt;
* gestione porta interfaccia grafica management&lt;br /&gt;
The web UI is located at: http://server-name:15672/          &lt;br /&gt;
on a fresh installation the user &amp;quot;guest&amp;quot; is created with password&lt;br /&gt;
&amp;quot;guest&amp;quot;, ma noi la password l'abbiamo cambiata.&lt;br /&gt;
attenzione ci si collega di default solo da localhost&lt;br /&gt;
se non va bene bisogna cambiare la conf di loopback_users in&lt;br /&gt;
/etc/rabbitmq/rabbitmq.config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{rabbit,&lt;br /&gt;
         [&lt;br /&gt;
         %% Uncomment the following line if you want to allow access to the&lt;br /&gt;
         %% guest user from anywhere on the network.&lt;br /&gt;
           {loopback_users, []},&lt;br /&gt;
&lt;br /&gt;
           {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_http]}&lt;br /&gt;
         ]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{rabbitmq_auth_backend_http,&lt;br /&gt;
         [&lt;br /&gt;
           {user_path,     &amp;quot;http://localhost/auth/user&amp;quot;},&lt;br /&gt;
           {vhost_path,    &amp;quot;http://localhost/auth/vhost&amp;quot;},&lt;br /&gt;
           {resource_path, &amp;quot;http://localhost/auth/resource&amp;quot;}&lt;br /&gt;
         ]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configurazione&lt;br /&gt;
 &lt;br /&gt;
Dal menù &amp;quot;Overview&amp;quot; selezionare la voce &amp;quot;Import / export definitions&amp;quot; e &amp;quot;upload broker definition&amp;quot;&lt;br /&gt;
 http://sourceforge.net/p/r-map/code/HEAD/tree/trunk/rabbitmq/rabbit_server.json&lt;br /&gt;
&lt;br /&gt;
* tuning&lt;br /&gt;
ecco solo alcuni suggerimenti:&lt;br /&gt;
file rabbitmq.config&lt;br /&gt;
&lt;br /&gt;
 disk_free_limit&lt;br /&gt;
Disk free space limit of the&lt;br /&gt;
partition on which RabbitMQ is&lt;br /&gt;
storing data. When available disk&lt;br /&gt;
space falls below this limit, flow&lt;br /&gt;
control is triggered. The value may&lt;br /&gt;
be set relative to the total amount&lt;br /&gt;
of RAM (e.g. {mem_relative, 1.0}).&lt;br /&gt;
The value may also be set to an&lt;br /&gt;
integer number of bytes. By default&lt;br /&gt;
free disk space must exceed 50MB.&lt;br /&gt;
See the memory-based flow control&lt;br /&gt;
documentation. &lt;br /&gt;
&lt;br /&gt;
Default: 50000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rabbitmq_auth_backend_http ===&lt;br /&gt;
&lt;br /&gt;
fare riferimento a https://github.com/simonmacmullen/rabbitmq-auth-backend-http&lt;br /&gt;
&lt;br /&gt;
Sacricare il plugin da qui&lt;br /&gt;
http://www.rabbitmq.com/community-plugins.html&lt;br /&gt;
e metterlo in:&lt;br /&gt;
 /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/&lt;br /&gt;
&lt;br /&gt;
attivarlo con:&lt;br /&gt;
 rabbitmq-plugins enable rabbitmq_auth_backend_http&lt;br /&gt;
&lt;br /&gt;
aggiungere in /etc/rabbitmq/rabbitmq.config&lt;br /&gt;
 [&lt;br /&gt;
  {rabbit, [{auth_backends, [rabbit_auth_backend_http]}]},&lt;br /&gt;
  {rabbitmq_auth_backend_http,&lt;br /&gt;
   [{user_path,     &amp;quot;http://localhost:8000/auth/user&amp;quot;},&lt;br /&gt;
    {vhost_path,    &amp;quot;http://localhost:8000/auth/vhost&amp;quot;},&lt;br /&gt;
    {resource_path, &amp;quot;http://localhost:8000/auth/resource&amp;quot;}]}&lt;br /&gt;
 ].&lt;br /&gt;
&lt;br /&gt;
service rabbitmq-server restart&lt;br /&gt;
&lt;br /&gt;
=== showel configuration ===&lt;br /&gt;
&lt;br /&gt;
in /etc/sudoers.d/rmap&lt;br /&gt;
 Defaults:rmap !requiretty&lt;br /&gt;
 rmap ALL= NOPASSWD: /sbin/rabbitmqctl&lt;br /&gt;
&lt;br /&gt;
== DB-All.e ==&lt;br /&gt;
* installare il pacchetto mysql-connector-odbc&lt;br /&gt;
* aggiungere il DSN in /etc/odbc.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [rmap]&lt;br /&gt;
 Description     = MySQL rmap database&lt;br /&gt;
 Trace       = Off&lt;br /&gt;
 TraceFile   = stderr&lt;br /&gt;
 Driver      = MySQL&lt;br /&gt;
 SERVER      = localhost&lt;br /&gt;
 USER        = rmap&lt;br /&gt;
 PASSWORD    = rmap&lt;br /&gt;
 PORT        = 3306&lt;br /&gt;
 DATABASE    = rmap&lt;br /&gt;
 &lt;br /&gt;
* inizializza il DB&lt;br /&gt;
 dbadb wipe --dsn=rmap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== arkimet ==&lt;br /&gt;
* aggiungere alias arkiserver al hostname in /etc/hosts &lt;br /&gt;
* creare utente rmap&lt;br /&gt;
 useradd -r -s /sbin/nologin rmap&lt;br /&gt;
* '''TODO''' aggiungere dal repo svn il file&lt;br /&gt;
  '''''/etc/arkimet/scan-bufr/generic.lua'''''&lt;br /&gt;
&lt;br /&gt;
* editare /etc/default/arki-server&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; #echo &amp;quot;ERROR - Please configure /etc/defaults/arkimet&amp;quot;&lt;br /&gt;
 #exit 1&lt;br /&gt;
 # Remove above lines after setting configuration below.&lt;br /&gt;
&lt;br /&gt;
 DATASET_CONFIG=/rmap/arkimet/arkimet.conf&lt;br /&gt;
 DAEMONUSER=rmap&lt;br /&gt;
 LOGDIR=/var/log/arkimet&lt;br /&gt;
 SERVER_OPTIONS=&amp;quot;--url=http://arkiserver:8090  --port=8090 --accesslog=$LOGDIR/server-access.log --errorlog=$LOGDIR/server-error.log $DATASET_CONFIG&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* creare la directory per i dati&lt;br /&gt;
 mkdir /rmap/arkimet&lt;br /&gt;
 chown rmap:rmap /rmap/arkimet&lt;br /&gt;
* configurare arkimet scompattando la struttura del file  &lt;br /&gt;
arkimetconf.tgz &lt;br /&gt;
  chown -R rmap:rmap /rmap/arkimet&lt;br /&gt;
&lt;br /&gt;
== mosquitto ==&lt;br /&gt;
* modificare&lt;br /&gt;
 /etc/mosquitto/mosquitto.conf&lt;br /&gt;
 /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
* '''per systemd modificare il file''' /usr/lib/systemd/system/mosquitto.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/sbin/mosquitto ''' -c /etc/mosquitto/mosquitto.conf '''&lt;br /&gt;
 User=mosquitto&lt;br /&gt;
''''segnalare BUG''''&lt;br /&gt;
 &lt;br /&gt;
=== mosquitto-auth-plug ===&lt;br /&gt;
Riferirsi a:&lt;br /&gt;
https://github.com/jpmens/mosquitto-auth-plug&lt;br /&gt;
&lt;br /&gt;
copiare i sorgenti in locale&lt;br /&gt;
&lt;br /&gt;
creare  config.mk come segue:&lt;br /&gt;
&lt;br /&gt;
 # Select your backends from this list&lt;br /&gt;
 BACKEND_CDB ?= no&lt;br /&gt;
 BACKEND_MYSQL ?= no&lt;br /&gt;
 BACKEND_SQLITE ?= no&lt;br /&gt;
 BACKEND_REDIS ?= no&lt;br /&gt;
 BACKEND_POSTGRES ?= no&lt;br /&gt;
 BACKEND_LDAP ?= no&lt;br /&gt;
 BACKEND_HTTP ?= yes&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path to the Mosquitto sources here&lt;br /&gt;
 MOSQUITTO_SRC =&lt;br /&gt;
 &lt;br /&gt;
 # Specify the path the OpenSSL here&lt;br /&gt;
 OPENSSLDIR = /usr&lt;br /&gt;
&lt;br /&gt;
poi:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 mkdir /var/lib/mosquitto/plugins&lt;br /&gt;
 cp auth-plug.so /var/lib/mosquitto/plugins/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
creare il file /etc/mosquitto/conf.d/rmap.conf&lt;br /&gt;
&lt;br /&gt;
 auth_plugin /var/lib/mosquitto/plugins/auth-plug.so&lt;br /&gt;
 auth_opt_backends http&lt;br /&gt;
 auth_opt_http_hostname localhost&lt;br /&gt;
 auth_opt_http_ip 127.0.0.1&lt;br /&gt;
 auth_opt_http_port 80&lt;br /&gt;
 auth_opt_http_getuser_uri /auth/auth&lt;br /&gt;
 auth_opt_http_superuser_uri /auth/superuser&lt;br /&gt;
 auth_opt_http_aclcheck_uri /auth/acl&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/mosquitto/aclfile&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# This affects access control for clients with no username.&lt;br /&gt;
#topic read $SYS/#&lt;br /&gt;
topic read #&lt;br /&gt;
topic write test/#&lt;br /&gt;
&lt;br /&gt;
# This only affects clients with username &amp;quot;rmap&amp;quot;.&lt;br /&gt;
user rmap&lt;br /&gt;
topic #&lt;br /&gt;
&lt;br /&gt;
# This affects all clients.&lt;br /&gt;
#pattern write $SYS/broker/connection/%c/state&lt;br /&gt;
&lt;br /&gt;
pattern write rmap/%u/#&lt;br /&gt;
pattern write report/%u/#&lt;br /&gt;
pattern write mobile/%u/#&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiungere la password del amministratore in /etc/mosquitto/pwfile&lt;br /&gt;
 mosquitto_passwd&lt;br /&gt;
&lt;br /&gt;
restart server:&lt;br /&gt;
&lt;br /&gt;
 service mosquitto restart&lt;br /&gt;
&lt;br /&gt;
== server ports ==&lt;br /&gt;
&lt;br /&gt;
 * 22         ssh&lt;br /&gt;
 * 80         webserver&lt;br /&gt;
 * 443        monit web server&lt;br /&gt;
 * 1883 8883  MQTT&lt;br /&gt;
 * 5672       amqp&lt;br /&gt;
 * 2003       carbon-cache&lt;br /&gt;
 * 5925       borinud&lt;br /&gt;
 * 15672      rabbitmq_management&lt;br /&gt;
 * 8090       arkimet&lt;br /&gt;
&lt;br /&gt;
== graphite ==&lt;br /&gt;
* installare python-django-1.5.8&lt;br /&gt;
* installare graphite-web&lt;br /&gt;
* installare python-carbon&lt;br /&gt;
* editare /etc/carbon/carbon.conf&lt;br /&gt;
 LINE_RECEIVER_INTERFACE = 127.0.0.1&lt;br /&gt;
 ENABLE_UDP_LISTENER = True&lt;br /&gt;
* editare /etc/carbon/storage-schemas.conf&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Schema definitions for Whisper files. Entries are scanned in order,&lt;br /&gt;
# and first match wins. This file is scanned for changes every 60 seconds.&lt;br /&gt;
#&lt;br /&gt;
#  [name]&lt;br /&gt;
#  pattern = regex&lt;br /&gt;
#  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...&lt;br /&gt;
&lt;br /&gt;
# Carbon's internal metrics. This entry should match what is specified in&lt;br /&gt;
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings&lt;br /&gt;
[carbon]&lt;br /&gt;
pattern = ^carbon\.&lt;br /&gt;
retentions = 60:7d&lt;br /&gt;
&lt;br /&gt;
[rmap_10sec_for_10day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^rmap\.&lt;br /&gt;
retentions = 10s:10d&lt;br /&gt;
&lt;br /&gt;
[report_60sec_for_60day]&lt;br /&gt;
#pattern = .*&lt;br /&gt;
pattern = ^report\.&lt;br /&gt;
retentions = 60s:30d&lt;br /&gt;
&lt;br /&gt;
[default_1min_13months]&lt;br /&gt;
pattern = .*&lt;br /&gt;
retentions = 1m:395d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== graphite Fedora 20 fast start ==&lt;br /&gt;
&lt;br /&gt;
yum install graphite-web python-carbon&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py syncdb&lt;br /&gt;
&lt;br /&gt;
chown -R rmap:rmap /var/lib/graphite-web&lt;br /&gt;
&lt;br /&gt;
service carbon-cache start&lt;br /&gt;
&lt;br /&gt;
python /usr/lib/python2.7/site-packages/graphite/manage.py runserver&lt;br /&gt;
&lt;br /&gt;
python /usr/share/doc/graphite-web/example-client.py&lt;br /&gt;
&lt;br /&gt;
firefox http://127.0.0.1:8000/dashboard/&lt;br /&gt;
&lt;br /&gt;
=== Start and test graphite interface ===&lt;br /&gt;
&lt;br /&gt;
Start mqtt2graphite and view the graphite graphs on http://server_ip/&lt;br /&gt;
&lt;br /&gt;
mqtt2graphited run&lt;br /&gt;
 &lt;br /&gt;
2014-07-08 23:28:08,051 Starting MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,055 INFO MODE&lt;br /&gt;
 2014-07-08 23:28:08,084 DEBUG MODE&lt;br /&gt;
 2014-07-08 23:28:08,213 Connected to broker at localhost as MQTT2Graphite_5966-localhost.localdomain&lt;br /&gt;
 2014-07-08 23:28:08,253 Subscribing to topic meteo/#&lt;br /&gt;
 2014-07-08 23:28:08,312 pubblish {'carbon_port': 2003, 'map': {'meteo/#': ('j', None)}, 'sock': &amp;lt;socket._socketobject object at 0xb6a9e9d0&amp;gt;, 'carbon_server': '127.0.0.1'} with id 1&lt;br /&gt;
 2014-07-08 23:28:08,363 Subscribed: 2 (0,)&lt;br /&gt;
 2014-07-08 23:28:08,409 CARBONKEY is [meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,834 meteo.-.1012345_4412345.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854888&lt;br /&gt;
 2014-07-08 23:28:09,863 CARBONKEY is [meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030]&lt;br /&gt;
 2014-07-08 23:28:09,926 meteo.-.1137637_4449216.generic.-_-_-.-_-_-_-.B07030.v 400.000000 1404854889&lt;br /&gt;
 2014-07-08 23:28:11,133 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:11,155 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30115.000000 1404854891&lt;br /&gt;
 2014-07-08 23:28:16,687 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:16,733 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854896&lt;br /&gt;
 2014-07-08 23:28:24,895 CARBONKEY is [meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101]&lt;br /&gt;
 2014-07-08 23:28:24,933 meteo.-.1137637_4449216.generic.254_0_0.103_3000_-_-.B12101.v 30121.000000 1404854904&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowToOld&amp;diff=4418</id>
		<title>Gruppo Meteo/HowToOld</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/HowToOld&amp;diff=4418"/>
		<updated>2015-07-13T08:32:04Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Creazione della SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= HowTo =&lt;br /&gt;
&lt;br /&gt;
Di seguito tutti i passaggi (o quasi) per rendere funzionante un sistema rmap che comprenda uno modulo base, un modulo master ed un modulo satellite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensori ==&lt;br /&gt;
&lt;br /&gt;
Utilizzeremo per cominciare sensori I2C.&lt;br /&gt;
Oltre alla versatitilità e ampia diffusione di questo bus, su Raspberry e microcontroller AVR la gestione di i2c e' fatta a livello hardware e non comporta carichi rilevanti per la cpu.&lt;br /&gt;
&lt;br /&gt;
=== Iniziamo misurando la temperatura ===&lt;br /&gt;
&lt;br /&gt;
La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico  tmp102 o tmp275 e uno Analog Device.&lt;br /&gt;
* Dato che il sensore tmp102 e' di tipo smd si puo' acqusitare anche gia' saldato su basetta lo vende ad esempio [https://www.sparkfun.com/products/9418 sparkfun]; questi i dati del tmp275 http://www.ti.com/lit/ds/symlink/tmp275.pdf&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADT7420.pdf ADT7420] un sensore di precisione anche questo smd e prodotto da Analog; anche questo disponibile su basetta, ma un po' costosa: http://au.element14.com/digilent/pmodtmp2/adt7420-temp-sensor-16bit-pmod/dp/2290114&lt;br /&gt;
&lt;br /&gt;
=== Pressione ===&lt;br /&gt;
&lt;br /&gt;
Per ora è gestito un solo tipo si sensore di pressione:&lt;br /&gt;
&lt;br /&gt;
* Bosch's BMP085 is a rock-solid barometric pressure sensor (DISCONTINUED replaced with the BMP180 which is a drop-in replacement) diffusamente disponibile premontato su un modulo&lt;br /&gt;
&lt;br /&gt;
=== Umidità ===&lt;br /&gt;
&lt;br /&gt;
Per ora  il sensore di umidità gestito dalle librerie è il seguente:&lt;br /&gt;
&lt;br /&gt;
* Honeywell HumidIcon Digital Humidity/Temperature Sensors HIH6100 Series±4.0 %RH Accuracy Available with hydrophobic filter and&lt;br /&gt;
condensation-resistance, allowing for use in many condensing environments, or without hydrophobic filter, non-condensing&lt;br /&gt;
http://sensing.honeywell.com/honeywell-sensing-humidicon-hih6100-series-product-sheet-009059-6-en.pdf&lt;br /&gt;
&lt;br /&gt;
== Modulo base ==&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* raspberry B&lt;br /&gt;
* sdcard&lt;br /&gt;
* alimentatore&lt;br /&gt;
* connettore gpio&lt;br /&gt;
* breadboard&lt;br /&gt;
* sensori&lt;br /&gt;
* hub usb alimentato&lt;br /&gt;
* chiavetta wifi&lt;br /&gt;
* hard disk usb (opzionale, ma consigliato), con una partizione etx4 ed etichetta &amp;quot;rmap&amp;quot;&lt;br /&gt;
* RTC (opzionale ma consigliato)&lt;br /&gt;
|[[File:Rmap_base_01.jpg|300px|thumb|Modulo base]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creazione della SD ===&lt;br /&gt;
Attualmente è possibile scaricare una immagine già pronta di scheda SD nel sito [http://rmap.cc/download/ download].&lt;br /&gt;
Scaricate l'ultima immagine disponibile etichettata AAAAMMGG-production.img&lt;br /&gt;
&lt;br /&gt;
Una volta scaricata decomprimete l'immagine:&lt;br /&gt;
 bunzip2 AAAAMMGG-production.img.bz2&lt;br /&gt;
&lt;br /&gt;
Ora vi serve una scheda SD preferibilmente di classe 10: la dimensione minima richiesta è di 8 giga.&lt;br /&gt;
&lt;br /&gt;
Inserite la vostra Card nel lettore del vostro PC, se avete dubbi sul nome di periferica che il sistema ha assegnato, un comando&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;&lt;br /&gt;
dmesg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dovrebbe fugarli (guardate nelle ultime righe se l'avete appena inserita), ad esempio:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:green&amp;quot;&amp;gt;&lt;br /&gt;
[1680280.085043] usb 5-1: new full speed USB device using uhci_hcd and address 61&lt;br /&gt;
[1680280.343101] usb 5-1: New USB device found, idVendor=2341, idProduct=0043&lt;br /&gt;
[1680280.343109] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220&lt;br /&gt;
[1680280.343115] usb 5-1: Manufacturer: Arduino (www.arduino.cc)&lt;br /&gt;
[1680280.343119] usb 5-1: SerialNumber: 74132343430351715131&lt;br /&gt;
[1680280.343305] usb 5-1: configuration #1 chosen from 1 choice&lt;br /&gt;
[1680280.346250] cdc_acm 5-1:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[1680317.456102] usb 5-1: USB disconnect, address 61&lt;br /&gt;
[1680328.069023] mmc0: new SD card at address e7c6&lt;br /&gt;
[1680328.069220] mmcblk0: mmc0:e7c6 SD256 246 MiB &lt;br /&gt;
[1680328.069311]  mmcblk0: p1&lt;br /&gt;
[1680328.326222] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il sistema probabilmente 'montera`' la periferica, smontatela (comando &amp;quot;mount&amp;quot; senza parametri per verificare se e` montata ed il percorso, per smontare: &amp;quot;umount &amp;lt;percorso di mount&amp;gt;&amp;quot;), questo perche` dobbiamo 'copiare' l'immagine, ma '''ATTENZIONE, Il comando seguente eliminera` tutti i dati della SD Card''', inoltre '''rileggete due volte (anche tre) il comando prima di dare il return. Se mettete per errore il device del vostro disco rigido il comando cancellera' tutti i vostri dati''':&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
# ATTENZIONE QUESTO COMANDO ELIMINA IN MODO PERMANENTE IL CONTENUTO DI DEVICEtrovato&lt;br /&gt;
dd if=aaaammgg-production.img of=/dev/DEVICEtrovato &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connessioni hardware ===&lt;br /&gt;
&lt;br /&gt;
* modulo RTC&lt;br /&gt;
{|&lt;br /&gt;
| rtc connettore P2	|| arduino mega&lt;br /&gt;
|-&lt;br /&gt;
| gnd	|| gnd&lt;br /&gt;
|-&lt;br /&gt;
| vcc	|| vcc 5V (5v non 3.3)&lt;br /&gt;
|-&lt;br /&gt;
| sda	|| sda&lt;br /&gt;
|-&lt;br /&gt;
| scl	|| scl&lt;br /&gt;
|-&lt;br /&gt;
| ds	|| scollegato&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* switch di power off normalmente aperto&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| switch || arduino mega&lt;br /&gt;
|-&lt;br /&gt;
| pin 1	|| gnd&lt;br /&gt;
|-&lt;br /&gt;
| pin2 	|| pin 18&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Sensori I2c&lt;br /&gt;
{|&lt;br /&gt;
| sensore || arduino mega&lt;br /&gt;
|-&lt;br /&gt;
| gnd	|| gnd&lt;br /&gt;
|-&lt;br /&gt;
| vcc	|| vcc 3.3V (dipende dal sensore)&lt;br /&gt;
|-&lt;br /&gt;
| sda	|| sda&lt;br /&gt;
|-&lt;br /&gt;
| scl	|| scl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
&lt;br /&gt;
Con un browser puntare all'indirizzo:&lt;br /&gt;
&lt;br /&gt;
 http://rmap.cc/registrazione/register/&lt;br /&gt;
&lt;br /&gt;
e registrarsi come nuovo utente; poi con il proprio bowser:&lt;br /&gt;
&lt;br /&gt;
 http://base/wizard/&lt;br /&gt;
&lt;br /&gt;
autenticarsi con&lt;br /&gt;
 user: rmap&lt;br /&gt;
 password: rmap&lt;br /&gt;
e nel wizard di configurazione immettere i propri dati: utente e password con cui ci si è registrati sul server e le coordinate accurate della stazione; nella scermata successiva inserire i dati per l'eventuale accesso alla rete wifi&lt;br /&gt;
&lt;br /&gt;
=== Gestione avanzata ===&lt;br /&gt;
==== Connessione in rete ====&lt;br /&gt;
Per il collegamento in rete è consigliabile utilizzare uno switch a cui collegare sia il modulo base, che il modulo master, che eventualmente un portatile per connettersi a Raspberry.&lt;br /&gt;
&lt;br /&gt;
Il modulo base si collega ad internet con una chiavetta wifi o GSM/GPRS o ethernet. Per ognuna di queste è necessario effettuare apposite configurazioni per impostare la rete.&lt;br /&gt;
&lt;br /&gt;
Il raspberry ha attivo anche un dhcp e fa anche da dns. &lt;br /&gt;
&lt;br /&gt;
Al rspberry risponde al nome &amp;quot;base&amp;quot; mentre le board master ai nomi:&lt;br /&gt;
* master&lt;br /&gt;
* master2&lt;br /&gt;
* master3&lt;br /&gt;
* master4&lt;br /&gt;
&lt;br /&gt;
===== Prima connessione =====&lt;br /&gt;
&lt;br /&gt;
Info utili per l'accesso a Raspberry:&lt;br /&gt;
  &lt;br /&gt;
* hostname: base&lt;br /&gt;
* user: rmap - password: rmap&lt;br /&gt;
* user: root - password: cambiami&lt;br /&gt;
&lt;br /&gt;
 ssh root@base&lt;br /&gt;
&lt;br /&gt;
===== Configurazione scheda di rete wireless =====&lt;br /&gt;
&lt;br /&gt;
La chiavetta permette la sincronizzazione ntp da internet e l'upload dei dati su internet inoltre il raspberry è gia configurato come gateway e permette il collegamento ad internet anche degli altri dispositivi collegati allo switch perciò il primo passo da effettuare è la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
Da riga di comando:&lt;br /&gt;
&lt;br /&gt;
 nmcli device wifi list&lt;br /&gt;
 nmcli device wifi connect &amp;lt;SSID&amp;gt; password &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per configurare altre interfacce di rete consultare la documentazione di nmcli&lt;br /&gt;
&lt;br /&gt;
Consultare [[Gruppo_Meteo/Troubleshooting#Configurazione_ip_statico_su_interfaccia_wifi]] per un appunto sulla configurazione di IP statico di wlan0&lt;br /&gt;
&lt;br /&gt;
==== Aggiornamento del software ====&lt;br /&gt;
&lt;br /&gt;
Da utente root&lt;br /&gt;
&lt;br /&gt;
 yum upgrade --skip-broken -y&lt;br /&gt;
&lt;br /&gt;
Verificare se vanno applicate patch all'immagine [http://www.raspibo.org/wiki/index.php/Gruppo_Meteo/ToDo qui.]&lt;br /&gt;
&lt;br /&gt;
fare reboot del raspberry:&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
==== Connessione al modulo base via web ====&lt;br /&gt;
&lt;br /&gt;
Con un browser puntare all'indirizzo: &lt;br /&gt;
&lt;br /&gt;
 http://base/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Base Home.png|400px|thumb|right|Monitoraggio processi]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verificare che tutti i processi salvo stationd siano attivi cliccando &amp;quot;verifica processi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A questo punto si passa alla fase di configurazione: cliccare &amp;quot;Configurazione&amp;quot;. (Per l'accesso: rmap/rmap)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Base Monit.png|400px|thumb|right|Monitoraggio processi]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configurazione avanzata ====&lt;br /&gt;
&lt;br /&gt;
Sono presenti alcune pagine per la configurazione dei dati sia dei sensori che dei dati della stazione vera e propria.&lt;br /&gt;
&lt;br /&gt;
Cliccare :&lt;br /&gt;
'''configurazione'''&lt;br /&gt;
&lt;br /&gt;
Immettere le credenziali (di default: rmap/rmap).&lt;br /&gt;
&lt;br /&gt;
Cliccare:&lt;br /&gt;
&lt;br /&gt;
'''Stations'''&lt;br /&gt;
&lt;br /&gt;
* Aggiornare i dati di posizione di home (latitudine, longitudine) (Mantenere slug &amp;quot;home&amp;quot;) e il proprio identificativo di stazione (ident) al massimo di 9 caratteri concordato con lo staff di RMAP. &lt;br /&gt;
&lt;br /&gt;
Salvare, ed eventualmente procedere con le altre personalizzazioni tramite l'interfaccia web.&lt;br /&gt;
Questa operaione è opzionale:&lt;br /&gt;
&lt;br /&gt;
* Hardware boards&lt;br /&gt;
* attivare/disattivare/modificare la configurazione in base alle board che si vorranno collegare&lt;br /&gt;
&lt;br /&gt;
* sensor&lt;br /&gt;
* attivare/disattivare/modificare la configurazione in base ai sensori che si vorranno collegare&lt;br /&gt;
&lt;br /&gt;
Come ultima operaione attivare la station '''home''' sempre dal menu '''Station'''&lt;br /&gt;
&lt;br /&gt;
Stationd dovrebbe ora partire iniziando ad rilevare i dati del modulo base.&lt;br /&gt;
Verificare quindi che tutti i processi siano attivi cliccando &amp;quot;verifica processi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Base config 01.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 02.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 03.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 04.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 05.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Base config 06.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 07.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 08.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 09.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|[[File:Base config 10.png|300px|thumb|right|Configurazione]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modulo master ==&lt;br /&gt;
Il modulo B richiede cavo ethernet con power over ethernet.&lt;br /&gt;
&lt;br /&gt;
Funzionamento generale:&lt;br /&gt;
all'accesione  viene verificata la presenza di una configurazione di&lt;br /&gt;
versione corrispondente al firmware, si configura la rete con dhcp, si&lt;br /&gt;
interroga ntp server e si sincronizza l'orologio; se presente rtc viene&lt;br /&gt;
impostato il time su rtc. Ci si connette al broker mqtt e tramite una&lt;br /&gt;
temporizzazione di Alarm vengono inviati ogni sampletime i dati al&lt;br /&gt;
broker. Contemporaneamente è possibile colloquiare su porta seriale&lt;br /&gt;
tramite jsonrpc configurando, interrogando i sensori o attivando&lt;br /&gt;
attuatori.&lt;br /&gt;
Il sistema dovrebbe essere fault tollerant a:&lt;br /&gt;
fault del ntp server (con caduta su rtc)&lt;br /&gt;
fault del brocker mqtt (con riconnessione)&lt;br /&gt;
rinnovo periodico dei dati del dhcp&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* arduino mega 2560 &lt;br /&gt;
* cavo USB tipo B&lt;br /&gt;
* breadborad &lt;br /&gt;
* modulo RTC&lt;br /&gt;
* modulo mini ethernet ENC60&lt;br /&gt;
* modulo radio RF24&lt;br /&gt;
* cavo power over ethernet&lt;br /&gt;
* stabilizzatore dcdc switched&lt;br /&gt;
* sensori&lt;br /&gt;
* eventualmente relays attuatori&lt;br /&gt;
&lt;br /&gt;
cosa bisogna collegare:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
*  nRF24L01P http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P (con un condensatore sull'alimentazione)&lt;br /&gt;
* ENC28J60 Ethernet LAN / Network Module   http://hobbycomponents.com/index.php/enc28j60-ethernet-lan-network-module-for-arduino.html?SID=4553643ad13151d3fce1062a1f877f32&lt;br /&gt;
* Tiny RTC I2C AT24C32 DS1307 Real Time Clock Module with EEPROM ARM PIC&lt;br /&gt;
http://hobbycomponents.com/index.php/tiny-rtc-i2c-at24c32-ds1307-real-time-clock-module-with-eeprom-arm-pic.html&lt;br /&gt;
http://www.hobbyist.co.nz/sites/default/files/docs/RTC/Tiny_RTC_schematic.pdf&lt;br /&gt;
* connettore I2C (4 fili)&lt;br /&gt;
* connettore Jtag http://www.raspibo.org/wiki/index.php/Gruppo_Meteo/HowTo/DebugAVR#Collegamenti&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[File:Rmap_master_01.jpg|400px|thumb|Modulo master]]&lt;br /&gt;
|[[File:R-map schema.png|400px|thumb|Modulo master, schema]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Breadboard ====&lt;br /&gt;
&lt;br /&gt;
'''Connessioni'''&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| pin nrf24	|| pin arduino mega&lt;br /&gt;
|-&lt;br /&gt;
| 1	|| gnd&lt;br /&gt;
|-&lt;br /&gt;
| 2	|| 3.3&lt;br /&gt;
|-&lt;br /&gt;
| 3	|| dio9&lt;br /&gt;
|-&lt;br /&gt;
| 4	|| dio10&lt;br /&gt;
|-&lt;br /&gt;
| 5	|| dio52&lt;br /&gt;
|-&lt;br /&gt;
| 6	|| dio51&lt;br /&gt;
|-&lt;br /&gt;
| 7	|| dio50&lt;br /&gt;
|-&lt;br /&gt;
| 8	|| dio18&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Enc28j60	|| Arduino Mega 2560&lt;br /&gt;
|-&lt;br /&gt;
| GND	|| GND&lt;br /&gt;
|-&lt;br /&gt;
| 3.3	|| 5V (funziona anche a 3.3, ma assorbe troppo)&lt;br /&gt;
|-&lt;br /&gt;
| SO	|| Pin50&lt;br /&gt;
|-&lt;br /&gt;
| SI	|| Pin51&lt;br /&gt;
|-&lt;br /&gt;
| SCK	|| Pin52&lt;br /&gt;
|-&lt;br /&gt;
| CS	|| Pin53&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| rtc connettore P2	|| arduino mega&lt;br /&gt;
|-&lt;br /&gt;
| gnd	|| gnd&lt;br /&gt;
|-&lt;br /&gt;
| vcc	|| vcc 5V (5v non 3.3)&lt;br /&gt;
|-&lt;br /&gt;
| sda	|| sda&lt;br /&gt;
|-&lt;br /&gt;
| scl	|| scl&lt;br /&gt;
|-&lt;br /&gt;
| ds	|| scollegato&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Sensori I2c&lt;br /&gt;
{|&lt;br /&gt;
| sensore || arduino mega&lt;br /&gt;
|-&lt;br /&gt;
| gnd	|| gnd&lt;br /&gt;
|-&lt;br /&gt;
| vcc	|| vcc 3.3V (dipende dal sensore)&lt;br /&gt;
|-&lt;br /&gt;
| sda	|| sda&lt;br /&gt;
|-&lt;br /&gt;
| scl	|| scl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Cicuito stampato ====&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/p/r-map/code/HEAD/tree/trunk/kicad/ Qui] si trova il progetto del circuito stampato con Kicad.&lt;br /&gt;
&lt;br /&gt;
* Su [https://oshpark.com/shared_projects/IVVkMYHf OSH Park shared project] invece puoi trovare i gerber e tutto quanto pronto per la stampa del pcb oppure ordinarli direttamente a OSH Park&lt;br /&gt;
&lt;br /&gt;
=== Aggiornamento bootloader ===&lt;br /&gt;
E' necessario aggiornare il bootloader di arduino mega in quanto alcuni vecchi bootloader non sono in grado di gestire il riavvio dopo l'intervento del watchdog richiedendo un distacco dell'alimentazione forzato.&lt;br /&gt;
&lt;br /&gt;
In questo esempio abbiamo utilizzato una board '''dragon''' dell'AVR ma è possibile utilizzare altri metodi: [http://arduino.cc/en/Tutorial/ArduinoISP]&lt;br /&gt;
&lt;br /&gt;
 avrdude -c dragon_isp -P usb -p atmega2560 -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U efuse:w:0xFF:m&lt;br /&gt;
 avrdude -c dragon_isp -P usb -p atmega2560  -V -U flash:w:/usr/share/arduino/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex&lt;br /&gt;
 avrdude -c dragon_isp -P usb -p atmega2560 -U lock:w:0x0F:m&lt;br /&gt;
&lt;br /&gt;
The first command unlocks the bootloader section and sets the fuses.&lt;br /&gt;
The second writes the bootloader to the flash memory.&lt;br /&gt;
And the third locks the bootloader section again.&lt;br /&gt;
&lt;br /&gt;
=== Programmazione ===&lt;br /&gt;
&lt;br /&gt;
Utilizzare il modulo A, accedere con l'utente rmap (pass rmap).&lt;br /&gt;
 ssh rmap@base&lt;br /&gt;
&lt;br /&gt;
E' presente sulla home una dir svn che contiene tutto il software:&lt;br /&gt;
&lt;br /&gt;
 cd /home/rmap/svn/r-map-code/trunk&lt;br /&gt;
 svn up&lt;br /&gt;
 cd  arduino/ino/rmap&lt;br /&gt;
 ino clean&lt;br /&gt;
 cd src &lt;br /&gt;
 ln -sf rmap_master.h rmap_config.h&lt;br /&gt;
 cd ..&lt;br /&gt;
 ino build -m mega2560&lt;br /&gt;
 ino upload -m mega2560&lt;br /&gt;
 ino serial&lt;br /&gt;
&lt;br /&gt;
un pò di spiegazione: nella home dell'utente rmap è presente tutto l'archivio software&lt;br /&gt;
&lt;br /&gt;
con il comando svn up si aggiorna l'archivio scaricando l'utima versione dal repository&lt;br /&gt;
&lt;br /&gt;
ino clean pulisce l'ambiente per la compilazione&lt;br /&gt;
&lt;br /&gt;
linkiamo nello skecth la configurazione per il modulo master dato, l'unica cosa che cambia tra lo sketch del modulo master e quella del modulo satellite è questa e viene gestita cambiando il puntamento al file di configurazione&lt;br /&gt;
&lt;br /&gt;
ino build compila il software per la piattaforma mega 2560&lt;br /&gt;
&lt;br /&gt;
ino upload carica lo sketch su arduino&lt;br /&gt;
&lt;br /&gt;
ino serial attiva il monitor seriale&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
aggiornare le info sul file usando l'interfaccia web&lt;br /&gt;
&lt;br /&gt;
 http://base&lt;br /&gt;
&lt;br /&gt;
Se non è la prima volta che si configura la board per forzare il caricamento della configurazione avviare arduino con il pin 8 collegato a massa&lt;br /&gt;
&lt;br /&gt;
 rmap-configure --help&lt;br /&gt;
&lt;br /&gt;
solitamente il comando da utilizzare è:&lt;br /&gt;
 rmap-configure --board master&lt;br /&gt;
&lt;br /&gt;
== Modulo satellite ==&lt;br /&gt;
Il modulo C richiede batterie con stabilizzatore (e pannellino solare con regolatore di corrente)&lt;br /&gt;
&lt;br /&gt;
[http://tmrh20.github.io/RF24Network/Tuning.html Performance and Data Loss: Tuning the Network]&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* moulo microduino core+ (ATmega644p@5V 16MHz)&lt;br /&gt;
* modulo microduino RF24 con antenna&lt;br /&gt;
* modulo microduino seriale USB FT232R&lt;br /&gt;
* cavo micro USB&lt;br /&gt;
* sensori&lt;br /&gt;
|[[File:Rmap_satellite_01.jpg|300px|thumb|Modulo satellite]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Programmazione ===&lt;br /&gt;
&lt;br /&gt;
E' simile a quella del modulo master si cambia solo il link al file di configurazione con un link simbolico ed il modello della scheda per compilazione ed upload&lt;br /&gt;
&lt;br /&gt;
 cd /home/rmap/svn/r-map-code/trunk&lt;br /&gt;
 svn up&lt;br /&gt;
 cd  arduino/ino/rmap&lt;br /&gt;
 ino clean&lt;br /&gt;
 cd src&lt;br /&gt;
 ln -sf rmap_satellite.h rmap_config.h&lt;br /&gt;
 cd ..&lt;br /&gt;
 ino build -m 644pa16m&lt;br /&gt;
 ino upload -m 644pa16m&lt;br /&gt;
 ino serial&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
&lt;br /&gt;
Per la configurazione si usa il comando rmap-configure.&lt;br /&gt;
&lt;br /&gt;
 rmap-configure --help&lt;br /&gt;
&lt;br /&gt;
Solitamnete si puo' utilizzare questo comando:&lt;br /&gt;
&lt;br /&gt;
 rmap-configure --board satellite&lt;br /&gt;
&lt;br /&gt;
E' possibile collegare tutte le board contemporaneamente e dare un unico comando per configurarle tutte:&lt;br /&gt;
&lt;br /&gt;
 [rmap@pidora ~]$ rmap-configure &lt;br /&gt;
 django_extensions is not installed; I do not use it&lt;br /&gt;
 STATION:&lt;br /&gt;
 home&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; configure board:  my master&lt;br /&gt;
 start configuration&lt;br /&gt;
 Serial Transport /dev/ttyACM0&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; reset config&lt;br /&gt;
 save {'reset': True}&lt;br /&gt;
 TCP/IP Transport master&lt;br /&gt;
 mqttserver: {'mqttsampletime': 5, 'mqttserver': 'mqttserver'}&lt;br /&gt;
 mqtt user and password: {'mqttpassword': u'', 'mqttuser': u''}&lt;br /&gt;
 ntpserver: {'ntpserver': 'ntpserver', 'mac': 'OK'}&lt;br /&gt;
 RF24Network Transport 0&lt;br /&gt;
 thisnode: {'thisnode': 0, 'channel': 93}&lt;br /&gt;
 key: {'key': 'OK'}&lt;br /&gt;
 iv: {'iv': 'OK'}&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; sensors:&lt;br /&gt;
 remote sensor tmp-True-RF24-TMP-72-254,0,0-105,2000,-,--my-master&lt;br /&gt;
 add driver: {'id': 0}&lt;br /&gt;
 my sensor-True-TMP-TMP-72-254,0,0-105,4000,-,--my-master&lt;br /&gt;
 add driver: {'id': 1}&lt;br /&gt;
 mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'}&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; save config&lt;br /&gt;
 save {'save': True}&lt;br /&gt;
 ----------------------------- board configured ---------------------------------------&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; configure board:  my microduino&lt;br /&gt;
 start configuration&lt;br /&gt;
 Serial Transport /dev/ttyUSB0&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; reset config&lt;br /&gt;
 save {'reset': True}&lt;br /&gt;
 transport tcpip not present&lt;br /&gt;
 RF24Network Transport 1&lt;br /&gt;
 thisnode: {'thisnode': 1, 'channel': 93}&lt;br /&gt;
 key: {'key': 'OK'}&lt;br /&gt;
 iv: {'iv': 'OK'}&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; sensors:&lt;br /&gt;
 my sensor-True-TMP-TMP-72-254,0,0-105,10000,-,--my-microduino&lt;br /&gt;
 add driver: {'id': 0}&lt;br /&gt;
 mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'}&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; save config&lt;br /&gt;
 save {'save': True}&lt;br /&gt;
 ----------------------------- board configured ---------------------------------------&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; configure board:  my raspberry&lt;br /&gt;
 start configuration&lt;br /&gt;
 transport serial not present&lt;br /&gt;
&lt;br /&gt;
== Shutdown del modulo base ==&lt;br /&gt;
&lt;br /&gt;
Sul modulo base è presente il software [[http://raspdbusgpiopy.sourceforge.net/ raspdbusgpiopy]] sviluppato nei mesi precedenti che monitora lo stato del pin18 sul gpio.&lt;br /&gt;
&lt;br /&gt;
Quando il pin 18 viene collegato a massa, il software invia un segnale su dbus ed il sistema va in shutdown, questo risulta estremamente utile quando il modulo base e` installato ''headless'', cioè senza tastiera e video collegati.&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4404</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4404"/>
		<updated>2015-06-17T08:08:09Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* board ft232 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
È possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
È necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
È necessaria per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4403</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4403"/>
		<updated>2015-06-17T08:07:46Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* board radio RF24 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
È possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
È necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4402</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4402"/>
		<updated>2015-06-17T08:07:32Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* board RTC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
È possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4401</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4401"/>
		<updated>2015-06-17T08:06:15Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* JsonRPC over different transports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
È possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4400</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4400"/>
		<updated>2015-06-17T08:04:55Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* NRF24 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4399</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4399"/>
		<updated>2015-06-17T08:04:16Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* NRF24 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* IV&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4398</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4398"/>
		<updated>2015-06-17T08:03:54Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* TCP/IP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il TCP/IP; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* NTPserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4397</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4397"/>
		<updated>2015-06-17T07:59:22Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Integrazione con la domotica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
Per quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4396</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4396"/>
		<updated>2015-06-17T07:58:43Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Modularità hardware e software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware maggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4395</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4395"/>
		<updated>2015-06-17T07:57:08Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Salvataggio locale dei dati */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
È previsto un meccanismo di salvataggio dei dati su SD formattata FAT; i file&lt;br /&gt;
vengono frammentati a una dimensione prefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno un flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo la SD&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4394</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4394"/>
		<updated>2015-06-17T07:54:44Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Software utente multipiattaforma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni CentOS e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, Android, ma portabile su Windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4393</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4393"/>
		<updated>2015-06-17T07:53:06Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Differenti tipologie di rete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica configurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4392</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4392"/>
		<updated>2015-06-17T07:52:27Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Differenti tipologie di rete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La configurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4391</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4391"/>
		<updated>2015-06-17T07:52:09Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Differenti tipologie di rete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
La consfigurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4390</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4390"/>
		<updated>2015-06-17T07:50:42Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Stazioni fisse o mobili */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
È possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
la consfigurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4389</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4389"/>
		<updated>2015-06-17T07:49:56Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Orologio di riferimento */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerata stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
E' possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
la consfigurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4388</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4388"/>
		<updated>2015-06-17T07:47:55Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Operazioni di mantenimento */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al DHCP o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerato stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
E' possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
la consfigurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4387</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4387"/>
		<updated>2015-06-17T07:47:12Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Interrogazione dei sensori */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono impostati e configurati all'accensione poi periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al dhcp o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerato stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
E' possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
la consfigurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4386</id>
		<title>Gruppo Meteo/StimaOverview</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Meteo/StimaOverview&amp;diff=4386"/>
		<updated>2015-06-17T07:45:22Z</updated>

		<summary type="html">&lt;p&gt;Dariomas: /* Collegamento su bus I2C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stima Overview =&lt;br /&gt;
Stazione modulare per la misura di parametri ambientali.&lt;br /&gt;
&lt;br /&gt;
== Premesse ==&lt;br /&gt;
* Aderisce alla Rete di Monitoraggio Ambientale Partecipativo (R-MAP)&lt;br /&gt;
* Open hardware e open software&lt;br /&gt;
* al momento vengono gestiti parametri meteorologici&lt;br /&gt;
&lt;br /&gt;
== Funzionalità ==&lt;br /&gt;
&lt;br /&gt;
=== Sensori ===&lt;br /&gt;
&lt;br /&gt;
==== Collegamento su bus I2C ====&lt;br /&gt;
I sersori devono essere compatibili con il bus I2C. Quando sensori I2C non siano disponibili il problema viene risolto con un microcontrollore che adatta le letture (analogiche o digitali) e le elaborazioni (contatori, medie etc.) rendendole disponibili su registri interrogabili tramite I2C. &lt;br /&gt;
&lt;br /&gt;
Il protocollo I2C prevede l’utilizzo di un bus formato da due linee bidirezionali. Le due linee, chiamate “scl” e “sda”&lt;br /&gt;
rispettivamente, trasportano la tempistica di sincronizzazione (chiamata anche “clock”) e i dati.&lt;br /&gt;
Abbiamo scelto il bus I2C in quanto:&lt;br /&gt;
* È diventato lo standard di fatto per una serie di integrati tra cui i sensori&lt;br /&gt;
* Si possono collegare fino a 127 dispositivi&lt;br /&gt;
* La comunicazione è bidirezionale (read e write) con velocità assolutamente sufficienti per i nostri scopi&lt;br /&gt;
* la lunghezza operativa dei cavi è adeguata al nostro utilizzo (anche alcune decine di metri)&lt;br /&gt;
&lt;br /&gt;
==== Interrogazione dei sensori ====&lt;br /&gt;
I sensori possono venire interrogati a richiesta tramite remote call procedure oppure ad intervalli regolari.&lt;br /&gt;
Quando interrogati a intervalli regolari tutti i sensori vengono interrogati &amp;quot;in parallelo&amp;quot; ossia tutti i sensori vengono mpostati e configurati all'accensione po periodicamente vengono attivati e impartita la richiesta di lettura; il driver del sensore torna il tempo di attesa necessario per avere la misura disponibile; si attente il tempo necessario per il sensore più lento; si effettuano tutte le letture.&lt;br /&gt;
In questo modo si riescono a campionare tutti i sensori solitamente entro i 3 secondi e considerando i tempi per la loro pubblicazione sul server generalmente viene utilizzata una frequenza di campionamneto pari a una ogni 5 secondi.&lt;br /&gt;
Tenendo i sensori normalmente in sleep si riducono anche i consumi.&lt;br /&gt;
&lt;br /&gt;
Ogni sensore può restituire volori multipli (ad esempio temperatura e umidità).&lt;br /&gt;
&lt;br /&gt;
=== Operazioni di mantenimento ===&lt;br /&gt;
Il software effettua periodicamente tutte le funzioni di mantenimento necessarie a un corretto funzionamento quali quelle relative al dhcp o alla sincronizzazione dell'orologio interno con una sorgente esterna.&lt;br /&gt;
Tutti i firmware hanno attivo un watchdog hardware che evita blocchi permanenti dovuti a malfunzionamenti su eventi improbabili.&lt;br /&gt;
&lt;br /&gt;
=== Orologio di riferimento ===&lt;br /&gt;
Una base dei tempi precisa è richiesta nel caso in cui sia necessario salvare i dati localmente (su SD) nel caso la connessione utilizzata per pubblicare i dati sul server (broker) non sia considerata stabile. Se invece la connessione (trasporto) viene considerato stabile (o non sia necessario recuperare i dati in caso di fault) un preciso orologio di riferimento non è necessario e il tempo di riferimento verrà aggiunto automaticamente dal server alla pubblicazione in tempo reale del dato. Ci sono diversi sistemi per avere un orologio di riferimento preciso sui moduli Stima.&lt;br /&gt;
&lt;br /&gt;
=== Stazioni fisse o mobili ===&lt;br /&gt;
E' possibile installare sia stazioni fisse, la cui posizione non cambia nel tempo, sia stazioni mobili, sia terrestri che marine. Per aggiornare la posizioni delle stazioni mobili viene utilizzato un GPS che può essere o a bordo del modulo Stima o a bordo di un dispositivo android.&lt;br /&gt;
&lt;br /&gt;
=== Attenzione ai consumi energetici ===&lt;br /&gt;
Attenzione è stata posta alla limitazione dei consumi. Quando possibile i microcontrollori e i sensori vengono messi in sleep e sono alcuni interrupt a risvegliare il sistema. Questo agevola l'utilizzo con batterie dei sistemi a basso consumo quali il modulo satellite che funziona con un modulo radio.&lt;br /&gt;
&lt;br /&gt;
=== Differenti tipologie di rete ===&lt;br /&gt;
la consfigurazione della rete può essee differente a seconda delle esigenze; oltre alla classica consigurazione a stella (moduli master e base) con un broker al centro è disponibile la configurazione ad albero sia via cavo (modulo master + base) che via radio: con la possibilità di utilizzare moduli radio di maggiore potenza (~1Km in aria libera) è possibile prevedere coperture di un terriotorio con ampia superficie.&lt;br /&gt;
&lt;br /&gt;
=== Software utente multipiattaforma ===&lt;br /&gt;
Il software che l'utente può utlizzare per la pubblicazione e visualizzazione dei dati è multipiattaforma.&lt;br /&gt;
Fatti salvi i moduli basati su microcontrollore e vincolati all'ambiente Atmel e alcune funzioni sul server di raccolta dei dati sviluppati in ambiente Linux (distribuzioni Centos e Fedora) la visulizzazione e il monitoraggio sono multipiattaforma. Anche l'interfaccia utente grafica che permette la geolocalizzazione, autenticazione e pubblicazione dei dati sia automatica che manuale anche di dati rilevati manualmente e a vista è multipiattaforma (attualmente testata su Linux, android, ma portabile su windows, OS X, iOS&lt;br /&gt;
&lt;br /&gt;
=== Salvataggio locale dei dati ===&lt;br /&gt;
&lt;br /&gt;
I dati possono essere pubblicati in real time e/o salvati localmente.&lt;br /&gt;
E' previsto un meccanismo di salvataggio dei dati su SD formattata fat; i file&lt;br /&gt;
vengono frammentati a una dimensione frefissata per farne circa uno al&lt;br /&gt;
giorno e numerati da 000 a 999; i dati salvati hanno una flag che indica&lt;br /&gt;
se i dati sono stati già pubblicati correttamente su MQTT; i file che&lt;br /&gt;
devono essere controllati per possibili reinvii hanno postfisso .que e&lt;br /&gt;
quelli che hanno tutti i dati già inviati hanno postfisso .don&lt;br /&gt;
&lt;br /&gt;
In questo modo si ottengono queste funzionalità:&lt;br /&gt;
* salvataggio dati su SD almeno per due anni con campionamenti ogni 5s&lt;br /&gt;
* reinvio automatico al server dei dati salvati ma non pubblicati correttamente sul server&lt;br /&gt;
* ottimizzazione dei tempi in quanto solo i file che contengono dati da inviare vengono letti per selezionare i dati da reinviare&lt;br /&gt;
* i dati possono essere riletti su un normale PC estraendo l'SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Messagistica di diagnostica ===&lt;br /&gt;
C'è la possibilità di ottenere una ampia messaggistica di diagnostica per la soluzione dei problemi&lt;br /&gt;
&lt;br /&gt;
=== Configurazione ===&lt;br /&gt;
Le versioni delle configurazioni vengono verificate e quando il firmware non è retrocompatibile il modulo resta in attesa di una nuova configurazione.&lt;br /&gt;
Le configurazioni vengono subito verificate: non è possibile configurare un modulo con dei sensori non corretti o non funzionanti.&lt;br /&gt;
&lt;br /&gt;
=== Modularità hardware e software ===&lt;br /&gt;
Le configurazioni hardware sono molteplici e possono essere utilizzate differenti board; sono compatibili i moduli hardware mqggiormente diffusi e conosciuti dai makers oltre ad essere generalmente a basso costo.&lt;br /&gt;
&lt;br /&gt;
=== Crittografia ===&lt;br /&gt;
Qualora il trasporto non sia considerato sicuro (via radio) viene utilizzata la crittografia per garantire riservatezza e autenticità.&lt;br /&gt;
&lt;br /&gt;
=== Integrazione con la domotica ===&lt;br /&gt;
PEr quello che è stato possibile si è cercato di integrarsi con gli standard della domotica (MQTT). Tutti i moduli possono essere utilizzati anche da attuatori on/off (fino a 4 relay) ma è molto semplice aggiungere altre funzionalità tramite remote procedure in formato json su tutti i trasporti o tramite MQTT.&lt;br /&gt;
&lt;br /&gt;
== Concetti base ==&lt;br /&gt;
La modularità della stazione è stata ottenuta astraendo alcuni concetti e funzioni e implementandoli nei differenti moduli hardware e software.&lt;br /&gt;
&lt;br /&gt;
=== Trasporti ===&lt;br /&gt;
Il concetto di trasporto in Stima è simile ma non rigidamente aderente ai concetti del modello ISO-OSI. Nel caso dei trasporti passivi il suo compito è fornire un canale logico-affidabile di comunicazione end-to-end per fornire servizi al soprastante livello che in Stima è JsonRPC.&lt;br /&gt;
Nel caso dei trasporti attivi corrisponde al protocollo (Session Layer) per la pubblicazione dei dati su un server (broker).&lt;br /&gt;
&lt;br /&gt;
=== Passivi o attivi ===&lt;br /&gt;
In pratica i trasporti &amp;quot;passivi&amp;quot; permettono di eseguire procedure remote codificate in formato json specifiche dell'implementazione Stima; quelli attivi permettono la pubblicazione su server (broker) dei messaggi aderenti allo standard R-MAP.&lt;br /&gt;
&lt;br /&gt;
==== Passivi ====&lt;br /&gt;
===== Seriale =====&lt;br /&gt;
Collegamento punto a punto tramite porta seriale.&lt;br /&gt;
* Principalmente per configurazione e debug&lt;br /&gt;
* Piccole distanze via cavo&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Baud rate&lt;br /&gt;
* Device&lt;br /&gt;
&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
Trasporto che utilizza il tcp/ip; i supporti fisici supportati sono:&lt;br /&gt;
* ethernet: collegamenti tramite cavo ethernet a breve e media distanza&lt;br /&gt;
* GSM/GPRS: installazioni con problemi per le cablature di alimentazione e collegamento di rete&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Name  (Nome risolto dal DNS)&lt;br /&gt;
* Ntpserver&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Bluetooth Name&lt;br /&gt;
&lt;br /&gt;
===== NRF24 =====&lt;br /&gt;
&lt;br /&gt;
* OSI Network Layer using nRF24L01(+) radios 2.4GHz ISM 50/150m in aria libera&lt;br /&gt;
* Host Addressing. Each node has a logical address on the local network.&lt;br /&gt;
* Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.&lt;br /&gt;
* Ad-hoc Joining. A node can join a network without any changes to any existing nodes.&lt;br /&gt;
&lt;br /&gt;
RF24Network Addressing and Topology&lt;br /&gt;
&lt;br /&gt;
Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of&lt;br /&gt;
the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.&lt;br /&gt;
* Node 00 is the base node.&lt;br /&gt;
* Nodes 01-05 are nodes whose parent is the base.&lt;br /&gt;
* Node 021 is the second child of node 01.&lt;br /&gt;
* Node 0321 is the third child of node 021, an so on.&lt;br /&gt;
* The largest node address is 05555, so 3,125 nodes are allowed on a single channel.&lt;br /&gt;
&lt;br /&gt;
Alla libreria distributia è stata aggiunta la crittografia e&lt;br /&gt;
frammentazione e ricomposizione del payload&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Node  (Node ID for RF24 Network)&lt;br /&gt;
* Channel  (Numero canale per RF24) 	&lt;br /&gt;
* Key  (AES key) 	&lt;br /&gt;
* Iv&lt;br /&gt;
&lt;br /&gt;
==== Attivi ====&lt;br /&gt;
===== MQTT =====&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) è un protocollo&lt;br /&gt;
publish/subscribe particolarmente leggero, adatto per la&lt;br /&gt;
comunicazione M2M tra dispositivi con poca memoria o&lt;br /&gt;
potenza di calcolo e server o message broker.&lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Mqttsampletime  (intervallo in secondi per la pubblicazione) 	&lt;br /&gt;
* Mqttserver  (MQTT server)&lt;br /&gt;
* Mqttuser  (MQTT user)&lt;br /&gt;
* Mqttpassword  (MQTT password)&lt;br /&gt;
&lt;br /&gt;
===== AMQP =====&lt;br /&gt;
AMQP (Advanced Message Queuing Protocol) è protocollo per&lt;br /&gt;
comunicazioni attraverso code di messaggi. Sono garantite&lt;br /&gt;
l'interoperabilità, la sicurezza, l'affidabilità, la persistenza. &lt;br /&gt;
&lt;br /&gt;
caratterizzato da:&lt;br /&gt;
* Amqpserver  (Server AMQP)&lt;br /&gt;
* Exchange  (Nome dell'exchange remoto AMQP)&lt;br /&gt;
* Queue  (Nome della coda locale AMQP )&lt;br /&gt;
* Amqpuser  (User AMQP)&lt;br /&gt;
* Amqppassword&lt;br /&gt;
&lt;br /&gt;
=== JsonRPC ===&lt;br /&gt;
&lt;br /&gt;
La chiamata di procedure remote in formato json è l'unico metodo per poter eseguire funzioni su un modulo dalla configurazione al campionamento dei sensori.&lt;br /&gt;
&lt;br /&gt;
La documentazione delle procedure remote è disponibile qui [[Gruppo_Meteo/RemoteProcedure]]&lt;br /&gt;
&lt;br /&gt;
==== JsonRPC over different transports ====&lt;br /&gt;
E' possibile fare richiesta di una procedura remota che a sua volta richiede una procedura remota; in questo modo è possibile utilizzare due trasporti differenti e usare un modulo come gateway.&lt;br /&gt;
Ad esempio il modulo base non dispone al momento del trasporto radio RF24 ma puo' richiedere a un modulo master tramite trasporto seriale o TCP/IP di eseguire una procedura remota su un modulo satellite raggiungibile tramite trasporto RF24.&lt;br /&gt;
Queste funzionalità sono ampiamente da testare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elementi hardware ==&lt;br /&gt;
&lt;br /&gt;
=== board microcontroller ===&lt;br /&gt;
==== atmel 328p ====&lt;br /&gt;
Il più piccolo della serie può essere utilizzato per:&lt;br /&gt;
* modulo i2c-gps&lt;br /&gt;
* modulo i2c-wind&lt;br /&gt;
* modulo i2c-rain&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino uno&lt;br /&gt;
* arduino nano&lt;br /&gt;
* microduino core&lt;br /&gt;
&lt;br /&gt;
==== atmel 644p ==== &lt;br /&gt;
Il medio della serie può essere utilizzato per:&lt;br /&gt;
* modulo satellite&lt;br /&gt;
* modulo bluetooth&lt;br /&gt;
* tutti i moduli relativi al 328p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* microduino core+ 644p&lt;br /&gt;
&lt;br /&gt;
==== altmel mega 2560/1284p ====&lt;br /&gt;
Il grande della serie può essere utilizzato per:&lt;br /&gt;
* modulo master&lt;br /&gt;
* modulo GPS/GPRS&lt;br /&gt;
* tutti i moduli relativi al 644p&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* arduino mega2560&lt;br /&gt;
* microduino core+ 1284p&lt;br /&gt;
&lt;br /&gt;
=== board RTC ===&lt;br /&gt;
Il real time clock deve utilizzato quando quando non è possibile avere un'altra sorgente affidabile per il tempo di riferimento e al tempo stesso la pubblicazione dei dati può avvenire con tempo differito ad esempio tramite la memorizzazione su scheda SD.&lt;br /&gt;
&lt;br /&gt;
=== board radio RF24 ===&lt;br /&gt;
E' necessaria per supportare il trasporto NRF24&lt;br /&gt;
&lt;br /&gt;
=== board ft232 ===&lt;br /&gt;
E' necessario per programmare, debuggare, a volte configurare il modulo e per supportare il trasporto seriale.&lt;br /&gt;
&lt;br /&gt;
=== board ENC28J60 ===&lt;br /&gt;
Ethernet module a basso costo; è necessario lo stack tcp/ip software su microcontrollore.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board wiznet&lt;br /&gt;
&lt;br /&gt;
=== board wiznet W5500 ===&lt;br /&gt;
Ethernet module completa dello stack tcp/ip.&lt;br /&gt;
Serve per supportare il trasporto TCP/IP.&lt;br /&gt;
Alternativa alla board ENC28j60&lt;br /&gt;
&lt;br /&gt;
=== board display I2C LCD  4 linee 20 caratteri ===&lt;br /&gt;
Utilizzabile per visualizzare messaggistica di diagnostica e alcune misure quando non è disponibile un PC per debug e altre visualizzazioni.&lt;br /&gt;
&lt;br /&gt;
implementazioni on board:&lt;br /&gt;
* YwRobot Arduino LCM1602 IIC V1&lt;br /&gt;
&lt;br /&gt;
=== board 5V relay ===&lt;br /&gt;
5V 4/2-Channel Relay interface board; Equipped with high-current relay, AC 250V 10A / DC 30V 10A&lt;br /&gt;
Opticalcoupler Protection&lt;br /&gt;
Utilizzabile per aggiungere a un modulo la funzionalità di attuatore. Ogni relay può essere attivato singolarmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== board SD ===&lt;br /&gt;
Microduino-SD aims to read and write data of a memory card.&lt;br /&gt;
Utilizzata per memorizzare i dati in loco; necessaria quando non ci siano trasporti utili o la stabilità dei trasporti utilizzati è messa in dubbio e i dati hanno valore anche in tempo differito.&lt;br /&gt;
&lt;br /&gt;
=== board GSM/GPRS sim800/sim900 ===&lt;br /&gt;
Adopt SIM800L module to support four-band GSM/GPRS, whose working band is：GSM850, EGSM900, DCS1800 and PCS1900MHz.&lt;br /&gt;
Utilizzabile per avere il trasporto TCP/IP quando non è disponibile una connessione ethernet.&lt;br /&gt;
Questo modulo può funzionare sul trasporto TCP/IP in due modalità: una con delle get http tramutate dal server in publish MQTT e l'altra in una vera connessione MQTT.&lt;br /&gt;
E' possibile utilizzare questo modulo anche cone Real Time Clock per ottenere una tempo di riferimento stabile.&lt;br /&gt;
Si può quindi ottenere dal server rmap il tempo di riferimento e impostarlo nell'RTC di questo modulo per poi rileggerlo al bisogno in caso di non disponibilità del trasporto TCP/IP; tutto questo a scapito di stabilità e continuità di servizio.&lt;br /&gt;
Nel caso sia importante avere un RTC affidabile si consiglia l'aggiunta di un modulo RTC o ancora meglio del modulo GPS.&lt;br /&gt;
&lt;br /&gt;
=== board GPS Neo 6M ===&lt;br /&gt;
Questa board insieme a una board microcontrollore possono creare un modulo i2c-gps.&lt;br /&gt;
Il modulo i2c-gps fornisce a richiesta la posizione (lat, lon, altezza) e il tempo di riferimento.&lt;br /&gt;
Serve per istallazioni mobili o che necessitano di un tempo di riferimento particolarmente stabile.&lt;br /&gt;
&lt;br /&gt;
== Guida per la composizione di un modulo Stima ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Dariomas</name></author>
	</entry>
</feed>