Skip to content

commandline introduction

mpvader edited this page May 18, 2018 · 42 revisions

This page explains the software development oriented tools, tricks & tips.

There are also more operational commands, see here.

Working with D-Bus

Note that below examples use DbusCli (executable name: dbus). It is pre-installed on the CCGX, and can also be installed on your development computer. There are alternatives as well, see dbus-send.

Get a list of all dbus services

dbus -y

Get all paths of the com.victronenergy.settings service

dbus -y com.victronenergy.settings

Read a value

dbus -y com.victronenergy.settings /Settings/Logscript/Enabled GetValue

Read all values (works with most services, except some of the Python services including localsettings).

dbus -y com.victronenergy.solarcharger.ttyO2 / GetValue

Write a value

dbus -y com.victronenergy.settings /Settings/Logscript/Enabled SetValue %1

See the dbus interface

dbus -y com.victronenergy.settings /Settings/Logscript/Enabled

dbus-spy

dbus-spy is an ncurses tool, which shows a list of all com.victronenergy.* services on the D-Bus, and all paths and values within each service. The values are updated in real-time and can be changed.

The interface works somewhat like the CCGX gui:

  • up/down keys: move up and down in the menus
  • right/left: move in and out submenus
  • enter: enter a submenu or change a value.
  • 't': switch between values and texts.
  • ctrl-c or 'q': close the application

Besides above there is also the very cool Favorites function. See f and F in the Readme for details.

Caveat: by default dbus-spy will only show the values of D-Bus services which support a GetValue on '/', because finding all paths without this feature will take a long time, and a lot of D-Bus communication. If you want the content of the other services as well, start dbus-spy with the -i option and be patient.

dbus-send examples

dbus-send is a faster, but somewhat more complicated to use, alternative for dbus-cli as used in previous paragraph.

  dbus-send --system --dest=com.victronenergy.settings /Settings/System/RemoteSupportPort com.victronenergy.BusItem.SetValue variant:int32:67

  dbus-send --system --dest=com.victronenergy.settings /Settings/System/RemoteSupportPort com.victronenergy.BusItem.GetValue

  dbus-send --system --print-reply --dest=com.victronenergy.settings /Settings/System/LogLevel com.victronenergy.BusItem.SetValue variant:int32:0

  dbus-send --system --print-reply --dest=com.victronenergy.settings /Settings/System/LogLevel com.victronenergy.BusItem.SetValue variant:int32:0

  dbus-send --system --print-reply --dest=net.connman /net/connman/technology/wifi net.connman.Technology.SetProperty string:"Powered" variant:boolean:true

  dbus-send --system --print-reply --dest=net.connman /net/connman/ net.connman.Technology.SetProperty string:"Powered" variant:boolean:true

Connmand Manager
  dbus-send --system --type=method_call --print-reply --dest=net.connman  net.connman.Manager.GetProperties
  dbus-send --system --type=method_call --print-reply --dest=net.connman net.connman.Manager.GetTechnologies
  dbus-send --system --type=method_call --print-reply --dest=net.connman net.connman.Manager.GetServices

  dbus-send --system --type=method_call --print-reply --dest=net.connman  / net.connman.Technology.Scan

  dbus-send --system --type=method_call --print-reply --dest=com.victronenergy.qwacs /Manager com.victronenergy.manager.TestArray
  dbus-send --system --type=method_call --print-reply --dest=com.victronenergy.qwacs /Gateway com.victronenergy.gateway.GetUplink

**Connmand Service**
  dbus-send --system --type=method_call --print-reply --dest=net.connman net.connman.Service.GetProperties

**Connman NTP**
  dbus-send --system --type=method_call --print-reply --dest=net.connman  org.freedesktop.DBus.Introspectable.Introspect

  dbus-send --system --type=method_call --print-reply --dest=net.connman / net.connman.Clock.GetProperties

  dbus-send --system --type=method_call --print-reply --dest=net.connman / net.connman.Clock.SetProperty string:"Timezone" variant:string:"Europe/Amsterdam"

  dbus-send --system --type=method_call --print-reply --dest=net.connman / net.connman.Clock.SetProperty string:"Timerservers" array:string:"0.pool.ntp.org","1.pool.ntp.org"

**udev mount**
  dbus-send --system --type=signal / com.victronenergy.udev.mount string:$DEVNAME string:"/media/$name"

**udev umount**
  dbus-send --system --type=signal / com.victronenergy.udev.umount string:$DEVNAME string:"/media/$name"

Managing services

svstat /service/logscript
svstat /service/*
svc -d /service/logscript
svc -u /service/logscript

Reading log files

tail -F /log/logscript/current | tai64nlocal
more /log/mk2/current | tai64nlocal
tail /log/*/current | tai64nlocal
dmesg
cat /log/messages.2 /log/messages.1 /log/messages.0 /log/messages | tai64nlocal
logread
grep -h -i "ERROR" /log/*/current | tai64nlocal
for file in `ls /log/*/current`; do echo "cleared log at `date`" > $file; done

Opkg

See versions of all packages

Note that Venus updates are image based. See the swupdate issue.

The package manager, opkg, is still available. And can be used to install optional installs.

root@ccgx:~# opkg list-installed
base-files - 3.0.14-r76
base-passwd - 3.5.26-r0
bash - 4.2-r5
...
websockify-c - v0.8.0-r1
wget - 1.14-r16.2
wpa-supplicant - 2.2-r1
wpa-supplicant-cli - 2.2-r1
wpa-supplicant-passphrase - 2.2-r1
zip - 3.0-r1
/opt/colorcontrol/opkg-scripts/set-feed

Then update the package list

opkg update

Then install a package

opkg install [name of package here]

To find other packages, such as gdb, do: opkg list | grep gdb

Analyzing logfiles quickly

Configure the ipaddress:
  export CURRENTIP=192.168.4.108
  
First arrange auto-login by using ssh-copy-id to all ipnumbers you want to look at.
  ssh-copy-id root@$CURRENTIP  
  
Check that you have the right one
  ssh root@$CURRENTIP "ifconfig"
  
Then copy past below lines.
  ssh root@$CURRENTIP "cat /log/vrmlogger/* | tai64nlocal"
  ssh root@$CURRENTIP "cat /log/vrmpubnub/* | tai64nlocal"
  ssh root@$CURRENTIP "cat /log/mk2/* | tai64nlocal"
  ssh root@$CURRENTIP "cat /log/dbus-pvinverter-vebus/* | tai64nlocal"
  ssh root@$CURRENTIP "cat /log/dbus-systemcalc-py/* | tai64nlocal"
  ssh root@$CURRENTIP "cat /log/vecan/* | tai64nlocal"    (note, starting message is not in the logs)
  ssh root@$CURRENTIP "cat /log/messages.2 /log/messages.1 /log/messages.0 /log/messages | tai64nlocal"
  ssh root@$CURRENTIP "cat /log/messages.2 /log/messages.1 /log/messages.0 /log/messages | tai64nlocal | grep Aligment"

CPU speed

root@CCGX:/sys/devices/system/cpu/cpu0/cpufreq# cat ./scaling_available_governors conservative userspace powersave ondemand performance root@CCGX:/sys/devices/system/cpu/cpu0/cpufreq# echo performance > ./scaling_governor root@CCGX:/sys/devices/system/cpu/cpu0/cpufreq# cat ./scaling_governor performance root@CCGX:/sys/devices/system/cpu/cpu0/cpufreq# cat ./cpuinfo_cur_freq 600000

Serial port & serial-starter

The serial starter takes care of starting the drivers for built-in ttys (VE.Direct and VE.Bus ports), as well as all serial devices that are connected through USB, ie the plug-and-play work.

To work on a port yourself, you need to tell serial-starter to leave a tty alone. These commands exist for that purpose:

/opt/victronenergy/serial-starter/stop-tty.sh ttyUSB0
/opt/victronenergy/serial-starter/start-tty.sh ttyUSB0

Once serial-starter has backed off (tip: use ps to make sure), some example commands that can be used to see the output are these:

root@raspberrypi2:~# stty -F /dev/ttyUSB0 115200
root@raspberrypi2:~# cat /dev/ttyUSB0 
/XMX5LGBBFG1009224834

1-3:0.2.8(42)
0-0:1.0.0(171227232200W)
0-0:96.1.1(4530303330303033313536383532323135)
...

More detail information is in the Howto add a driver to Venus document.

modem

the trick is to leave dbus-modem running, since it resets the watchdog; kill it, and you'll loose the modem all the time.

So instead, stop ppp, and use its interface:

svc -d /service/ppp
screen /dev/modem

To get out of screen, use ctrl-a d to get back into the shell. And then don't forget to kill screen if you're done. Or kill it, with ctrl-a \

Clone this wiki locally