В Последний уик-энд я установил ESPurna прошивку с открытым исходным кодом с сервером MQTT на Sonoff POW коммутаторе Wi – Fi, а следующим шагом я хочу найти способ вывести график потребления электроэнергии в некоторых веб – интерфейсах. Мы могли бы сделать это в облаке IoT, таким как Xively или ThingSpeak , но так как одна из целей замены встроенного программного обеспечения это не полагаться на собственное решение на основе облачных, я решил найти способ , чтобы нарисовать эти диаграммы в местном сервере, и так случилось , что ThingSpeak также имеет открытый исходный код , доступный на Github .Аппаратные платформы , такие как NanoPi NEO / NEO Air или orange Pi Zero плат , по всей видимости, особенно хорошо подходят для выполнения этой задачи работают под управлением MQTT и Thingspeak, но сначала я хотел установить ThingSpeak в моем собственном Ubuntu 16.04 компьютере.
Как вы можете видеть на скриншоте выше, мне удалось это сделать, но это требует немного больше усилий, чем ожидалось, так как проект не обновлялся с 2015 года, и не работает из коробки с новейшей операционной системой.
Я использовал различные ресурсы в Интернете , в том числе инструкции по Github, а также , как этот ThingSpeak сценарий для Ubuntu 14.04 , а также несколько других ресурсов.
Во-первых, мы должны убедиться, что Ubuntu 16.04 будет полностью обновлен:
1 2 3 |
sudo apt update sudo apt dist-upgrade |
Ubuntu 16.04 поставляется с Ruby, 2.3, что вызовет много проблем с Thingspeak, так что мне пришлось удалить его в первую очередь:
1 |
sudo apt remove ruby |
Теперь мы можем установить и Ruby, 2.1.0 и Bundle:
1 2 3 4 5 6 7 8 9 10 11 |
sudo apt-get -y install build-essential mysql-server mysql-client libmysqlclient-dev libxml2-dev libxslt-dev git-core curl rubygems gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -L https://get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm rvm install ruby 2.1.0 gem install bundler |
Как только это будет сделано, мы сможем получить исходный код ThingSpeak и установить его:
1 2 3 4 5 |
git clone https://github.com/iobridge/thingspeak.git cd thingspeak bundle install |
Затем я перешел к конфигурации и созданию данных :
1 2 3 |
cp config/database.yml.example config/database.yml rake db:create |
К сожалению, появилась ошибка:
1 2 3 4 5 |
rake aborted! Bundler::GemRequireError: There was an error while trying to load the gem 'mysql2'. Gem Load Error is: uninitialized constant Mysql2::Client::SECURE_CONNECTION |
Поэтому я проверил версию mysql2 и модернизировал его, чтобы посмотреть решит ли это проблему:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
bundle show mysql2 /home/jaufranc/.rvm/gems/ruby-2.1.0@thingspeak/gems/mysql2-0.3.16 bundle update mysql2 bundle show mysql2 /home/jaufranc/.rvm/gems/ruby-2.1.0@thingspeak/gems/mysql2-0.4.5 rake db:create Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile. |
Предыдущая ошибка ушла, но появилась новая …
Мне пришлось редактировать Gemfile в thingspeak директории, и добавил старую версию mysql2:
1 |
gem 'mysql2', '~> 0.3.18' |
Давайте обновим mysql2, и попытаемся создать базы данных еще раз:
1 2 3 4 5 6 7 8 9 10 11 |
bundle update mysql2 bundle show mysql2 /home/jaufranc/.rvm/gems/ruby-2.1.0@thingspeak/gems/mysql2-0.3.21 rake db:create thingspeak_development already exists Mysql2::Error: Access denied for user 'thing'@'localhost' to database 'thingspeak_test': CREATE DATABASE `thingspeak_test` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` |
Черт снова ошибка. Я не смог её исправить, поэтому на данный момент название статьи”Как НЕ установить Thingspeak в Ubuntu 16.04″. Следующие шаги делают незащищенной установку, я просто дал полные базы данных. Но это решение только для внутренней и проверенной локальной сети, возможно, кто-то укажет на безопасное решение вопроса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25 Server version: 5.7.16-0ubuntu0.16.04.1 (Ubuntu) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> GRANT ALL PRIVILEGES ON *.* TO 'thing'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> exit; Bye |
На этот раз я смог создать базы данных для Thingspeak:
1 |
rake db:create |
Так что теперь мы можем перейти к следующему шагу, загрузке базы данных с некоторыми данными, требуемыми Thingspeak для работы:
1 |
rake db:schema:load |
Еще одна ошибка:
1 2 3 4 5 |
-- create_table("active_admin_comments", {:force=>true}) rake aborted! ActiveRecord::StatementInvalid: Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead: CREATE TABLE `active_admin_comments` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `namespace` varchar(255), `body` text, `resource_id` varchar(50) NOT NULL, `resource_type` varchar(50) NOT NULL, `author_id` int(11), `author_type` varchar(255), `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB |
Проведя некоторое время в поисках решения я в конце концов нашел его в Rails Github, MySQL 5.7 используемый в Ubuntu 16.04 OT ставит NULL.
Нам нужно создать конфигурационный / инициализаторный / abstract_mysql2_adapter.rb файл с:
1 2 3 4 5 6 7 |
<span class="pl-c"># config/initializers/abstract_mysql2_adapter.rb</span> <span class="pl-k">class</span> <span class="pl-en">ActiveRecord::ConnectionAdapters::Mysql2Adapter</span> <span class="pl-c1">NATIVE_DATABASE_TYPES</span>[<span class="pl-c1">:primary_key</span>] <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>int(11) auto_increment PRIMARY KEY<span class="pl-pds">"</span></span> <span class="pl-k">end</span> |
Затем нам нужно добавить следующую строку в конце конфигурационного / environment.db
1 2 3 4 5 6 7 8 9 |
<span class="pl-k">require</span> <span class="pl-c1">File</span>.expand_path(<span class="pl-s"> <span class="pl-pds">'</span>../../lib/patches/abstract_mysql_adapter<span class="pl-pds">' </span></span>, <span class="pl-v">__FILE__</span>) |
и выполнить команду еще раз:
1 |
rake db:schema:load |
Успех!
Заключительным шагом нужно запустить сервер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
rails server webrick => Booting WEBrick => Rails 4.0.5 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server [2016-12-07 17:43:04] INFO WEBrick 1.3.1 [2016-12-07 17:43:04] INFO ruby 2.1.0 (2013-12-25) [x86_64-linux] [2016-12-07 17:43:04] INFO WEBrick::HTTPServer#start: pid=17187 port=3000 |
Теперь запустите ваш веб – браузер , и вы сможете получить доступ к локальной установке Thingspeak.
следующим шагом я изучу лучше Thingspeak, установлю MQTT, а также один из мостов MQTT в Thingspeak, доступный в Интернете, и посмотрю , смогу ли я построить данные о энергопотреблении.
Благодарим сайт cnx-software.com за предоставленную информацию.
Оригинал статьи тут