The feed data is held in this location emoncms_datadir=/var/opt/emoncms
as set by the config.ini
The SQL database is used for user data, dashboard configuration, process configuration etc.
The feed data is held in this location emoncms_datadir=/var/opt/emoncms
as set by the config.ini
The SQL database is used for user data, dashboard configuration, process configuration etc.
when inserting the local emoncms url presents these php files, what can I do to solve them?
? php
/ *
Todo o código Emoncms é liberado sob a Licença Pública Geral GNU Affero.
Consulte COPYRIGHT.txt e LICENSE.txt.
-------------------------------------------------- -------------------
Emoncms - visualização de energia de código aberto
Parte do projeto OpenEnergyMonitor:
http://openenergymonitor.org
* /
define ('EMONCMS_EXEC', 1);
// 1) Carregar configurações e scripts principais
requer "process_settings.php";
requer "core.php";
requer "route.php";
requer "param.php";
requer "locale.php";
$ emoncms_version = ($ feed_settings ['redisbuffer'] ['ativado']? "gravação baixa": ""). versão();
$ caminho = get_application_path ();
$ sidebarFixed = true;
requer "Lib / EmonLogger.php";
$ log = novo EmonLogger (__ FILE__);
if (isset ($ _ GET ['q'])) $ log-> informações ($ _ GET ['q']);
// 2) Banco de dados
if ($ redis_enabled) {
$ redis = novo Redis ();
$ conectado = $ redis-> conectar ($ redis_server ['host'], $ redis_server ['porta']);
if (! $ connected) {echo "Não é possível conectar-se ao redis em". $ redis_server ['host']. ":". $ redis_server ['port']. ", pode ser que o redis-server não esteja instalado ou iniciado, consulte o leia-me para a instalação do redis "; morrer; }
if (! vazio ($ redis_server ['prefixo'])) $ redis-> setOption (Redis :: OPT_PREFIX, $ redis_server ['prefixo']);
if (! vazio ($ redis_server ['auth']))) {
if (! $ redis-> auth ($ redis_server ['auth']))) {
echo "Não é possível conectar-se ao redis em". $ redis_server ['host']. ", a autenticação falhou"; morrer;
}
}
if (! empty ($ redis_server ['dbnum']))) {
$ redis-> select ($ redis_server ['dbnum']);
}
} outro {
$ redis = false;
}
$ mqtt = false;
# Verifique se os módulos PHP do MySQL estão carregados
if (! extension_loaded ('mysql') &&! extension_loaded ('mysqli')) {
echo "Parece que sua instalação do PHP não possui as extensões do MySQL exigidas pelo Emoncms. <br> Consulte /php-info.php (restrito ao acesso local)"; morrer;
}
# Verifique o módulo PHP do Gettext carregado
if (! extension_loaded ('gettext')) {
echo "Sua instalação do PHP parece não ter a extensão gettext exigida pelo Emoncms. <br> Consulte /php-info.php (restrito ao acesso local)"; morrer;
}
$ mysqli = @ novo mysqli ($ servidor, $ nome de usuário, $ senha, $ banco de dados, $ porta);
if ($ mysqli-> connect_error) {
echo "Não foi possível conectar ao banco de dados, verifique as credenciais / configurações em settings.php <br />";
if ($ display_errors) {
eco "Mensagem de erro: <b>". $ mysqli-> connect_error. "</b>";
}
morrer();
}
// Defina charset como utf8
$ mysqli-> set_charset ("utf8");
if (! $ mysqli-> connect_error && $ dbtest == true) {
requer "Lib / dbschemasetup.php";
if (! db_check ($ mysqli, $ database)) db_schema_setup ($ mysqli, load_db_schema (), true);
}
// 3) Sessões do usuário
require ("Módulos / usuário / usuário_model.php");
$ usuário = novo usuário ($ mysqli, $ redis);
$ apikey = false;
$ devicekey = false;
if (isset ($ _ GET ['apikey'])) {
$ apikey = $ _GET ['apikey'];
} else if (isset ($ _ POST ['apikey']))) {
$ apikey = $ _POST ['apikey'];
} else if (isset ($ _ GET ['devicekey']))) {
$ devicekey = $ _GET ['devicekey'];
} else if (isset ($ _ POST ['devicekey']))) {
$ devicekey = $ _POST ['devicekey'];
} else if (isset ($ _ SERVER ["HTTP_AUTHORIZATION"])) {
// Suporta a passagem de apikey no cabeçalho de autorização por rfc6750, como exemplo:
// GET / recurso HTTP / 1.1
// Host: server.example.com
// Autorização: portador THE_API_KEY_HERE
if (isset ($ _ SERVER ["CONTENT_TYPE"]) && $ _SERVER ["CONTENT_TYPE"] == "aes128cbc") {
// Se content_type for AES128CBC
} outro {
$ apikey = str_replace ('Portador', '', $ _SERVER ["HTTP_AUTHORIZATION"]);
}
}
$ dispositivo = falso;
if ($ apikey) {
$ session = $ user-> apikey_session ($ apikey);
if (vazio ($ session)) {
cabeçalho ($ _ SERVER ["SERVER_PROTOCOL"]. "401 Não autorizado");
cabeçalho ('WWW-Authenticate: domínio do portador = "API KEY", erro = "invalid_apikey", error_description = "Chave de API inválida"');
print "Chave API inválida";
$ log-> error ("Chave de API inválida '". $ apikey. "' |". $ _ SERVER ["REMOTE_ADDR"]);
Saída();
}
} senão se ($ devicekey && (@include "Módulos / dispositivo / device_model.php")) {
$ dispositivo = novo dispositivo ($ mysqli, $ redis);
$ session = $ device-> devicekey_session ($ devicekey);
if (vazio ($ session)) {
cabeçalho ($ _ SERVER ["SERVER_PROTOCOL"]. "401 Não autorizado");
cabeçalho ('WWW-Authenticate: domínio do portador = "Device KEY", erro = "invalid_devicekey", error_description = "Chave de dispositivo inválida"');
imprimir "Chave de dispositivo inválida";
$ log-> error ("Chave de dispositivo inválida '". $ devicekey. "'");
Saída();
}
} outro {
$ session = $ user-> emon_session_start ();
}
// 4) Idioma
if (! isset ($ session ['lang'])) $ session ['lang'] = '';
set_emoncms_lang ($ session ['lang']);
// 5) Obter controlador de rota e carregamento
// string de saída se o controlador ou a ação não for encontrada. usado para retornar erro.
define ('EMPTY_ROUTE', "# NÃO DEFINIDO #");
$ rota = nova rota (get ('q')), servidor ('DOCUMENT_ROOT'), servidor ('REQUEST_METHOD'));
// Carrega parâmetros get / post / encrypted - usados apenas pelas APIs input / post e input / bulk
$ param = new Param ($ rota, $ usuário);
// ------------------------------------------------ --------------------------------------
// Rotas especiais
// Retorna um breve descritor de dispositivo para detecção de hub
if ($ route-> controller == "descreva") {
cabeçalho ('Tipo de conteúdo: texto / sem formatação');
cabeçalho ('Access-Control-Allow-Origin: *');
if (file_exists ('/ home / pi / data / emonbase')) {
$ type = 'emonbase';
} elseif (arquivo_existe ('/ home / pi / data / emonpi')) {
$ type = 'emonpi';
} outro {
$ type = 'emoncms';
}
eco $ type;
morrer;
}
// lê o arquivo da versão e retorna o valor;
if ($ route-> controller == "version") {
cabeçalho ('Tipo de conteúdo: texto / sem formatação; charset = utf-8');
versão eco ();
Saída;
}
if (get ('embed') == 1) $ embed = 1; else $ embed = 0;
// Se nenhuma rota especificada usar padrões
if ($ route-> isRouteNotDefined ())
{
// Assistente de instalação do EmonPi
if ($ allow_emonpi_admin) {
if (file_exists ("Modules / setup")) {
requer "Módulos / setup / setup_model.php";
$ setup = nova instalação ($ mysqli);
if ($ setup-> status () == "não configurado") {
$ default_controller = "configuração";
$ default_action = "";
// Fornece acesso de configuração especial às funções do módulo WIFI
$ _SESSION ['setup_access'] = verdadeiro;
}
}
}
if (! isset ($ session ['read']) || (isset ($ session ['read']) &&! $ session ['read'])) {
// Padrões não autenticados
$ route-> controller = $ default_controller;
$ route-> action = $ default_action;
$ route-> subaction = "";
} outro {
if (isset ($ sessão ["página inicial"]) && $ session ["página inicial"]! = "") {
cabeçalho ('Localização:'. $ session ["página inicial"]);
morrer;
} outro {
// Padrões autenticados
$ route-> controller = $ default_controller_auth;
$ route-> action = $ default_action_auth;
$ route-> subaction = "";
}
}
}
if ($ devicekey &&! ($ route-> controller == 'input' && ($ route-> action == 'bulk' || $ route-> action == 'post'))) {
cabeçalho ($ _ SERVER ["SERVER_PROTOCOL"]. "401 Não autorizado");
print "Não autorizado. A autenticação da chave do dispositivo permite apenas ações de entrada ou em massa";
$ log-> error ("Não autorizado. A autenticação da chave do dispositivo permite apenas ações de entrada ou em massa");
Saída();
}
if ($ route-> controller == 'input' && $ route-> action == 'bulk') $ route-> format = 'json';
caso contrário, se ($ route-> controller == 'input' && $ route-> action == 'post') $ route-> format = 'json';
// 6) Carrega o controlador da página principal
$ output = controller ($ route-> controller);
// Se não houver um controlador com esse nome - tente username
// realmente precisa testar se não há um controlador e não se não houver conteúdo
// é retornado do controlador.
if ($ output ['content'] == EMPTY_ROUTE && $ public_profile_enabled && $ route-> controller! = 'admin')
{
$ userid = $ user-> get_id ($ rota-> controlador);
if ($ userid) {
$ rota-> subação = $ rota-> ação;
$ session ['userid'] = $ ID do usuário;
$ session ['nome de usuário'] = $ route-> controller;
$ session ['read'] = 1;
$ session ['profile'] = 1;
$ route-> controller = $ public_profile_controller;
$ route-> action = $ public_profile_action;
$ output = controller ($ route-> controller);
// captura "nome de usuário / gráfico" e redireciona para o módulo de gráficos se não existir nenhum painel chamado "gráfico"
if ($ output ["content"] == "" && $ route-> subaction == "graph") {
$ route-> controller = "gráfico";
$ route-> action = "";
$ _GET ['ID do usuário'] = $ ID do usuário;
$ output = controller ($ route-> controller);
}
}
}
// Se nenhum controlador encontrado ou nada for retornado, dê um erro amigável
if ($ output ['content'] === EMPTY_ROUTE) {
// alterar saída é $ route has $ action
$ actions = implode ("/", array_filter (array ($ rota-> ação, $ rota-> subação)));
$ message = sprintf (_ ('% s não pode responder a% s'), sprintf ("<strong>% s </strong>", ucfirst ($ route-> controller)), sprintf ('<strong> "% s "</strong> ', $ actions));
// altera o código do cabeçalho http
cabeçalho ($ _ SERVER ["SERVER_PROTOCOL"]. "406 Não aceitável");
$ title = _ ('406 Não Aceitável');
$ plain_text = _ ('Rota não encontrada');
$ intro = sprintf ('% s% s', _ ('URI não é aceitável.'), $ message);
$ text = _ ('Tente outro link no menu.');
// retorna a string formatada
if ($ route-> format === 'html') {
$ output ['content'] = sprintf ('<h2>% s </h2> <p class = "lead">% s. </p> <p>% s </p>', $ title, $ introdução, $ text);
} outro {
$ output ['content'] = matriz (
'success' => false,
'message' => sprintf ('% s.% s', $ title, $ plain_text)
);
}
$ log-> warn (sprintf ('% s |% s', $ title, implode ('/', array_filter (array ($ rota-> controlador, $ rota-> ação, $ rota-> subação)))) );
}
// Se não estiver autenticado e sem saída, solicita o login
if ($ output ['content'] == "" && (! isset ($ session ['read']) || (isset ($ session ['read']) &&! $ session ['read'])) ) {
$ log-> error (sprintf ('% s |% s', _ ('Not Authenticated'), implode ('/', array_filter (array ($ route-> controller, $ route-> action, $ route-> subação)))));
$ route-> controller = "usuário";
$ route-> action = "login";
$ route-> subaction = "";
$ message = urlencode (_ ('Autenticação necessária'));
$ referrer = urlencode (base64_encode (filter_var ($ _ SERVER ['REQUEST_URI']], FILTER_SANITIZE_URL)));
$ rota-> consulta = sprintf ("msg =% s & ref =% s", $ mensagem, $ referenciador);
$ output = controller ($ route-> controller);
}
$ output ['rota'] = $ rota;
$ output ['session'] = $ sessão;
// 7) Saída
if ($ route-> format == 'json')
{
if ($ route-> controller == 'time') {
cabeçalho ('Tipo de conteúdo: texto / sem formatação');
imprime $ output ['content'];
} elseif ($ route-> controller == 'input' e& $ route-> action == 'post') {
cabeçalho ('Tipo de conteúdo: texto / sem formatação');
imprime $ output ['content'];
} elseif ($ route-> controller == 'input' e& $ route-> action == 'bulk') {
cabeçalho ('Tipo de conteúdo: texto / sem formatação');
imprime $ output ['content'];
} outro {
cabeçalho ('Content-Type: application / json');
if (! vazio ($ output ['message'])) {
cabeçalho (sprintf ('X-emoncms-message:% s', $ output ['message']));
}
print json_encode ($ output ['content']);
if (json_last_error ()! = JSON_ERROR_NONE) {
switch (json_last_error ()) {
caso JSON_ERROR_DEPTH:
$ log-> error ("json_encode - $ route-> controller: profundidade máxima da pilha excedida");
quebrar;
caso JSON_ERROR_STATE_MISMATCH:
$ log-> error ("json_encode - $ route-> controller: Underflow ou incompatibilidade de modos");
quebrar;
caso JSON_ERROR_CTRL_CHAR:
$ log-> error ("json_encode - $ route-> controller: caractere de controle inesperado encontrado");
quebrar;
caso JSON_ERROR_SYNTAX:
$ log-> error ("json_encode - $ route-> controller: erro de sintaxe, JSON malformado");
quebrar;
caso JSON_ERROR_UTF8:
$ log-> error ("json_encode - $ route-> controller: caracteres UTF-8 malformados, possivelmente codificados incorretamente");
quebrar;
padrão:
$ log-> error ("json_encode - $ route-> controller: erro desconhecido");
quebrar;
}
}
}
}
caso contrário, se ($ route-> format == 'html')
{
// Selecione o tema
$ themeDir = "Tema /". $ theme. "/";
if ($ embed == 1) {
visualização de impressão ($ themeDir. "embed.php", $ output);
} outro {
$ menu = menu_de_carga ();
// MENU EMONCMS
if ($ session ['write']) {
$ menu ['tabs'] [] = matriz (
'ícone' => 'menu',
'title' => _ ("Emoncms"),
'text' => _ ("Configuração"),
'caminho' => 'feed / lista',
'order' => 0,
'data' => matriz (
'sidebar' => '#sidebar_emoncms'
)
);
}
include_once ("Lib / misc / nav_functions.php");
sortMenu ($ menu);
// debugMenu ('barra lateral');
$ output ['svg_icons'] = view ($ themeDir. "svg_icons.svg", array ());
$ output ['mainmenu'] = view ($ themeDir. "menu_view.php", array ('menu' => $ menu));
// adiciona nomes de classe css à tag <body> com base nas opções do controlador
$ output ['page_classes'] [] = $ route-> controlador;
$ output ['sidebar'] = view ($ themeDir. "sidebar_view.php",
matriz (
'menu' => $ menu,
'caminho' => $ caminho,
'session' => $ session,
'route' => $ route
));
$ output ['page_classes'] [] = 'barra lateral';
if (! $ session ['read']) {
$ output ['page_classes'] [] = 'manual recolhido';
} outro {
if (! in_array ("manual", $ output ['page_classes'])) $ output ['page_classes'] [] = 'auto';
}
visualização de impressão ($ themeDir. "theme.php", $ output);
}
}
caso contrário, se ($ route-> format == 'text')
{
cabeçalho ('Tipo de conteúdo: texto / sem formatação');
imprime $ output ['content'];
}
caso contrário, se ($ route-> format == 'csv')
{
cabeçalho ('Content-Type: text / csv');
imprime $ output ['content'];
}
outro {
cabeçalho ($ _ SERVER ["SERVER_PROTOCOL"]. "406 Não aceitável");
print "URI não aceitável. Formato desconhecido '". $ route-> format. "'.";
}
I’m sorry, I don’t know what has happened.
Tell me exactly what commands you executed.
Did you get any errors during the install?
I have made a short video of what I did to install the system on a bare Ubuntu18LTS server.
A little different from your documentation.
Don’t think so.
I will follow the installation steps according to the video.
Thank you !
The commands used are in the comments section, taken from the .bash_history
.
the commands run normal and when I enter emoncms it shows this error
redis enabled but not installed, check setting: redis_enabled
To fix, check that the settings are set in settings.php or try re-creating your settings.php file from default.settings.php template
Did you get any errors when running the install script?
Couple of things to check
systemctl status redis.service
sudo apt-get install -y redis-server
I executed both commands and presented this information below:
emoncms@emoncms:/var/www/emoncms$ sudo nano settings.php
emoncms@emoncms:/var/www/emoncms$ systemctl status redis.service
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-09-13 16:10:17 -03; 12min ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Main PID: 26344 (redis-server)
Tasks: 4 (limit: 2305)
CGroup: /system.slice/redis-server.service
└─26344 /usr/bin/redis-server 127.0.0.1:6379
Sep 13 16:10:17 emoncms systemd[1]: Stopped Advanced key-value store.
Sep 13 16:10:17 emoncms systemd[1]: Starting Advanced key-value store...
Sep 13 16:10:17 emoncms systemd[1]: redis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file or directory
Sep 13 16:10:17 emoncms systemd[1]: Started Advanced key-value store.
emoncms@emoncms:/var/www/emoncms$ sudo apt-get install -y redis-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
redis-server is already the newest version (5:4.0.9-1ubuntu0.2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
emoncms@emoncms:/var/www/emoncms$
Ok good so redis-server
is running.
Check this file…
cat /etc/php/7.2/mods-available/redis.ini
and
sudo pip install redis
Here is the output:
extension=redis.so
Requirement already satisfied: redis in /usr/local/lib/python2.7/dist-packages (3.3.8)
Have you rebooted?
Yes, apresenta o mesmo erro.
Some things to try;
Check the php-info
php -i | grep -i redis
From Installing emoncms - redis problem on openSUSE system - #27 by pb66 - the small script below will prove if PHP is able to connect to Redis on a basic level.
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
if ($redis->ping() === "+PONG") {
echo "Successfully connected to Redis!".PHP_EOL;
} else {
echo "Failed to get response from Redis!".PHP_EOL;
}
?>
Save the above code to a file called test_redis.php
and run from the command line
pb66@test2:~$ php test_redis.php
Successfully connected to Redis!
Final thing to check (if the above were unsuccessful) - from Installing emoncms - redis problem on openSUSE system - #4 by Greebo - test redis from the command line… Try this:
$ redis-cli
127.0.0.1:6379> lpush test "hello"
(integer) 1
127.0.0.1:6379> lpop test
"hello"
127.0.0.1:6379> exit
$
If that all works, we can confirm that redis is actually working and rule that out.
This is an odd one as it just worked for me.
Can you both post your latest “server info” for comparison?
brian@ubunt-emon:/var/www/emoncms$ sudo pip show redis | grep Version
Version: 3.3.8
which file path?
You can save it to where you wish - you created the file (see post no.56).