diff --git a/_functions.sh b/_functions.sh index 47f9dc2..bd03826 100755 --- a/_functions.sh +++ b/_functions.sh @@ -104,8 +104,8 @@ V_VA=55 V_POWER_FACTOR=56 function test_i2c_device { - if [ ! -d "/sys/bus/i2c/devices/i2c-${I2CBUS}/${I2CBUS}-00${2}" ]; then - echo "run ${3} 0x${2} > /sys/bus/i2c/devices/i2c-${I2CBUS}/new_device" + if [ ! -d "/sys/bus/i2c/devices/i2c-${I2CBUS}/${I2CBUS}-00${1}" ]; then + echo "run ${2} 0x${1} > /sys/bus/i2c/devices/i2c-${I2CBUS}/new_device" exit 2 fi } @@ -160,3 +160,8 @@ function mymqtt_update { mymqtt_test mosquitto_pub -t "${MQTT_TOPIC}/${1}/${2}/1/0/${3}" -m "${4}" } + +function mymqtt_battery { + mymqtt_test + mosquitto_pub -t "${MQTT_TOPIC}/${1}/${2}/3/0/0" -m "${3}" +} diff --git a/cambridge.sh b/cambridge.sh index 234bf18..935e34a 100755 --- a/cambridge.sh +++ b/cambridge.sh @@ -14,7 +14,7 @@ mymqtt_init "${ID}" "${TEM_ID}" "${S_TEMP}" "CBG TEMPERATURE" mymqtt_init "${ID}" "${HUM_ID}" "${S_HUM}" "CBG HUMIDITY" mymqtt_init "${ID}" "${BAR_ID}" "${S_BARO}" "CBG BAROMETER" mymqtt_init "${ID}" "${RAIN_ID}" "${S_RAIN}" "CBG RAIN" -mymqtt_init "${ID}" "${SUN_ID}" "${S_CUSTOM}" "CBG SUN" +#mymqtt_init "${ID}" "${SUN_ID}" "${S_CUSTOM}" "CBG SUN" while true; do cbg="$(wget -O- -q https://www.cl.cam.ac.uk/research/dtg/weather/current-obs.txt)" @@ -48,7 +48,7 @@ while true; do mymqtt_update "${ID}" "${HUM_ID}" "${V_HUM}" "${data[humidity]}" mymqtt_update "${ID}" "${BAR_ID}" "${V_PRESSURE}" "${data[pressure]}" mymqtt_update "${ID}" "${RAIN_ID}" "${V_RAIN}" "${data[rain]}" - mymqtt_update "${ID}" "${SUN_ID}" "${V_VAR1}" "${data[sunshine]}" + #mymqtt_update "${ID}" "${SUN_ID}" "${V_VAR1}" "${data[sunshine]}" sleep "$INTERVAL" done diff --git a/thinkpad.sh b/thinkpad.sh index e7b4935..232fb10 100755 --- a/thinkpad.sh +++ b/thinkpad.sh @@ -2,22 +2,23 @@ source /usr/local/lib/collectd/_functions.sh -HOSTNAME="${COLLECTD_HOSTNAME:-$(hostname -f)}" -INTERVAL="${COLLECTD_INTERVAL:-60}" -DOMOTICZ_PORT="${2:-8080}" -DOMOTICZ_IDX="${1:-1}" -DOMOTICZ_URL="http://${HOSTNAME}:${DOMOTICZ_PORT}/json.htm?type=command¶m=udevice" +ID="90" -IFS=';' read -ra KEYVALS <<< "${DOMOTICZ_IDX}" -declare -A idx -for item in "${KEYVALS[@]}"; do - idx[${item%=*}]=${item##*=} -done +POWER_ID="1" +CURRENT_ID="2" +VOLTAGE_ID="3" +AC_ID="4" +TEM_ID="5" + +mymqtt_init "${ID}" "${POWER_ID}" "${S_POWER}" "THINKPAD POWER" +mymqtt_init "${ID}" "${CURRENT_ID}" "${S_MULTIMETER}" "THINKPAD CURRENT" +mymqtt_init "${ID}" "${VOLTAGE_ID}" "${S_MULTIMETER}" "THINKPAD VOLTAGE" +mymqtt_init "${ID}" "${AC_ID}" "${S_BINARY}" "THINKPAD AC" +mymqtt_init "${ID}" "${TEM_ID}" "${S_TEMP}" "THINKPAD TEMPERATURE" while true; do - - # battery ac="$(cat /sys/devices/platform/smapi/ac_connected)" + for battery in /sys/devices/platform/smapi/BAT*; do if [ $(cat "${battery}/installed") -eq 0 ]; then @@ -25,6 +26,9 @@ while true; do fi bname="$(basename $battery | tr '[:upper:]' '[:lower:]')" + ID=$(($ID+${bname/bat/})) + + prefix="thinkpad-${bname}" suffix="" declare -A data @@ -39,48 +43,46 @@ while true; do data[current-current]=$(echo "scale=2;$(cat ${battery}/current_now)/1000" | bc) for key in "${!data[@]}"; do - value=${data[$key]} - echo "PUTVAL $HOSTNAME/${prefix}/${key}${suffix} interval=$INTERVAL N:${value}" - - if [ ! ${idx[$key]+test} ]; then - continue - fi - - sensor=${idx[$key]} - SEND="${DOMOTICZ_URL}&idx=${sensor}&battery=${data[percent-percent]}" - if grep -q "ac_connected" <<< "${key}"; then - svalue="ONLINE" - if [ "$value" == "0" ]; then - value=4 - svalue="OFFLINE" - fi - SEND="${SEND}&nvalue=${value}&svalue=${svalue}" - else - SEND="${SEND}&nvalue=0&svalue=${value}" - fi - domoticz_send ${SEND} + echo "PUTVAL $HOSTNAME/${prefix}/${key}${suffix} interval=$INTERVAL N:${data[$key]}" done + + mymqtt_update "${ID}" "${POWER_ID}" "${V_WATT}" "${data[power-power]}" + mymqtt_battery "${ID}" "${POWER_ID}" "${data[percent-percent]}" + + mymqtt_update "${ID}" "${CURRENT_ID}" "${V_CURRENT}" "${data[current-current]}" + mymqtt_battery "${ID}" "${CURRENT_ID}" "${data[percent-percent]}" + + mymqtt_update "${ID}" "${VOLTAGE_ID}" "${V_VOLTAGE}" "${data[voltage-voltage]}" + mymqtt_battery "${ID}" "${VOLTAGE_ID}" "${data[percent-percent]}" + + mymqtt_update "${ID}" "${TEM_ID}" "${V_TEMP}" "${data[temperature-temperature]}" + mymqtt_battery "${ID}" "${TEM_ID}" "${data[percent-percent]}" + + mymqtt_update "${ID}" "${AC_ID}" "${V_STATUS}" "${data[gauge-ac_connected]}" + mymqtt_battery "${ID}" "${AC_ID}" "${data[percent-percent]}" + + done - # fan - prefix="thinkpad-fan" - suffix="" - declare -A data - status="$(cat /proc/acpi/ibm/fan)" - data[fanspeed-speed]=$(grep 'speed:' <<< "$status" | awk '{print $2}') - data[gauge-fanlevel]=$(grep 'level:' <<< "$status" | awk '{print $2}') - for key in "${!data[@]}"; do - value=${data[$key]} - echo "PUTVAL $HOSTNAME/${prefix}/${key}${suffix} interval=$INTERVAL N:${data[$key]}" + ## fan + #prefix="thinkpad-fan" + #suffix="" + #declare -A data + #status="$(cat /proc/acpi/ibm/fan)" + #data[fanspeed-speed]=$(grep 'speed:' <<< "$status" | awk '{print $2}') + #data[gauge-fanlevel]=$(grep 'level:' <<< "$status" | awk '{print $2}') + #for key in "${!data[@]}"; do + #value=${data[$key]} + #echo "PUTVAL $HOSTNAME/${prefix}/${key}${suffix} interval=$INTERVAL N:${data[$key]}" - if [ ! ${idx[$key]+test} ]; then - continue - fi + #if [ ! ${idx[$key]+test} ]; then + #continue + #fi - sensor=${idx[$key]} - SEND="${DOMOTICZ_URL}&idx=${sensor}&battery=${data[percent-percent]}&svalue=${value}" - domoticz_send ${SEND} - done + #sensor=${idx[$key]} + #SEND="${DOMOTICZ_URL}&idx=${sensor}&battery=${data[percent-percent]}&svalue=${value}" + #domoticz_send ${SEND} + #done sleep "$INTERVAL" done