Document API info

Hey cool that you make a standalone plugin for Easee. Really great 💪
Thank you very much!
I am still on the road. I will provide the missing api data tomorrow.

Products
(Request)
curl --request GET
--url https://api.easee.cloud/api/accounts/products
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response)
[
{
"userRole": 1,
"allowedSiteActions": [
"AllowToConfigureLevelOfAccess"
],
"partnerId": XX,
"ownerPartnerId": null,
"useDynamicMaster": false,
"circuits": [
{
"chargers": [
{
"userRole": 1,
"isTemporary": false,
"id": "EHXXXXXX",
"name": "Autoladegerät 2",
"color": 2,
"createdOn": "2021-04-12T05:11:13.123206",
"updatedOn": "2021-11-22T09:01:07.228822",
"backPlate": {
"id": "816XXXXXXXXXXX",
"masterBackPlateId": "816XXXXXXXXXXX",
"name": null
},
"levelOfAccess": 1,
"productCode": 1
},
{
"userRole": 1,
"isTemporary": false,
"id": "EHXXXXXX",
"name": "Autoladegerät 1",
"color": 2,
"createdOn": "2021-04-12T05:12:30.864357",
"updatedOn": "2021-11-22T09:00:50.355545",
"backPlate": {
"id": "816XXXXXXXXXXX",
"masterBackPlateId": "816XXXXXXXXXXX",
"name": null
},
"levelOfAccess": 1,
"productCode": 1
}
],
"masterBackplate": null,
"useDynamicMaster": false,
"parentCircuitId": null,
"id": 12XXXX,
"siteId": 13XXXX,
"circuitPanelId": 17,
"panelName": "17",
"ratedCurrent": 32
}
],
"equalizers": [],
"createdOn": "2021-08-13T15:58:03.576563",
"updatedOn": "2022-02-04T11:22:14.839687",
"contactInfo": {
"installerName": "XXXXXXXX",
"installerPhoneNumber": "XXXXXXX",
"ownerName": "XXXXXXX",
"ownerPhoneNumber": "+XXXXXXXX",
"company": "Zuhause"
},
"costPerKWh": 0.29,
"costPerKwhExcludeVat": 0.2437,
"vat": 19,
"currencyId": "EUR",
"siteType": 1,
"ratedCurrent": 50,
"id": 13XXXXX,
"siteKey": "LXXX-ZXXX",
"name": "Garage",
"levelOfAccess": 3,
"address": {
"street": "XXXXXXXXX",
"buildingNumber": "",
"zip": "XXXXX",
"area": "XXXXXXX",
"country": {
"id": "DE",
"name": "Germany",
"phonePrefix": 0
},
"latitude": null,
"longitude": null,
"altitude": null
}
}
]

Charger Details
(Request WB 1)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX/details
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response WB 1)
{
"serialNumber": "EHXXXXXX",
"pinCode": "1XXX",
"product": "Easee Home",
"unitType": "Master",
"levelOfAccess": 1,
"partner": {
"id": 20,
"name": "Easee",
"short": null,
"long": null,
"bigImage": null,
"smallImage": null
}
}
(Request WB 2)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX/details
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response WB 2)
{
"serialNumber": "EHXXXXXX",
"pinCode": "4XXX",
"product": "Easee Home",
"unitType": "Secondary",
"levelOfAccess": 1,
"partner": {
"id": 20,
"name": "Easee",
"short": null,
"long": null,
"bigImage": null,
"smallImage": null
}
}

Charger State
(Request WB 1)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX/state
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response WB 1)
{
"smartCharging": false,
"cableLocked": true,
"chargerOpMode": 1,
"totalPower": 0,
"sessionEnergy": 10.2519588470459,
"energyPerHour": 0,
"wiFiRSSI": -55,
"cellRSSI": -93,
"localRSSI": null,
"outputPhase": 0,
"dynamicCircuitCurrentP1": 40,
"dynamicCircuitCurrentP2": 40,
"dynamicCircuitCurrentP3": 40,
"latestPulse": "2022-02-13T06:02:46Z",
"chargerFirmware": 294,
"latestFirmware": 294,
"voltage":<PHONE_NUMBER>359375,
"chargerRAT": 1,
"lockCablePermanently": true,
"inCurrentT2": 0,
"inCurrentT3": 0,
"inCurrentT4": 0,
"inCurrentT5": 0,
"outputCurrent": 0,
"isOnline": true,
"inVoltageT1T2": null,
"inVoltageT1T3": null,
"inVoltageT1T4": null,
"inVoltageT1T5": null,
"inVoltageT2T3":<PHONE_NUMBER>359375,
"inVoltageT2T4":<PHONE_NUMBER>6835938,
"inVoltageT2T5":<PHONE_NUMBER>4628906,
"inVoltageT3T4": null,
"inVoltageT3T5": null,
"inVoltageT4T5": null,
"ledMode": 18,
"cableRating": 32,
"dynamicChargerCurrent": 32,
"circuitTotalAllocatedPhaseConductorCurrentL1": null,
"circuitTotalAllocatedPhaseConductorCurrentL2": null,
"circuitTotalAllocatedPhaseConductorCurrentL3": null,
"circuitTotalPhaseConductorCurrentL1": 0.008999999612569809,
"circuitTotalPhaseConductorCurrentL2": 0.009999999776482582,
"circuitTotalPhaseConductorCurrentL3": 0.008999999612569809,
"reasonForNoCurrent": 50,
"wiFiAPEnabled": false,
"lifetimeEnergy":<PHONE_NUMBER>222225,
"offlineMaxCircuitCurrentP1": 32,
"offlineMaxCircuitCurrentP2": 32,
"offlineMaxCircuitCurrentP3": 32,
"errorCode": 0,
"fatalErrorCode": 0,
"errors": [],
"eqAvailableCurrentP1": null,
"eqAvailableCurrentP2": null,
"eqAvailableCurrentP3": null,
"deratedCurrent": 0,
"deratingActive": false
}
(Request WB 2)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX/state
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response WB 2)
{
"smartCharging": false,
"cableLocked": true,
"chargerOpMode": 1,
"totalPower": 0,
"sessionEnergy": 0,
"energyPerHour": 0,
"wiFiRSSI": -44,
"cellRSSI": -86,
"localRSSI": -10,
"outputPhase": 0,
"dynamicCircuitCurrentP1": 40,
"dynamicCircuitCurrentP2": 40,
"dynamicCircuitCurrentP3": 40,
"latestPulse": "2022-02-13T06:02:48Z",
"chargerFirmware": 294,
"latestFirmware": 294,
"voltage":<PHONE_NUMBER>6347656,
"chargerRAT": 1,
"lockCablePermanently": true,
"inCurrentT2": 0,
"inCurrentT3": 0,
"inCurrentT4": 0,
"inCurrentT5": 0,
"outputCurrent": 0,
"isOnline": true,
"inVoltageT1T2": null,
"inVoltageT1T3": null,
"inVoltageT1T4": null,
"inVoltageT1T5": null,
"inVoltageT2T3":<PHONE_NUMBER>6347656,
"inVoltageT2T4":<PHONE_NUMBER>1992188,
"inVoltageT2T5":<PHONE_NUMBER>46875,
"inVoltageT3T4": null,
"inVoltageT3T5": null,
"inVoltageT4T5": null,
"ledMode": 19,
"cableRating": 32,
"dynamicChargerCurrent": 32,
"circuitTotalAllocatedPhaseConductorCurrentL1": null,
"circuitTotalAllocatedPhaseConductorCurrentL2": null,
"circuitTotalAllocatedPhaseConductorCurrentL3": null,
"circuitTotalPhaseConductorCurrentL1": null,
"circuitTotalPhaseConductorCurrentL2": null,
"circuitTotalPhaseConductorCurrentL3": null,
"reasonForNoCurrent": 50,
"wiFiAPEnabled": false,
"lifetimeEnergy": 10.8321,
"offlineMaxCircuitCurrentP1": 32,
"offlineMaxCircuitCurrentP2": 32,
"offlineMaxCircuitCurrentP3": 32,
"errorCode": 0,
"fatalErrorCode": 0,
"errors": [],
"eqAvailableCurrentP1": null,
"eqAvailableCurrentP2": null,
"eqAvailableCurrentP3": null,
"deratedCurrent": 0,
"deratingActive": false
}

I don't know exactly what you mean by this? Can you explain it again?
"Look at it backwards to start/stop I would need the charger ID follow the steps back to account login.
I could imagine a few additional functions here as a custom switch?
Lock charging cable or activate schedule. I have attached the api request for these functions.
"If you think there is anything else include it."

Reboot
(Request)
curl --request POST
--url https://api.easee.cloud/api/chargers/EHXXXXXX/commands/reboot
--header 'Authorization: bearer TOKEN'
(Response)
{
"device": "EHXXXXXX",
"commandId": 1,
"ticks": 637XXXXXXXXXXXX
}

Set Cable Lock State
(Request)
curl --request POST
--url https://api.easee.cloud/api/chargers/EHXXXXXX/commands/lock_state
--header 'Authorization: bearer TOKEN'
--header 'Content-Type: application/*+json'
--data '{"state":true}'
state boolean true or false
(Response)
{
"device": "EHXXXXXX",
"commandId": 30,
"ticks": 637XXXXXXXXXX
}

Set Basic Charge Plan
(Request)
curl --request POST
--url https://api.easee.cloud/api/chargers/EXXXXXX/basic_charge_plan
--header 'Authorization: bearer TOKEN'
--header 'Content-Type: application/*+json'
--data '
{
"chargingCurrentLimit": 32,
"repeat": true
}
'
NOTE: state boolean true or false
(Response)
Accepted

Change Charger Settings (ledStripBrightness)
(Request)
curl --request POST
--url https://api.easee.cloud/api/chargers/EHXXXXXX/settings
--header 'Authorization: bearer TOKEN'
--header 'Content-Type: application/*+json'
--data '
{
"ledStripBrightness": 50
}
'
NOTE: from 0 to 100
(Response)
[
{
"device": "EHXXXXXX",
"commandId": 40,
"ticks": 637XXXXXXXXXX
}
]

Latest Charging Session
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX/sessions/latest
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response)
{
"chargerId": "EHXXXXXX",
"sessionEnergy": 10.251959,
"sessionStart": "2022-02-02T13:55:55Z",
"sessionEnd": "2022-02-03T13:27:27Z",
"sessionId": 55,
"chargeDurationInSeconds": 10171,
"firstEnergyTransferPeriodStart": "2022-02-02T13:55:55Z",
"lastEnergyTransferPeriodEnd": "2022-02-02T22:48:38Z",
"pricePrKwhIncludingVat": 0.2900000000000004,
"pricePerKwhExcludingVat": 0.243697478991597,
"vatPercentage": 19,
"currencyId": "EUR",
"costIncludingVat": 2.9730681100000043,
"costExcludingVat": 2.498376563025214
}

Ongoing Charging Session
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers/EH6CXYKH/sessions/ongoing
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response)
{
"errorCode": 650,
"errorCodeName": "OngoingSessionNotFound",
"type": null,
"title": "Ongoing charge session not found",
"status": 404,
"detail": "[Empty in production]",
"instance": null,
"extensions": {}
}
NOTE: When I load my car the days I will submit the API response.

Refresh Token
(Request)
curl --request POST
--url https://api.easee.cloud/api/accounts/refresh_token
--header 'Accept: application/json'
--header 'Authorization: Authorization'
--header 'Content-Type: application/*+json'
--data '
{
"refreshToken": "TOKEN",
"accessToken": "TOKEN"
}
'
(Response)
{
"accessToken": "TOKEN",
"expiresIn": 86400,
"accessClaims": [
"User"
],
"tokenType": "Bearer",
"refreshToken": "TOKEN"
}

So I'm done for now. I hope you can do something with the API data 😅?

it looks like I have what I need to get started, should have something for you to test middle of next week.

could you get the output for 2 more
https://api.easee.cloud/api/chargers
https://api.easee.cloud/api/chargers/{id}
it might be redundant info but want to see if one is better than the other

question, are both chargers at the same address? if not could you get info for
https://api.easee.cloud/api/chargers/{id}/site
this could be useful if use with 2 homekit homes

https://api.easee.cloud/api/chargers/{id}
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX
--header 'Authorization: bearer TOKEN'
(Response)
{
"id": "EHXXXXXX",
"name": "Autoladegerät 1",
"color": 2,
"createdOn": "2021-04-12T05:12:30.864357",
"updatedOn": "2021-11-22T09:00:50.355545",
"backPlate": {
"id": "816XXXXXXXXXX",
"masterBackPlateId": "816XXXXXXXXX",
"name": null
},
"levelOfAccess": 1,
"productCode": 1
}

https://api.easee.cloud/api/chargers
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers
--header 'Authorization: bearer TOKEN'
(Response)
{
"status": 429,
"traceId": "00-1ac3e9xxxxxxxxxxxxxxxxxx-00"
}
NOTE: With this API request I do not get a successful connection.

question, are both chargers at the same address? if not could you get info for

Both chargers are at the same address in the same garage.
https://api.easee.cloud/api/chargers/{id}/site
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers/EXXXXXX/site
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN'
(Response)
{
"partnerId": 20,
"ownerPartnerId": null,
"useDynamicMaster": false,
"circuits": [
{
"chargers": [
{
"userRole": null,
"isTemporary": false,
"id": "EHXXXXXX",
"name": "Autoladegerät 2",
"color": 2,
"createdOn": "2021-04-12T05:11:13.123206",
"updatedOn": "2021-11-22T09:01:07.228822",
"backPlate": {
"id": "816XXXXXXXX",
"masterBackPlateId": "816XXXXXXXX",
"name": "Autoladegerät 2"
},
"levelOfAccess": 1,
"productCode": 1
},
{
"userRole": null,
"isTemporary": false,
"id": "EHXXXXXX",
"name": "Autoladegerät 1",
"color": 2,
"createdOn": "2021-04-12T05:12:30.864357",
"updatedOn": "2021-11-22T09:00:50.355545",
"backPlate": {
"id": "816XXXXXXXXX",
"masterBackPlateId": "816XXXXXXX",
"name": "Autoladegerät 1"
},
"levelOfAccess": 1,
"productCode": 1
}
],
"masterBackplate": {
"id": "816XXXXXXX",
"masterBackPlateId": "816XXXXXXX",
"name": "Autoladegerät 1"
},
"useDynamicMaster": false,
"parentCircuitId": null,
"id": 12XXXX,
"siteId": 13XXXX,
"circuitPanelId": 17,
"panelName": "17",
"ratedCurrent": 32
}
],
"equalizers": [],
"createdOn": "2021-08-13T15:58:03.576563",
"updatedOn": "2022-02-13T06:27:01.145479",
"contactInfo": {
"installerName": null,
"installerPhoneNumber": null,
"ownerName": "XXXXXXXX",
"ownerPhoneNumber": "+49",
"company": "Zuhause"
},
"costPerKWh": 0.29,
"costPerKwhExcludeVat": 0.2437,
"vat": 19,
"currencyId": "EUR",
"siteType": 1,
"ratedCurrent": 50,
"id": 13XXXXX,
"siteKey": "LXXXXXXX",
"name": "Garage",
"levelOfAccess": 3,
"address": {
"street": "XXXXX",
"buildingNumber": "",
"zip": "XXXXX",
"area": "XXXXX",
"country": {
"id": "DE",
"name": "Germany",
"phonePrefix": 0
},
"latitude": null,
"longitude": null,
"altitude": null
}
}

https://api.easee.cloud/api/chargers
(Request) curl --request GET --url https://api.easee.cloud/api/chargers --header 'Authorization: bearer TOKEN'
(Response) { "status": 429, "traceId": "00-1ac3e9xxxxxxxxxxxxxxxxxx-00" }
NOTE: With this API request I do not get a successful connection.

Try this one again, the error 429 is a rate limit.  I think the note was only 2 call per minute.

https://api.easee.cloud/api/chargers
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers
--header 'Authorization: bearer TOKEN'
(Response)
[
{
"id": "EHXXXXXX",
"name": "Autoladegerät 2",
"color": 2,
"createdOn": "2021-04-12T05:11:13.123206",
"updatedOn": "2021-11-22T09:01:07.228822",
"backPlate": null,
"levelOfAccess": 1,
"productCode": 1
},
{
"id": "EHXXXXXX",
"name": "Autoladegerät 1",
"color": 2,
"createdOn": "2021-04-12T05:12:30.864357",
"updatedOn": "2021-11-22T09:00:50.355545",
"backPlate": null,
"levelOfAccess": 1,
"productCode": 1
}
]

I briefly charged the car today and get these values at:
Ongoing Charging Session
(Request)
curl --request GET
--url https://api.easee.cloud/api/chargers/EHXXXXXX/sessions/ongoing
--header 'Accept: application/json'
--header 'Authorization: bearer TOKEN
'
(Response)
{
"chargerId": "EHXXXXXX",
"sessionEnergy": 1.124048113822937,
"sessionStart": "2022-02-14T15:41:49Z",
"sessionEnd": null,
"sessionId": 56,
"chargeDurationInSeconds": 2235,
"firstEnergyTransferPeriodStart": "2022-02-14T15:41:49Z",
"lastEnergyTransferPeriodEnd": null,
"pricePrKwhIncludingVat": 0.2900000000000004,
"pricePerKwhExcludingVat": 0.243697478991597,
"vatPercentage": 19,
"currencyId": "EUR",
"costIncludingVat": 0.32597395300865306,
"costExcludingVat": 0.2739276916039102
}

Beta version is now published, I am hoping it loads the devices, no clue if they will work or not at this point. Can you install it as a child bridge, enable debug logging in Homebridge and then truncate the log. then restart this plugin. send me back the output. you will have to clear out the token info and any personal info you ( I can suppress this in the future once we know this initial works) you do not have to alter any of the IDs, they are just reference data and pose no risk and they will be helpful to have going forward.
If it loads check the accessory properties and see if they look ok.

Search easee version is 0.0.1-beta.0

Super thing that you are so fast!!!
I try to keep your speed now so we can clean out the bugs .-)
So I have now installed the plugin in a separate Homebridge instance. When starting the plugin I get the following error as a response.

Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.154Z ciao:NetworkManager Initial networks [eth0, lo] ignoring []
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.166Z HAP-NodeJS:EventedHTTPServer Server listening on [::]:51826
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.167Z HAP-NodeJS:Advertiser Starting to advertise 'homebridge-easee 5971' using ciao backend!
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.168Z ciao:Responder [homebridge-easee 5971._hap._tcp.local.] Going to advertise service...
Feb 15 06:32:15 SHS-1 homebridge[17238]: Homebridge v1.4.0 (HAP v0.10.0) (homebridge-easee) is running on port 51826.
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.175Z ciao:CiaoService [homebridge-easee 5971] Rebuilding service records...
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.180Z ciao:Prober Starting to probe for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.367Z ciao:Prober Sending prober query number 1 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 06:32:15 SHS-1 homebridge[17238]: [Easee] Error getting user ID Error: Request failed with status code 403
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at createError (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/core/createError.js:16:15)
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at settle (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/core/settle.js:17:12)
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at IncomingMessage.handleStreamEnd (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/adapters/http.js:322:11)
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at IncomingMessage.emit (node:events:532:35)
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at endReadableNT (node:internal/streams/readable:1346:12)
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
Feb 15 06:32:15 SHS-1 homebridge[17238]:   config: [Object],
Feb 15 06:32:15 SHS-1 homebridge[17238]:   request: [ClientRequest],
Feb 15 06:32:15 SHS-1 homebridge[17238]:   response: [Object],
Feb 15 06:32:15 SHS-1 homebridge[17238]:   isAxiosError: true,
Feb 15 06:32:15 SHS-1 homebridge[17238]:   toJSON: [Function: toJSON]
Feb 15 06:32:15 SHS-1 homebridge[17238]: }
Feb 15 06:32:15 SHS-1 homebridge[17238]: [Easee] Error retrieving user ID TypeError: Cannot read properties of undefined (reading 'data')
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at easeeAPI.profile (/usr/local/lib/node_modules/homebridge-easee/easeeapi.js:69:63)
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Feb 15 06:32:15 SHS-1 homebridge[17238]: [Easee] Failed to get info for build TypeError: Cannot read properties of undefined (reading 'data')
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at /usr/local/lib/node_modules/homebridge-easee/easeeplatform.js:50:55
Feb 15 06:32:15 SHS-1 homebridge[17238]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.647Z ciao:Prober Sending prober query number 2 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 06:32:15 SHS-1 homebridge[17238]: 2022-02-15T05:32:15.912Z ciao:Prober Sending prober query number 3 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 06:32:16 SHS-1 homebridge[17238]: 2022-02-15T05:32:16.174Z ciao:Prober Probing for 'homebridge-easee 5971._hap._tcp.local.' finished successfully
Feb 15 06:32:16 SHS-1 homebridge[17238]: 2022-02-15T05:32:16.177Z ciao:Announcer [homebridge-easee 5971._hap._tcp.local.] Sending announcement for service
Feb 15 06:32:16 SHS-1 homebridge[17238]: 2022-02-15T05:32:16.177Z ciao:CiaoService [homebridge-easee 5971] Rebuilding service records...
Feb 15 06:32:16 SHS-1 homebridge[17238]: 2022-02-15T05:32:16.180Z ciao:Announcer [homebridge-easee 5971._hap._tcp.local.] Sending announcement number 1 number 1
Feb 15 06:32:17 SHS-1 homebridge[17238]: 2022-02-15T05:32:17.200Z ciao:Announcer [homebridge-easee 5971._hap._tcp.local.] Sending announcement number 2
Feb 15 06:32:19 SHS-1 homebridge[17238]: 2022-02-15T05:32:19.188Z ciao:Responder Received truncated query from {"address":"<IP_ADDRESS>","port":XXXX,"interface":"eth0"} waiting for more to come!
Feb 15 06:32:19 SHS-1 homebridge[17238]: 2022-02-15T05:32:19.221Z ciao:Responder [<IP_ADDRESS>:XXXX:eth0] Last part of the truncated query arrived. Received 2 packets taking a total of 32 ms
Feb 15 06:32:19 SHS-1 homebridge[17238]: 2022-02-15T05:32:19.224Z ciao:Announcer [homebridge-easee 5971._hap._tcp.local.] Sending announcement number 3
Feb 15 06:32:20 SHS-1 homebridge[17238]: 2022-02-15T05:32:20.191Z ciao:Responder Received truncated query from {"address":"<IP_ADDRESS>","port":XXXX,"interface":"eth0"} waiting for more to come!
Feb 15 06:32:20 SHS-1 homebridge[17238]: 2022-02-15T05:32:20.193Z ciao:Responder [<IP_ADDRESS>:XXXX:eth0] Last part of the truncated query arrived. Received 2 packets taking a total of 2 ms
Feb 15 06:32:21 SHS-1 homebridge[17238]: 2022-02-15T05:32:21.057Z ciao:Responder Received truncated query from {"address":"<IP_ADDRESS>","port":XXXX,"interface":"eth0"} waiting for more to come!
Feb 15 06:32:21 SHS-1 homebridge[17238]: 2022-02-15T05:32:21.059Z ciao:Responder [<IP_ADDRESS>:XXXX:eth0] Last part of the truncated query arrived. Received 2 packets taking a total of 2 ms
Feb 15 06:32:21 SHS-1 homebridge[17238]: 2022-02-15T05:32:21.561Z ciao:Responder Sending response via multicast on network eth0 (took 2 ms): [A,AAAA] answers and [NSEC] additionals with size 130B
Feb 15 06:32:23 SHS-1 homebridge[17238]: 2022-02-15T05:32:23.200Z ciao:Responder Received truncated query from {"address":"<IP_ADDRESS>","port":XXXX,"interface":"eth0"} waiting for more to come!
Feb 15 06:32:23 SHS-1 homebridge[17238]: 2022-02-15T05:32:23.202Z ciao:Responder [<IP_ADDRESS>:XXXX:eth0] Last part of the truncated query arrived. Received 2 packets taking a total of 0 ms
Feb 15 06:32:24 SHS-1 homebridge[17238]: 2022-02-15T05:32:24.233Z ciao:Responder Received truncated query from {"address":"<IP_ADDRESS>","port":XXXX,"interface":"eth0"} waiting for more to come!
Feb 15 06:32:24 SHS-1 homebridge[17238]: 2022-02-15T05:32:24.254Z ciao:Responder [<IP_ADDRESS>:XXXX:eth0] Last part of the truncated query arrived. Received 2 packets taking a total of 21 ms
Feb 15 06:32:28 SHS-1 homebridge[17238]: 2022-02-15T05:32:28.242Z ciao:Responder Received truncated query from {"address":"<IP_ADDRESS>","port":XXXX,"interface":"eth0"} waiting for more to come!
Feb 15 06:32:28 SHS-1 homebridge[17238]: 2022-02-15T05:32:28.275Z ciao:Responder [<IP_ADDRESS>:XXXX:eth0] Last part of the truncated query arrived. Received 2 packets taking a total of 33 ms

Note: To log in to your Easee account you can use your phone number or email address. The phone number must be with country code. Example: +49151xxxxxxxxxx

Here is my config.json:
{
"bridge": {
"name": "homebridge-easee",
"username": "CC:22:3D:E3:CE:XX",
"port": 518XX,
"pin": "XXXXXX",
"manufacturer": "XXXXXXX",
"model": "XXX",
"advertiser": "ciao",
"bind": ["eth0"]
},
"plugins": [
"homebridge-easee"
],
"accessories": [
],
"platforms": [
{
"platform": "easee",
"name": "Easee",
"username": "+49XXXXXXXXXX",
"password": "XXXXXXXXXXX"
}
]
}

Typo in the url, try beta.1

made an update to the config screen, looking for a thumbs up or feedback

I am not offered an update with another version via npm. I installed the plugin again and it pulled the new files.
Am not sure if this is sufficient? The error is the same -.-
Feb 15 16:45:43 SHS-1 homebridge[12376]: 2022-02-15T15:45:43.863Z ciao:NetworkManager Initial networks [eth0, lo] ignoring []
Feb 15 16:45:43 SHS-1 homebridge[12376]: 2022-02-15T15:45:43.966Z HAP-NodeJS:EventedHTTPServer Server listening on [::]:51826
Feb 15 16:45:43 SHS-1 homebridge[12376]: 2022-02-15T15:45:43.968Z HAP-NodeJS:Advertiser Starting to advertise 'homebridge-easee 5971' using ciao backend!
Feb 15 16:45:43 SHS-1 homebridge[12376]: 2022-02-15T15:45:43.969Z ciao:Responder [homebridge-easee 5971._hap._tcp.local.] Going to advertise service...
Feb 15 16:45:43 SHS-1 homebridge[12376]: Homebridge v1.4.0 (HAP v0.10.0) (homebridge-easee) is running on port 518XX.
Feb 15 16:45:43 SHS-1 homebridge[12376]: 2022-02-15T15:45:43.988Z ciao:CiaoService [homebridge-easee 5971] Rebuilding service records...
Feb 15 16:45:44 SHS-1 homebridge[12376]: 2022-02-15T15:45:44.013Z ciao:Prober Starting to probe for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 16:45:44 SHS-1 homebridge[12376]: 2022-02-15T15:45:44.202Z ciao:Prober Sending prober query number 1 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 16:45:44 SHS-1 homebridge[12376]: [Easee] Error getting user ID Error: Request failed with status code 403
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at createError (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/core/createError.js:16:15)
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at settle (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/core/settle.js:17:12)
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at IncomingMessage.handleStreamEnd (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/adapters/http.js:322:11)
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at IncomingMessage.emit (node:events:532:35)
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at endReadableNT (node:internal/streams/readable:1346:12)
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
Feb 15 16:45:44 SHS-1 homebridge[12376]:   config: [Object],
Feb 15 16:45:44 SHS-1 homebridge[12376]:   request: [ClientRequest],
Feb 15 16:45:44 SHS-1 homebridge[12376]:   response: [Object],
Feb 15 16:45:44 SHS-1 homebridge[12376]:   isAxiosError: true,
Feb 15 16:45:44 SHS-1 homebridge[12376]:   toJSON: [Function: toJSON]
Feb 15 16:45:44 SHS-1 homebridge[12376]: }
Feb 15 16:45:44 SHS-1 homebridge[12376]: [Easee] Error retrieving user ID TypeError: Cannot read properties of undefined (reading 'data')
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at easeeAPI.profile (/usr/local/lib/node_modules/homebridge-easee/easeeapi.js:69:63)
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Feb 15 16:45:44 SHS-1 homebridge[12376]: [Easee] Failed to get info for build TypeError: Cannot read properties of undefined (reading 'data')
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at /usr/local/lib/node_modules/homebridge-easee/easeeplatform.js:50:55
Feb 15 16:45:44 SHS-1 homebridge[12376]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Feb 15 16:45:44 SHS-1 homebridge[12376]: 2022-02-15T15:45:44.520Z ciao:Prober Sending prober query number 2 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 16:45:44 SHS-1 homebridge[12376]: 2022-02-15T15:45:44.791Z ciao:Prober Sending prober query number 3 for 'homebridge-easee 5971._hap._tcp.local.'...

├──<EMAIL_ADDRESS>nastras@SHS-1:~ $ sudo npm install -g<EMAIL_ADDRESS>--unsafe-perm
npm ERR! code ETARGET
npm ERR! notarget No matching version found for<EMAIL_ADDRESS>npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-02-15T15_49_43_534Z-debug-0.log
nastras@SHS-1:~ $ sudo npm install -g<EMAIL_ADDRESS>npm ERR! code ETARGET
npm ERR! notarget No matching version found for<EMAIL_ADDRESS>npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-02-15T15_49_52_645Z-debug-0.log

did you try install previous version from the plugin?
the wrench icon you should see lated beta there

Now I get this message:
Feb 15 17:49:19 SHS-1 homebridge[2626]: 2022-02-15T16:49:19.217Z ciao:Prober Starting to probe for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 17:49:19 SHS-1 homebridge[2626]: 2022-02-15T16:49:19.301Z ciao:Prober Sending prober query number 1 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 17:49:19 SHS-1 homebridge[2626]: [Easee] Error getting user profile Error: Request failed with status code 401
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at createError (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/core/createError.js:16:15)
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at settle (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/core/settle.js:17:12)
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at IncomingMessage.handleStreamEnd (/usr/local/lib/node_modules/homebridge-easee/node_modules/axios/lib/adapters/http.js:322:11)
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at IncomingMessage.emit (node:events:532:35)
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at endReadableNT (node:internal/streams/readable:1346:12)
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
Feb 15 17:49:19 SHS-1 homebridge[2626]:   config: [Object],
Feb 15 17:49:19 SHS-1 homebridge[2626]:   request: [ClientRequest],
Feb 15 17:49:19 SHS-1 homebridge[2626]:   response: [Object],
Feb 15 17:49:19 SHS-1 homebridge[2626]:   isAxiosError: true,
Feb 15 17:49:19 SHS-1 homebridge[2626]:   toJSON: [Function: toJSON]
Feb 15 17:49:19 SHS-1 homebridge[2626]: }
Feb 15 17:49:19 SHS-1 homebridge[2626]: [Easee] Error retrieving user profile TypeError: Cannot read properties of undefined (reading 'data')
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at easeeAPI.profile (/usr/local/lib/node_modules/homebridge-easee/easeeapi.js:69:63)
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Feb 15 17:49:19 SHS-1 homebridge[2626]: [Easee] Failed to get info for build TypeError: Cannot read properties of undefined (reading 'data')
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at /usr/local/lib/node_modules/homebridge-easee/easeeplatform.js:54:55
Feb 15 17:49:19 SHS-1 homebridge[2626]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Feb 15 17:49:19 SHS-1 homebridge[2626]: 2022-02-15T16:49:19.593Z ciao:Prober Sending prober query number 2 for 'homebridge-easee 5971._hap._tcp.local.'...
Feb 15 17:49:19 SHS-1 homebridge[2626]: 2022-02-15T16:49:19.863Z ciao:Prober Sending prober query number 3 for 'homebridge-easee 5971._hap._tcp.local.'...

try beta 4
and GUI I was referring to the Homebridge GUI

and GUI I was referring to the Homebridge GUI
I also understood that to be the case. But I do not use the GUI plugin for Homebridge 😅

got it try beta.5
there first 2 fails were typos this one I was curious about the syntax of the token in the API so I guessed. no going to follow the doc. If this works I will need to update all the APIs

├──<EMAIL_ADDRESS>

are you seeing things response successfully? what happened before these errors?

Tested again. So with the error where the log is flooded it looks pretty good at the beginning after the restart. Unfortunately, then come these two errors consistently.

ah, since your not using the Homebridge GUI and the readme was not updated
add this line to your config "rate": 60
rate is the polling rate in minutes to refresh, with out that line it exceeded the API call limit one a min.
In the GUI it is restricted to 5-1440 minutes with a default of 60.
may look like
{
"platform": "easee",
"name": "Easee",
"rate":60,
"username": "+49XXXXXXXXXX",
"password": "XXXXXXXXXXX"
}

It seems like it added the 2 devices

Now it runs 👍💪👌
At the first restart still came this message. The second restart no longer.

I have now added it to Homekit.
What commands did you put on unsecured and secured?
Start and stop?
I currently can't see any change in the Easee app since I don't have my car on the charger 😅

published version 1.0.0, remove all the beta version from earlier. If you find any new issues maybe open a new issue. thanks this was interesting coding something blind.

For that it has been blind it was a super thing 👍👌💪
Thank you very much 😘
Is the development finished for you for now or do you still feel like implementing additional functions as a custom characteristic? I would be there 😁
And again the question which commands you have put on the lock? I assume start and stop?
Will test it tomorrow with car 😉

I assume there will be a little more work.
I was not really sure what we were going for here so I replicated what I did for the Wallbox so basically it lock/unlocks so if it is outside it can not be used by anyone else. This was my use case.
the switch will set https://api.easee.cloud/api/chargers/{id}/settings authorizationRequired true/false
See API change charger settings.
If things work it would be very easy to add start/stop as a separate switch. If I read it right start has a pre req of authorizationRequired to be true.
I'll look fro you feedback after to try it.

Hello
I have now tested the plugin in Homekit. So far without Car. With Car I will do later.
Positv: The locking and unlocking works 👍
What I noticed:

when locking the lock in Homekit the status display does not change.

in the Journalctl you can not see which device was controlled.

Is there any way to improve this?

Try<EMAIL_ADDRESS>This will improve the logging you asked for.
It may address your other issue around locking, not sure. there was a value I have static when I was testing. If not I may need some help, I do not recognize the app you are using.
I did add some extra characteristic info which will show in the IOS HomeKit for the battery level % and charging true/false and outlet(Cable)connected true/false. They will not reflect actual state. I need your help to point me to the correct API and value that represent the desired state.
Let me know what you think.

Update successfully made to<EMAIL_ADDRESS>The behavior of the status of the lock has not changed. The status remains locked even when I open the lock.

The idea with the additional characteristic I find great 👍
Tell me what I should do to read the correct API points so that the values are up to date?

I just wanted to test in the garage how the behavior with connected car is because of the start and stop function.
Unfortunately, the battery of the car is full and the charging process does not start. 😆
I will repeat the test as soon as I have driven.

If you can log around in the APIs when your charger is in various stated. look for things that would apply to the SOC or battery level, or other states. if you find things of interest let me know the API and the field. I will look at the code around the lock state. my testing worked but I have to fake out all the API response.
I would still like to know what app these screen shots are from.

I will try it out and look around in the API a bit. But unfortunately I won't be able to do it until the weekend.
The apps where the screenshots are from:
Elgato Eve
https://apps.apple.com/de/app/eve-für-homekit/id917695792
HomeDash
https://apps.apple.com/de/app/homedash/id1003033186
I think in every homekit third party app the value is similarly misrepresented.

Hi @valiquette , sorry that I have not managed to answer faster.
I am now just loading the car and look around a bit in the API.
 Unfortunately, I can't find any other useful data.
I have made a screenshot from the Easee app. There you can see what Easee itself displays for data.
I think you won't be able to see the exact battery level of the car because Easee itself doesn't show that. Maybe you can set the battery display so that it shows when the charging process is finished?
Whether the socket is used can perhaps be retrieved via the power phases?
What additional features would still be cool:
A Slider for: LED Light
A Switch for: Reboot
wiFiRSSI
cellRSSI
Various data on the current charging process.

I have now tested the start behavior for charging on via the plugin.
If I set the switch to on then the Easee wants an authorization via RFID.

If I set the switch to off then the Ease Wallbox disables the authorization and goes into sleep mode.

I think that the charging process should be started with the https://api.easee.cloud/api/chargers/{id}/commands/start_charging function without authorization.
The authorization should be able to switch on and off independently via an additional switch.
This is also the case in the Easee app.

I assume you can not start if there is no car connected?
Looking at the API doc start/stop are connected to authorization, make me think authorization is the top level. I can tie both together so unlock and start/lock and stop. pause/resume seem like the could be a switch but they may have to be started first? There is also the "toggle". I think I can provide a build with these various switches so you can try them.
LED thing is a good idea I which I could do that with with the Wall box. Reboot I will stay away from, at least for now.

Right. I can't start without a car.
I still have the car on the charging cable and extra not fully charged to be able to test further. So if you have an update gladly her with it 😉.

Try homebridge-easee 1.0.2-beta.0
This version will have switches to trigger start stop resume pause and toggle. I am not capturing the current state on load and they will default to off or stop, pause and toggle off. You can try these and see how they respond before I figure out what is next. you also have a a LED light.

Cool 👍
I'm going to try it out right now. Give me 15 minutes 😉

Is there anything that needs to be adjusted in config.json?

Try homebridge-easee 1.0.2-beta.1 instead, I miss your previous note on the LED range
nothing in the config yet. I will deal with that later

When I want to control the LED lighting, this error occurs:

Ok I'll just install the update.
Which LED hint exactly? The query of the LED API?

When activating the start/stop switch, this error occurs:

resume/pause and toggle switch the same error as with start/stop

Try homebridge-easee 1.0.2-beta.2 found the 400 error

Update is installed 😉
At the switch Toggle comes this message:

LED lighting can be controlled via the slider.
Here I noticed two things. If I set the slider to 0% in homekit, the value in the Easee app remains at 10%. The 10% has the same function as 0%.
Via the Easee app you can only choose between 0% 25% 50% 100%. Via the API it seems to work in single percent steps.

Maybe you can set the slider in homekit so that it also makes only 25% steps as it is in the Easee app?
The power switch above the slider has no function. Would it be possible to set this so that On 100% and Off 0%?

The resume/pause switch works.
I was able to continue the charging process with it.
With Start/Stop it did not work. Since the current charging process was only paused during the last test, I assume that I have to disconnect the car from the cable so that start/stop works.
I will test this right away and get back to you.

I am now at the car. So the control of the Easee is pretty confusing when you sum it up.
I'm not sure yet what the best variant but I'll try to describe it.
NFC key autentification disabled without schedule:
Cable is connected to the car Charging process starts immediately.
With the Resume/Pause switch, the charging process can be interrupted or continued.
NFC key authentication enabled without schedule:
NFC key request can be operated via Start and Stop. Charging process starts after manual authentication with key.
It would be interesting what the toggle switch does.

I have now tested again what the lock switch in Homekit has for a function that protects the Easee from foreign access.
When the switch is confirmed with the car connected, the Easee wants an authentication via the NFC reader. The charging process does not start after the authentication.
This can then be started via resume/pause.
I hope this is not too confusing and you can follow me? I'm just trying to explain it in detail so you can understand it.

I have come to the conclusion that only the lock switch and the pause/resume switch are needed together to control the easee sensibly.
Example:
NFC lock is activated:

Car is plugged into the cable.
NFC autentification is requested.
Charging process starts after pressing the Resume/Pause switch or according to the schedule.
Charging process can be interrupted with the Resume/Pause switch.

As mentioned, the toggle switch would be interesting.

When I read through the description of the toggle switch, this switch should actually be the best. This would eliminate the need for start/stop and resume/pause.

Try homebridge-easee 1.0.2-beta.3 fixed the 400 error with Toggle. I agree from my reading this may be the only thing needed to work in all cases.
I have the LED in steps of 10, I have not coded anything for on/off yet, I think this may be tricky, but I will.
Let me know on the Toggle, I may even be able to change the names to match like above.
I need to harden up some error handling to avoid those resets. I need to add these as options in the config and readme.

I just wanted to install the update but get an error?

try again

Now the update has worked. I have also already tested.
Unfortunately, the toggle switch only works when NFC authentication is disabled. I would have expected this one to always work.
I do not understand why Easee programmed such a garbage.
Actually, the resume/pause switch for with NFC authentication and without works best. What do you mean?

Thanks for the input, I will go back and re-read the Doc and API I was expecting Toggle to work in all cases. But did expect it needed to be unlocked

Let me know when there is something to test again.
I want to say thanks again for your effort. Really great 😘

I would like to see what is happing on the Easee end.
Could you lock/unlock the plugin in and capture the API response for both states from get configuration https://api.easee.cloud/api/chargers/{id}/config and attach the outputs I am really interested in "authorizationRequired" but the whole file will help.
Maybe the same for the various switch states with on going sessions
https://api.easee.cloud/api/chargers/{id}/sessions/ongoing or state
https://api.easee.cloud/api/chargers/{id}/state

It seems like this should work, but maybe I have missed somthing.
Charging
Suggest Edits
There are two ways to control charging of a charger.
Start/Stop
Start Charging and Stop Charging will authorize and deauthorize the charger. If the charger is set to use authorization before it can start charging, you need to use start or an RFID key before the car can charge.
Pause/Resume
Pause Charging and Resume Charging will keep the current charging session authorized but will stop and start charging.
Toggle
Use Toggle to toggle the charging state. The charger access level decides what charging type to use.
OPEN Show "Pause/Resume" icon buttons and use Pause/Resume.
KEY ONLY: Show "Start/Stop" text buttons and use Start/Stop.
Smart Charging
Enable smart charging with Enable Smart Charging.
Disable smart charging with Set Charger Settings by sending SmartCharging:false in the body.

Not sure what observation might add, probably not much
https://api.easee.cloud/api/chargers/{id}/observations/{observationId}/{from}/{to}

the observation ID would be 109
/// Charger operation mode according to charger mode table [event] [Integer]
	public const int ChargerOpMode = 109;

Researched a bit and state is probably the key one
looking  chargerOpMode changing.
0: "OFFLINE",
1: "DISCONNECTED",
2: "AWAITING_START",
3: "CHARGING",
4: "COMPLETED",
5: "ERROR",
6: "READY_TO_CHARGE",

same output
reasonForNoCurrent
could be more
0: "No reason, charging or ready to charge",
1: "Charger paused",
2: "Charger paused",
3: "Charger paused",
4: "Charger paused",
5: "Charger paused",
6: "Charger paused",
9: "Error no current",
50: "Secondary unit not requesting current or no car connected",
51: "Charger paused",
52: "Charger paused",
53: "Charger disabled",
54: "Waiting for schedule/auth",
55: "Pending auth",

any thoughts on ditching authorizationRequired and replacing with enabled?

published homebridge-easee-1.0.2-beta.4
I made some changes Lock will not just enable/disable. I improved the logging and error handling.
There is now a configuration for exposing the extra switches.
config should look something like. NOTE I change the name or rate to refreshRate
"name": "Easee",
"username": "user",
"password": "pass",
"refreshRate": 5,
"showStartStop": false,
"showPauseResume": true,
"showToggle": false,
"showLight": true,
"_bridge": {
"username": "0E:46:88:49:71:DD",
"port": 39306
},
"platform": "easee"

Good morning @valiquette,
you were doing a lot again 👌👍💪
Say would it be possible to communicate with you through a secure channel. Email or Whats App?
I would like to give you your own temporary access to my user account.
I think that we have now reached a point where the blind coding for you costs considerable time.
If you have direct access it should be much easier or what do you think?

That would speed things up a bunch What's app works US<PHONE_NUMBER>9

I wrote you a message on Whats App. I hope this has arrived?
Are you the man with the snow on his face 😁?

Dev complete


(Will PR) Use ExoPlayer for Android?

It seems that many people prefer ExoPlayer than AudioPlayer (eg. https://www.reddit.com/r/androiddev/comments/95l3hc, and searching demo apps in Github for Android + audio). ExoPlayer also seems to have a lot of pros (see https://developer.android.com/guide/topics/media/exoplayer/pros-and-cons), and is an official android thing.
Therefore, shall we switch to ExoPlayer?

I already started a new branch:
https://github.com/bluefireteam/audioplayers
But as some features are not available, I thought about using a completely new module like audioplayers_android_exoplayer, and replace it some time after testing in audioplayers.

@Gustl22 Oh that's great! Looking forward to that!

@Gustl22 So... Does it work now, or is there any problems?

@fzyzcjy it's not really functional (only experimental), and I also propose a new module, which does not mess around with the "old" android code. So it may be better to restart from the beginning.

@Gustl22 I see :)


The value passed to --snapshot is not validated

Affected Packages

Problem

Make a snapshot release with a custom snapshot tag that is not a valid prerelease tag. For instance: changesets version --snapshot a_b
The versions will be update to 0.0.0-a_b-<timestamp>. However, publishing will fail because versions cannot contain a _ char.
Proposed solution

There are two possible solutions:

fail with a meaningfull error when --shapshot gets an invalida prerelease tag (semver.valid may be used for validation)
try to make the passed value valid. Convert invlid chars to -, make all characters lower case, etc.

I would be in favor of the first proposed solution. Do you have any good references for which characters are allowed and which are not?

If I understand correctly from the source of semver:

it may contain upper and lower case Latin letters
numbers
dashes
a single dot

As I mentioned, semver.valid may be used to validate the version.


fix some compile problem in cygwin and msys, add ci inwindows

add ci in windows(cygwin)
fix macro problem in test.c when using msys
fix typedef problem when using latest cygwin
fix lost disconnect callback when redis server is down

PS: I just write windows ci configure file (appveyor.yml ) and test it in my account.It's better to add status image to README.md by @antirez , just like travis ci. So I did nothing to README.md

issue #355 is just a part of this request

@xiaotaoz I have already create this pull request. but it's decide to @badboy when to merge it or not.
PS: hiredis v0.13.3 fix  the lost of disconnect callback by another way.

@xiaotaoz you are right I will remove it soon

Pulling it in in #414


Support exact and prefix-based per-topic-name KEK selection templates

Type of change

Bugfix
Enhancement / new feature

Description
In addition to the KMS flooding mitigation in #1032, this PR changes how we configure topic name-based KEK selection.
Rather than using a single template like template: topic-${topicName} this allows to specify a list of "template matchers" which either match exactly on the topic name, or on a prefix of the topic name, like this:
    templates:
    - topicName: foo
      template: alias-for-${topicName}
    - topicNamePrefix: bar-
      template: alias-bar

This, in turn, means we can configure templates for some topics (e.g. foo and bar-whatever), but not others (baz), which allows us to stop treating UnknownAliasException the same as "unencrypted", and avoid the need to ask the KMS to resolve aliases for topics which don't need to be encrypted.
There are a few things still to do in this PR:

[ ] Better validation of the configuration (e.g. error on duplicate topicNamePrefix)
[x] Use an appropriate Kafka error code when a KMS throws UnknownAliasException
[x] A test for the above. The unknown alias should be logged, but not propagated in the krpc error message
[ ] Fix example configs (e.g in the docs)

The unknown alias should be logged, but not propagated in the krpc error message

This will require a change to the TopicNameBasedKekSelector: We will need to support per-topic failure. This is a good thing as it allows non-encrypted topics to be produced-to even when the KMS is unavailable, which is related problem.

FYI this is an alternative I've got on the back-burner #991 which does something similar but outside the template, the equivalent config would look like:
topics:
-  includedTopicNames: ["foo"]
    selector: TemplateKekSelector
    selectorConfig:
        template: "alias-for-${topicName}"
-  includedTopicPrefixes: ["bar-"]
    selector: TemplateKekSelector
    selectorConfig:
        template: "alias-bar"

This will require a change to the TopicNameBasedKekSelector: We will need to support per-topic failure. This is a good thing as it allows non-encrypted topics to be produced-to even when the KMS is unavailable, which is related problem.

I've now made this change, which means this PR should fix #970 as well as #811.

Please could I get some review of this one @k-wall , the config interface needs a bit more work, but the rest should be ok for a first pass.

Just to jot down an idea from the call to help Filters escape from redefining these boilerplate topic targeting roles:
We could introduce a concept at the Kroxylicious level of Topic Tags. A topic name or prefix could be associated with a set of Topic Tags. Initially this association would be in the kroxylicious configuration YAML. Then Filters would be given access to the Tags for a topic and could have their configuration written in terms of Tags.
So a psuedo config might look something like:
topicTags:
  impl: Inline
  config:
    tags: [{ prefix: "order_", tag: "schema-required" }]
filters:
  - name: ValidationFilter
    config:
      rules:
        - targetsTags: ["schema-required"]
          validateAllIsWell: true

And it could be made available to Filters via the FilterContext with a method like:
FilterContext::isTopicTaggedWith(String topic, Set<String> tags);

Not a deal breaker at all, how would topicTags work with filters that mapped/changed the topic names?    The MultiTenantFilter is an example.  Depending on how your filters were composed, it might be necessary for the user to express the tags twice, for before and after the MT filter.  (topic foo vs tenantA-foo).

Great question @k-wall ! The multi tenancy functionality is based around the idea of giving each "tenant" their own namespace for named entities in a shared cluster. We do this by applying a bijective function to the names. The simplest bijection, which works nicely with Kafka's support for prefixed ACLs is to add/remove a fixed per-tenant prefix to the names.
How tags would work depends on who is wanting to tag the topics and how those tags are to be used/consumed.
As Rob has outlined it, a tag space would be global to a proxy instance. I think they are really scoped to a cluster (physical or logical).
So if a tenant is to have the ability to tag topics they have the appearance of their own tag space.
With a multi-tenant tag db that could be achieved by using the same bijection on the topic names and the tags. Plus a reserved tenant id for the backing cluster.
So a user thinks they applying the tag foo to the topic bar, but they actually apply prefix-foo to prefix-bar in a shared tag space. Queries also pass through the bijection.
Filters that do tag selection would accept an interface that would apply the bijection transparently.

Considering to do the topic tag. Closing it now.


Feature: Parent and ignore files

Is there an existing issue for this?

[X] I have searched the existing issues

Is your feature request related to a problem? Please describe
So i have an idea but i'm not sure if it's something that is generally desired.
I am currently using ngx-translate and considering a migration to transloco.
However i am missing one feature that is very important to me.
I have my own angular framework with modules and all that neat stuff i reuse in multiple projects.
In that framework i have a default translation file for common resources. (e.g. 'labels.save' -> Save button).
In my project i use a custom translation loader that merges those default files with the loaded language.
CustomTranslationLoader Gist
I made a fork of ngx-translate-extract that takes a path for those default files and an ignore file.
Extract Task
Is that something worth adding to the main repo?
Describe the solution you'd like
No response
Describe alternatives you've considered
No response
Describe alternatives you've considered
Currently when i would use for example 'labels.save' as a key anywhere in my application, the extraction would add this key to my language file in the application.
When i now merge the application language file with the default language file in the translation loader, it would override my default value.

Describe alternatives you've considered
Option to provide a parent and ignore file to remove found keys before writing them to the translation file as seen here
Additional context
No response
I would like to make a pull request for this feature
No

@stewieoO If I understand correctly you are looking for some sort of "ignore key pattern", did I understand correctly?

@shaharkazaz exactly.
In my example it's keys located in other json files.

@stewieoO You are welcome to implement this feature 🙂  I can't say when this might be implemented.

@shaharkazaz Right, that's all i wanted to know really.
If you guys had any big reasons for not adding this. Will do a PR then :)

@stewieoO Just to make sure we understand each other, I'm talking about providing a regex/string pattern in the manager's config that when matched the key is ignored by the extractor/detective.
You can give more details about it if you have anything else in mind

@shaharkazaz oh, no. I'm talking about providing paths to files that are structured just like the translation files.
ignore.json
{
  "labels": {
     "name" : "anything",
     "profile" : null
   }
}

Which would result in keys with the same path (labels.name, labels.profile) would not be extracted and written to the corresponding translation files.

What's the advantage of providing a file over a regex? seems less flexible and more repetitive.
What do you mean by:

...would not be extracted and written to the corresponding translation files.

@shaharkazaz As i explained in the initial comment, i want to merge translations when the app is loading them
CustomTranslationLoader Gist
For common used translations across multiple apps. So i would want to use those files for both merging them and using them to ignore keys during extraction.

...would not be extracted and written to the corresponding translation files.
The extractor would first look into the specified ignore files (ignore.json in this example) and find the keys labels.name and labels.profile.
Then when it finds those keys somewhere in the app it would not add those keys to the result and they would not be in the translation file.

I can prepare a full example repo (with ngx-translate currently ofc) to demonstrate my usecase if desired.

@stewieoO can you make a small reproduction of your use case with Transloco?

@shaharkazaz i'll do that yeah.

https://github.com/stewieoO/transloco-whitelist-example
(Unfortunately i couldn't get the assets mapping to work in stackblitz)
The node_modules_assets folder is mapped in the angular.json to the assets folder.
In a real world application this would be something from a library like
{
  "glob": "**/*",
  "input": "./node_modules/@stewie/framework/assets",
  "output": "./assets/"
}

This default-en.json is what i would want to use to ignore keys with the extractor.

@stewieoO It's been some time, I hope you managed to resolve your issues already.
I don't fully understand you issue, but maybe you could write custom transloco transpiler that would first try to get translation from lang file and then fallback to the defaults file. That way you could keep files separated without the need for changes in extractor.
@shaharkazaz
I got to this issue while searching solution to my recent problem:
I want to allow my translations team to add keys that would then be picked up by transloco and rendered as a list. So me, as the app dev, wouldn't have to make changes to html files. I did that already but now I got huge entries in 'extra keys'.
So while looking for a solution I found your comment here and it sounds like something that would work for me. I'd be happy to make PR for it, but no sooner than in 2-3months. For now I could make new issue with more detailed description to keep track of it as a feature.


Verify env support for filters

@bburton said in #859:

As much as I like the idea of adding environment support, this change makes certain assumptions that will cause problems with certain filters. For instance, the compass filter creates a .sass-cache folder in the project directory where nanoc compile is run. It's quite possible other filters may create temporary folders where files are cached.
As a result, the only safe way to use this feature is to only compile to one environment in a given project folder and not compile different environments in the same project folder.
Sure it's possible to configure the sass compiler to cache to a specific location but the setup is complicated because the environment setting needs to be passed to the compass config.rb and used to set the sass :cache_location property. Not only that, the configuration has to be made to config.rb so it's possible to run the compass command by itself outside of nanoc and have it pick up the right environment location.
Compass also supports environments so it would be ideal if the environment setting configured for Nanoc could be passed into the compass config.rb but that's a bit beyond the current topic.
However, aside from the filters nanoc supports out of the box, even if all of them were reviewed and fixed if necessary, there's no guarantee that third-party filters aren't writing or caching files to the project directory.
Even if switching environments to compile into the same folder is not supported, environment support is still very useful when building with one environment configuration such as development in its own folder, then push changes to a Git repository, e.g. github.com, then in a different folder configured as the production environment perform a git pull and recompile.

I see two action points here:

[ ] Verify that all built-in filters behave properly when switching environments.

[ ] Ensure that the documentation for writing filters explicitly mentions that caches might become invalid due to an environment switch. This might mean that filters need to have access to the current environment, which is currently not the case.

This might be not so much of an issue if the caches are invalidated properly. For example, for Sass I believe that either the caches will not differ between environments, or Sass will know that it is invoked differently and invalidate the caches.

Also, Compass is deprecated and so I don’t believe support for it should be added.

(wrong button)

I’ll close this for now, as I don’t believe this will be a problem. I added a spec in e1c9cdd that tests the behavior of Sass and caching with environments.


Function as an argument in jitted functions

I am trying to implement something similar to deflated power iteration as described in https://github.com/noahgolmant/pytorch-hessian-eigenthings/blob/master/hessian_eigenthings/power_iter.py .
I need to use an operator within a loop. How can I pass a function as an argument to another function while still being able to jit it and run it efficiently?

You have a couple of options:

Don't jit the higher level function directly. Inside, jit a function that calls the higher level function.
Wrap the passed function in jax.tree_util.Partial(), which can be passed as an argument into a jit compiled function. But beware, this will break if your function is a closure (depending on arguments not defined in the function).

You can also use static_argnums for this (see the jit docstring):
from __future__ import print_function
from functools import partial
from jax import jit

@partial(jit, static_argnums=(0,))
def app(f, x):
  return f(x)

print(app(lambda x: 2 * x, 3))

A "static argument" means that (1) the argument can be any Python object, e.g. a callable, and (2) recompilation is triggered for every new value of the argument (based on __eq__/__hash__ if the object is hashable, or object identity if it's not).
This is pretty similar to just using lexical closure along with the first solution that @shoyer pointed out, but can lead to more compilation cache hits.
@kunc hope that together with the above options answers your question! Please reopen the issue (or open a new one) if it doesn't.

You have a couple of options:

Don't jit the higher level function directly. Inside, jit a function that calls the higher level function.
Wrap the passed function in jax.tree_util.Partial(), which can be passed as an argument into a jit compiled function. But beware, this will break if your function is a closure (depending on arguments not defined in the function).

It would be nice to document these usage tips.

@shoyer , can you please give an example of what you mean?

You can use jax.tree_util.Partial in a similar way to wrap functions as jit-compatible pytrees:
import jax
from jax import Array, jit, numpy as jnp
from typing import Callable

def func(a: Array, arg: int) -> Array:
  return a + arg

@jit
def myjittedfun(f: Callable, a) -> Array:
   return f(a)

closure = jax.tree_util.Partial(func, arg=1)
a = jnp.array([3, 4])
print(myjittedfun(closure, a))
# [4 5]


Screen turns black upon taking screenshot

Description of Bug
Bug was reported by a player on the NexusMods website, titled "Zooms in really close/bottom and right sides of screen turn black upon exiting farmhouse": https://www.nexusmods.com/stardewvalley/mods/4779?tab=bugs
Expected behavior
Should take a screenshot successfully.

Resolved by #19, closing.


Regarding computations of HER transitions.

What I could understand by reading the HER paper was that computing HER transitions for an episode would be just changing the desired_goal value of a particular experience (or memory) by that experience's achieved_goal.
This could be easily done by sampling a bunch of transitons from the replay buffer and making their desired_goal to be equal to their respective achieved_goal.
The implementation however in the file her.py is quite complex to understand where the code first samples a bunch experiences (not the whole episode is taken for her as far as I could tell). Then some random experiences are selected, from the ones generated above, to be used for HER. The values for desired_goal are then made equal to their respective achieved_goal which seems okay. I have the following 2 questions :

The episode_batch['o'] and episode_batch[o_2] differ in shapes and hence when we sample the experiences from this line of code  (This line here) there is a descrepency introduced within the experience. That is to say that episode_batch['o'], episode_batch[o_2], episode_batch['ag'] and episode_batch[ag_2] now don't point the same experiences.

transitions = {key: episode_batch[key][episode_idxs, t_samples].copy()
                       for key in episode_batch.keys()}

Shouldn't it be an issue because the reward_params is calculated using the peice of code below, using ag2 and the DDPG.store_episode takes the values of using only the keys ["o", "g", "o_2", "ag"] and the computations are done using only ["o", "g", "ag"]? The respective _2 variables are used for stats only which is stated in the comments but shouldn't values of keys ("o", "ag") be equal to their corresponding "_2" counterparts?
2. Wouldn't it be better to just sample once and select the transitions for HER rather than sampling twice from the data: first for the transitions to be used for training and secondly for introducing HER.

@abhayraw1 for your second point, I think the idea for current implementation is to have a generalize implementation, meaning if replay_k is set to zero, we sample as regular we do for ddpg. her_indexes will be empty. That's why they are separated.
I agree with your first point though, there is a discrepancy. Also, I don't understand in _sample_her_transitions here https://github.com/openai/baselines/blob/bcde04e71078d82f9eb989e7198e711b219df2bd/baselines/her/her.py#L52 why are we using ag_2why not ag? Appreciate any response

@machinaut @fjwolski @mandrychowicz any thoughts?

@abhayraw1 for your second point, I think the idea for current implementation is to have a generalize implementation, meaning if replay_k is set to zero, we sample as regular we do for ddpg. her_indexes will be empty. That's why they are separated.

@mehdimashayekhi I think a simple approch would be to take some fraction (future_p) of the episode batch for generating HER transitions, which would be zero when replay_k is set to zero.
https://github.com/openai/baselines/blob/bcde04e71078d82f9eb989e7198e711b219df2bd/baselines/her/her.py#L15
The only difference that I see is that in the current implementation all the transitions aren't being used from the episode_batch  even in the case of replay_k being 0.
Also, the snippet of code below produces transitions in which a particular experience may be repeated many times. This is because there is no dependency between episode_idxs and t_samples. A simple case would be episode_idxs = [1, 1, 0] and t_samples = [0, 0, 0]. This would include the first experience from the second rollout to be included in the transitions twice.
https://github.com/openai/baselines/blob/bcde04e71078d82f9eb989e7198e711b219df2bd/baselines/her/her.py#L26-L30

You are right @abhayraw1. The problems related in your last answer happens. Did you change something on the implementation?
I also want to add that the future_p variable is also only used to the percentage of transitions that are sampled for generating 'her' transitions and it is kind of unrelated to the 'future' sampling strategy.
It would be also interesting to change the implementation to have a relationship between the transition sample and the related episode. In this way it would be possible to do more interesting strategies to calculate rewards taking into consideration the whole episode in non-markovian tasks and add credit assignment algorithms.

@lfelipesv I couldn't understand the complex implementation choice by the authors for generating her transitions, so I went on to

@lfelipesv I couldn't understand the reason behind this implementation used by the authors for creating HER transitions. They are also not very clear as to what future_p stands for in their publication.
However, I went on to implement a simple workaround to this. It's not perfect, but if you have any queries, hit me up.
You can find it here
https://github.com/abhayraw1/DDPG/blob/32be7a2a66e4c5be7801d89ce7e43c1e6c382689/ddpg.py#L66-L71


Tags on content do not get displayed in consistent order

Screenshot

Description
When adding multiple tags to multiple dashboards, charts or saved queries, the tags display in non alphabetical order.
Design input
[describe any input/collaboration you'd like from designers, and
tag accordingly. For design review, add the
label design:review. If this includes a design proposal,
include the label design:suggest]

Seems reasonable to open as a PR if you're up for it. Seems like the bot is on the right track :)
I guess the question I might as @yousoph / @kasiazjc who might have thought more about this: Is alphabetical always the right order? It makes it easier to check if a tag is there, but I'm not sure if some other order (e.g. date tag was added, date tag was created, some relative importance of the tag) would ever be needed. Alphabetical is probably just fine, and seems like an improvement, but throwing the question out there for good measure :)

I think alphabetical makes sense as we do not really have any other priority for tags that would make sense to use here. @Deckel if the issue is still valid for you, it would be great if you could help with changing this 🙏


add rest API endpoints for indy tracking service

MMENG-3481

Signed-off-by: Harsh Modi<EMAIL_ADDRESS>

Seems this is more like a skeleton setup, so I don't have opinions to reject this PR.

LGTM.

@ligangty @sswguo Thanks for providing your approval. Can you please also approve the review in GitHub system? Due to branch protection rules I have set it requires at least one approval before allowing me to merge.


Cant install recorder 2.0 and assistant 2

Cant install recorder 2.0 and assistant 2
im using phh gsi on an s20 fe 5g
i installed ngaresources apk
when i try to install recorder 2 it says verification failed

use custom ROMs  instead of gsi's.


game crashes when i try to open the game with mod installed error code 1

i aqm using origens forge and i dont know why it crashes can anyone help ?

This gives me no information at all. Please state at the very least the version of the mod you're using and if you can the crash report. (/crash-reports/)

I can't give anymore info, but the last update (03-28) keep crashing the game with Exit Code-1. And we can't give any log since the game won't launch. Go Back to 1.19.2 <IP_ADDRESS> solve the issue.

Addons may not have updated yet.
1.7 is has a breaking change.

im so so sorry for wasting youre time and aslo i dont know what i was thinking when making this bug report im just going to close this becus i think it was essentials and quilt wich are both fixed in my modpack so again im so so sorry for wasting anyone`s time


"wait for input" event causes freeze when clicked too quickly

The problem
Describe the bug
When I start a timeline that has a 'wait for input' event preceded by a text event, and advance the dialogue after the text event really quickly (before the text event finishes fading out) it works fine. However, if I try to start the same timeline again, it does not work, and shows a dialog box quickly appearing then disappearing, then freezes the game.
To Reproduce
First, start a godot project and install dialogic as an addon.
Make any timeline that has a 'wait for input' event at the end of it.
For example:
text
[wait_input]

Then, create a simple 2d or 3d scene, with the script:
func _physics_process(delta):
	if Input.is_action_just_released("start_dialog"): # Add this in the input map
                Dialogic.start('timeline') # Assuming the timeline you created is named 'timeline'

Now, start the timeline, and click through the dialog really quickly, until it ends. After it ends, start it again. A dialog box should quickly appear then fade, and the game should freeze.
Expected behavior
For timelines containing 'wait for input' events to start successfully, no matter how quickly the previous timeline was clicked.
System (please complete the following information):

OS: Windows 10
Godot Version: 4.2
Dialogic Version: 2.0 - alpha 14

Screenshots
Here is a video of the bug:
https://github.com/dialogic-godot/dialogic/assets/60291234/cc278b61-88fc-4306-810f-e7e276570415
Solutions
Workaround
What works is adding a wait time before the player can get past the wait_input event. The time should be long enough so that the animation of the text disappearing ends Before the player can click to get past the wait_input event. Meaning, changing the timeline example I gave above to:
Text
[wait time="1.0"]
[wait_input]

Where, the player will:
-click once to get past the Text
-wait 1 second, after which the animation for the text disappearing ends completely
-click again, to get past the wait_input event
and no bug will be caused.
Note: I know that this is not the way a wait_input event is conventionally used, and that it makes no sense to add it here. But, in other cases where it does, the bug still occurs.

I can recreate this. I will look into it now.


[Feature Request] select component's items size

Existing Component
是
Component Name
select
Description
Here is a issue,If one of the select item is so long,I can't see the other shorter items,So can you do a favor of it?

In this case, you should fix the option that is too long.

Duplicate of #9352


KOGITO-3110 Refactor ofCollectedResources methods in *Codegen

Many thanks for submitting your Pull Request :heart:!
Please make sure that your PR meets the following requirements:

[ ] You have read the contributors guide
[ ] Pull Request title is properly formatted: KOGITO-XYZ Subject
[ ] Pull Request title contains the target branch if not targeting master: [0.9.x] KOGITO-XYZ Subject
[ ] Pull Request contains link to the JIRA issue
[ ] Pull Request contains link to any dependent or related Pull Request
[ ] Pull Request contains description of the issue
[ ] Pull Request does not include fixes for issues other than the main ticket

jenkins please retest this
works on my machine

@mariofusco unless I did something wrong I just tried locally and it looks like it's working. FYI: the CollectedResources#fromPaths() method is checking whether the path is a jar and acting accordingly; ofJar(...) is then useless because ofCollectedResources(...) gets already the right Resource subtype.
A recent change in Quarkus makes it apparently always use the jar-based path, including mvn test and mvn package, so basically that is often the code path that is being executed, even outside platform :sweat_smile:


Brackets File Tree Blank

I'm running Brackets Release 1.1 build 1.1.0-15558 (release ea908cae5) on a Mac running Yosemite 10.10.2. Whenever I open a folder, the file tree is blank. I see the triangles, but no text.

Does Debug > Reload Without Exensions fix it? If so this was caused by an extension, so open File > Extension Manager to update all of your installed extensions.

It was definitely an extension. Thanks for your help.
Shawn Kearney
InEpt Software
310-864-1460
<EMAIL_ADDRESS>www.ineptsoftware.com

On Jan 19, 2015, at 3:30 PM, Randy Edmunds<EMAIL_ADDRESS>wrote:
Does Debug > Reload Without Exensions fix it? If so this was caused by an extension, so open File > Extension Manager to update all of your installed extensions.
—
Reply to this email directly or view it on GitHub https://github.com/adobe/brackets/issues/10417#issuecomment-70579451.


Add NuGet package description

The NuGet Package Manager in Visual Studio shows this: "Package Description"
You just need something like this in the csproj:
<Description>A C# Glob library for .NET and .NET Core.</Description>

Closed by 1.1.2 Thanks!


Fixed broken images on Web View when it's in a subdirectory

Fixed broken images on Web View when it's in a subdirectory

Confirmed to fix the broken images.

thanks for the confirmation @gcsoftware


Current instructions do not run the executable

Hey!! Thanks for this app. I've followed the instructions, but I cannot run the app. Can you help? Am on Ubuntu 22.04 LTS 64-bit. Thanks!

Could you please share log of your installation instruction?

Thanks. How would I get that?

Is this what you're after? Running $ tailscale-systray from terminal doesn't find the executable. Did -a to force what I think is a reinstall to get the log.
 Downloads →  go install -a -v github.com/mattn/tailscale-systray@latest
internal/unsafeheader
internal/goarch
internal/cpu
internal/goexperiment
internal/goos
runtime/internal/atomic
internal/abi
runtime/internal/math
runtime/internal/sys
runtime/internal/syscall
internal/bytealg
internal/race
sync/atomic
unicode/utf8
internal/itoa
unicode
encoding
math/bits
unicode/utf16
crypto/internal/subtle
math
runtime
crypto/subtle
internal/nettrace
container/list
vendor/golang.org/x/crypto/cryptobyte/asn1
vendor/golang.org/x/crypto/internal/subtle
internal/reflectlite
sync
internal/testlog
internal/singleflight
math/rand
runtime/cgo
errors
sort
internal/oserror
io
path
syscall
bytes
strconv
strings
reflect
bufio
time
internal/syscall/unix
internal/syscall/execenv
hash
crypto
vendor/golang.org/x/net/dns/dnsmessage
crypto/elliptic/internal/fiat
io/fs
internal/poll
embed
context
os
crypto/internal/randutil
encoding/binary
internal/fmtsort
crypto/elliptic/internal/nistec
crypto/hmac
crypto/rc4
vendor/golang.org/x/crypto/hkdf
encoding/base64
crypto/cipher
crypto/sha1
crypto/sha512
crypto/ed25519/internal/edwards25519/field
fmt
path/filepath
crypto/aes
io/ioutil
os/exec
internal/godebug
crypto/des
internal/intern
crypto/ed25519/internal/edwards25519
net/netip
github.com/atotto/clipboard
crypto/md5
encoding/json
math/big
encoding/hex
net
os/user
crypto/sha256
encoding/pem
net/url
vendor/golang.org/x/crypto/chacha20
crypto/rand
encoding/asn1
crypto/elliptic
vendor/golang.org/x/crypto/cryptobyte
crypto/ed25519
crypto/rsa
crypto/ecdsa
crypto/dsa
crypto/x509/pkix
vendor/golang.org/x/crypto/internal/poly1305
vendor/golang.org/x/sys/cpu
vendor/golang.org/x/crypto/curve25519/internal/field
github.com/getlantern/context
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/crypto/curve25519
github.com/getlantern/hex
regexp/syntax
github.com/getlantern/ops
github.com/go-stack/stack
compress/flate
hash/crc32
vendor/golang.org/x/text/transform
regexp
compress/gzip
log
vendor/golang.org/x/text/unicode/norm
vendor/golang.org/x/text/unicode/bidi
github.com/getlantern/hidden
vendor/golang.org/x/net/http2/hpack
github.com/godbus/dbus/v5
crypto/x509
vendor/golang.org/x/text/secure/bidirule
net/textproto
vendor/golang.org/x/net/idna
mime
crypto/tls
mime/quotedprintable
mime/multipart
vendor/golang.org/x/net/http/httpguts
vendor/golang.org/x/net/http/httpproxy
net/http/internal
net/http/internal/ascii
github.com/oxtoacart/bpool
tailscale.com/util/dnsname
github.com/gen2brain/beeep
net/http/httptrace
net/http
github.com/getlantern/errors
github.com/getlantern/golog
github.com/getlantern/systray
github.com/mattn/tailscale-systray

OK, so it installs to the GOPATH environment variable which in my case was /home/user/go but the executable isn't on the PATH environment variable so I think the instructions should be updated to reflect the change. Had to run /home/user/go/bin/tailscale-systray.

How to change PATH environment variable to /home/user/go/bin/tailscale-systray please?

I found another solution.
How to uninstall this app please?


localSourceImagePath="../assets/images/splash/splash2.png"   is not working

i am new to this library fantastic work but when i want to load image as background is not working.
Kindly suggest if i am doing wrongly
localSourceImagePath="../assets/images/splash/splash2.png"
thanks & Regards
gmchaturvedi

Same here

Hi. I don't think local assets to the project are supported in this case yet. The idea for now was to be able to draw on a picture taken by the camera, so the path it is expecting is more like "file:///..." to a picture in the cellphone memory.
I suppose that this would be a nice adding for the library.

I've done this part in my computer. It can pass a local asset/resource filename to localSourceImagePath.
But I'm also merging PR meanwhile and face some problems...
So it may take some time to release a new version.

Done by using react-native-image-picker it provides both i.e gallery as well as the camera for capturing the images. thanks @diego-caceres-galvan

I have released a new version. You can try it.
Feel free to reopen this issue if there is still a problem.


[release-4.12][ARO-6015] Update 4.12 installer to newest commit

Update dependencies for 4.12. See also https://github.com/openshift/installer-aro/pull/32

I checked:

installer-aro is updated
it includes the change in assets_vfsdata.go

/lgtm


Adjust the composer.json and run-test.yml according to template

I adjusted the composer.json file to remove the requirements that were superfluous. I also copied the run-test.yaml from the escape-room package over to this package.

This package is being tested differently.


Added 8 font families to fonts/resources

Families featured in this update: CatV 6x12 9, CMU (Computer Modern Unicode) Typewriter, Corbi Mono S, Fairfax HD, Kawkab Mono, Libertinus Mono, Meyrin, Monodeco

Thanks


Suggestion: Allow re-ordering favorites

It would be convenient if the favorites could be arranged manually, so that the order is different from the one they've been added to the app.
A long press on the favorite itself would seem better, but something in the preferences would work, too.

@Mrnofish will be implemented in next version


Error CS 5001

Note: This template is only for reporting bugs about samples in this repo. If you have a product bug to report about Office web Add-ins, please submit the issue at https://github.com/OfficeDev/office-js/issues. This will help us respond to your issue faster.
(DELETE THIS PARAGRAPH AFTER READING)

URL of sample
URL linking to the sample that has the bug.
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
_A clear and concise description of what you expected to happen. solution "Program does not contain a static "main" method suitable for an entry point"
Screenshots
If applicable, add screenshots to help explain your problem.
Environment

Platform [PC desktop, Mac, iOS, Office Online]: PC Desktop
Host [Excel, Word, PowerPoint, etc.]: Excel
Office version number: Office 365
Operating System: Win 10
Browser (if using Office Online): Chrome

Additional context
_Add any other context about the problem here. I Have Problem CS 5001

Hi @MiftahRizky, can you include some more details about where you get this error? What sample are you using?
Thanks!
David

can't determine project language from files. please us one of[--csharp,--javascript, typescript, java, phyton, custom]
sample im using is create create worksheet from website

Hi @MiftahRizky, That looks like a c# error which would occur in the FunctionCreateSpreadsheet project. It uses c# to create an Azure Function. I think maybe I missed a prerequisite in the readme. Can you check that the Azure Function Core Tools are installed? There's more info at https://learn.microsoft.com/en-us/azure/azure-functions/functions-run-local
If you are still getting the error can you provide a screen shot, or info about when and where you see the error?
Thanks!
David


How to mock CKEDITOR in vue-jest

What problem does this feature solve?
i want to achive 100% test coverage

Hi, sorry that you're having issues with Vue Test Utils, but the issue tracker is reserved for bugs and feature requests. Your question would best be answered on StackOverflow.
If you think you found a bug, please create a minimal reproduction and open a new issue.


pdf  need TOC on the left

to facilitate reading, can you add TOC on the PDF output so it can show up on the left side when I open it in PDF viewer? without it it's very painful to navigate the document. Thanks.

Agree it is useful.  This is being looked at.


Compatibility with older versions of macOS

Hello,
I tried to install Fanny on my mid-2010 macbook pro, v 10.11.6.
Figure out it is 10.12 locked since 1 month, can I find older version of your app to work on my machine ?
Thanks !

You can download version 1.0.1 here: http://fannywidget.com/FannyWidget_v101.zip 👍
There are some minor issues with 1.0.1 though.


Is this connector supports avro format?

Yes this does support Avro. Are you running into a problem with one of the transforms?

Yeah, I am using this with mongo change stream. I want to rename key name which consist '$' in it.
I used this:
"transforms" : "patternRename",
"transforms.patternRename.type" : "com.github.jcustenborder.kafka.connect.transform.common.PatternRename$Value",
"transforms.patternRename.field.pattern" : "numberLong",
"transforms.patternRename.field.replacement" : "getout"

I am getting error
Jul 23 10:52:36 ip-172-32-1-97 connect-distributed.sh[7080]: Caused by: java.lang.UnsupportedOperationException: STRING is not a supported type.
Can you suggest where I am doing wrong?

The mongo change stream connector doesn't support Avro. Basically each record that is coming out of mongo is getting passed through Kafka Connect as a String. Their connector is actually writing Schema.Type.STRING, "" and handing that to Kafka Connect. This transformation requires a Struct or Map when receiving the message, that's why you're seeing the UnsupportedOperationException. You could look at trying to parse this string using kafka-connect-json-schema, then apply the rename.


Bug - Chinese Keyboard is broken - Algolia

Tracking issue https://discourse.algolia.com/t/bug-chinese-keyboard-is-broken/13507

No feedback from Algolia.

This may need an event listener to handle the Process key.  MDN doc link.

How about encouraging Algolia to handle this?

How about encouraging Algolia to handle this?

Maybe we can fix this by ourself 🤔，Docusaurus doc say we can edit the Algolia search component.

@juzhiyuan we can track this issue https://github.com/algolia/docsearch/issues/1304

How about encouraging Algolia to handle this?

Maybe we can fix this by ourself 🤔，Docusaurus doc say we can edit the Algolia search component. I'll try it.

I would prefer keeping with upstream instead of swizzle 😅 (it means we have to maintain plenty of codes). For now, let's track https://github.com/algolia/docsearch/issues/1304 for updates.


storm wipes ssh config if error is thrown

I have an ssh file configured like so:
ServerAliveCountMax 6
ControlMaster auto
ControlPath ~/.ssh/ssh_control_%h_%p_%r
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
User            alex.gray
IdentityFile    ~/Documents/my_id_rsa
Host github.com
controlmaster no
And when I run the following command, it completely deletes my ssh config:
storm add my_vps root@emreyilmaz.me:22
Traceback (most recent call last):
File "/Users/alexgray/.virtualenvs/skippy/bin/storm", line 11, in
sys.exit(main())
File "/Users/alexgray/.virtualenvs/skippy/lib/python3.4/site-packages/storm/kommandr.py", line 195, in call
self.execute(sys.argv[1:])
File "/Users/alexgray/.virtualenvs/skippy/lib/python3.4/site-packages/storm/kommandr.py", line 188, in execute
return command(**arg_map)
File "/Users/alexgray/.virtualenvs/skippy/lib/python3.4/site-packages/storm/main.py", line 51, in add
storm_.add_entry(name, host, user, port, id_file, o)
File "/Users/alexgray/.virtualenvs/skippy/lib/python3.4/site-packages/storm/init.py", line 37, in add_entry
self.ssh_config.write_to_ssh_config()
File "/Users/alexgray/.virtualenvs/skippy/lib/python3.4/site-packages/storm/parsers/ssh_config_parser.py", line 228, in write_to_ssh_config
data = self.dump()
File "/Users/alexgray/.virtualenvs/skippy/lib/python3.4/site-packages/storm/parsers/ssh_config_parser.py", line 203, in dump
self.config_data = sorted(self.config_data, key=itemgetter("order"))
TypeError: unorderable types: NoneType() < int()
And now my ssh config is completely deleted :(
Storm should do one or all of the following:

never wipe the ssh config on a storm failure.
possibly create a backup of the ssh config to see what changed.
when reading the ssh config, strip everything outside a hosts section, modify the file in memory, and add the text that we stripped BACK into the generated ssh config.

This is using the following version of storm:
$ pip list | grep storm
stormssh (0.6.7)

Really sorry for the trouble. Can't reproduce the problem though. :(
Can you write your

exact python version
OS X version
install way (pip, easy_install or something else?)
your sshconfig file (don't copy/paste it. remove sensitive data (if any) andend to hello[at]emre.sh)

No worries! (I update my original comment with the exact contents of my ssh config.)
Here is some information
Python 3.4.3
OS: MAC El Capitan 10.11.1 (15B42)
It was installed via pip (pip install stormssh) version: (0.6.7)

Hope this helps!

Fixed w/ https://github.com/emre/storm/commit/8c03351e6613c2298fe806d72097c3899fd3d057.
Can you update and try again? 😊

Works like a charm!
Thanks man!!!
Alex
On Fri, Nov 6, 2015 at 1:39 PM, Emre Yılmaz<EMAIL_ADDRESS>wrote:

Fixed w/ 8c03351
https://github.com/emre/storm/commit/8c03351e6613c2298fe806d72097c3899fd3d057
.
Can you update and try again? 😊
—
Reply to this email directly or view it on GitHub
https://github.com/emre/storm/issues/111#issuecomment-154496812.

--
-Alex-

happy to hear, have fun!


[bug] Regression on config path-traversal

Describe the bug
Configuration is not read correctly for the parent directories
To Reproduce
Steps to reproduce the behavior:
 /tmp/test$ find .
.
./test2
./.env

/tmp/test$ ipython3 -c "from dynaconf import settings; print(settings.ENV_FOR_DYNACONF)"
testavalue1

/tmp/test$ cd test2
/tmp/test/test2$ ipython3 -c "from dynaconf import settings; print(settings.ENV_FOR_DYNACONF)"
DEVELOPMENT

/tmp/test/test2$ cat ../.env
ENV_FOR_DYNACONF=testavalue1

Having the following config files:

see above

Having the following app code:

see above

Executing under the following environment
conda
Python 3.7.3

Expected behavior
Reading the file from the parent directory iff  it does not exist in the current dir.
Debug output

 Debug Output

export `DEBUG_LEVEL_FOR_DYNACONF=true` reproduce your problem and paste the output here

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-065bd64b7197> in <module>
----> 1 from dynaconf import settings; print(settings.ENV_FOR_DYNACONF)

~/miniconda3/envs/smr/lib/python3.7/site-packages/dynaconf/__init__.py in <module>
      1 # coding: utf-8
----> 2 from dynaconf.base import LazySettings
      3 from dynaconf.validator import Validator, ValidationError
      4 from dynaconf.contrib import FlaskDynaconf, DjangoDynaconf
      5

~/miniconda3/envs/smr/lib/python3.7/site-packages/dynaconf/base.py in <module>
      6
      7 from dynaconf import default_settings
----> 8 from dynaconf.loaders import (
      9     default_loader,
     10     settings_loader,

~/miniconda3/envs/smr/lib/python3.7/site-packages/dynaconf/loaders/__init__.py in <module>
      2 from dynaconf import constants as ct
      3 from dynaconf import default_settings
----> 4 from dynaconf.loaders import (
      5     yaml_loader, toml_loader, json_loader, ini_loader, py_loader
      6 )

~/miniconda3/envs/smr/lib/python3.7/site-packages/dynaconf/loaders/yaml_loader.py in <module>
      4 from warnings import warn
      5 from dynaconf import default_settings
----> 6 from dynaconf.loaders.base import BaseLoader
      7 from dynaconf.constants import YAML_EXTENSIONS
      8 from dynaconf.utils import object_merge

~/miniconda3/envs/smr/lib/python3.7/site-packages/dynaconf/loaders/base.py in <module>
      5
      6
----> 7 logger = raw_logger()
      8
      9

~/miniconda3/envs/smr/lib/python3.7/site-packages/dynaconf/utils/__init__.py in raw_logger()
     68         return setup_logger(
     69             "dynaconf",
---> 70             level=getattr(logging, level)
     71         )
     72     except ImportError:  # pragma: no cover

AttributeError: module 'logging' has no attribute 'true'

Environment (please complete the following information):

OS:  Linux/Ubuntu18.04
Dynaconf Version 2.0.0
Frameworks in use: Flask

Additional context
works perfectly in dynaconf < 2.0

@PyUser5 fixed in https://github.com/rochacbruno/dynaconf/pull/161 (release of 2.0.1will include it, to be released on Monday, Apr 22)


Binary Pub/Sub Support for Python

#800 Related to this, How about the binary support on Python API as well?
Currently, there are only StringSubscriber and ProtoSubscriber implemented. I can work around to read the raw bytes by removing the decode() function in the  StringSubscriber , like this
  def _on_receive(self, topic_name, msg, time):
    self.callback(topic_name, msg, time)

Is it desired to have ByteSubscriber and perhaps CapnPotoSubscriber etc implemented in Python API as well? I could probably work on a PR if needed, as the change seems to be pure Python.

I just looked at the code and honestly was surprised that it didn't exist (I am usually working on the C++ part). I am also surprised, that nobody has ever brought it up in the past 😀
It would totally make sense to have the same low-level binary subscriber and publisher available from python and not only provide those two hardcoded message formats (Protobuf, String). Maybe one could even just implement the functions from MessageSubscriber / Publisher, that currently only raise a NotImplemented Error?
PRs highly welcome 😊

Actually there is a binary python subscriber. It is one level below the message subscribers, and defined in this file https://github.com/eclipse-ecal/ecal/blob/master/lang/python/core/ecal/core/core.py
You can use it directly if you need a binary subscriber.
The message subscribers just wrap the functionality.

No I don't think that there is a sample. In general, I am not sure if we want to encourage using the binary subscribers / publishers, though of course we could.

Well, it is a feature of eCAL, so why not advertise it and tell people how to use it? I didn't even know of it myself! 🤔

A very simple addition of class ByteSubscriber. I think not really worth a PR, so just to put the patch here for consideration :)
diff --git a/lang/python/core/ecal/core/publisher.py b/lang/python/core/ecal/core/publisher.py
index 3c1b8a58..ce5ee6bb 100644
--- a/lang/python/core/ecal/core/publisher.py
+++ b/lang/python/core/ecal/core/publisher.py
@@ -106,6 +106,17 @@ class StringPublisher(MessagePublisher):
   def send(self, msg, time=-1):
     return self.c_publisher.send(msg.encode(), time)

+class BytePublisher(MessagePublisher):
+  """Specialized publisher that sends out raw bytes
+  """
+  def __init__(self, name):
+    topic_type = "base:byte"
+    topic_desc = b""
+    super(BytePublisher, self).__init__(name, topic_type, topic_desc)
+
+  def send(self, msg, time=-1):
+    return self.c_publisher.send(msg, time)
+

 if __name__ == '__main__':
   """Test the publisher API
diff --git a/lang/python/core/ecal/core/subscriber.py b/lang/python/core/ecal/core/subscriber.py
index 1fa0bb8a..9f9ec543 100644
--- a/lang/python/core/ecal/core/subscriber.py
+++ b/lang/python/core/ecal/core/subscriber.py
@@ -174,6 +174,43 @@ class StringSubscriber(MessageSubscriber):
   def _on_receive(self, topic_name, msg, time):
     self.callback(topic_name, msg.decode(), time)

+class ByteSubscriber(MessageSubscriber):
+  """Specialized publisher subscribes to raw bytes
+  """
+  def __init__(self, name):
+    topic_type = "base:byte"
+    super(ByteSubscriber, self).__init__(name, topic_type)
+    self.callback = None
+
+  def receive(self, timeout=0):
+    """ receive subscriber content with timeout
+
+    :param timeout: receive timeout in ms
+
+    """
+    ret, msg, time = self.c_subscriber.receive(timeout)
+    return ret, msg, time
+
+  def set_callback(self, callback):
+    """ set callback function for incoming messages
+
+    :param callback: python callback function (f(topic_name, msg, time))
+
+    """
+    self.callback = callback
+    self.c_subscriber.set_callback(self._on_receive)
+
+  def rem_callback(self, callback):
+    """ remove callback function for incoming messages
+
+    :param callback: python callback function (f(topic_name, msg, time))
+
+    """
+    self.c_subscriber.rem_callback(self._on_receive)
+    self.callback = None
+
+  def _on_receive(self, topic_name, msg, time):
+    self.callback(topic_name, msg, time)

 if __name__ == '__main__':
   """Test the subscriber API

As Kerstin mentioned, there already is a binary publisher / subscriber API. We just need a sample for that, so the user can learn about it more easily.


Avoid using Ember's internal symbol utility.

symbol is intended to give a good way to build an interned string (to avoid the performance penalty of comparing strings stored as a rope). Ember changed where symbol was kept upstream, breaking this addon.
In our usage scenarios, the thing we want to guarantee is that it is difficult (not impossible since we export the value) to "forge" this value. Using a function serves both purposes; it is fast for comparison, and its identity cannot be forged (one function() {} !== function() {}).

Thanks @rwjblue, released in 0.1.5.


Icon Request: Samsung Game Launcher, Zarchiver, IstanbulKart, Papara

Package names:

Zarchiver: ru.devs.zarchiver
Papara: com.mobilium.papara
IstanbulKart: com.belbim.istanbulkart
Game Launcher: com.samsung.android.game.gamehome

In my folk i already add icons for zarchiver and zarchiver pro now need to wait devs for checking my pr

Hello! It would appear that this icon request doesnʼt include the package names of some or all of the apps for which icons have been requested. In addition, we are switching to a new system for icon requests. The apps for which package names have been provided (if such apps exist in this icon request) have been added to the new icon request database, meaning no action is required. For the apps for which package names havenʼt been provided, please submit an icon request via the new icon request form: https://forms.gle/Fx8vZAiWdW1Tyjo57.


Docs improvements

open the PR from "this" repo, not my fork

Partially playing with ReadTheDocs pull-request builds. After some click-ops, this is available here: https://magic-wormhole.readthedocs.io/en/docs-improvements/server-protocol.html
Not sure if this is automatable (i.e. so that every PR gets such a URL, from when the PR opens until it closes)

Okay, +1 for ReadTheDocs: that "details" link goes to the ongoing build until it is done, and then the link goes to a preview of the changed documentation.
Press "d" while viewing the PR documentation to see a "diff" view too (which works great for this PR).
:partying_face: