InfluxDB Schreibfehler im Script Fehlermeldung 'invalid field format'

Guten morgen zusammen,
ich habe mir auf einem RPi mit Stretch InfluxDB und Grafana zur Visualisierung installiert. Datenbank habe ich angelegt und kann auch rein schreiben. Allerdings nur ganze Zahlen, ohne Komma. Wenn ich eine Zahl mit einem Komma, besipielsweise eine Spannung (12,4V) übertragen möchte, kommt diese Fehlermeldung:

{„error“:„unable to parse ‚sma_batt_spannung,gruppe1=batt1 spannung=12,55‘: invalid field format“}

Das Script sieht so aus:


<?
$out ="http://IPADRESSE:8086/write?db=spannungen";
 
$spannung = GetValueFloat(42716 /*[Gewerke\Energie\Batterie\Strang 1\Batterie 1/1\Spannung Block 1]*/) ;
$ch = curl_init($out);
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "sma_batt_spannung,gruppe1=batt1 spannung=" . $spannung );
 
$result=curl_exec ($ch);
$error=curl_error($ch) ;
 
echo $result ;
echo $error ;
?>

Wenn ich „$spannung“ ersetze gegen eine ganze Zahl ohne Komma, wird diese in die InfluxDB geschrieben. Sobald ein Komma da drin ist geht es nicht und es kommt die Fehlermeldung. Ein Freund von mir benutzt genau das gleiche System (allerdings als Docker) und bei Ihm funktioniert das Script einwandfrei.

Weis jemand Rat?

Vielleicht musst du die Zahl mit einem Dezimalpunkt übergeben?
Probiere es mal mit 12.55.

Das habe ich auch schon mal probier, kommt der gleiche Fehler.

Wie hast du es probiert?
Es liegt zu 99% am Komma.
Thema hatten wir hier erst mit MySQL.
Float Werte kommen gerundet in der MySQL Datenbank an
Michael

Natürlich liegt es Komma :slight_smile: ich probiere es mal anders aus. Vielleicht kann ich die Variable mit Punkt oder ohne Trennzeichen einlesen, es dann aber im Script hinzufügen lassen.

Danke schonmal bis jetzt.

Und warum funktioniert es bei mir mit einem Komma in der ausgelesenen Variable ? :smiley:
In die Datenbank wird jedoch ein Punkt geschrieben… ^^

Selbe Konstellation außer, dass meine jeweils in eigenen Docker Containern laufen und nicht nativ auf einem Pi :

[ul]
[li]symcon 5.0[/li][li]influxDB[/li][/ul]

<?
$out ="http://192.168.2.2:8086/write?db=spannungen";
 
$spannung = GetValueFloat(19745 /*[Scripte\Batteriegruppe 1 - (Bj 2017)\Block - 1\Block - 1/4]*/) ;
$ch = curl_init($out);
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "sma_batt_spannung,gruppe1=batt1 spannung=" . $spannung );
 
$result=curl_exec ($ch);
$error=curl_error($ch) ;
 
echo $result ;
echo $error ;
?>

Ergebnis:

  [                                                                                                                        
                            "2019-01-03T07:47:06.806601157Z",                                                                                    
                            13.91                                                                                                                
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:47:43.499864826Z",                                                                                    
                            13.9                                                                                                                 
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:48:25.825356312Z",                                                                                    
                            13.91                                                                                                                
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:49:08.135719304Z",                                                                                    
                            13.9                                                                                                                 
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:49:22.248340539Z",                                                                                    
                            13.91                                                                                                                
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:49:50.458020197Z",                                                                                    
                            13.9                                                                                                                 
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:50:04.559640056Z",                                                                                    
                            13.91                                                                                                                
                        ],                                                                                                                       
                        [                                                                                                                        
                            "2019-01-03T07:50:18.667560173Z",                                                                                    
                            13.9                                                                                                                 
                        ],

Dazu sind weiter Infos wichtig.
Welche IPS (PHP) Version?
Und dann ist die Konvertierung durch PHP von Float zu String abhängig von der Spracheinstellung.
Steht ein System nicht auf deutsch?
Michael

Hab ne Lösung für dich :smiley:

<?
$out ="http://192.168.1.60:8086/write?db=spannungen";
 
$spannung = GetValueFloat(42716 /*[Gewerke\Energie\Batterie\Strang 1\Batterie 1/1\Spannung Block 1]*/) ;
$ch = curl_init($out);
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "sma_batt_spannung,gruppe1=batt1 spannung=" . number_format($spannung/1,1,'.','') );
 
$result=curl_exec ($ch);
$error=curl_error($ch) ;
 
echo $result ;
echo $error ;
?>

So sollte es klappen. Hab es aus dem Ursprungsscript

Warum es bei mir ohne geht weiß ich nicht… vielleicht liegt es ja an einen der Dinge, die Michael erwähnt hat…

Viel Spaß damit

Das probiert?


$spannung= sprintf('%F', $spannung);

Michael

Entschuldigt bitte, ich habe noch nicht so viele Beiträge hier geschrieben, sondern immer selbst viel probiert und nachgelesen bis es letztendlich funktioniert hatte.

Ich trage das mal in meiner Signatur nach, was ich alles für Versionen habe.

Mit dieser Version hat es funktioniert:


<?
$out ="http://IPADRESSE:8086/write?db=spannungen";
 
$spannung = GetValueFloat(42716 /*[Gewerke\Energie\Batterie\Strang 1\Batterie 1/1\Spannung Block 1]*/) ;
$ch = curl_init($out);
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "sma_batt_spannung,gruppe1=batt1 spannung=" . number_format($spannung/1,1,'.','') );
 
$result=curl_exec ($ch);
$error=curl_error($ch) ;
 
echo $result ;
echo $error ;
?>

Hallo Michael,
bei deiner Variante bekomme ich diese Fehlermeldung:


Parse error:  syntax error, unexpected ';', expecting ',' or ')' in /var/lib/symcon/scripts/29310.ips.php on line 10
Abort Processing during Fatal-Error: syntax error, unexpected ';', expecting ',' or ')'
   Error in Script /var/lib/symcon/scripts/29310.ips.php on Line 10

Aber es funktioniert jetzt. Vielen Dank für eure Hilfe!! :smiley: