New developer looking for help on adding data fields to watch output (Bluetooth Status, Heart Rate and Alarm Count)

Hey all,

I'm a brand new developer (as in this is the first thing I've ever coded and I want to release an open faced watch face for beginners. So far I've been able to add a background, the time, date, step count and battery percent count but now I'm stumped. Whenever I try to add Bluetooth Status, Heart Rate and Alarm Count I'm able to save the watch face without error but upon running it I get the IQ Error.

Can anyone point me in the right direction on the code I should be using to fill in the 3 blank areas below:

import Toybox.Graphics;
import Toybox.Lang;
import Toybox.System;
import Toybox.WatchUi;
import Toybox.ActivityMonitor;
import Toybox.Activity;
import Toybox.Time.Gregorian;

class NGE15View extends WatchUi.WatchFace {

function initialize() {
WatchFace.initialize();
}

// Load your resources here
function onLayout(dc as Dc) as Void {
setLayout(Rez.Layouts.WatchFace(dc));
}

// Called when this View is brought to the foreground. Restore
// the state of this View and prepare it to be shown. This includes
// loading resources into memory.
function onShow() as Void {
}

// Update the view
function onUpdate(dc as Dc) as Void {
// Get and show the current time
var clockTime = System.getClockTime();
var timeString = Lang.format("$1$:$2$", [clockTime.hour, clockTime.min.format("%02d")]);
var view = View.findDrawableById("TimeLabel") as Text;
view.setText(timeString);

//Get and show Battery Display
var battery = System.getSystemStats().battery;
var batteryDisplay = View.findDrawableById("BatteryDisplay");
batteryDisplay.setText(battery.format("%d")+"%");

//Get and show Notification Count
{
var notificationAmount = System.getDeviceSettings().notificationCount;
var formattedNotificationAmount = "";
if(notificationAmount > 999) {
formattedNotificationAmount = "999+";
}
else {
formattedNotificationAmount = notificationAmount.format("%d");
}
var notificationCountDisplay = View.findDrawableById("NotificationCountDisplay");
notificationCountDisplay.setText(formattedNotificationAmount);
}

//Get and show Stepcount
var StepCountDisplay = ActivityMonitor.getInfo().steps.toString();
var stepCountDisplay = View.findDrawableById("StepCountDisplay");
stepCountDisplay.setText(StepCountDisplay);

//Get and show DateDisplay
var now = Time.now();
var date = Time.Gregorian.info(now, Time.FORMAT_LONG);
var dateString = Lang.format("$1$, $2$ $3$", [date.day_of_week, date.month, date.day]);
var dateDisplay = View.findDrawableById("DateDisplay");
dateDisplay.setText(dateString);

//Get and show Heart Rate Amount

//Get and show Bluetooth

//Get and show Notification Count

// Call the parent onUpdate function to redraw the layout
View.onUpdate(dc);
}

// Called when this View is removed from the screen. Save the
// state of this View here. This includes freeing resources from
// memory.
function onHide() as Void {
}

// The user has just looked at their watch. Timers and animations may be started here.
function onExitSleep() as Void {
}

// Terminate any active timers and prepare for slow updates.
function onEnterSleep() as Void {
}

}