Still sounds like santa to me
I find Blockly such an amazing tool, so thank you very much for the work you’ve already put into it and what you’ll dedicate to it in the future!
I don’t personally have a need for this, but I would like to draw attention to how OPNsense does this, which IMHO is the gold standard. Backup is a single file and the restore process is to upload the backup file after which a reboot is triggered and everything is back to how it was before. That is paired with functionality that allows it to track all changes in a git repository and push it to a git server somewhere else on a schedule and you have pretty solid backup/restore mechanism.
As this topic is coming up every time around the time of year for wishlists, some background.
I acknowledge that UI integration for B&R of OH config would be a nice addition, but overall there’s quite some misunderstanding among wishing users why apparently simple demands like backup& restore are not and will not be built the way they keep asking for.
OpenHAB and openHABian are not appliances, in reality home automation systems are way more complex. While we probably all would like things to be that way, truth is you cannot compare OH to simplistic appliances like OPNsense, and it’s very much misleading to call that a standard that would ideally apply to OH as well.
OH is not a monolith but consists of multiple modules, several of these to have their own config, in their own format, because what they need to cover is so much more complex and variable than are simple parameter lists for a VPN or other simple applications.
UI user credentials are part of Karaf which in turn is an externally maintained component so we do not even have influence on how they store their config.
Main UI uses JSON to represent Widgets and OH things+items plus for the latter there’s the old text input format many people still want to use.
Next, think of integrations with Alexa, Homekit and others.
And this is just about OH. If you widen scope to include all of the OS, 3rd party tools, OS and HW configuration are part of the big picture, too.
Persistence data and logs are in this domain, people use various databases for this. MQTT broker config, too.
All of these you cannot force into a single backup file, not even a tar one.
Let alone to mention all the implications of running your OH on Raspi vs x86, Windows or even MacOS.
Fully agreed with you, that would be far to complex and error prone or even impossible.
What I was wishing for was a simple way to backup and restore what a user configures after OH was set up initially, restricted to what todays backup in the CLI can do. So it is about the configuration steps, not about a full system backup with all dependencies.
For me this is e.g. Things, Items, UI, Rules and Scripts, the basic configs done within the OH Main UI and maybe (but not mandatory) including the information what bindings/transformations are active and configured.
So no, not a full backup that can directly revamp OH from scratch on fresh hardware, but just securing the parts where the major effort of the users is being put into.
To me it is a valid wish to be able to secure and restore this in a way as simple as possible.
It is by no means a requirement to e.g. backup user credentials or authentification data required to connect to external portals - this can always be re-done by the users when it is necessary to setup things from scratch - besides that there is always the option to have a full SD card backup at least for a Pi.
No need to track everything and be able run a full revert on the whole system, but just the major things users put effort into. And as there is no underlying Git one can not simply discard pending changes in case he/she broke something which was working - not everybody is a crack in OH right from the start, so things happen.
If we only consider all encompassing backups then a full SD card backup is the road to follow (and even then one may fail), but a config backup of things within OHs domain is something worth to think about.
My impression and experience from many years is that usability is a major key to success - a system may be rock solid and fully functional, but also can die in beauty if it is hard to use for novice or basic users. OH has made huge progress there in the last years.
Such a wish list reflects where pain points are, as everybody can simply tell what is missing for him/her without bashing onto the overall thing.
Finally: If a wish is coming up every time, isn’t it worth (re)considering it?
Just on a side note: There are some situations, only a reboot solved my problems (OH3-versions). So, yeah, sometimes a good ole reboot does help.
I see your point - and having openhabian-config options available in Web-UI would highly enhance usability - even for advanced users, let alone beginners. Most of the menu-options can be run via Web-UI and amongst the most useful in my eyes are certainly
upgrade system
backup/restore the OH-config (though it could be like >250MB) and
installing/removing/using little helpers
…
I think, noone assumes a “one file restores my whole system” implementation, but reducing the number of touchpoints for users to the sytem will increase the overall experience of openHAB greatly.
if you need one: openHABian can create automated amanda-backups for you - or regular SD Card clones. That saved me from re-installing everything once, as I messed up my config backups… and yes: that’s something I don’t expect on a Web-GUI.
Let me elaborate on that. How can you decide something like this? I assume you are talking about openhabian - you certainly can decide whatever you want.
But the requests we are talking about are to have maintenace capabilities (e.g. backup) in MainUI.
Let‘s take out technologoy here for a moment as this is about user requests and some users simply do not want to be involved in technology.
Does it make ANY difference for the USER that OH is not monolithic and consists of several components? NO
Does any user expect to have a perfect working backup tool that covers all aspects of various backup strategies? NO
Does any user expect to have a backup tool in place that covers the COMPLETE scope you mentioned (all of the OS, 3rd party tools, OS and HW configuration, persistance, etc)? NO
Is MainUI at the same level of finalisation as you are demanding in your post for a GUI based backup? NO! Does anybody complain that it is not finalized? NOT at all! We all love the MainUI.
What I want to say with the bullet points is that it is a process (as always). Why not starting with basic features and add bits and pieces over time.
But to be honest, I do not like your approach to overcomplicate things to use this as an argument of why not do things. Your point would be valid only if users requested this.
Proper Python 3 support will only be possible with HABApp since it’s the only add-on/rule engine that uses the official python reference implementation.
I get that it might be overwhelming at first but there are many examples in the docs so even if you are a novice (and we have a couple of novice users with HABApp) it’s just copy paste.
Additionally HABApp has very (!) nice tracebacks so any error will be logged properly and if you are stuck you can just ask for help in 3rd party.
Of course it’s different than jython with the helper libraries so you have to be willing to learn something new.
This is a pet peeve of mine. You shouldn’t be using epoch. There is almost no need to. It makes your code longer, harder to read, and harder to maintain.
I have yet to see a case where using epoch is better than using the ZondedDateTime and Duration Classes.
As for adding that to DateTimeType, that would only fix a minority of places where time is interacted with and it would create an inconsistency. You would still need to get the instant for now and any other time you get a date time outside of the state of the Item.
But I’ll say it again, there is never a reason (I’ve encountered thus far) where messing with epoch is shorter, easier to understand, or easier to maintain. So I would encourage you to explore what you can do with ZonedDateTime and Duration.
Probably not the answer you were hoping for. But compare the two and decide for yourself (here in rules DSL but the overall should apply to all the langauges:
var deltaMillis = now.toInstant().toEpochMillis() - (MyDateTime.state as DateTimeType).getZonedDateTime().toInstant().toEpochMillis()
var deltaMillis = Duration.between(now, (MyDateTime.state as DateTimeType).getZonedDateTime()).toMillis()
I wish for HomeKit emulation, i.e. exposing openHAB as a HAP Client, allowing openHAB to control Homekit devices. Some details here:
My current use-case is being able to integrate with my Velux Active gateway (locally), so that I can control my skylight windows, and perhaps more importantly, lock and unlock them according to presence state (currently this requires pressing a physical button when leaving and entering the house).
All cards are widgets but not all widgets are cards. There are also Cell widgets and List Item widgets. Each are used in different ways/contexts.
Many widgets cannot be placed on a page on their own. They have to be included as part of another widget. All the List Item widgets fit this category. I believe this list also are widgets that cannot be placed on a page on their own. This is why they are not listed.
Playing with e.g. oh-button in the “code” lets me place it as a component in a oh-grid-item in exactly the same was as e.g. oh-toggle-card. It works, but the aesthetics look out of place.
Example of a coded button (on top) vs a proper card on the bottom:
I believe adding for example an “oh-button-card” widget which had a design which aligned with the other system widgets would make it easier for normal users to design pretty pages.
Ha ha. I wouldn’t have bothered to ask if I knew in advance what your answer would be. You always have a good perspective which is why I ask your opinion.
I see your point about consistency, but DateTimeType is not a Java class; it’s an openHAB class. So I would argue that adding a toMillis method would not be inconsistent.
Yes, exactly, the first one is kind of nasty. That’s my point. But if you add a toMillis method to `DateTimeType, it becomes (3rd line below), which is shorter, and just as easy, if not easier, to understand.
var deltaMillis = now.toInstant().toEpochMillis() - (MyDateTime.state as DateTimeType).getZonedDateTime().toInstant().toEpochMillis()
var deltaMillis = Duration.between(now, (MyDateTime.state as DateTimeType).getZonedDateTime()).toMillis()
var deltaMillis = now.toInstant().toEpochMillis() - (MyDateTime.state as DateTimeType).toMillis()