Maxisun/Emoncms

Plus d'informations
06 Déc 2015 20:12 - 06 Déc 2015 23:24 #1 par patrick
Maxisun/Emoncms a été créé par patrick
J'ouvre ce sujet (Section Développement => invisible pour les invités) pour voir ce qu'il faudrait mettre en place pour faire communiquer le Maxisun avec Emoncms: emoncms.org/

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.
Dernière édition: 06 Déc 2015 23:24 par patrick.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
07 Déc 2015 10:29 - 10 Déc 2015 08:20 #2 par Lebritish
Réponse de Lebritish sur le sujet Maxisun/Emoncms
Bjr Patrick,

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();
}
Dernière édition: 10 Déc 2015 08:20 par Lebritish.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
07 Déc 2015 11:52 #3 par patrick
Réponse de patrick sur le sujet Maxisun/Emoncms
Bonjour Thierry,

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! :whistle:

Merci pour le script, ça me donne quelques infos supplémentaires.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
07 Déc 2015 16:48 #4 par Troglo
Réponse de Troglo sur le sujet Maxisun/Emoncms
Salut !
J'aurai bien aimé vous donner un coup de main mais là ça me dépasse :S Désolé.

Jérôme

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
07 Déc 2015 20:21 #5 par Ruthene
Réponse de Ruthene sur le sujet Maxisun/Emoncms
Bonsoir,
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.

Plus d'informations
07 Déc 2015 21:39 #6 par patrick
Réponse de patrick sur le sujet Maxisun/Emoncms
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.

@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.

Plus d'informations
07 Déc 2015 21:59 - 07 Déc 2015 22:14 #7 par Lebritish
Réponse de Lebritish sur le sujet Maxisun/Emoncms

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
Dernière édition: 07 Déc 2015 22:14 par Lebritish.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
08 Déc 2015 08:52 #8 par Lebritish
Réponse de Lebritish sur le sujet Maxisun/Emoncms
Bon j'ai essayé le mode bulk, ca marche bien.

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.

Plus d'informations
08 Déc 2015 09:40 #9 par patrick
Réponse de patrick sur le sujet Maxisun/Emoncms
Oui, c'est bien ce que je pensais faire, un node par catégorie d'inputs.
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 ! :whistle:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
08 Déc 2015 21:35 #10 par Lebritish
Réponse de Lebritish sur le sujet Maxisun/Emoncms
salut,

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 :sick:

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.

Plus d'informations
10 Déc 2015 06:19 #11 par Ruthene
Réponse de Ruthene sur le sujet Maxisun/Emoncms
Bonjour,
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.

Plus d'informations
11 Déc 2015 15:35 #12 par Lebritish
Réponse de Lebritish sur le sujet Maxisun/Emoncms
Salut a tous,

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.

Plus d'informations
12 Déc 2015 20:09 #13 par Ruthene
Réponse de Ruthene sur le sujet Maxisun/Emoncms
Bonjour,

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.

Plus d'informations
12 Déc 2015 23:09 #14 par patrick
Réponse de patrick sur le sujet Maxisun/Emoncms
Moi aussi, depuis que j'ai essayé d' installer Emoncms sur mon PC sous Kubuntu, j'ai l'impression qu'il est moins véloce.

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.

Plus d'informations
18 Aoû 2022 15:30 #15 par thierry y
Réponse de thierry y sur le sujet Maxisun/Emoncms
mega deterage de topic mais si certain pigent comment envoyer les data sur le cloud emoncms je suis preneur.

Connexion ou Créer un compte pour participer à la conversation.

Propulsé par Kunena