Mysql vullen met shell script

Status
Niet open voor verdere reacties.

gonzo31

Gebruiker
Lid geworden
11 jan 2007
Berichten
143
hallo,

Ik heb een Raspberry Pi waar RPI Wheezy (linux) op draait. Deze gebruik ik om mijn inverter uit te lezen van mijn zonnepanelen.
Ik heb op internet een mooi script gevonden maar nu wil ik de uitgelezen waarde gelijk in een mysql database zetten.

Ik heb nu het volgende stuk code in het script.sh staan (wat uitgevoerd word met #!/bin/bash)
Code:
#SQL routines
fill_sql_online() {
  if (( USE_MYSQL )); then
    if (( Pnet )) && (( Usol )) && (( Isol )); then 
	  case $inverter in
      "Sol600" ) (( Eff = Pnet * 1000000 / Usol / Isol )) ;;
      "XS3200" ) (( Eff = Pnet * 100000 / Usol / Isol )) ;;
      esac
    else
      Eff=0
    fi
    mysql --host=localhost --user=user --password=password gdak  <<EOF
INSERT INTO gdakdata (dt1, usol, isol, unet, inet, fnet, tinv, eff, etoday, etot, co2, ctot, htoday) VALUES ('""$SQLNOW""','"`print_float $Usol 1`"','"`print_float $Isol 2`"','"$Unet"','"`print_float $Inet 2`"','"`print_float $Fnet 2`"','"$Tinv"','"`print_float $Eff 1`"','"`print_float $Etoday 2`"','"`print_float Etot 2`"','"`print_float $CO2 2`"','"`print_float $Ctot 2`"','"`print_time $Htoday 1`"')
EOF
  fi
}

fill_sql_offline() {
  if (( USE_MYSQL )); then
   mysql --host=localhost --user=user --password=password gdakdata  <<EOF
INSERT INTO gdakdata (dt1, usol, isol, unet, inet, fnet, tinv, eff, etoday, etot, co2, ctot, htoday) VALUES ('""$SQLNOW""','0','0','0','0','0','0','0','"`print_float $Etoday 2`"','"`print_float Etot 2`"','"`print_float $CO2 2`"','"`print_float $Ctot 2`"','"`print_time $Htoday 1`"')
EOF
  fi
}

Echter, als de inverter aan of uit staat (dit word ergens anders bepaald in het script d.m.v. het controleren of er gegevens worden teruggestuurd) komen er geen regels bij in mijn database...
Wellicht dat er iemand is die me kan helpen.
Dank!
 
Het is al gelukt! Voor diegene die er ook mee zitten:
Code:
fill_sql_offline() {
  if (( USE_MYSQL )); then
        /usr/bin/mysql -u [user] -p[password] dbname << EOF
INSERT INTO tablename VALUES ('$SQLNOW','0','0','0','0','0','0','0','`print_float $Etoday 2`','`print_float Etot 2`','`print_float $CO2 2`','`print_float $Ctot 2`','`pr$
EOF
  fi
}

Nu zit ik nog te vechten met het feit dat ik m'n password liever niet in het shell script heb. Is hier een omleiding voor?
Ook doet m'n print_float functie het niet :( Die zou decimalen van getallen moeten maken maar ik krijg de volgende error:
script.sh: line 325: let: l=1-: syntax error: operand expected (error token is "-")

de code hier omheen is:
Code:
#Format decimal-value
print_float() {
  # $1 = float value
  # $2 = number of decimals
  let decval=$1
  let l=${#decval}-$2
  if (( l > 0 )); then
    echo ${decval:0:$l},${decval:$l:$2}
  else
    printf "0,%0*u\n" $2 $decval
  fi
}
Iemand hier ook iets voor?!

Alvast bedankt voor het kijken!
Arjan

[edit] Wellicht zit ik niet goed met de ' of " of ` in het sql-invul script. Maar er zijn zo veel combo's :| [/edit]
 
Laatst bewerkt:
Het probleem van mn syntax error is ook opgelost door in de fill-sql code rondom bij bijv. print_float $co2 2 allen de ' ' aanhalingstekens te gebruiken en niet ook de ` `. Echter krijg ik nog geen kommagetallen in mn mysql database. Ik heb de kolom ingesteld op float en verwacht dan ook een getal met een decimaal terug... Wellicht dat er nu weer tekentjes te weinig staan...?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan