Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[Gelöst] 'SBFspot' unter CentOS7 bauen

Alles rund um Büroanwendungen, Bildungsprogramme und Spiele unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 1934
Registriert: 10. Nov 2012, 11:00
Wohnort: Münsterland

[Gelöst] 'SBFspot' unter CentOS7 bauen

Beitrag von gehrke » 19. Nov 2016, 15:07

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: Alles auswählen

# 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: Alles auswählen

 /bin/ld: cannot find -lmysqlclient
Hier der gesamte Prozess:

Code: Alles auswählen

# 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: Alles auswählen

$ uname -r
3.10.0-327.36.2.el7.x86_64

Code: Alles auswählen

# 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: Alles auswählen

# cat /etc/ld.so.conf.d/mariadb-x86_64.conf 
/usr/lib64/mysql

Code: Alles auswählen

# 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

Werbung:
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 1934
Registriert: 10. Nov 2012, 11:00
Wohnort: Münsterland

Re: 'SBFspot' unter CentOS7 bauen

Beitrag von gehrke » 19. Nov 2016, 16:31

Zum Vergleich: Die SQLite-Variante scheint erfolgreich zu bauen:

Code: Alles auswählen

# 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: Alles auswählen

# 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: Alles auswählen

# /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: Alles auswählen

# yum install sqlite-devel
Zuletzt geändert von gehrke am 19. Nov 2016, 21:00, insgesamt 1-mal geändert.
Grund: yum install sqlite-devel

mkossmann
Member
Member
Beiträge: 175
Registriert: 3. Aug 2009, 19:07

Re: 'SBFspot' unter CentOS7 bauen

Beitrag von mkossmann » 19. Nov 2016, 21:17

gehrke hat geschrieben:Moin *,

i

Code: Alles auswählen

# 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 ?

Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 1934
Registriert: 10. Nov 2012, 11:00
Wohnort: Münsterland

Re: 'SBFspot' unter CentOS7 bauen

Beitrag von gehrke » 19. Nov 2016, 21:47

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 hat geschrieben:2. Beim Linken kommt es zu einer Fehlermeldung:

Code: Alles auswählen

 /bin/ld: cannot find -lmysqlclient

Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 1934
Registriert: 10. Nov 2012, 11:00
Wohnort: Münsterland

Re: 'SBFspot' unter CentOS7 bauen

Beitrag von gehrke » 19. Nov 2016, 23:59

Die Fehlermeldung beim Linken kann ich beheben, wenn ich das makefile ändere.
Original:

Code: Alles auswählen

LIB_RELEASE_MYSQL = $(LIB) -lmysqlclient
Änderung:

Code: Alles auswählen

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... :???:

Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 1934
Registriert: 10. Nov 2012, 11:00
Wohnort: Münsterland

Re: 'SBFspot' unter CentOS7 bauen

Beitrag von gehrke » 21. Nov 2016, 23:03

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...

Antworten