• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] 'SBFspot' unter CentOS7 bauen

gehrke

Administrator
Teammitglied
Moin *,

ich möchte das Tool 'SBFspot - Yet another tool to read power production of $MA solar inverters' unter CentOS7 zum Laufen bringen.
http://sbfspot.codeplex.com/
Ich möchte mysql/mariadb und die Ethernet-Verbindung nutzen, welche die Marketing-Abteilung von SMA (TM) auf den unsinnigen Namen 'Speedwire' (TM) getauft hat.

Da ich keine passenden Pakete finden konnte, habe ich die Sourcen heruntergeladen und versucht, es selbst auf dem Zielsystem zu bauen.
Hier musste ich mit zwei Problemen kämpfen:

1. Die recht rudimentären Anleitungen befassen sich mit anderen Distributionen und/oder der SQLite- und Bluetooth-Variante, welche ich beide nicht will, aber laut Dokumentation für das Build trotzdem benötige. Für CentOS sind die dort genannten Pakete unpassend.
Ich hoffe, hiermit die richtigen und vollständigen Pakete gefunden zu haben:
Code:
# yum install -y bluez-libs-devel boost-devel mysql-devel mariadb mysql++-devel.x86_64
Damit scheint zumindest das Compile erfolgreich (s.u.).

2. Beim Linken kommt es zu einer Fehlermeldung:
Code:
 /bin/ld: cannot find -lmysqlclient
Hier der gesamte Prozess:
Code:
# make install_mysql
test -d bin/Release_MySQL || mkdir -p bin/Release_MySQL
test -d obj/Release_MySQL || mkdir -p obj/Release_MySQL
g++ -Wall -O2 -DUSE_MYSQL  -c boost_ext.cpp -o obj/Release_MySQL/boost_ext.o
g++ -Wall -O2 -DUSE_MYSQL  -c db_MySQL.cpp -o obj/Release_MySQL/db_MySQL.o
g++ -Wall -O2 -DUSE_MYSQL  -c db_MySQL_Export.cpp -o obj/Release_MySQL/db_MySQL_Export.o
db_MySQL_Export.cpp: In Elementfunktion »int db_SQL_Export::day_data(InverterData**)«:
db_MySQL_Export.cpp:95:26: Warnung: »false« wird in Zeigertyp »my_bool* {aka char*}« umgewandelt [-Wconversion-null]
       values[0].is_null  = false;
                          ^
db_MySQL_Export.cpp:102:26: Warnung: »false« wird in Zeigertyp »my_bool* {aka char*}« umgewandelt [-Wconversion-null]
       values[1].is_null  = false;
                          ^
[...]
db_MySQL_Export.cpp:413:25: Warnung: »false« wird in Zeigertyp »my_bool* {aka char*}« umgewandelt [-Wconversion-null]
     values[11].is_null  = false;
                         ^
g++ -Wall -O2 -DUSE_MYSQL  -c misc.cpp -o obj/Release_MySQL/misc.o
g++ -Wall -O2 -DUSE_MYSQL  -c strptime.cpp -o obj/Release_MySQL/strptime.o
g++ -Wall -O2 -DUSE_MYSQL  -c sunrise_sunset.cpp -o obj/Release_MySQL/sunrise_sunset.o
g++ -Wall -O2 -DUSE_MYSQL  -c SBFNet.cpp -o obj/Release_MySQL/SBFNet.o
g++ -Wall -O2 -DUSE_MYSQL  -c Bluetooth.cpp -o obj/Release_MySQL/Bluetooth.o
g++ -Wall -O2 -DUSE_MYSQL  -c CSVexport.cpp -o obj/Release_MySQL/CSVexport.o
g++ -Wall -O2 -DUSE_MYSQL  -c Ethernet.cpp -o obj/Release_MySQL/Ethernet.o
g++ -Wall -O2 -DUSE_MYSQL  -c EventData.cpp -o obj/Release_MySQL/EventData.o
g++ -Wall -O2 -DUSE_MYSQL  -c ArchData.cpp -o obj/Release_MySQL/ArchData.o
g++ -Wall -O2 -DUSE_MYSQL  -c SBFspot.cpp -o obj/Release_MySQL/SBFspot.o
g++ -Wall -O2 -DUSE_MYSQL  -c TagDefs.cpp -o obj/Release_MySQL/TagDefs.o
g++  -o bin/Release_MySQL/SBFspot obj/Release_MySQL/boost_ext.o obj/Release_MySQL/db_MySQL.o obj/Release_MySQL/db_MySQL_Export.o obj/Release_MySQL/misc.o obj/Release_MySQL/strptime.o obj/Release_MySQL/sunrise_sunset.o obj/Release_MySQL/SBFNet.o obj/Release_MySQL/Bluetooth.o obj/Release_MySQL/CSVexport.o obj/Release_MySQL/Ethernet.o obj/Release_MySQL/EventData.o obj/Release_MySQL/ArchData.o obj/Release_MySQL/SBFspot.o obj/Release_MySQL/TagDefs.o   -s -lbluetooth -lboost_date_time -lboost_system -lpthread -lmysqlclient
/bin/ld: cannot find -lmysqlclient
collect2: Fehler: ld gab 1 als Ende-Status zurück
make: *** [out_release_mysql] Fehler 1
Meine Tage als C++-Entwickler liegen schon ein paar Monde zurück, weswegen ich mit der Fehlermeldung derzeit nicht viel anfangen kann.

Eine Recherche findet relativ viele Fälle, bei denen es Mischmasch der Architektur (32/64bit) bei den Libs als Ursache angegeben wird.

Meine derzeitige Konfiguration:
Code:
$ uname -r
3.10.0-327.36.2.el7.x86_64
Code:
# yum list mysql*
Geladene Plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: repo.de.bigstepcloud.com
 * epel: mirror.pmf.kg.ac.rs
 * extras: artfiles.org
 * updates: repo.de.bigstepcloud.com
Installierte Pakete
mysql++.x86_64                                       3.1.0-12.el7                          @epel
mysql++-devel.x86_64                                 3.1.0-12.el7                          @epel
Verfügbare Pakete
MySQL-python.x86_64                                  1.2.3-11.el7                          base 
MySQL-zrm.noarch                                     3.0-6.el7                             epel 
mysql++-manuals.x86_64                               3.1.0-12.el7                          epel 
mysql-connector-java.noarch                          1:5.1.25-3.el7                        base 
mysql-connector-odbc.x86_64                          5.2.5-6.el7                           base 
mysql-connector-python.noarch                        1.1.6-1.el7                           epel 
mysql-mmm.noarch                                     2.2.1-14.el7                          epel 
mysql-mmm-agent.noarch                               2.2.1-14.el7                          epel 
mysql-mmm-monitor.noarch                             2.2.1-14.el7                          epel 
mysql-mmm-tools.noarch                               2.2.1-14.el7                          epel 
mysql-proxy.x86_64                                   0.8.5-2.el7                           epel 
mysql-proxy-devel.x86_64                             0.8.5-2.el7                           epel 
mysql-utilities.noarch                               1.3.6-1.el7                           epel 
mysqlreport.noarch                                   3.5-11.el7                            epel 
mysqltuner.noarch                                    1.6.0-1.el7                           epel
Code:
# cat /etc/ld.so.conf.d/mariadb-x86_64.conf 
/usr/lib64/mysql
Code:
# ls -l /usr/lib64/mysql/                                          
insgesamt 3072                                                                                  
lrwxrwxrwx. 1 root root      17 18. Nov 21:29 libmysqlclient_r.so -> libmysqlclient.so          
lrwxrwxrwx. 1 root root      20 18. Nov 21:29 libmysqlclient.so -> libmysqlclient.so.18         
lrwxrwxrwx. 1 root root      24 18. Sep 2015  libmysqlclient.so.18 -> libmysqlclient.so.18.0.0  
-rwxr-xr-x. 1 root root 3133712 12. Aug 00:48 libmysqlclient.so.18.0.0                          
-rwxr-xr-x. 1 root root    6758 12. Aug 00:47 mysql_config

Wär' prima, wenn hier jemand helfen könnte...
TNX


cu, gehrke
 
OP
gehrke

gehrke

Administrator
Teammitglied
Zum Vergleich: Die SQLite-Variante scheint erfolgreich zu bauen:
Code:
# make install_sqlite
test -d bin/Release_SQLite || mkdir -p bin/Release_SQLite
test -d obj/Release_SQLite || mkdir -p obj/Release_SQLite
g++ -Wall -O2 -DUSE_SQLITE  -c db_SQLite.cpp -o obj/Release_SQLite/db_SQLite.o
g++ -Wall -O2 -DUSE_SQLITE  -c db_SQLite_Export.cpp -o obj/Release_SQLite/db_SQLite_Export.o
g++ -Wall -O2 -DUSE_SQLITE  -c misc.cpp -o obj/Release_SQLite/misc.o
g++ -Wall -O2 -DUSE_SQLITE  -c strptime.cpp -o obj/Release_SQLite/strptime.o
g++ -Wall -O2 -DUSE_SQLITE  -c sunrise_sunset.cpp -o obj/Release_SQLite/sunrise_sunset.o
g++ -Wall -O2 -DUSE_SQLITE  -c SBFNet.cpp -o obj/Release_SQLite/SBFNet.o
g++ -Wall -O2 -DUSE_SQLITE  -c Bluetooth.cpp -o obj/Release_SQLite/Bluetooth.o
g++ -Wall -O2 -DUSE_SQLITE  -c CSVexport.cpp -o obj/Release_SQLite/CSVexport.o                  
g++ -Wall -O2 -DUSE_SQLITE  -c Ethernet.cpp -o obj/Release_SQLite/Ethernet.o                    
g++ -Wall -O2 -DUSE_SQLITE  -c EventData.cpp -o obj/Release_SQLite/EventData.o                  
g++ -Wall -O2 -DUSE_SQLITE  -c ArchData.cpp -o obj/Release_SQLite/ArchData.o                    
g++ -Wall -O2 -DUSE_SQLITE  -c SBFspot.cpp -o obj/Release_SQLite/SBFspot.o                      
g++ -Wall -O2 -DUSE_SQLITE  -c TagDefs.cpp -o obj/Release_SQLite/TagDefs.o                      
g++  -o bin/Release_SQLite/SBFspot obj/Release_SQLite/boost_ext.o obj/Release_SQLite/db_SQLite.o obj/Release_SQLite/db_SQLite_Export.o obj/Release_SQLite/misc.o obj/Release_SQLite/strptime.o obj/Release_SQLite/sunrise_sunset.o obj/Release_SQLite/SBFNet.o obj/Release_SQLite/Bluetooth.o obj/Release_SQLite/CSVexport.o obj/Release_SQLite/Ethernet.o obj/Release_SQLite/EventData.o obj/Release_SQLite/ArchData.o obj/Release_SQLite/SBFspot.o obj/Release_SQLite/TagDefs.o   -s -lbluetooth -lboost_date_time -lboost_system -lpthread -lsqlite3                                         
cp TagList*.txt bin/Release_SQLite                                                              
cp date_time_zonespec.csv bin/Release_SQLite                                                    
test -d /usr/local/bin/sbfspot.3 || mkdir -p /usr/local/bin/sbfspot.3                           
test -f /usr/local/bin/sbfspot.3/SBFspot.cfg || cp SBFspot.cfg /usr/local/bin/sbfspot.3/        
cp -R bin/Release_SQLite/* /usr/local/bin/sbfspot.3/
Code:
# ls -ltar /usr/local/bin/sbfspot.3/
insgesamt 1564
drwxr-xr-x. 3 root root   4096 19. Nov 16:22 ..
-rwxr-xr-x. 1 root root   5935 19. Nov 16:22 SBFspot.cfg
-rwxr-xr-x. 1 root root  35855 19. Nov 16:22 date_time_zonespec.csv
-rwxr-xr-x. 1 root root 368912 19. Nov 16:22 SBFspot
-rwxr-xr-x. 1 root root 194295 19. Nov 16:22 TagListDE-DE.txt
-rwxr-xr-x. 1 root root 186428 19. Nov 16:22 TagListEN-US.txt
-rwxr-xr-x. 1 root root 196725 19. Nov 16:22 TagListES-ES.txt
-rwxr-xr-x. 1 root root 200214 19. Nov 16:22 TagListFR-FR.txt
-rwxr-xr-x. 1 root root 194914 19. Nov 16:22 TagListIT-IT.txt
drwxr-xr-x. 2 root root   4096 19. Nov 16:22 .
-rwxr-xr-x. 1 root root 189000 19. Nov 16:22 TagListNL-NL.txt
Code:
# /usr/local/bin/sbfspot.3/SBFspot -?
SBFspot V3.3.1
Yet another tool to read power production of SMA solar inverters
(c) 2012-2016, SBF (https://sbfspot.codeplex.com)
Compiled for Linux (LE) 64 bit

Commandline Args: -?
SBFspot V3.3.1
Yet another tool to read power production of SMA solar inverters
(c) 2012-2016, SBF (https://sbfspot.codeplex.com)
Compiled for Linux (LE) 64 bit

SBFspot [-options]
 -scan               Scan for bluetooth enabled SMA inverters.
 -d#                 Set debug level: 0-5 (0=none, default=2)
 -v#                 Set verbose output level: 0-5 (0=none, default=2)
 -ad#                Set #days for archived daydata: 0-300
                     0=disabled, 1=today (default), ...
 -am#                Set #months for archived monthdata: 0-300
                     0=disabled, 1=current month (default), ...
 -ae#                Set #months for archived events: 0-300
                     0=disabled, 1=current month (default), ...
 -cfgX.Y             Set alternative config file to X.Y (multiple inverters)
 -u                  Upload to online monitoring system (see config file)
 -finq               Force Inquiry (Inquire inverter also during the night)
 -q                  Quiet (No output)
 -nocsv              Disables CSV export (Overrules CSV_Export in config)
 -nosql              Disables SQL export
 -sp0                Disables Spot.csv export
 -installer          Login as installer
 -password:xxxx      Installer password
 -loadlive           Use predefined settings for manual upload to pvoutput.org
 -startdate:YYYYMMDD Set start date for historic data retrieval
 -settime            Sync inverter time with host time
Das ist ja schon mal eine hilfreiche Information. Aber ich will mysql, nicht SQLite...

EDIT:
Hierzu war noch diese Paket-Installation notwendig:
Code:
# yum install sqlite-devel
 

mkossmann

Member
gehrke schrieb:
Moin *,

i
Code:
# make install_mysql
test -d bin/Release_MySQL || mkdir -p bin/Release_MySQL
test -d obj/Release_MySQL || mkdir -p obj/Release_MySQL
g++ -Wall -O2 -DUSE_MYSQL  -c boost_ext.cpp -o obj/Release_MySQL/boost_ext.o
g++ -Wall -O2 -DUSE_MYSQL  -c db_MySQL.cpp -o obj/Release_MySQL/db_MySQL.o
g++ -Wall -O2 -DUSE_MYSQL  -c db_MySQL_Export.cpp -o obj/Release_MySQL/db_MySQL_Export.o
db_MySQL_Export.cpp: In Elementfunktion »int db_SQL_Export::day_data(InverterData**)«:
db_MySQL_Export.cpp:95:26: Warnung: »false« wird in Zeigertyp »my_bool* {aka char*}« umgewandelt [-Wconversion-null]
       values[0].is_null  = false;
                          ^
db_MySQL_Export.cpp:102:26: Warnung: »false« wird in Zeigertyp »my_bool* {aka char*}« umgewandelt [-Wconversion-null]
       values[1].is_null  = false;
                          ^
[...]
db_MySQL_Export.cpp:413:25: Warnung: »false« wird in Zeigertyp »my_bool* {aka char*}« umgewandelt [-Wconversion-null]
     values[11].is_null  = false;
                         ^
Meine Tage als C++-Entwickler liegen schon ein paar Monde zurück, weswegen ich mit der Fehlermeldung derzeit nicht viel anfangen kann.
Da entsteht durch eine falsche Deklaration ein Typkonflikt. Das Feld is_null is vom typ my_bool * ( der selbst einem char * entspricht) . false ist aber in c++ ein bool. Und es gibt eigentlich keinen Grund in C++ den Würgaround my_bool zu verwenden. Gibt es in den Headerfiles irgendwelche #ifdefs, die die Definition von my_bool betreffen und es ermöglichen my_bool * in ein bool umzudeklarieren ?
 
OP
gehrke

gehrke

Administrator
Teammitglied
TNX. Aber das sind doch 'nur' Warnings. Ich hatte gehofft, diese erst mal ignorieren zu können, weil das Projekt durchkompiliert. So tief wollte ich da gar nicht einsteigen. Zumal diese Warnings in der SQLite-Variante auch vorhanden sind und das Teil sich zumindest starten lässt.

Derzeit scheint mir dieses Problem dringender zu sein:
gehrke schrieb:
2. Beim Linken kommt es zu einer Fehlermeldung:
Code:
 /bin/ld: cannot find -lmysqlclient
 
OP
gehrke

gehrke

Administrator
Teammitglied
Die Fehlermeldung beim Linken kann ich beheben, wenn ich das makefile ändere.
Original:
Code:
LIB_RELEASE_MYSQL = $(LIB) -lmysqlclient
Änderung:
Code:
LIB_RELEASE_MYSQL = $(LIB) -L/usr/lib64/mysql -lmysqlclient
Damit laufen Compiler (inklusive der gemeldeten Warnings) und Linker durch, das Binary wird erzeugt und deployed. Es lässt sich auch mit '-?' Parameter aufrufen.

Ich möchte nicht behaupten, dass ich wirklich weiß, was ich da tue. Und ich werde einen Teufel tun, dieses Binary noch heute Abend gegen meinen schönen blauen Wechselrichter loszulassen... :???:
 
OP
gehrke

gehrke

Administrator
Teammitglied
Meine Tests haben ergeben, dass das Tool auch trotz der genannten Warnings beim Compile sehr gut läuft. Es lassen sich sowohl die aktuellen Erzeugungswerte als auch die historischen Daten des Wechselrichters (interner Datenspeicher für ca. 3 Monate bei einer Frequenz von 5 Minuten) abfragen und werden auch in mysql gespeichert.

Bislang bin ich sehr zufrieden mit der Lösung.

Über die 2 gefundenen Problemfälle werde ich noch die Entwickler informieren.
Dank an alle Beteiligten...
 
Oben