“Gadgetbridge is a free and open source Android application that allows you to pair and manage various gadgets such as smart watches, bands, headphones, and more without the need for the vendor application. So in short, you can use Gadgetbridge instead of relying on your gadget’s own proprietary app.”
[Home Assistant] Send notification only when you are home or when you come home
If you have a notification, which is only relevant for you when you are at home, it does not make sense to send it, if you are away. Instead, it would make sense to receive it the moment you get home.
To do this, simply add an Wait for a template action before sending the notification, with the following content. This can be done via YAML configuration
- wait_template: "{{ is_state('person.nico', 'home') }}"
continue_on_timeout: true
or via the web interface

If you are currently at home, means the entity status is already in the state home, it will be resolved immediately, otherwise it will wait until your status changes to home.
[SuccessFactors] Configure Custom Navigation
In the Configure Custom Navigation settings, you can define different places where an external application (for example, a link to a side-by-side application) should be visible.

[SAPUI5] Model binding events
this.getView().bindElement({
path: sObjectPath,
events: {
dataRequested: (oEvent) => {}, // Executed when a request to server is send
dataReceived: (oEvent) => {}, // Executed when data from server is received
change:(oEvent) => {}, // Executed everytime you do ElementBinding
}
})
The events for dataRequested and dataReceived are only fired, when data is requested or data is received from a backend. This is not the case, when the requested data is already available in the model from a previous backend call. In such situations, the change event comes in handy.
The same can also be done via XML:
binding="{
path: '/myEntitySet',
events: {
dataRequested: 'onDataRequested',
dataReceived: 'onDataReceived',
change: 'onDataChange'
}
}"
[BTP] Retrieve details of the logged-in user from the identity provider
This URL will return details about the logged-in user. The identity provider can either be the default or a custom identity provider configured in the BTP Trust Configuration. The response will differ for OpenID Connect and SAML protocol.
https://<domain>.authentication.<region>.hana.ondemand.com/config?action=who&details=true
[LineageOS] When someone calls, my own number is appended to the caller’s number
I had an issue with my Xiaomi Mi 8 phone, which really annoyed me. For some callers, my phone number was somehow appended to the caller’s phone number. This also meant that the number was not matched with my contacts. It looked like this:

When searching, I found a reddit post (as always) where someone had the exact same problem, even using the same phone. Therefore, I’m not sure if the issue is Phone or Lineage related.
https://www.reddit.com/r/LineageOS/comments/inud0m/incoming_calls_caller_id_issue
The suggested solution is to disable VoLTE. To be honest, I didn’t even know what VoLTE was exactly. After reading a bit, I found the required setting under: Settings → Network and Internet → SIM cards → 4G calls.
And fortunately, it also helped in my case. I could not really notice a difference regarding the phone quality, therefore I’m fine with it.
[BTP] Get access token for specific tenant in a multitenant scenario using http rest client
https://docs.cloudfoundry.org/api/uaa/version/4.6.0/index.html#password-grant
# url from XSUAA Service Key, but replace in the url the provider subdomain with the consumer subdomain (the tenant you want to call)
@xsuaaUrl = {{$dotenv xsuaaUrl}}
# clientid from XSUAA Service Key
@xsuaaClientId = {{$dotenv xsuaaClientId}}
# clientsecret from XSUAA Service Key
@xsuaaClientSecret = {{$dotenv xsuaaClientSecret}}
@username = {{$dotenv btp_username}}
@password = {{$dotenv btp_password}}
### Get Access Token for Cloud Foundry using Password Grant with BTP default IdP
# @name getXsuaaToken
POST {{xsuaaUrl}}/oauth/token
Accept: application/json
Authorization: Basic {{xsuaaClientId}}:{{xsuaaClientSecret}}
Content-Type: application/x-www-form-urlencoded
grant_type=password
&username={{username}}
&password={{password}}
&response_type=token
### Store access token
@access_token = {{getXsuaaToken.response.body.$.access_token}}
[BTP] How to use the refresh_token to get a new valid access_token
https://oauth.net/2/refresh-tokens
https://www.oauth.com/oauth2-servers/making-authenticated-requests/refreshing-an-access-token
https://docs.cloudfoundry.org/api/uaa/version/4.6.0/index.html#refresh-token
# url from XSUAA Service Key
@xsuaaUrl = {{$dotenv xsuaaUrl}}
# clientid from XSUAA Service Key
@xsuaaClientId = {{$dotenv xsuaaClientId}}
# clientsecret from XSUAA Service Key
@xsuaaClientSecret = {{$dotenv xsuaaClientSecret}}
#==================================================================#
### Get Access Token for Cloud Foundry using Grant Type Password with BTP default IdP
# @name token_response
POST {{xsuaaUrl}}/oauth/token
Authorization: Basic {{xsuaaClientId}}:{{xsuaaClientSecret}}
Accept: application/json;charset=utf8
Content-Type: application/x-www-form-urlencoded
grant_type=password
&username={{$dotenv btp_username}}
&password={{$dotenv btp_password}}
&response_type=token
### Store access token and refresh token
@access_token = {{token_response.response.body.$.access_token}}
@refresh_token = {{token_response.response.body.$.refresh_token}}
### Use Refresh Token
# @name token_response
POST {{xsuaaUrl}}/oauth/token
Authorization: Basic {{xsuaaClientId}}:{{xsuaaClientSecret}}
Accept: application/json;charset=utf8
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token
&refresh_token={{refresh_token}}
### Store access token and refresh token
@access_token = {{token_response.response.body.$.access_token}}
@refresh_token = {{token_response.response.body.$.refresh_token}}
[SAPUI5] securityTokenAvailable
Just noticed, that with UI5 version 1.119.0 the getSecurityToken() function got replaced with securityTokenAvailable().
https://sapui5.hana.ondemand.com/#/api/sap.ui.model.odata.v2.ODataModel%23methods/getSecurityToken
// Returns the current security token if available; triggers a request to fetch the security token if it is not available.
const token = this.getModel().getSecurityToken() // Deprecated
// Returns a promise, which will resolve with the security token as soon as it is available.
const token = await this.getModel().securityTokenAvailable()
