How to keep your apps and drivers up to date?

How to keep your apps and drivers up to date with github if there is an updated release?

Other than monitoring the threads that the creator posted it on or notifications from Github I don't know...
But, the old adage rings true on Hubitat, if it ain't broke, don't fix it!
More and more I've been leaving things alone on Hubitat if they work, I suppress my desire for more features and updating just because there's one available.

Edit: Oh and all Hubitat built in drivers are updated automatically with updates, if they have an update, if you follow what I'm saying...

1 Like

OK thanks for the answer. I agree for the more established drivers/apps but the newer ones its good to update. ST has this feature, but ST is slower to respond than my grandpa.

Github states it can do this. I've tried it, but it has not worked for me.

I either watch the github (its an option on github) to get email notifications or subscribe to the updates via rss. This way when any changes are made to my favorite repo's I can check them out and update.

I usually "subscribe" to (track, in the forum software terms) the thread that announces the driver or app release here on the Community forum. There almost always is one, and the original poster/author almost always posts when they are updates. (Unfortunately if you're only using it for updates, depending on the popularity of the app/driver, you're also likely to see a lot of questions about the app/driver itself and tangential issues, but sometimes those can be good to know, too--there's no way to only show the unread count if it's the original poster who posts again.) Never tried the "watch" feature on the Github repo, but if that works and you only care about code updates, that would probably be better.

That being said, for most apps or drivers, I don't usually fret if I'm out of date. If it's working well for me, I don't see a reason to change anything. Occasionally there are definite reasons to--e.g., if you were using the community Xiaomi drivers before hub firmware 2.0.5, you needed to update so parsing worked correctly. Sometimes there are also bug fixes that affect me. And if you want support, most authors will only support the latest version of their code (or at least I have yet to see anyone release an "LTS" version of a Hubitat app :laughing:). But if it's not broken...

All my apps have the facility to send a pushover message when there is an update.
If you open an app it will also tell you on the first page if there is an update
My drivers will tell you on the device page.

Andy

1 Like

Thanks glad to know I can do that. Saves some hassle.

Are you using a remote DB, remote module, remote file, or a github file with module names and current version for verification?

I've done something similar with my Smarthings app with a remote DB, now I consider that method too much overhead.

PS I know I could look at your code, but I just finished prepping the soil of my veggie garden, and I am too tired to look :innocent: :cowboy_hat_face:

Cobra even has it split off for us to enjoy:

1 Like

Thank You for posting that code link using a remote file. Makes it easy to add this logic to my HE app.

1 Like

I added an additional check when I am using it...

			else if(currentVer > newVer)
			{
				state.Status = "<b>You are using a Test version of this App (Version: $newVerRaw)</b>"
			}
			else
			{ 

there in the middle of updateCheck, because most of the time that's the version I'm using and I need the reminder if anyone is asking a question.

1 Like

I prettied it up a bit for the version I’m using now.
Added a few bits to add an icon url and some update text to show changes.
And have just started to impliment a change to randomise the checkin to spead the load on my server a little.

@csteele I like your addition and may well add it to mine :slight_smile:

Andy

One thing you can do if you host the json files on an apache server.
I count unique urls (found in apache logs) to give me a guide to usage numbers

For example, there are currently 91 copies of my WU driver checking in every week.

Andy

1 Like

tagging @Cobra

Used the code for a base to display all version issues when clicking on the Parent app.

All modules, parent, child and driver have a version() routine that simply issues: return "n.n.n" where "n.n.n" is a version number such as "0.2.0"

This all works as expected, however when calling the driver's version() routine from an external source, it always returns null, but works as expected when called within the driver. I finally gave up and created and used an attribute to get the driver's version.

Anyone know why calling version() in a driver from an external source does not return anything?

Failing code snippet

def getAppVersions()
{
def map = [Nyckelharpa: version()]	//name of this, the parent app 
def appMapName
getChildApps().each 
	{
	appMapName=it.getName().replace(" ", "_")
	if (map."${appMapName}" <= "") 
		map << ["$appMapName": it?.version()]
	}	
if (globalKeypadDevices)
	{
	globalKeypadDevices.find
		{
		if (it.typeName=='Centralitex Keypad')
			{
 //				map << [Centralitex_Keypad: it.version()]	//version returning null???
			map << [Centralitex_Keypad: it.currentValue('driverVersion')]	//get stored attribute version
			return true
			}
		}	
	}			
return map	
}	

Driver code snippet

	command "version"
	
	fingerprint endpointId: "01", profileId: "0104", deviceId: "0401", inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0019,0501", manufacturer: "CentraLite", model: "3400", deviceJoinName: "Xfinity 3400-X Keypad"
	fingerprint endpointId: "01", profileId: "0104", deviceId: "0401", inClusters: "0000,0001,0003,0020,0402,0500,0501,0B05,FC04", outClusters: "0019,0501", manufacturer: "CentraLite", model: "3405-L", deviceJoinName: "Iris 3405-L Keypad"
	fingerprint endpointId: "01", profileId: "0104", deviceId: "0401", inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0003,0019,0501", manufacturer: "Universal Electronics Inc", model: "URC4450BC0-X-R", deviceJoinName: "Xfinity XHK1-UE Keypad" 
}

preferences{
	input ("version_donotuse", "text", title: "Version: ${version()}<br />(Do not set display only)", required: false )
    input ("panicEnabled", "bool", title: "Enable Panic Key (when available) and Panic Pins. Default (True)", defaultValue: true)
	input ("tempOffset", "number", title: "Enter an offset to adjust the reported temperature",
			defaultValue: 0, displayDuringSetup: false)
	input ("beepLength", "number", title: "Enter length of beep in seconds",
			defaultValue: 1, displayDuringSetup: false)
    input ("motionTime", "number", title: "Time in seconds for Motion to become Inactive (Default:10, 0=disabled)",	defaultValue: 10, displayDuringSetup: false)
    input ("showVolts", "bool", title: "Turn on to show actual battery voltage. Default (Off) is percentage", defaultValue: false, displayDuringSetup: false)
    input ("logdebugs", "bool", title: "Log debugging messages", defaultValue: false, displayDuringSetup: false)
    input ("logtraces", "bool", title: "Log trace messages", defaultValue: false, displayDuringSetup: false)
 //		paragraph "Centralitex Keypad Plus UEI Version ${version()}"  This fails       
}

}

 def version()
{
return "0.2.0";
}