Maxisun/Emoncms
- patrick
- Auteur du sujet
- Hors Ligne
- Administrateur
- Messages : 3134
- Remerciements reçus 483
J'ai essayé aujourd'hui d'installer tout ça sur mon PC (sous Kubuntu) mais sans succès.
L'installation s'est bien déroulée et j'ai bien accès au "backend" de l'appli sauf que je ne peux rien configurer, notamment les inputs et les feeds, pleins d'erreurs du genre: Parse error: syntax error, unexpected '[' in /var/www/emoncms/Modules/feed/feed_model.php on line 433 .
Par contre au niveau du Maxisun, ça devrait rouler. J'avais déjà bien défriché le sujet et je n'ai plus qu'à adapter quelques lignes de code pour que ce soit opérationnel.
Connexion ou Créer un compte pour participer à la conversation.
- Lebritish
- Hors Ligne
- Membre platinium
- Messages : 655
- Remerciements reçus 11
tu installes ça en local si j'ai bien compris ? J'ai jamais essayé.
Pour moi l’intérêt serait d'utiliser le cloud. Comme ca on peut rendre les données publiques sans que personne n'ai accès à notre IP directement.
Perso je poste mes données du PV sur emoncms avec un arduino + shield ethernet W5100 en utilisant le script ci dessous:
Ça marche bien quand j'ai pas de prbl réseau à la maison (ce qui est le cas aujourd'hui). J'ai eu une grosse MAJ au niveau de la box (bouygues) et du coup le mode DHCP / IP fixe ne se comporte plus comme avant. Faut que je regarde ça....
A+
Thierry
/*
Arduino & OpenEnergyMonitor
This sketch connects to an emoncms server and makes a request using
Arduino Ethernet shield (or other based on Wiznet W5100)
author Mirco Piccin aka pitusso
based on
http://arduino.cc/en/Tutorial/WebClientRepeating
*/
char foo; //without a simple variable declaration, use of #ifdef at the top of your code raises an error!
#include <SPI.h>
#include <Ethernet.h>
// Include Emon Library
#include "EmonLib.h"
//network configuration, WIRED or WIFI
//if using WIRED
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x69, 0xD6};
// fill in an available IP address on your network here,
// for auto configuration:
IPAddress ip(192, 168, 1, 100);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 254); //was DNS changed for dns
IPAddress gw(192, 168, 1, 254);
EthernetClient client;
//Calibrations
float realPower = 0; //extract Real Power into variable
float apparentPower = 0; //extract Apparent Power into variable
float powerFactor = 0; //extract Power Factor into Variable
float supplyVoltage = 0; //extract Vrms into Variable
float Irms = 0; //extract Irms into Variable
// Create an Emon instance
EnergyMonitor emon1;
//Emoncms configurations
char server[] = "emoncms.org"; // name address for emoncms.org
// IPAddress server(80, 243, 190, 58); // numeric IP for emoncms.org (no DNS)
String apikey = "yourAPIkey"; //api key cloud emoncms
int node = 0; //if 0, not used
unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
boolean lastConnected = false; // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000; // delay between updates, in milliseconds
void setup() {
// start serial port:
Serial.begin(9600);
// Display a welcome message
Serial.println("Emoncms client starting...");
emon1.voltage(1, 248, 1.77); // Voltage: input pin, calibration, phase_shift
emon1.current(0, 28.87); // Current: input pin, calibration.
/*Ethernet.begin(mac, ip, gw, subnet); //
delay(1000); //This one keeps it from hanging
*/
if (!Ethernet.begin(mac)) {
// if DHCP fails, start with a hard-coded address:
Serial.println("Failed to get an IP address using DHCP, forcing manually");
Ethernet.begin(mac, ip, dns, gw, subnet);
}
printStatus();
// Ethernet.begin(mac, ip, dns, gw, subnet);
//delay(1000);
}
void loop() {
// if there's incoming data from the net connection.
// send it out the serial port. This is for debugging
// purposes only:
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// if there's no net connection, but there was one last time
// through the loop, then stop the client:
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println("Disconnecting...");
client.stop();
}
// if you're not connected, and at least <postingInterval> milliseconds have
// passed sinceyour last connection, then connect again and
// send data:
if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
//read sensors
emon1.calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out
emon1.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor)
realPower = emon1.realPower; //extract Real Power into variable
apparentPower = emon1.apparentPower; //extract Apparent Power into variable
powerFactor = emon1.powerFactor; //extract Power Factor into Variable
supplyVoltage = emon1.Vrms; //extract Vrms into Variable
Irms = emon1.Irms; //extract Irms into Variable
// at the end of one reading cycle, connect and post to website
// send analog output on pin9 for MAXISUN
analogWrite(9, ((emon1.realPower*0.051/0.3)+0)); //PWMpin9 voltage represent Real Power * 0.051 *3.33 (1500W = 5V)
/*
//read sensors
lightValue = analogRead(lightSensorPin);
tempValue = getCelsius(analogRead(tempSensorPin));
Irms = emon1.calcIrms(1480);
*/
//Print values (debug)
Serial.println();
Serial.print("realPower : ");
Serial.print(realPower);
Serial.print(" ; apparentPower : ");
Serial.print(apparentPower);
Serial.print(" ; powerFactor : ");
Serial.println(powerFactor);
Serial.print(" ; supplyVoltage : ");
Serial.println(supplyVoltage);
Serial.print(" ; Irms : ");
Serial.println(Irms);
//send values
sendData();
}
// store the state of the connection for next time through
// the loop:
lastConnected = client.connected();
}
// this method makes a HTTP connection to the server:
void sendData() {
// if there's a successful connection:
if (client.connect(server, 80)) {
Serial.println("Connecting...");
// send the HTTP GET request:
client.print("GET /api/post?apikey=");
client.print(apikey);
if (node > 0) {
client.print("&node=");
client.print(node);
}
client.print("&json={2");
client.print(":");
client.print(realPower);
client.print(",3:");
client.print(supplyVoltage);
client.print(",1:");
client.print(powerFactor);
client.println("} HTTP/1.1");
client.println("Host:emoncms.org");
client.println("User-Agent: Arduino-ethernet");
client.println("Connection: close");
client.println();
// note the time that the connection was made:
lastConnectionTime = millis();
}
else {
// if you couldn't make a connection:
Serial.println("Connection failed");
Serial.println("Disconnecting...");
client.stop();
}
}
void printStatus() {
// print your local IP address:
Serial.print("IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// print the value of each byte of the IP address:
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
}
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Auteur du sujet
- Hors Ligne
- Administrateur
- Messages : 3134
- Remerciements reçus 483
C'était pour essayer en local avant d'envoyer sur les nuages. Mais bon c'est trop compliqué alors je vais me créer un compte sur Emoncms, on verra bien...
Dans un premier temps, je ne vais envoyer que les 8 premières sondes de température.
J'aimerais bien que leurs noms sur le Maxisun ainsi que leurs unités et position de la virgule (ou point) se remplissent automatiquement sur Emoncms.
En fait, c'est surtout pour ça que je voulais pouvoir mettre les mains dans le cambouis!
Merci pour le script, ça me donne quelques infos supplémentaires.
Connexion ou Créer un compte pour participer à la conversation.
- Troglo
- Hors Ligne
- Membre elite
- Messages : 213
- Remerciements reçus 5
J'aurai bien aimé vous donner un coup de main mais là ça me dépasse Désolé.
Jérôme
Connexion ou Créer un compte pour participer à la conversation.
- Ruthene
- Hors Ligne
- Membre elite
- Messages : 164
- Remerciements reçus 0
Thierry, peux-tu nous faire une synthèse sur emoncms, l'intérêt, comment l'utiliser . Si c'est compliqué...
Si c'est gratuit ?
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Auteur du sujet
- Hors Ligne
- Administrateur
- Messages : 3134
- Remerciements reçus 483
Ce qui m'embête c'est que les requêtes se font en GET et pas en POST. Du coup ça limite le volume de data envoyé en une fois.
@Steph,
L’intérêt c'est qu'on n'a pas ouvrir un port de son réseau pour avoir accès à ses données de l'extérieur => + de sécurité.
Il en découle que tes données peuvent être publiques sans inconvénients.
Gratuit ? Oui, pour l'instant pour la version "Cloud" cad sur les serveurs d'Emoncms. Mais j'ai lu qu'à terme ils auront besoin d'une petite contrib des utilisateurs pour payer leurs frais, ce qui est normal.
Rien ne t’empêche de l'installer sur ton serveur perso.
Connexion ou Créer un compte pour participer à la conversation.
- Lebritish
- Hors Ligne
- Membre platinium
- Messages : 655
- Remerciements reçus 11
patrick écrit: Bon ben c'est hyper facile d'envoyer vers Emoncms, presque trop facile même.
Ce qui m'embête c'est que les requêtes se font en GET et pas en POST. Du coup ça limite le volume de data envoyé en une fois.
Tu as essayé en mode "bulk " ?
pour moi tu mets un node id par sonde et le même time offset pr toutes les node (4 = now)
Donc en un coup tu envois les 16 sondes avec le même timestamp
exemple pr les sondes 1,2,3 avec les T° 28, 60 et 17°C:
http://emoncms.org/input/bulk.json?data=[[4,1,28],[4,2,60],[4,3,17]]
github.com/emoncms/emoncms/issues/194
www.esp8266.nu/forum/viewtopic.php?t=163
Bulk data
You can provide data using bulk mode http://emoncms.org/input/bulk.json?data=[[0,16,1137],[2,17,1437,3164],[4,19,1412,3077]]
The first number of each node is the time offset (see below).
The second number is the [b]node [/b]id, this is the unique identifer for the wireless node.
All the numbers after the first two are data values. The second node here (node 17) has two data values: 1437 and 3164.
Optional offset and time parameters allow the sender to set the time reference for the packets. If none is specified, it is assumed that the last packet just arrived. The time for the other packets is then calculated accordingly.
Legacy default format (4 is now, 2 is -2 seconds and 0 is -4 seconds to now): http://emoncms.org/input/bulk.json?data=[[0,16,1137],[2,17,1437,3164],[4,19,1412,3077]]
Time offset format (-6 is -16 seconds to now): http://emoncms.org/input/bulk.json?data=[[-10,16,1137],[-8,17,1437,3164],[-6,19,1412,3077]]&offset=-10
Sentat format: (useful for sending as positive increasing time index) http://emoncms.org/input/bulk.json?data=[[520,16,1137],[530,17,1437,3164],[535,19,1412,3077]]&sentat=543
Absolute time format (-6 is 1387730121 seconds since 1970-01-01 00:00:00 UTC)) http://emoncms.org/input/bulk.json?data=[[-10,16,1137],[-8,17,1437,3164],[-6,19,1412,3077]]&time=1444424907
Connexion ou Créer un compte pour participer à la conversation.
- Lebritish
- Hors Ligne
- Membre platinium
- Messages : 655
- Remerciements reçus 11
Au niveau structure tu pourrais mettre toutes les sondes sur le meme "node ID" et les sortie sur un deuxième node.
du coup par ex pr avoir les 16 sondes sur le node 0:
http://emoncms.org/input/bulk.json?data=[[4,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]]
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Auteur du sujet
- Hors Ligne
- Administrateur
- Messages : 3134
- Remerciements reçus 483
Mais en bulk ou csv, je voudrais pouvoir entrer une liste de "name" dans le même ordre que les data.
Pareil, j'ai essayé de créer des feeds mais il me retourne toujours une erreur de datatype. Il faut tout se configurer à la mano. Tu me diras, il ne faut le faire qu'une fois, mais bon, c'est l'habitude du Maxisun où tout se met en place tout seul !
Connexion ou Créer un compte pour participer à la conversation.
- Lebritish
- Hors Ligne
- Membre platinium
- Messages : 655
- Remerciements reçus 11
pr créer les feed tu peux essayer ca:
emoncms.org/feed/create.json?name=test12&tag=0&datatype=1&engine=6
le datatype est correct. Par contre le Tag n'a pas l'air d'etre reconnu
pr les nom tu pourrais peut etre faire une commande GET tous les jours à 00:05 qui renvoie le nom des sondes (des fois qu'il y ai eu un changement de config ds le MS)
Connexion ou Créer un compte pour participer à la conversation.
- Ruthene
- Hors Ligne
- Membre elite
- Messages : 164
- Remerciements reçus 0
J'ai installé le emoncms sur mon serveur debian.
Eh ben, un peu la boite à gaz.
Patrick, si tu implémente une mise à jour automatique vers emoncms local distant en même temps que l'enregistrement sur la carte SD. Fais en sorte qu'on puisse paramétrer la base que l'on désire utiliser et le modelage de la trame. Cela multiplier les enregistrements et les requêtes, exemple vers MySQL.
Dans emoncms, j'ai essayé d'utiliser un autre nom de base (la mienne par exemple que j'utilise) mais comme leur scripts sont pré formatés, impossible de le faire.
Thierry, aurais-tu une astuce pour dupliquer facilement une base déjà existante vers emoncms ou devons-nous passer par le développement d'un spécifique?
Stef.
Connexion ou Créer un compte pour participer à la conversation.
- Lebritish
- Hors Ligne
- Membre platinium
- Messages : 655
- Remerciements reçus 11
euh non je n'ai pas d'astuce pr dupliquer une base déjà existante. Mon expérience sur emoncms est qd meme très limité.
PAr contre a titre d'exemple voilà ce que l'on peut obtenir comme graphes: www.emoncms.org/jb79/Boiler
A+
Thierry
Connexion ou Créer un compte pour participer à la conversation.
- Ruthene
- Hors Ligne
- Membre elite
- Messages : 164
- Remerciements reçus 0
Pas mal, je trouve un peu lourd (pour l'instant).
Par contre, depuis que j'ai installé emoncms, j'ai mon serveur qui a drôlement ralenti.
Je ne sais pas si il y a un lien mais bon.
Stef.
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Auteur du sujet
- Hors Ligne
- Administrateur
- Messages : 3134
- Remerciements reçus 483
Apparemment j'ai 4 processus Apache2 de plus qu'avant qui tournent en taches de fond. J'en avait déjà 4 pour mon serveur local qui me sert à tester les pages web du MS.
À voir donc...
Connexion ou Créer un compte pour participer à la conversation.
- thierry y
- Hors Ligne
- Membre senior
- Messages : 62
- Remerciements reçus 1
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- Maxisun
- Développement
- Maxisun/Emoncms