Community
OpenEnergyMonitor

OpenEnergyMonitor Community

Error in update emoncms

So your error now stems from this problem. You must have installed emoncms before the build guide was changed.

@pb66, do you have a solution to remove the old mosquitto install?

can you provide all the git needed to install emoncms on ubuntu?
if possible, it is better to reinstall emoncms again.
following the correct steps.

Do you want to keep your data and setup? Much easier if you do not.

Are you in a position to start with a fresh Ubuntu install? If not, the problem with mosquitto still needs fixing.

it’s okay to erase the data.

can you redirect to the correct emoncms installation links?

I’ve posted it here Install EmonCMS on Ubuntu 18LTS with scripts.

version of ubuntu I’m using is 16.4, do you have any emoncms compatibility issues?

That should be fine as it is Stretch based. If you can, move to 18.04 as that is what I have tested this install on.

Okay, I’m updating the ubuntu.

1 Like

just to be clear (and I will update the other post, you start the install here for Ubuntu EmonScripts/readme.md at master · openenergymonitor/EmonScripts · GitHub

these emoncms installation steps are for running
in raspberry, it works in local emoncms “ubuntu”?

You need to start here

wget https://raw.githubusercontent.com/openenergymonitor/EmonScripts/master/install/init.sh
chmod +x init.sh
./init.sh

I do not understand ‘cargo’ - translation problem I suspect :grin:

where the emoncms data will be stored?
has a database ?

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 !