initial docker support on x86

This commit is contained in:
David
2019-05-28 14:27:57 +10:00
commit 7a6b39bf18
23 changed files with 1403 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
export TERM=xterm
# Init the mqtt server for the first time...
bash /opt/voltronic-mqtt/mqtt-init.sh
# Run the MQTT Subscriber process in the background (so that way we can change the configuration on the inverter from home assistant)
/opt/voltronic-mqtt/mqtt-subscriber.sh &
# execute exactly ever minute...
watch -n 30 /opt/voltronic-mqtt/mqtt-push.sh # > /dev/null 2>&1
+68
View File
@@ -0,0 +1,68 @@
#!/bin/bash
#
# Simple script to register the MQTT topics when the container starts for the first time...
MQTT_SERVER=`cat /etc/skymax/mqtt.json | jq '.server' -r`
MQTT_PORT=`cat /etc/skymax/mqtt.json | jq '.port' -r`
MQTT_TOPIC=`cat /etc/skymax/mqtt.json | jq '.topic' -r`
MQTT_DEVICENAME=`cat /etc/skymax/mqtt.json | jq '.devicename' -r`
registerTopic () {
mosquitto_pub \
-h $MQTT_SERVER \
-p $MQTT_PORT \
-t "$MQTT_TOPIC/sensor/"$MQTT_DEVICENAME"_$1/config" \
-m "{
\"name\": \""$MQTT_DEVICENAME"_$1\",
\"unit_of_measurement\": \"$2\",
\"state_topic\": \"$MQTT_TOPIC/sensor/"$MQTT_DEVICENAME"_$1\",
\"icon\": \"mdi:$3\"
}"
}
registerInverterRawCMD () {
mosquitto_pub \
-h $MQTT_SERVER \
-p $MQTT_PORT \
-t "$MQTT_TOPIC/sensor/$MQTT_DEVICENAME/config" \
-m "{
\"name\": \""$MQTT_DEVICENAME"\",
\"state_topic\": \"$MQTT_TOPIC/sensor/$MQTT_DEVICENAME\"
}"
}
registerTopic "Inverter_mode" "" "mdi-solar-power" # 1 = Power_On, 2 = Standby, 3 = Line, 4 = Battery, 5 = Fault, 6 = Power_Saving, 7 = Unknown
registerTopic "AC_grid_voltage" "V" "mdi-power-plug"
registerTopic "AC_grid_frequency" "Hz" "mdi-current-ac"
registerTopic "AC_out_voltage" "V" "mdi-power-plug"
registerTopic "AC_out_frequency" "Hz" "mdi-current-ac"
registerTopic "PV_in_voltage" "V" "mdi-solar-panel-large"
registerTopic "PV_in_current" "A" "mdi-solar-panel-large"
registerTopic "PV_in_watts" "W" "mdi-solar-panel-large"
registerTopic "PV_in_watthour" "Wh" "mdi-solar-panel-large"
registerTopic "SCC_voltage" "V" "mdi-current-dc"
registerTopic "Load_pct" "%" "mdi-brightness-percent"
registerTopic "Load_watt" "W" "mdi-chart-bell-curve"
registerTopic "Load_watthour" "Wh" "mdi-chart-bell-curve"
registerTopic "Load_va" "VA" "mdi-chart-bell-curve"
registerTopic "Bus_voltage" "V" "mdi-details"
registerTopic "Heatsink_temperature" "" "mdi-details"
registerTopic "Battery_capacity" "%" "mdi-battery-outline"
registerTopic "Battery_voltage" "V" "mdi-battery-outline"
registerTopic "Battery_charge_current" "A" "mdi-current-dc"
registerTopic "Battery_discharge_current" "A" "mdi-current-dc"
registerTopic "Load_status_on" "" "mdi-power"
registerTopic "SCC_charge_on" "" "mdi-power"
registerTopic "AC_charge_on" "" "mdi-power"
registerTopic "Battery_recharge_voltage" "V" "mdi-current-dc"
registerTopic "Battery_under_voltage" "V" "mdi-current-dc"
registerTopic "Battery_bulk_voltage" "V" "mdi-current-dc"
registerTopic "Battery_float_voltage" "V" "mdi-current-dc"
registerTopic "Max_grid_charge_current" "A" "mdi-current-ac"
registerTopic "Max_charge_current" "A" "mdi-current-ac"
registerTopic "Out_source_priority" "" "mdi-grid"
registerTopic "Charger_source_priority" "" "mdi-solar-power"
registerTopic "Battery_redischarge_voltage" "V" "mdi-battery-negative"
# Add in a separate topic so we can send raw commands from assistant back to the inverter via MQTT (such as changing power modes etc)...
registerInverterRawCMD
+120
View File
@@ -0,0 +1,120 @@
#!/bin/bash
pushMQTTData () {
MQTT_SERVER=`cat /etc/skymax/mqtt.json | jq '.server' -r`
MQTT_PORT=`cat /etc/skymax/mqtt.json | jq '.port' -r`
MQTT_TOPIC=`cat /etc/skymax/mqtt.json | jq '.topic' -r`
MQTT_DEVICENAME=`cat /etc/skymax/mqtt.json | jq '.devicename' -r`
mosquitto_pub \
-h $MQTT_SERVER \
-p $MQTT_PORT \
-t "$MQTT_TOPIC/sensor/"$MQTT_DEVICENAME"_$1" \
-m "$2"
}
INVERTER_DATA=`timeout 10 /opt/voltronic-cli/bin/skymax`
#####################################################################################
Inverter_mode=`echo $INVERTER_DATA | jq '.Inverter_mode' -r`
[ ! -z "$Inverter_mode" ] && pushMQTTData "Inverter_mode" "$Inverter_mode"
AC_grid_voltage=`echo $INVERTER_DATA | jq '.AC_grid_voltage' -r`
[ ! -z "$AC_grid_voltage" ] && pushMQTTData "AC_grid_voltage" "$AC_grid_voltage"
AC_grid_frequency=`echo $INVERTER_DATA | jq '.AC_grid_frequency' -r`
[ ! -z "$AC_grid_frequency" ] && pushMQTTData "AC_grid_frequency" "$AC_grid_frequency"
AC_out_voltage=`echo $INVERTER_DATA | jq '.AC_out_voltage' -r`
[ ! -z "$AC_out_voltage" ] && pushMQTTData "AC_out_voltage" "$AC_out_voltage"
AC_out_frequency=`echo $INVERTER_DATA | jq '.AC_out_frequency' -r`
[ ! -z "$AC_out_frequency" ] && pushMQTTData "AC_out_frequency" "$AC_out_frequency"
PV_in_voltage=`echo $INVERTER_DATA | jq '.PV_in_voltage' -r`
[ ! -z "$PV_in_voltage" ] && pushMQTTData "PV_in_voltage" "$PV_in_voltage"
PV_in_current=`echo $INVERTER_DATA | jq '.PV_in_current' -r`
[ ! -z "$PV_in_current" ] && pushMQTTData "PV_in_current" "$PV_in_current"
PV_in_watts=`echo $INVERTER_DATA | jq '.PV_in_watts' -r`
[ ! -z "$PV_in_watts" ] && pushMQTTData "PV_in_watts" "$PV_in_watts"
PV_in_watthour=`echo $INVERTER_DATA | jq '.PV_in_watthour' -r`
[ ! -z "$PV_in_watthour" ] && pushMQTTData "PV_in_watthour" "$PV_in_watthour"
SCC_voltage=`echo $INVERTER_DATA | jq '.SCC_voltage' -r`
[ ! -z "$SCC_voltage" ] && pushMQTTData "SCC_voltage" "$SCC_voltage"
Load_pct=`echo $INVERTER_DATA | jq '.Load_pct' -r`
[ ! -z "$Load_pct" ] && pushMQTTData "Load_pct" "$Load_pct"
Load_watt=`echo $INVERTER_DATA | jq '.Load_watt' -r`
[ ! -z "$Load_watt" ] && pushMQTTData "Load_watt" "$Load_watt"
Load_watthour=`echo $INVERTER_DATA | jq '.Load_watthour' -r`
[ ! -z "$Load_watthour" ] && pushMQTTData "Load_watthour" "$Load_watthour"
Load_va=`echo $INVERTER_DATA | jq '.Load_va' -r`
[ ! -z "$Load_va" ] && pushMQTTData "Load_va" "$Load_va"
Bus_voltage=`echo $INVERTER_DATA | jq '.Bus_voltage' -r`
[ ! -z "$Bus_voltage" ] && pushMQTTData "Bus_voltage" "$Bus_voltage"
Heatsink_temperature=`echo $INVERTER_DATA | jq '.Heatsink_temperature' -r`
[ ! -z "$Heatsink_temperature" ] && pushMQTTData "Heatsink_temperature" "$Heatsink_temperature"
Battery_capacity=`echo $INVERTER_DATA | jq '.Battery_capacity' -r`
[ ! -z "$Battery_capacity" ] && pushMQTTData "Battery_capacity" "$Battery_capacity"
Battery_voltage=`echo $INVERTER_DATA | jq '.Battery_voltage' -r`
[ ! -z "$Battery_voltage" ] && pushMQTTData "Battery_voltage" "$Battery_voltage"
Battery_charge_current=`echo $INVERTER_DATA | jq '.Battery_charge_current' -r`
[ ! -z "$Battery_charge_current" ] && pushMQTTData "Battery_charge_current" "$Battery_charge_current"
Battery_discharge_current=`echo $INVERTER_DATA | jq '.Battery_discharge_current' -r`
[ ! -z "$Battery_discharge_current" ] && pushMQTTData "Battery_discharge_current" "$Battery_discharge_current"
Load_status_on=`echo $INVERTER_DATA | jq '.Load_status_on' -r`
[ ! -z "$Load_status_on" ] && pushMQTTData "Load_status_on" "$Load_status_on"
SCC_charge_on=`echo $INVERTER_DATA | jq '.SCC_charge_on' -r`
[ ! -z "$SCC_charge_on" ] && pushMQTTData "SCC_charge_on" "$SCC_charge_on"
AC_charge_on=`echo $INVERTER_DATA | jq '.AC_charge_on' -r`
[ ! -z "$AC_charge_on" ] && pushMQTTData "AC_charge_on" "$AC_charge_on"
Battery_recharge_voltage=`echo $INVERTER_DATA | jq '.Battery_recharge_voltage' -r`
[ ! -z "$Battery_recharge_voltage" ] && pushMQTTData "Battery_recharge_voltage" "$Battery_recharge_voltage"
Battery_under_voltage=`echo $INVERTER_DATA | jq '.Battery_under_voltage' -r`
[ ! -z "$Battery_under_voltage" ] && pushMQTTData "Battery_under_voltage" "$Battery_under_voltage"
Battery_under_voltage=`echo $INVERTER_DATA | jq '.Battery_under_voltage' -r`
[ ! -z "$Battery_under_voltage" ] && pushMQTTData "Battery_under_voltage" "$Battery_under_voltage"
Battery_bulk_voltage=`echo $INVERTER_DATA | jq '.Battery_bulk_voltage' -r`
[ ! -z "$Battery_bulk_voltage" ] && pushMQTTData "Battery_bulk_voltage" "$Battery_bulk_voltage"
Battery_float_voltage=`echo $INVERTER_DATA | jq '.Battery_float_voltage' -r`
[ ! -z "$Battery_float_voltage" ] && pushMQTTData "Battery_float_voltage" "$Battery_float_voltage"
Max_grid_charge_current=`echo $INVERTER_DATA | jq '.Max_grid_charge_current' -r`
[ ! -z "$Max_grid_charge_current" ] && pushMQTTData "Max_grid_charge_current" "$Max_grid_charge_current"
Max_charge_current=`echo $INVERTER_DATA | jq '.Max_charge_current' -r`
[ ! -z "$Max_charge_current" ] && pushMQTTData "Max_charge_current" "$Max_charge_current"
Out_source_priority=`echo $INVERTER_DATA | jq '.Out_source_priority' -r`
[ ! -z "$Out_source_priority" ] && pushMQTTData "Out_source_priority" "$Out_source_priority"
Charger_source_priority=`echo $INVERTER_DATA | jq '.Charger_source_priority' -r`
[ ! -z "$Charger_source_priority" ] && pushMQTTData "Charger_source_priority" "$Charger_source_priority"
Battery_redischarge_voltage=`echo $INVERTER_DATA | jq '.Battery_redischarge_voltage' -r`
[ ! -z "$Battery_redischarge_voltage" ] && pushMQTTData "Battery_redischarge_voltage" "$Battery_redischarge_voltage"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
MQTT_SERVER=`cat /etc/skymax/mqtt.json | jq '.server' -r`
MQTT_PORT=`cat /etc/skymax/mqtt.json | jq '.port' -r`
MQTT_TOPIC=`cat /etc/skymax/mqtt.json | jq '.topic' -r`
MQTT_DEVICENAME=`cat /etc/skymax/mqtt.json | jq '.devicename' -r`
while read rawcmd;
do
echo "Incoming request send: [$rawcmd] to inverter."
/opt/voltronic-cli/bin/skymax -r $rawcmd;
done < <(mosquitto_sub -h $MQTT_SERVER -p $MQTT_PORT -t "$MQTT_TOPIC/sensor/$MQTT_DEVICENAME" -q 1)