Compare commits

...

7 Commits

11 changed files with 140 additions and 129 deletions

View File

@ -13,8 +13,9 @@ import (
) )
var ( var (
_, timezoneOffset = time.Now().Zone() timezoneName, timezoneOffset = time.Now().Zone()
log = logs.NewLogger(10000) timezoneLocation = time.FixedZone(timezoneName, timezoneOffset)
log = logs.NewLogger(10000)
) )
func init() { func init() {

View File

@ -7,7 +7,6 @@ import (
"git.kingpenguin.tk/chteufleur/datahouse.git/models/variables" "git.kingpenguin.tk/chteufleur/datahouse.git/models/variables"
"net/http" "net/http"
"strings"
) )
type LoginController struct { type LoginController struct {
@ -18,7 +17,6 @@ const (
UrlXmppAuth = "http://auth.xmpp.kingpenguin.tk/auth" UrlXmppAuth = "http://auth.xmpp.kingpenguin.tk/auth"
) )
func (c *LoginController) Prepare() { func (c *LoginController) Prepare() {
} }
@ -68,26 +66,23 @@ func (c *LoginController) Post() {
func isLoginOK(lgn, pwd string) bool { func isLoginOK(lgn, pwd string) bool {
ret := false ret := false
if len(strings.Split(lgn, "@")) != 1 { usr := user.GetUserByLogin(lgn)
// JID inside if usr.Id == 0 {
return ret
}
log.Info("Standard auth")
ret = pwd != "" && pwd == usr.Password
if !ret && usr.JID != "" {
log.Info("Auth by JID") log.Info("Auth by JID")
usr := user.GetUserByLogin(strings.Split(lgn, "/")[0]) resp, _ := http.Get(UrlXmppAuth + "?domain=datahouse.kingpenguin.tk&method=POST&jid=" + usr.JID + "&transaction_id=datahouse")
if usr.Id == 0 { httpStatusCode := resp.StatusCode
// User is not in database if resp != nil && httpStatusCode == 200 {
ret = false ret = true
} else { } else {
resp, _ := http.Get(UrlXmppAuth+"?domain=datahouse.kingpenguin.tk&method=POST&jid="+lgn+"&transaction_id="+pwd) ret = false
httpStatusCode := resp.StatusCode
if resp != nil && httpStatusCode == 200 {
ret = true
} else {
ret = false
}
} }
} else {
log.Info("Standard auth")
usr := user.GetUserByLogin(lgn)
ret = pwd != "" && pwd == usr.Password
} }
return ret return ret
} }

View File

@ -5,8 +5,8 @@ import (
"git.kingpenguin.tk/chteufleur/datahouse.git/models/relay" "git.kingpenguin.tk/chteufleur/datahouse.git/models/relay"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/sensor" "git.kingpenguin.tk/chteufleur/datahouse.git/models/sensor"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/teleinfo"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/temperature" "git.kingpenguin.tk/chteufleur/datahouse.git/models/temperature"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/teleinfo"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/variables" "git.kingpenguin.tk/chteufleur/datahouse.git/models/variables"
"strconv" "strconv"

View File

@ -3,8 +3,8 @@ package controllers
import ( import (
"github.com/astaxie/beego" "github.com/astaxie/beego"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/teleinfo"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/variables" "git.kingpenguin.tk/chteufleur/datahouse.git/models/variables"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/teleinfo"
"html/template" "html/template"
"strconv" "strconv"
@ -22,13 +22,15 @@ func (c *AddTeleinfoController) Prepare() {
} }
func (c *AddTeleinfoController) Get() { func (c *AddTeleinfoController) Get() {
adresse := c.GetString(teleinfo.AdresseCompteur) adresse := c.GetString(teleinfo.AdresseCompteur)
tarif := c.GetString(teleinfo.OptionTarifaire) tarif := c.GetString(teleinfo.OptionTarifaire)
option := c.GetString(teleinfo.OptionBase) option, _ := c.GetInt(teleinfo.OptionBase)
hp, _ := c.GetInt(teleinfo.HeurePleinne) isousc, _ := c.GetInt(teleinfo.IntensiteSouscrite)
hc, _ := c.GetInt(teleinfo.HeureCreuse) iinst, _ := c.GetInt(teleinfo.IntensiteInstantanne)
imax, _ := c.GetInt(teleinfo.IntensiteMax)
papp, _ := c.GetInt(teleinfo.PuissanceApparente)
teleinfo.AddData(adresse, tarif, option, int64(hp), int64(hc)) teleinfo.AddData(adresse, tarif, int64(option), int64(isousc), int64(iinst), int64(imax), int64(papp))
cpt := teleinfo.GetCompteurByAdresse(adresse) cpt := teleinfo.GetCompteurByAdresse(adresse)
if cpt == nil || cpt.Id == 0 { if cpt == nil || cpt.Id == 0 {
@ -37,8 +39,6 @@ func (c *AddTeleinfoController) Get() {
c.Ctx.Output.Body([]byte("")) c.Ctx.Output.Body([]byte(""))
} }
//—————————————————————————————————————————————————————————————————————————————— //——————————————————————————————————————————————————————————————————————————————
// ViewTeleinfoController // ViewTeleinfoController
//—————————————————————————————————————————————————————————————————————————————— //——————————————————————————————————————————————————————————————————————————————
@ -72,36 +72,18 @@ func (c *ViewTeleinfoController) Get() {
c.TplName = "teleinfo.tpl" c.TplName = "teleinfo.tpl"
} }
func formatDataSensorTeleInfo(values []teleinfo.TeleinfoTable) string { func formatDataSensorTeleInfo(values []teleinfo.TeleinfoTable) string {
ret := "" ret := ""
for a := 0; a < 2; a++ { ret += "{name : \"Puissance apparente (VA)\",marker : {enabled : true, radius : 3}, data : ["
ret += "{name : \"" for i := 0; i < len(values); i++ {
if a == 0 { if i > 0 {
ret += "Heure Pleines"
} else {
ret += "Heure Creuses"
}
ret += "\",marker : {enabled : true, radius : 3}, data : ["
for i := 0; i < len(values); i++ {
if i > 0 {
ret += ","
}
// TODO faire la dérivé de la puissance pour avoir les variations plutot que l'évolution de la puissance
horodate := strconv.FormatInt((values[i].HorodateGMT.Unix()+int64(timezoneOffset))*1000, 10)
value := ""
if a == 0 {
value = strconv.FormatInt(values[i].HeurePleinne, 10)
} else {
value = strconv.FormatInt(values[i].HeureCreuse, 10)
}
ret += "[" + horodate + "," + value + "]"
}
ret += "]}"
if a == 0 {
ret += "," ret += ","
} }
// TODO faire la dérivé de la puissance pour avoir les variations plutot que l'évolution de la puissance
horodate := strconv.FormatInt((values[i].HorodateGMT.Unix()+int64(timezoneOffset))*1000, 10)
value := strconv.FormatInt(values[i].PuissanceApparente, 10)
ret += "[" + horodate + "," + value + "]"
} }
ret += "]}"
return ret return ret
} }

View File

@ -2,16 +2,14 @@ package controllers
import ( import (
"github.com/astaxie/beego" "github.com/astaxie/beego"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/variables" "git.kingpenguin.tk/chteufleur/datahouse.git/models/variables"
"git.kingpenguin.tk/chteufleur/datahouse.git/watchlog" "git.kingpenguin.tk/chteufleur/datahouse.git/watchlog"
"net/http" "net/http"
) )
type WebSocketController struct { type WebSocketController struct {
beego.Controller beego.Controller
} }
@ -28,16 +26,12 @@ func (c *WebSocketController) Prepare() {
c.Data["version"] = variables.Version c.Data["version"] = variables.Version
} }
// Get method handles GET requests for WebSocketController. // Get method handles GET requests for WebSocketController.
func (c *WebSocketController) Get() { func (c *WebSocketController) Get() {
c.Data["hostWS"] = "ws://"+c.Ctx.Request.Host+variables.WebSocketLogRoute c.Data["hostWS"] = "ws://" + c.Ctx.Request.Host + variables.WebSocketLogRoute
c.TplName = "watchlog.tpl" c.TplName = "watchlog.tpl"
} }
// Join method handles WebSocket requests for WebSocketController. // Join method handles WebSocket requests for WebSocketController.
func (this *WebSocketController) Join() { func (this *WebSocketController) Join() {
// Upgrade from http request to WebSocket. // Upgrade from http request to WebSocket.
@ -50,8 +44,7 @@ func (this *WebSocketController) Join() {
return return
} }
watchlog.ListWebSocket.PushFront(ws) watchlog.ListWebSocket.PushFront(ws)
// Message receive loop. // Message receive loop.
for { for {

View File

@ -8,20 +8,22 @@ import (
"git.kingpenguin.tk/chteufleur/datahouse.git/models/utils" "git.kingpenguin.tk/chteufleur/datahouse.git/models/utils"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/variables" "git.kingpenguin.tk/chteufleur/datahouse.git/models/variables"
"time" "time"
) )
const ( const (
AdresseCompteur = "ADCO" AdresseCompteur = "ADCO"
OptionTarifaire = "OPTARIF" OptionTarifaire = "OPTARIF"
OptionBase = "BASE" // Wh OptionBase = "BASE" // Wh
HeurePleinne = "HCHP" // Wh IntensiteSouscrite = "ISOUSC" // A
HeureCreuse = "HCHC" // Wh IntensiteInstantanne = "IINST" // A
IntensiteMax = "IMAX" // A
PuissanceApparente = "PAPP" // VA
) )
var ( var (
_, timezoneOffset = time.Now().Zone() _, timezoneOffset = time.Now().Zone()
log = logs.NewLogger(10000) log = logs.NewLogger(10000)
optionTarifaireTranslate = make(map[string]string) optionTarifaireTranslate = make(map[string]string)
) )
@ -36,34 +38,35 @@ func init() {
optionTarifaireTranslate["EJP."] = "EJP" optionTarifaireTranslate["EJP."] = "EJP"
} }
//—————————————————————————————————————————————————————————————————————————————— //——————————————————————————————————————————————————————————————————————————————
// TeleinfoTable // TeleinfoTable
//—————————————————————————————————————————————————————————————————————————————— //——————————————————————————————————————————————————————————————————————————————
type TeleinfoTable struct { type TeleinfoTable struct {
Id int64 Id int64
HorodateGMT time.Time `orm:"auto_now;type(datetime)"` HorodateGMT time.Time `orm:"auto_now;type(datetime)"`
AdresseCompteur string AdresseCompteur string
OptionTarifaire string OptionTarifaire string
OptionBase string OptionBase int64
HeurePleinne int64 IntensiteSouscrite int64
HeureCreuse int64 IntensiteInstantanne int64
IntensiteMax int64
PuissanceApparente int64
} }
func AddData(adresse, tarif string, base, isousc, iinst, imax, papp int64) {
func AddData(adresse, tarif, option string, hp, hc int64) { log.Info("Add teleinfo {adresse: %s, tarif: %s, base: %s Wh, isousc: %d A, iinst: %d A, imax: %d A, ppap: %d VA}", adresse, tarif, base, isousc, iinst, imax, papp)
log.Info("Add teleinfo {adresse: %s, tarif: %s, option: %s, hp: %d, hc: %d}", adresse, tarif, option, hp, hc)
o := orm.NewOrm() o := orm.NewOrm()
o.Using(database.Alias) o.Using(database.Alias)
ti := new(TeleinfoTable) ti := new(TeleinfoTable)
ti.AdresseCompteur = adresse ti.AdresseCompteur = adresse
ti.OptionTarifaire = tarif ti.OptionTarifaire = tarif
ti.OptionBase = option ti.OptionBase = base
ti.HeurePleinne = hp ti.IntensiteSouscrite = isousc
ti.HeureCreuse = hc ti.IntensiteInstantanne = iinst
o.Insert(ti) ti.IntensiteMax = imax
ti.PuissanceApparente = papp
o.Insert(ti)
} }
func GetAllDataForCompteur(adresseCompteur string) []TeleinfoTable { func GetAllDataForCompteur(adresseCompteur string) []TeleinfoTable {
@ -81,10 +84,13 @@ func GetAllDataForCompteur(adresseCompteur string) []TeleinfoTable {
d.AdresseCompteur = utils.GetString(m, "AdresseCompteur") d.AdresseCompteur = utils.GetString(m, "AdresseCompteur")
d.OptionTarifaire = optionTarifaireTranslate[utils.GetString(m, "OptionTarifaire")] d.OptionTarifaire = optionTarifaireTranslate[utils.GetString(m, "OptionTarifaire")]
d.OptionBase = utils.GetString(m, "OptionBase") d.OptionBase = utils.GetInt(m, "OptionBase")
d.HeurePleinne = utils.GetInt(m, "HeurePleinne") d.IntensiteSouscrite = utils.GetInt(m, "IntensiteSouscrite")
d.HeureCreuse = utils.GetInt(m, "HeureCreuse") d.IntensiteInstantanne = utils.GetInt(m, "IntensiteInstantanne")
d.IntensiteMax = utils.GetInt(m, "IntensiteMax")
d.PuissanceApparente = utils.GetInt(m, "PuissanceApparente")
dataArray = append(dataArray, *d) dataArray = append(dataArray, *d)
} }
@ -106,10 +112,13 @@ func GetLastDataForCompteur(adresseCompteur string) *TeleinfoTable {
data.AdresseCompteur = utils.GetString(m, "AdresseCompteur") data.AdresseCompteur = utils.GetString(m, "AdresseCompteur")
data.OptionTarifaire = optionTarifaireTranslate[utils.GetString(m, "OptionTarifaire")] data.OptionTarifaire = optionTarifaireTranslate[utils.GetString(m, "OptionTarifaire")]
data.OptionBase = utils.GetString(m, "OptionBase") data.OptionBase = utils.GetInt(m, "OptionBase")
data.HeurePleinne = utils.GetInt(m, "HeurePleinne") data.IntensiteSouscrite = utils.GetInt(m, "IntensiteSouscrite")
data.HeureCreuse = utils.GetInt(m, "HeureCreuse") data.IntensiteInstantanne = utils.GetInt(m, "IntensiteInstantanne")
data.IntensiteMax = utils.GetInt(m, "IntensiteMax")
data.PuissanceApparente = utils.GetInt(m, "PuissanceApparente")
} }
} }
return data return data
@ -121,15 +130,13 @@ func DeleteDataCompteur(adresseCompteur string) {
o.Delete(&TeleinfoTable{AdresseCompteur: adresseCompteur}) o.Delete(&TeleinfoTable{AdresseCompteur: adresseCompteur})
} }
//—————————————————————————————————————————————————————————————————————————————— //——————————————————————————————————————————————————————————————————————————————
// CompteurTeleinfoTable // CompteurTeleinfoTable
//—————————————————————————————————————————————————————————————————————————————— //——————————————————————————————————————————————————————————————————————————————
type CompteurTeleinfoTable struct { type CompteurTeleinfoTable struct {
Id int64 Id int64
AdresseCompteur string AdresseCompteur string
Description string Description string
} }
func GetCompteurByAdresse(adresse string) *CompteurTeleinfoTable { func GetCompteurByAdresse(adresse string) *CompteurTeleinfoTable {
@ -190,7 +197,6 @@ func GetSensor(id int64) *CompteurTeleinfoTable {
o := orm.NewOrm() o := orm.NewOrm()
o.Using(database.Alias) o.Using(database.Alias)
var ret = new(CompteurTeleinfoTable) var ret = new(CompteurTeleinfoTable)
var maps []orm.Params var maps []orm.Params
_, err := o.QueryTable(new(CompteurTeleinfoTable)).Filter("Id", id).Values(&maps) _, err := o.QueryTable(new(CompteurTeleinfoTable)).Filter("Id", id).Values(&maps)

View File

@ -19,7 +19,9 @@ type TempTable struct {
} }
var ( var (
_, timezoneOffset = time.Now().Zone() timezoneName, timezoneOffset = time.Now().Zone()
timezoneLocation = time.FixedZone(timezoneName, timezoneOffset)
deltaTimeCompressData = 1440 * time.Hour
log = logs.NewLogger(10000) log = logs.NewLogger(10000)
) )
@ -43,6 +45,22 @@ func AddData(sensor, value int64) {
o.Insert(tmpTable) o.Insert(tmpTable)
} }
func AddDataWithHorodate(id, sensor, value int64, horodateGMT time.Time) {
log.Info("Add Temperature {sensor: %s, value: %d, horodateGNT: %v}", sensor, value, horodateGMT)
o := orm.NewOrm()
o.Using(database.Alias)
tmpTable := new(TempTable)
tmpTable.Id = id
tmpTable.Value = value
tmpTable.SensorID = sensor
tmpTable.HorodateGMT = horodateGMT
_, err := o.Insert(tmpTable)
if err != nil {
log.Info("Error on insert temperature ", err)
}
}
func GetAllTempForSensor(sensorId int64) []TempTable { func GetAllTempForSensor(sensorId int64) []TempTable {
o := orm.NewOrm() o := orm.NewOrm()
o.Using(database.Alias) o.Using(database.Alias)
@ -89,6 +107,13 @@ func DeleteTemperatureBySenor(sensorId int64) {
temps := GetAllTempForSensor(sensorId) temps := GetAllTempForSensor(sensorId)
for _, temp := range temps { for _, temp := range temps {
o.Delete(&TempTable{Id: temp.Id}) DeleteTemperatureById(temp.Id)
} }
} }
func DeleteTemperatureById(tempId int64) {
log.Info("Delete temperatures id : %d", tempId)
o := orm.NewOrm()
o.Using(database.Alias)
o.Delete(&TempTable{Id: tempId})
}

View File

@ -12,6 +12,7 @@ type User struct {
Id int64 Id int64
Login string Login string
Password string Password string
JID string
} }
func init() { func init() {
@ -47,6 +48,7 @@ func GetUserByLogin(login string) *User {
ret.Id = utils.GetInt(m, "Id") ret.Id = utils.GetInt(m, "Id")
ret.Login = utils.GetString(m, "Login") ret.Login = utils.GetString(m, "Login")
ret.Password = utils.GetString(m, "Password") ret.Password = utils.GetString(m, "Password")
ret.JID = utils.GetString(m, "JID")
break break
} }
} }
@ -65,6 +67,7 @@ func GetUser(id int64) *User {
ret.Id = utils.GetInt(m, "Id") ret.Id = utils.GetInt(m, "Id")
ret.Login = utils.GetString(m, "Login") ret.Login = utils.GetString(m, "Login")
ret.Password = utils.GetString(m, "Password") ret.Password = utils.GetString(m, "Password")
ret.JID = utils.GetString(m, "JID")
break break
} }
} }

View File

@ -1,7 +1,7 @@
package variables package variables
const ( const (
Version = "0.1.2" Version = "0.1.4"
SessionName = "Session_Data_House" SessionName = "Session_Data_House"

View File

@ -13,12 +13,12 @@
//---------------------------------------------------- //----------------------------------------------------
const char* ssid = "SFR_4D28";
const char* password = "catruntiterthsti9ale";
/* /*
const char* ssid = "TNCAP3F2E03";
const char* password = "73ABCCAA87";
*/
const char* ssid = "L0AD"; const char* ssid = "L0AD";
const char* password = ""; const char* password = "";
*/
const char* host = "datahouse.kingpenguin.tk"; const char* host = "datahouse.kingpenguin.tk";
@ -29,8 +29,10 @@ const int DEFAULT_INTERVAL = 60000; // 60 sec
String ADCO = ""; String ADCO = "";
String OPTARIF = ""; String OPTARIF = "";
String BASE = ""; String BASE = "";
String HCHP = ""; String ISOUSC = "";
String HCHC = ""; String IINST = "";
String IMAX = "";
String PAPP = "";
bool sendData = false; bool sendData = false;
//---------------------------------------------------- //----------------------------------------------------
@ -55,9 +57,9 @@ void sendDataToServer() {
Serial.println(httpPort); Serial.println(httpPort);
return; return;
} }
// We now create a URI for the request // We now create a URI for the request
String url = "/teleinfo/add?ADCO="+ADCO+"&OPTARIF="+OPTARIF+"&BASE="+BASE+"&HCHC="+HCHC+"&HCHP="+HCHP; String url = "/teleinfo/add?ADCO="+ADCO+"&OPTARIF="+OPTARIF+"&BASE="+BASE+"&ISOUSC="+ISOUSC+"&IINST="+IINST+"&IMAX="+IMAX+"&PAPP="+PAPP;
Serial.print("Requesting URL: "); Serial.print("Requesting URL: ");
Serial.println(url); Serial.println(url);
@ -181,20 +183,25 @@ void loop() {
if (label == "ADCO" && isNumberSelf(value)) { if (label == "ADCO" && isNumberSelf(value)) {
ADCO = value; ADCO = value;
sendData = true;
} }
if (label == "OPTARIF") { if (label == "OPTARIF") {
OPTARIF = value; OPTARIF = value;
} }
if (label == "BASE") { if (label == "BASE" && isNumberSelf(value)) {
BASE = value; BASE = value;
} }
if (label == "HCHC" && isNumberSelf(value)) { if (label == "ISOUSC" && isNumberSelf(value)) {
HCHC = value; ISOUSC = value;
sendData = true;
} }
if (label == "HCHP" && isNumberSelf(value)) { if (label == "IINST" && isNumberSelf(value)) {
HCHP = value; IINST = value;
sendData = true; }
if (label == "IMAX" && isNumberSelf(value)) {
IMAX = value;
}
if (label == "PAPP" && isNumberSelf(value)) {
PAPP = value;
} }
// if (millis() >= nextInterval) { // if (millis() >= nextInterval) {

View File

@ -138,11 +138,10 @@
<center><h3><strong>{{.compteurDescription}}</strong></h3></center> <center><h3><strong>{{.compteurDescription}}</strong></h3></center>
<hr/> <hr/>
<h4>N° Compteur: <small>{{.dataCompteur.AdresseCompteur}}</small></h4> <h4>N° Compteur : <small>{{.dataCompteur.AdresseCompteur}}</small></h4>
<h4>Option tarifaire: <small>{{.dataCompteur.OptionTarifaire}}</small></p> <h4>Option tarifaire : <small>{{.dataCompteur.OptionTarifaire}}</small></p>
<h4>Option base: <small>{{.dataCompteur.OptionBase}}</small></h4> <h4>Option base : <small>{{.dataCompteur.OptionBase}} Wh</small></h4>
<h4>Heure pleine: <small>{{.dataCompteur.HeurePleinne}} Wh</small></h4> <h4>Intensité souscrite : <small>{{.dataCompteur.IntensiteSouscrite}} A</small></h4>
<h4>Heure creuse: <small>{{.dataCompteur.HeureCreuse}} Wh</small></h4>
<div style="margin-top: 30px;" id="graphe"></div> <div style="margin-top: 30px;" id="graphe"></div>
</div> </div>