Not sure it's working....

Hey there.  It's really great to see this plugin development!   I've been waiting for a long time for this to work.   My Kumo Cloud app on my phone doesn't seem to line up with the data the plugin is showing.
The issue I'm running into is that with the API direct connect on or off, the HomeBridge UI-X shows the temp at 56.3 degrees in the room, but it's actually 71.   Also, the Heater/Cooler range was set to off, but it actually was on heat and set to 70, but the target temperature on the HomeBridge UI-X is showing 56 degrees.     I'm not sure it's reading the information correctly.
I also set the fan rotation speed to 100%, but according to the app, it's still showing it on "auto" and not running at 100%.
Also, I did notice one thing when I first set up the plugin - it was pulling the name as "heat pump" which is what my app was showing.   When I changed the name to "Pump", it kept pulling the name "Heat Pump" from the home bridge cache and it wasn't showing it on the accessories screen.  I had to delete the accessories cache file in Homebridge for it force a refresh.
[11/19/2020, 5:57:46 AM] [Kumo] Kumo API: Successfully connected to the Kumo API.
[11/19/2020, 5:57:46 AM] [Kumo] Number of devices found: 1
[11/19/2020, 5:57:46 AM] [Kumo] Restoring existing accessory from cache: Pump
Running Hombridge 1.16, plugin version 1.2.8
Thanks!

For removal, the easiest approach is to use the web UI. It makes it very easy to remove individual accessories and then a reboot of Homebridge will reinstall them.
The name in the plugin is pulled directly from the Kumo cloud. So if you want to change you can either update on the Kumo app or alternatively rename in the Home app. The latter approach will change the display but retain the Kumo name.
Last, to help you diagnose your issue, can you enable debugging from the UI and see if you can post your responses from the Kumo cloud and the device. Remove or obfuscate the serial number/security key and any other identifying information. The JSON data between the {} contains the key information.
Cheers,
Fraser

How do I enable the debugging?   I only have the options for ID, Pw and connect directly to devices.
Also, I have the PAC-USWHS002-WF-1 adapter talking to the MSZ-FH25.
Thanks!

You can access the debug option from the Homebridge UI. Select Homebridge settings from the drop down menu in the top right of the screen. You can then toggle debug on. Restart Homebridge in the UI and you should be able to get the necessary information.
This issue might be similar to #9 but I'd like to wait and see what your debug data looks like. If it is the same issue then you can try installing the beta version described in that issue. The issue boils down to the older device communicating differently and me not being able to troubleshoot directly. I think I mocked up a working version but have not been able to test with the older WiFi adapter. Let me know.

Hi fjs21.
I went into the UI to look to turn on the option for debugging, but it's not there.  The only 2 options I have under HomeBridge Setting is Unpair Bridges / Cameras / TVs / External Accessories  and Unpair Bridges / Cameras / TVs / External Accessories.   I also looked into the Homebridge UI settings through the plugin, but it doesn't have an option for debugging.   I ended up having to kill -9 the process and run it manually with DEBUG=* homebridge -D > /logfile.log
Here is what I'm seeing in the debug log:
[11/20/2020, 5:40:56 AM] [Nest] Authentication successful.
[11/20/2020, 5:40:57 AM] [Kumo] [
{
device: null,
token: 'asdfasdfasdf',
username: 'asdfasdfasdf'
},
{ filterReminder: true, lastUpdate:<PHONE_NUMBER>169 },
{
children: [
{
'$$hashKey': 'object:730',
children: [],
id: '1442269912170-3273445245',
label: 'Home',
lastScheduleChange:<PHONE_NUMBER>687,
lastUpdate:<PHONE_NUMBER>299,
level: 2,
reportedCondition: {
more: {},
operation_mode: 2,
power: 1,
set_temp: 21,
sp_cool: 11.5,
sp_heat: 10
},
version: 655,
zoneTable: {
'1507290186': {
'$$hashKey': 'object:541',
_isRespondingLocally: null,
_requestRescan: 0,
address: '<IP_ADDRESS>',
desiredConditionStack: [],
eqcStageThreeBacksupChannels: { '1': 0, '2': 0, '3': 0, '4': 0 },
eqcUpdatedLocally: { '1': false, '2': false, '3': false, '4': false },
equipmentControllerSettings: {},
errorHandler: {},
forceCloudUpdates: false,
hasElectricHeatingOption: false,
holdChanged: 0,
label: 'Pump',
lastUpdate:<PHONE_NUMBER>257,
ledDisabled: false,
localAdapterStatus: 'NORMAL',
mac: '00:1d:c9:92:bc:c3',
mhk2Settings: {
auto: [Object],
connected: [Object],
dr: [Object],
hold: [Object],
info: [Object],
schedule: [Object],
status: [Object]
},
optimalStart: false,
overrideSettings: {},
port: 80,
profileCodeFrames: [
'fc7b013010c9030020001407758c25a0be94bea0be09',
'fc7b013010cda0bea0bea0be18000000000000000045'
],
programEventSettings: {
'1': null,
'10': null,
'11': null,
'12': null,
'13': null,
'14': null,
'15': null,
'16': null,
'17': null,
'18': null,
'19': null,
'2': null,
'20': null,
'21': null,
'22': null,
'23': null,
'24': null,
'25': null,
'26': null,
'27': null,
'28': null,
'3': null,
'4': null,
'5': null,
'6': null,
'7': null,
'8': null,
'9': null
},
prohibits: { effective: [Object], global: [Object], local: [Object] },
prohibitsChanged: 0,
reportedCondition: { _created:<PHONE_NUMBER>257, more: {} },
rssi: {},
sendDesiredConditionsPending: false,
sendDesiredConditionsTime: '2020-11-19T22:39:11.559Z',
serial: '1507290186',
systemChangeoverSettings: { masterZone: [Object], priority: 1 },
timezone: null
}
}
}
],
id: '1477083513267-2908743508',
label: 'kumo cloud',
lastScheduleChange: 0,
lastUpdate:<PHONE_NUMBER>856,
level: 1,
version: 3588,
zoneTable: {}
},
'no device token'
]
[11/20/2020, 5:40:57 AM] [Kumo] Kumo API: Successfully connected to the Kumo API.
[11/20/2020, 5:40:57 AM] [Kumo] Parsing child: [
{
'$$hashKey': 'object:730',
children: [],
id: '1442269912170-3273445245',
label: 'Home',
lastScheduleChange:<PHONE_NUMBER>687,
lastUpdate:<PHONE_NUMBER>299,
level: 2,
reportedCondition: {
more: {},
operation_mode: 2,
power: 1,
set_temp: 21,
sp_cool: 11.5,
sp_heat: 10
},
version: 655,
zoneTable: {
'1507290186': {
'$$hashKey': 'object:541',
_isRespondingLocally: null,
_requestRescan: 0,
address: '<IP_ADDRESS>',
desiredConditionStack: [],
eqcStageThreeBacksupChannels: [Object],
eqcUpdatedLocally: [Object],
equipmentControllerSettings: {},
errorHandler: {},
forceCloudUpdates: false,
hasElectricHeatingOption: false,
holdChanged: 0,
label: 'Pump',
lastUpdate:<PHONE_NUMBER>257,
ledDisabled: false,
localAdapterStatus: 'NORMAL',
mac: '00:1d:c9:92:bc:c3',
mhk2Settings: [Object],
optimalStart: false,
overrideSettings: {},
port: 80,
profileCodeFrames: [Array],
programEventSettings: [Object],
prohibits: [Object],
prohibitsChanged: 0,
reportedCondition: [Object],
rssi: {},
sendDesiredConditionsPending: false,
sendDesiredConditionsTime: '2020-11-19T22:39:11.559Z',
serial: '1507290186',
systemChangeoverSettings: [Object],
timezone: null
}
}
}
]
[11/20/2020, 5:40:57 AM] [Kumo] Serial:<PHONE_NUMBER>
[11/20/2020, 5:40:57 AM] [Kumo] Label: Pump
[11/20/2020, 5:40:57 AM] [Kumo] Parsing child: []
[11/20/2020, 5:40:57 AM] [Kumo] Number of devices found: 1
[11/20/2020, 5:40:57 AM] [Kumo] Token: asdfasdfasdf
[11/20/2020, 5:40:57 AM] [Kumo] Restoring existing accessory from cache: Pump
[11/20/2020, 5:40:57 AM] [Kumo] Kumo response: [
true,-(91%)
null,-(91%)
[
[
{
active_thermistor: null,
actual_fan_speed: 3,
air_direction: 0,
device_serial: '1507290186',
fan_speed: 3,
id: '2253230162586918',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a030000000cab000000007d fc620130100300000c008cadabfe000000000000006c f
c6201301004000000800000000000000000000000d9 fc620130100900000003000000000000000000000051',
record_time: '2020-11-20T10:40:19.777Z',
room_temp: 14,
room_temp_a: 22.5,
room_temp_beyond: null,
rssi: -46,
run_test: null,
seconds_since_contact: 38,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 5:40:57 AM] [Kumo] queryDevice success.
It seems to be partially working.  When I ran home bridge in debug mode, it started giving me data, though I can't control it.
The information it is giving me is partially correct.
I've attached pictures of what Kumo Cloud is showing and what Homebridge is sending HomeKit for info.   You'll see the temperature is wrong and the on/off settings are wrong and the heat/cooling mode is off.
Also note that my option shows I-See Heat which is due to my Mitsubishi heat pump has a sensor that scans the room for cold/hot spots.  When you turn on heat, after a while, it will go to i-see heat or i-see cool.

Update:   It looks like forcing Homebridge to run in debug mode fixed my cache issue with it not working on HomeKit.  I can control the fan, but the temperature isn't recording correctly and it doesn't show the i-see modes for heat and cool.    I really appreciate your efforts on this.   It's so cool that this plugin exists!   I've been waiting for this for well over a year!   I'll gladly help you debug and get you more info as you continue to develop this plugin.

Thanks. As I suspected this is the same as #9 and is likely due to differences in how the version 1 and 2 adapter communicate.
Take a look at this - https://github.com/fjs21/homebridge-kumo/issues/9#issuecomment-707454787
It's probably worth skimming the entire issue as that person had the same issue with using the older version WiFI adapter. It describes how to start working out the relationships between what the device is reporting and what you expect. Based on that previous issue, I was able to code a test version but I never received any feedback on whether or not it worked.
Please try installing the beta (homebridge-kumo v1.2.9-beta.0) and, on reboot, check your log, you should see the following:

Initializing "Pump" as generic (unspecified) unit.

Inside the home app it will now look like a thermostat rather than a heater/cooler but the temps should now be correct and you might even be able to control it! Let me know.

Running the beta, here's the debug log:
[11/20/2020, 7:16:26 AM] [Kumo] Initializing Kumo platform...
[11/20/2020, 7:16:26 AM] [Kumo] Finished initializing platform: undefined
[11/20/2020, 7:16:26 AM] [Kumo] Loading accessory from cache: Pump
[11/20/2020, 7:16:26 AM] [Kumo] Executed didFinishLaunching callback
[11/20/2020, 7:16:28 AM] [Kumo] [
{
device: null,
token: 'asdfasdfasdf',
username: 'asdfasdfasdf'
},
{ filterReminder: true, lastUpdate:<PHONE_NUMBER>169 },
{
children: [
{
'$$hashKey': 'object:730',
children: [],
id: '1442269912170-3273445245',
label: 'Home',
lastScheduleChange:<PHONE_NUMBER>687,
lastUpdate:<PHONE_NUMBER>299,
level: 2,
reportedCondition: {
more: {},
operation_mode: 2,
power: 1,
set_temp: 21,
sp_cool: 11.5,
sp_heat: 10
},
version: 655,
zoneTable: {
'1507290186': {
'$$hashKey': 'object:541',
_isRespondingLocally: null,
_requestRescan: 0,
address: '<IP_ADDRESS>',
desiredConditionStack: [],
eqcStageThreeBacksupChannels: { '1': 0, '2': 0, '3': 0, '4': 0 },
eqcUpdatedLocally: { '1': false, '2': false, '3': false, '4': false },
equipmentControllerSettings: {},
errorHandler: { '1': [Object] },
forceCloudUpdates: false,
hasElectricHeatingOption: false,
holdChanged: 0,
label: 'Pump',
lastUpdate:<PHONE_NUMBER>092,
ledDisabled: false,
localAdapterStatus: 'NORMAL',
mac: '00:1d:c9:92:bc:c3',
mhk2Settings: {
auto: [Object],
connected: [Object],
dr: [Object],
hold: [Object],
info: [Object],
schedule: [Object],
status: [Object]
},
optimalStart: false,
overrideSettings: {},
port: 80,
profileCodeFrames: [
'fc7b013010c9030020001407758c25a0be94bea0be09',
'fc7b013010cda0bea0bea0be18000000000000000045'
],
programEventSettings: {
'1': null,
'10': null,
'11': null,
'12': null,
'13': null,
'14': null,
'15': null,
'16': null,
'17': null,
'18': null,
'19': null,
'2': null,
'20': null,
'21': null,
'22': null,
'23': null,
'24': null,
'25': null,
'26': null,
'27': null,
'28': null,
'3': null,
'4': null,
'5': null,
'6': null,
'7': null,
'8': null,
'9': null
},
prohibits: { effective: [Object], global: [Object], local: [Object] },
prohibitsChanged: 0,
reportedCondition: { _created:<PHONE_NUMBER>092, more: {} },
rssi: {},
sendDesiredConditionsPending: false,
sendDesiredConditionsTime: '2020-11-20T10:27:25.605Z',
serial: 'asdfasdf',
systemChangeoverSettings: { masterZone: [Object], priority: 1 },
timezone: null
}
}
}
],
id: '1477083513267-2908743508',
label: 'kumo cloud',
lastScheduleChange: 0,
lastUpdate:<PHONE_NUMBER>958,
level: 1,
version: 3591,
zoneTable: {}
},
'no device token'
]
[11/20/2020, 7:16:28 AM] [Kumo] Kumo API: Successfully connected to the Kumo API.
[11/20/2020, 7:16:28 AM] [Kumo] Parsing child: [
{
'$$hashKey': 'object:730',
children: [],
id: '1442269912170-3273445245',
label: 'Home',
lastScheduleChange:<PHONE_NUMBER>687,
lastUpdate:<PHONE_NUMBER>299,
level: 2,
reportedCondition: {
more: {},
operation_mode: 2,
power: 1,
set_temp: 21,
sp_cool: 11.5,
sp_heat: 10
},
version: 655,
zoneTable: {
'1507290186': {
'$$hashKey': 'object:541',
_isRespondingLocally: null,
_requestRescan: 0,
address: '<IP_ADDRESS>',
desiredConditionStack: [],
eqcStageThreeBacksupChannels: [Object],
eqcUpdatedLocally: [Object],
equipmentControllerSettings: {},
errorHandler: [Object],
forceCloudUpdates: false,
hasElectricHeatingOption: false,
holdChanged: 0,
label: 'Pump',
lastUpdate:<PHONE_NUMBER>092,
ledDisabled: false,
localAdapterStatus: 'NORMAL',
mac: '00:1d:c9:92:bc:c3',
mhk2Settings: [Object],
optimalStart: false,
overrideSettings: {},
port: 80,
profileCodeFrames: [Array],
programEventSettings: [Object],
prohibits: [Object],
prohibitsChanged: 0,
reportedCondition: [Object],
rssi: {},
sendDesiredConditionsPending: false,
sendDesiredConditionsTime: '2020-11-20T10:27:25.605Z',
serial: 'asdfasdfasdf',
systemChangeoverSettings: [Object],
timezone: null
}
}
}
]
[11/20/2020, 7:16:28 AM] [Kumo] Serial: asdfasdfasdf
[11/20/2020, 7:16:28 AM] [Kumo] Label: Pump
[11/20/2020, 7:16:28 AM] [Kumo] Parsing child: []
[11/20/2020, 7:16:28 AM] [Kumo] Number of devices found: 1
[11/20/2020, 7:16:28 AM] [Kumo] Token:asdfasdfasdfadsf
[11/20/2020, 7:16:28 AM] [Kumo] Restoring existing accessory from cache: Pump
[11/20/2020, 7:16:28 AM] [Kumo] Initializing "Pump" as generic (unspecified) unit.
[11/20/2020, 7:16:28 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 9,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:28 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:31 AM] [Kumo] Kumo response: [
true,
null,-(86%)
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:31 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:31 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:31 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:32 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:32 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:32 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:32 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:32 AM] [Kumo] Kumo response: [
true,-(90%)
null,-(90%)
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf,
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:32 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:32 AM] [Kumo] Kumo response: [
true,-(90%)
null,-(90%)
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:32 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:32 AM] [Kumo] Kumo response: [
true,-(91%)
null,-(91%)
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 12,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:32 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,-(93%)
null,-(93%)
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,-(93%)
null,-(93%)
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf,
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.
[11/20/2020, 7:16:33 AM] [Kumo] Kumo response: [
true,
null,
[
[
{
active_thermistor: null,
actual_fan_speed: 2,
air_direction: 0,
device_serial: 'asdfasdf',
fan_speed: 0,
id: '2253230162601623',
it_status: 'NORMAL',
operation_mode: 9,
out_of_use: 0,
power: 1,
prohibit_local_remote_control: 0,
raw_frames: 'fc6201301002000001091a000000000cab0000000080 fc620130100300000d008caeadfe0000000000000068 f
c6201301004000000800000000000000000000000d9 fc620130100900000002000000000000000000000052',
record_time: '2020-11-20T12:16:19.616Z',
room_temp: 14.5,
room_temp_a: 23,
room_temp_beyond: null,
rssi: -44,
run_test: null,
seconds_since_contact: 14,
set_temp: 21.5,
set_temp_a: 21.5,
sp_auto: null,
sp_cool: null,
sp_heat: null,
status_display: 0,
temp_source: null,
two_figures_code: 'A0',
unusual_figures: 32768
}
],
[]
]
]
[11/20/2020, 7:16:33 AM] [Kumo] queryDevice success.

It looks like you can now set Celsius or Fahrenheit which is a good thing!   This is looking better under the beta.  :-)

by the way, I didn't see the line below until I reran home bridge out of debug mode.  It may be that I just missed copying it out of the debug log.
[11/20/2020, 7:33:07 AM] [Kumo] Initializing "Pump" as generic (unspecified) unit.

Looks like it is working! Please check to see if you can control the set point and mode (heat/cool/auto/off) appropriately. Easiest thing is change it on the Home App and then wait a while (30 secs or sometimes more) and see if the Kumo app reports the change. Do the reverse as well to see if the Home App can be appropriately updated. Do the same with the temp set point and see if it propagates appropriately (Kumo -> Home, Home -> Kumo).
The reported Fahrenheit temps may be off by a degree within a certain range. It has do with the Celsius to Fahrenheit conversion being different in the Kumo app and HomeKit - see #3.
Try out for a few days and if it looks good. I'll push the beta to the main branch.

Fan control appears to be working okay.   When I set the fan all the way down though, it doesn't set it to auto.  It sets it to "quiet".   Changing temperature is working and when I set it to "Auto" for heat/cool, it's working fine.   Though when you open up the app in HomeKit, it shows Cooling to 70 degrees, but the header shows "heating to 70 degrees"

Ok, it took a couple of minutes, but now it says "set to 70" in auto mode.

What's also interesting on the beta is that i'm still seeing Heater/Cooler... will that go away with this update?

Here's something that I don't know if you can get working with HomeKit.   If I set Kumo to Dehumidify, it sends the data back to Homebridge as the device is off and the fan is off.

Bidirectional commands seem to be flowing.   I haven't tried "Fan only" mode on it yet.   (i'm working at the office while playing with this... )

It seems to be able to  bring it out of Humidify mode, but it takes it some time to do so when you set it in the Home app back to Heat from it's 'off' state (which is really dehumidify).   It took about 4-5 minutes for Kumo to recognize it.
I kept going back to the Home app and it kept showing it as off still, but now it's showing as Heating.
I'm betting that's just a refresh thing and it takes a while for Kumo to recognize the command....?

Can you try deleting the Heater/Cooler in the Homebridge UI? I'd like to know if it comes back when you restart. If so, that's a bug and I'll see if I can track down where it is coming in. My guess is that the accessory is still there from the previous version.

for the fan - to set to auto, turn the fan device in Home off. if its set to '0%' it will run at the lowest manual setting. My rationale was that the fan control is really a manual fan control, so with it 'on' you are controlling fan speed manually, with it 'off' it sets to automatic. Does that make sense?

For the dehumidifier, I would have to expose a new accessory in HomeKit and have it coordinate with the Thermostat. Something like, you turn on the dehumidifier in Home and it would turn off the Thermostat. If you use the dehumidifer function (I live in the NE so really if ever need it), I can maybe work on it over the weekend and see if I can get it working. Let me know if you have any ideas about how it should work.

re: the lag. it's a delay between the Kumo cloud and the device. It doesn't seem to poll very often and the interval is inconsist. You could try checking the direct connection option but that might break the plugin as I have only tested this with the v2 controller. (It's easy enough to turn it back off though)
Personally speaking, the lag is pain when debugging but once you have it setup the lag isn't much of an issue once you know that it will work. The direct connection is nicer but it might need more debugging.

Fan only mode shows the thermostat to off and fan to on.  So that appears to be working just fine bidirectionally from a HomeKit to Kumo and vice versa.

RE: for the fan - that works and makes sense to me.
RE: dehumidify, I am in the very very northeast US so I do use dehumidify in the summer months.  Costs less on power bills and cools just as if not better than Cool mode.
RE: Heater/Cooler in HB UI, I don't have the option to delete it sadly.  (screenshot)

So far, it's working as designed.   Another thing about the heater/cooler, it does seem to be following the plugin as when I combine the accessories into one button on the Home app, it shows up in the accessories section.

Here's some instructions to remove a single accessory:

Click on the three dots. Click homebridge settings.

Click on the arrow. Click on the trash icon and reboot.
If the heater/cooler is still there, then there is a bug.

Oddly, i don't seem to have that option.

I'm running HB 1.2.3.

And configUI 4.34

As far as I know, it's on the Homebridge Settings page you show in your first screen shot if you scroll down a bit.

I'm on Homebridge v1.1.6 with homebridge-config-ui-x v4.33.0 (Node.js Version | v14.15.0).

Hmm.... I'm running this in a docker on Unraid.   I wonder if that's why the options are different for me.
Node was on 14.14, just updating to 14.15.
Running all of the same versions now and it's still only giving me the two options above (unpair bridges... and reset home bridge accessories.
I don't have the Environment Variables nor the Manage Cached Accessories options.
How odd!

Could it be a plugin that's giving those options for you?

It looks like it's the docker version of HomeBridge for UnRaid that's the culprit.  I faked home bridge out and ran it with the variable to make it think it's running in a Docker and now I see the debug option and the accessory flag option.   It must be this specialized version that's running that is available for Unraid

Can I go ahead and close this issue? Is the beta still working for you? Any lingering issues?
I will be working on adding the dehumidifier as a separate accessory shortly.

Yes. It does seem to have resolved it for me.  Thank you.

On Dec 10, 2020, at 3:51 PM, Fraser Sim<EMAIL_ADDRESS>wrote:

Can I go ahead and close this issue? Is the beta still working for you? Any lingering issues?
I will be working on adding the dehumidifier as a separate accessory shortly.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.


Networking Issues - VMWARE 15

Operating System Version: Windows 10 Enterprise
Provider (VirtualBox/VMWare): VMWare Workstation 15
Vagrant Version: 2.2.3
Packer Version: 1.4.2
Using stock boxes (downloaded)
Is the issue reproducible or intermittent? reproducible

I have been trying for 3 days to build this lab. I have downloaded the latest detectionlab. I run ./build.ps1 -ProviderName vmware_desktop -VagrantOnly. The download of the logger finishes first. Then the DC will installed the build will fail trying to access https://<IP_ADDRESS>. The issue is that can't access that IP as the nic is in HOST-ONLY. When I open the properties for the machine I see NAT and then Custom (vmnet2) but points to VMnet0 (Bridge Mode).
I have reset all my virtual network editor to factory and attempted again same issues today. So looking forward to this lab to test my attacks on the server.
this happens each time  - The DC box is running in VMWARE and throw that error.
[vagrant_up_host] Running for dc
Attempting to bring up the dc host using Vagrant
[vagrant_up_host] Finished for dc. Got exit code: 1
[main] vagrant_up_host finished. Exitcode: 1
WARNING: Something went wrong while attempting to build the dc box.
Attempting to reload and reprovision the host...
[main] Running vagrant_reload_host for: dc
[vagrant_reload_host] Running for dc
[vagrant_reload_host] Finished for dc. Got exit code: 1
D:\DetectionLab\build.ps1 : Failed to bring up dc after a reload. Exiting
At line:1 char:1

./build.ps1 -ProviderName vmware_desktop -VagrantOnly

  + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
  + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,build.ps1

[main] Running post_build_checks
[post_build_checks] Running Splunk Check.
[download] Running for https://<IP_ADDRESS>:8000/en-US/account/login?return_to=%2Fen-US%2F, looking for This browser is not supported by Splunk
Error occured on webrequest: Exception calling "DownloadString" with "1" argument(s): "Unable to connect to the remote server"
[post_build_checks] Splunk Result: False
[post_build_checks] Running Fleet Check.
[download] Running for https://<IP_ADDRESS>:8412, looking for Kolide Fleet
Error occured on webrequest: Exception calling "DownloadString" with "1" argument(s): "Unable to connect to the remote server"
[post_build_checks] Fleet Result: False
[post_build_checks] Running MS ATA Check.
[download] Running for https://<IP_ADDRESS>, looking for
Error occured on webrequest: Exception calling "DownloadString" with "1" argument(s): "Unable to connect to the remote server"
[post_build_checks] ATA Result: False
WARNING: Splunk failed post-build tests and may not be functioning correctly.
WARNING: Fleet failed post-build tests and may not be functioning correctly.
WARNING: MS ATA failed post-build tests and may not be functioning correctly.
[main] Finished post_build_checks

Hi @thededman - sorry you're having problems getting this to work. Unfortunately the build.ps1 script doesn't provide very verbose debugging output. Can you try the following and let me know where things hang up and post the logs to a Github gist?
PS> cd DetectionLab/Vagrant
PS> vagrant destroy -f
PS> vagrant up --provider=vmware_desktop

I have completed the steps above. Logger builds fine, but not able to browser to https://<IP_ADDRESS>:8000 from another virtual machine PC with same networking as DetectionLabs.
The DC box runs fine I see it in vmware, yet the logs say it can not talk to it. I did increase the config.vm.boot_timeout, same thing.

Update- Clean Windows 10 Pro(fresh reload) PC, 32GB Ram and Core i7. Installed vagrant and the other bells and whistles. Grab the master fine. Ran vagrant up --provider=vmware_desktop.
This is the error on the end-
**logger: The Splunk web interface is at https://logger:8000
There are errors in the configuration of this machine. Please fix
the following errors and try again:
vm:

The 'reload' provisioner could not be found.**
I think I'm not meant to build this lab.

Update- fresh install of vmware and vagrant and the plugins pulled down the master file. Builds the logger fine, then craps out that DC build. The DC server gets an address from NAT but the second nic does not get an IP address. (192.168.38.xxx). Also I have a second PC that is clean Windows 10 Pro, and same results on that one as well. I guess I'm not worthy to build this lab.

@thededman there's no reason to think that. There are certainly some things we can double check:
Here's my Windows networking settings - they're the same as yours

Can you verify all of your vmnet ethernet adapters are turned on? If Virtualbox is installed as well, be sure to disable the Virtualbox adapters and enable the VMnet ones:

Also make sure all the relevant VMware services are running:

@thededman I don't think I ever tested VMware on Windows, I think I'm having the exact same issue. Let me dig into this more tonight - I suspect I may have to recreate the boxes as something may be wrong here.

@thededman oddly enough this image works with VMware Fusion and not Workstation. It's definitely not a problem with your setup, it's a problem with the image (potentially the version of VMware tools, not 100% sure yet.). I'm still debugging, but thanks for surfacing this issue!

Hi @thededman - this Github issue helped me realize there's a bug with Vagrant & VMware workstation, but the good news is that we've found a workaround. There's an existing Github issue tracking this exact problem, but I hadn't realized the two were connected until tonight: https://github.com/clong/DetectionLab/issues/169
To fix this:
Edit the files at

%userprofile%.vagrant.d\boxes\detectionlab-VAGRANTSLASH-win2016\1.3\vmware_desktop\Vagrantfile
%userprofile%.vagrant.d\boxes\detectionlab-VAGRANTSLASH-win10\1.3\vmware_desktop\Vagrantfile

In those files, remove the following lines:
config.vm.network :forwarded_port, guest: 3389, host: 3389, id: "rdp", auto_correct: true
config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", auto_correct: true

Do another vagrant destroy -f dc wef win10 and vagrant up and you should see connectivity to the DC now. This is definitely a bug in the way Windows handles port forwarding on VMware Workstation.

Excellent. I will give this a try this afternoon.

This installed fine this time! WOOT WOOT! Time to attack the boxes and make some noise! Thanks. @clong

Glad to hear it! I'll be pushing out a new box with this fix included soon


Authorization headers silently shared between clients.

Bug report
Describe the bug
If you do
anon_client = supabase.create_client(SUPABASE_URL, SUPABASE_ANON_KEY)
service_client  = supabase.create_client(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY)

Then anon_client will have service role privileges, which is pretty bad and could cause security issues.
E.g. anon_client.auth.admin.list_users() will just list all the users.
This happens because thedefault  SyncMemoryStorage in
https://github.com/supabase-community/supabase-py/blob/main/supabase/_sync/client.py#L35
is the same object for both clients, due to https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments
Hence the authoriztion header with the service role key will enter into the anon client.

Thanks for this. I was able to replicate this and will push out a patch version with a fix soon.

Thanks for reporting the fix and the follow on PR

This has been addressed in release 2.4.2


Cache ServiceAccounts in push context

Currently during push, GetIstioServiceAccounts is called when pilot generate outbound clusters for each proxy. It is very inefficient, complexity is O(n*n).
Should better cache the ServiceAccounts in push context, like map[hostname:port]-->[]string. Just like allServices virtualServiceConfigs...

I've done some work before on this topic. Unless you've started something, I can pick this up.


Added dropdown menu for feedback

Added the dropdown menu for feedback column, with some common feedback options (list generated by analyzing previous feedback). Made it so that the dropdown is required, while the additional feedback is not. If the user selects "other" from the dropdown, then the additional feedback becomes required. Made sure that the new "error" field with the common feedback is being sent as part of the payload.

This change is

Initial pass of comments, not looking at UI/UX

Reviewed 5 of 5 files at r1.
Review status: all files reviewed at latest revision, 17 unresolved discussions.

src/generic_ui/locales/en/messages.json, line 1451 [r1] (raw file):

    "message": "Apply"
  },
  "CUSTOM_ERROR_PLACEHOLDER": {

Can you add descriptions for these messages?  Remember, whoever is translating this has no knowledge of anything except what you put there.  The description could be something like "a prompt to give the user asking them to select their favourite emoji after they send a message that does not contain an emoji"

src/generic_ui/polymer/feedback.html, line 86 [r1] (raw file):

    }
    #errorLink core-icon {
      height: 18px !important;

Will this work without !important perchance?  Using that tends to cause complications later on.

src/generic_ui/polymer/feedback.html, line 89 [r1] (raw file):

      width: 18px !important;
    }
    #errorLink paper-item {

The selector here does not give me a good idea of precisely what this is being applied to.  Might make more sense if the outside selector was for the dropdown.

src/generic_ui/polymer/feedback.html, line 90 [r1] (raw file):

    }
    #errorLink paper-item {
      font-size: 16px;

Just double-checking: are both font-sizes necessary?

src/generic_ui/polymer/feedback.html, line 95 [r1] (raw file):

      padding: 0;
    }
    #label:not(.selectedItem) {

I'm having trouble figuring out what element this is being applied to, can you clarify that?

src/generic_ui/polymer/feedback.html, line 100 [r1] (raw file):

    }

Remove blank line please

src/generic_ui/polymer/feedback.html, line 118 [r1] (raw file):

      left: -64px !important;
    }
    paper-input-decorator[id=errorDecorator] /deep/ .unfocused-underline,

For anything affecting a specific element, it's easier to just use #XXX instead of [id=XXX]

src/generic_ui/polymer/feedback.html, line 212 [r1] (raw file):

          </paper-input-decorator>

{{"CUSTOM_ERROR_TITLE" | $$ }}

Can you switch to using double-quotes for HTML attributes?  Thanks.

src/generic_ui/polymer/feedback.html, line 213 [r1] (raw file):

{{"CUSTOM_ERROR_TITLE" | $$ }}

errorLink does not really give me much information about this element just reading it, any chance of making the id more descriptive?

src/generic_ui/polymer/feedback.html, line 214 [r1] (raw file):

{{"CUSTOM_ERROR_TITLE" | $$ }}

          <paper-dropdown-menu label='{{ "CUSTOM_ERROR_PLACEHOLDER" | $$ }}' error='{{"NO_CUSTOM_ERROR_PLACEHOLDER" | $$ }}'>

I think you are missing a level of indentation here

src/generic_ui/polymer/feedback.html, line 214 [r1] (raw file):

{{"CUSTOM_ERROR_TITLE" | $$ }}

          <paper-dropdown-menu label='{{ "CUSTOM_ERROR_PLACEHOLDER" | $$ }}' error='{{"NO_CUSTOM_ERROR_PLACEHOLDER" | $$ }}'>

What is the error attribute for?

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):

          <paper-dropdown-menu label='{{ "CUSTOM_ERROR_PLACEHOLDER" | $$ }}' error='{{"NO_CUSTOM_ERROR_PLACEHOLDER" | $$ }}'>
            <paper-dropdown class="dropdown" valign="bottom">
                <core-menu class="menu" on-core-select='{{ updateError }}' selected=null id='errorInput'>

What is the selected=null for?

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):

          <paper-dropdown-menu label='{{ "CUSTOM_ERROR_PLACEHOLDER" | $$ }}' error='{{"NO_CUSTOM_ERROR_PLACEHOLDER" | $$ }}'>
            <paper-dropdown class="dropdown" valign="bottom">
                <core-menu class="menu" on-core-select='{{ updateError }}' selected=null id='errorInput'>

It seems to me that it might be easier to bind selected to a variable instead of using the core-select event, any reason why we're using the event?

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):

            <paper-dropdown class="dropdown" valign="bottom">
                <core-menu class="menu" on-core-select='{{ updateError }}' selected=null id='errorInput'>
                      <paper-item errorCode = 'Cloud gets disconnected'> My cloud connections get disconnected.</paper-item>

For style consistency, there should not be spaces around the = signs here.

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):

            <paper-dropdown class="dropdown" valign="bottom">
                <core-menu class="menu" on-core-select='{{ updateError }}' selected=null id='errorInput'>
                      <paper-item errorCode = 'Cloud gets disconnected'> My cloud connections get disconnected.</paper-item>

In general, try to avoid creating your own html attributes.  The normal way to handle this is to use data attributes.

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):

            <paper-dropdown class="dropdown" valign="bottom">
                <core-menu class="menu" on-core-select='{{ updateError }}' selected=null id='errorInput'>
                      <paper-item errorCode = 'Cloud gets disconnected'> My cloud connections get disconnected.</paper-item>

Please add these strings as messages

src/generic_ui/polymer/feedback.ts, line 87 [r1] (raw file):

    if (detail.isSelected) {
      this.error = detail.item.getAttribute('errorCode');

Blank line

Comments from Reviewable

Review status: 2 of 5 files reviewed at latest revision, 17 unresolved discussions.

src/generic_ui/locales/en/messages.json, line 1451 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Can you add descriptions for these messages?  Remember, whoever is translating this has no knowledge of anything except what you put there.  The description could be something like "a prompt to give the user asking them to select their favourite emoji after they send a message that does not contain an emoji"

Done.

src/generic_ui/polymer/feedback.html, line 86 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Will this work without `!important` perchance?  Using that tends to cause complications later on.

I copied code from the splash.html file, which also had a dropdown, because my original code for a dropdown wasn't working. Because of this, I am not really sure if !important is what makes it work, but it didn't seem to break after I removed it!

src/generic_ui/polymer/feedback.html, line 89 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> The selector here does not give me a good idea of precisely what this is being applied to.  Might make more sense if the outside selector was for the dropdown.

Done.

src/generic_ui/polymer/feedback.html, line 90 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Just double-checking: are both font-sizes necessary?

Turns out they weren't both necessary! Like I said above, I copied this code from code for a dropdown that was working, so I didn't remove anything from that.

src/generic_ui/polymer/feedback.html, line 95 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I'm having trouble figuring out what element this is being applied to, can you clarify that?

Done. (I put in a comment, but this makes the default selected item for the dropdown, before the user selects something, grey and a little transparent)

src/generic_ui/polymer/feedback.html, line 100 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Remove blank line please

Done.

src/generic_ui/polymer/feedback.html, line 118 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> For anything affecting a specific element, it's easier to just use `#XXX` instead of `[id=XXX]`

Done.

src/generic_ui/polymer/feedback.html, line 212 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Can you switch to using double-quotes for HTML attributes?  Thanks.

Done.

src/generic_ui/polymer/feedback.html, line 213 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> `errorLink` does not really give me much information about this element just reading it, any chance of making the id more descriptive?

Done.

src/generic_ui/polymer/feedback.html, line 214 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I think you are missing a level of indentation here

Done.

src/generic_ui/polymer/feedback.html, line 214 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> What is the `error` attribute for?

Whoops, forgot to get rid of that

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> What is the `selected=null` for?

It makes sure that the default selected item in the dropdown isn't any of the options

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> It seems to me that it might be easier to bind `selected` to a variable instead of using the `core-select` event, any reason why we're using the event?

I modeled this after the code that had the dropdown for selecting a language on the splash page. My understanding is that without the core-select, the dropdown changes but the changes aren't recorded and the error isn't ultimately passed as part of the feedback variable/payload. At least that's what Lucy sort of said.. basically it wasn't working before I put the core-select in there, so I'm not sure if it can/should be changed.

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> For style consistency, there should not be spaces around the `=` signs here.

Done.

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> In general, try to avoid creating your own html attributes.  The normal way to handle this is to use [data attributes](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes).

It didn't work when I changed it! The error stopped being passed as part of feedback, so I kept it the same.

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Please add these strings as messages

Done.

src/generic_ui/polymer/feedback.ts, line 87 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Blank line

Done.

Comments from Reviewable

Great to see this getting some love. I didn't peek at the code but two observations:

That's a lot of writing on the "submit feedback" screen. I'm no UX-er but that's usually a smell and there's a bunch of clauses, e.g. "optional, unless feedback is 'Other'", likely to further frustrate an already-exasperated user. It's worth having a quick chat with @ohnocassio.

You've a bunch of canned responses - cool, I reckon these will be useful, but rather than sending the raw string (which will differ in each language), have you considered extending the feedbackType instead? This will allow us easily aggregate the responses by type. Right now it's only got one possible value but I think your dropdown values are all perfectly reasonable to add.

Reviewed 1 of 4 files at r3.
Review status: 1 of 4 files reviewed at latest revision, 11 unresolved discussions.

src/generic_ui/locales/en/messages.json, line 1463 [r4] (raw file):

  },"NO_CUSTOM_ERROR_PLACEHOLDER": {
    "description": "Error that apears if you do not select any feedback in the dropdown menu .",
    "message": "Please choose feedback most similar to yours"

We are going to want to work with @ohnocassio on the wording for these by the way, just as a heads up.

src/generic_ui/polymer/feedback.html, line 86 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> I copied code from the splash.html file, which also had a dropdown, because my original code for a dropdown wasn't working. Because of this, I am not really sure if !important is what makes it work, but it didn't seem to break after I removed it!

Yup, probably  just unnecessary copying from somewhere else.  When you do need to copy code, first try to see if you can move it to a common location.  If you absolutely need to copy (in this case, let's actually talk about that), make sure you're considering whatn code is actually needed

src/generic_ui/polymer/feedback.html, line 95 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> Done. (I put in a comment, but this makes the default selected item for the dropdown, before the user selects something, grey and a little transparent)

TODO(jpevarnek)

src/generic_ui/polymer/feedback.html, line 213 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> Done.

So `feedbackDropdown` doesn't really seem right for this since the element itself is not a dropdown.  Any chance of making this a bit more applicable?

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> It makes sure that the default selected item in the dropdown isn't any of the options

Why is that necessary?

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> I modeled this after the code that had the dropdown for selecting a language on the splash page. My understanding is that without the core-select, the dropdown changes but the changes aren't recorded and the error isn't ultimately passed as part of the feedback variable/payload. At least that's what Lucy sort of said.. basically it wasn't working before I put the core-select in there, so I'm not sure if it can/should be changed.

Yup, that's totally correct.  What I'm saying is that it will probably be much easier and save you a bunch of code if, instead of attaching a function to the event, you just look for changes in the value itself.  Since all you're doing in the handler is setting the value, there should be no need to actually have a function run.

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> It didn't work when I changed it! The error stopped being passed as part of feedback, so I kept it the same.

(ignoring this after in-person discussion)

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):

      this.$.logCheckbox.checked = true;
    }
    this.feedbackType = (data && data.feedbackType) ? data.feedbackType :

We should probably still keep this so we default to the feedback type being PROXYING_FAILURE when that's the reason.

src/generic_ui/polymer/feedback.ts, line 82 [r4] (raw file):

  updateError: function(event: Event, detail: any, sender: HTMLElement) {
    if (detail.isSelected) {
      this.feedbackType = detail.item.getAttribute('data-errorCode');

errorCode does not seem to apply as much now that it's a feedback type instead of an error code.

Comments from Reviewable

Review status: 1 of 4 files reviewed at latest revision, 10 unresolved discussions.

src/generic_ui/polymer/feedback.html, line 95 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> TODO(jpevarnek)

Ah, sorry, meant to come back to this before hitting publish.
I'm not seeing anywhere where we have an element with the id label or with the class selectedItem, can you clarify this a bit?

Comments from Reviewable

Review status: 1 of 4 files reviewed at latest revision, 10 unresolved discussions.

src/generic_ui/polymer/feedback.html, line 86 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Yup, probably  just unnecessary copying from somewhere else.  When you do need to copy code, first try to see if you can move it to a common location.  If you absolutely need to copy (in this case, let's actually talk about that), make sure you're considering whatn code is actually needed

Sounds good, I'll keep that in mind next time!

src/generic_ui/polymer/feedback.html, line 95 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Ah, sorry, meant to come back to this before hitting publish.
>
> I'm not seeing anywhere where we have an element with the id `label` or with the class `selectedItem`, can you clarify this a bit?

So turns out I was completely wrong and this isn't the code that makes the dropdown grey. Got rid of it! I don't think it did anything haha.

src/generic_ui/polymer/feedback.html, line 213 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> So `feedbackDropdown` doesn't really seem right for this since the element itself is not a dropdown.  Any chance of making this a bit more applicable?

Done.

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Why is that necessary?

This is necessary cause when the user clicks "submit feedback", one of the checks is whether the selected item in the dropdown is null (in which case it'll throw an error, because I made the dropdown compulsory).. if I remove this, the user is able to submit feedback without choosing something from the dropdown

src/generic_ui/polymer/feedback.html, line 216 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Yup, that's totally correct.  What I'm saying is that it will probably be much easier and save you a bunch of code if, instead of attaching a function to the event, you just look for changes in the value itself.  Since all you're doing in the handler is setting the value, there should be no need to actually have a function run.

I'm still not entirely sure what you mean, could you help me when you have time? Or is this fix not essential?

src/generic_ui/polymer/feedback.html, line 217 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> (ignoring this after in-person discussion)

Done.

src/generic_ui/polymer/feedback.ts, line 82 [r4] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> `errorCode` does not seem to apply as much now that it's a feedback type instead of an error code.

Done.

Comments from Reviewable

Reviewed 1 of 4 files at r3, 1 of 2 files at r6, 1 of 3 files at r7.
Review status: 2 of 4 files reviewed at latest revision, 9 unresolved discussions.

src/generic_ui/polymer/feedback.html, line 205 [r5] (raw file):

{{"CUSTOM_ERROR_TITLE" | $$ }}

            <paper-dropdown-menu label='{{ "CUSTOM_ERROR_PLACEHOLDER" | $$ }}'>

Can you swap the ' and " here?  Thanks.

src/generic_ui/polymer/feedback.html, line 216 [r7] (raw file):

          <paper-input-decorator id="errorDecorator" label = '{{ "CUSTOM_ERROR_PLACEHOLDER" | $$ }}' error='{{ "NO_CUSTOM_ERROR_PLACEHOLDER" | $$ }}'></paper-input-decorator>

What is the error here for?

src/generic_ui/polymer/feedback.ts, line 60 [r7] (raw file):

      this.$.errorDecorator.isInvalid = false;
      this.$.feedbackDecorator.isInvalid = false;
      this.$.dropdownContainer.textContent = ui.i18n_t('CUSTOM_ERROR_PLACEHOLDER');

Hopefully we can get rid of a couple of these lines with other changes, see below.

src/generic_ui/polymer/feedback.ts, line 85 [r7] (raw file):

    });
  },
  updateError: function(event: Event, detail: any, sender: HTMLElement) {

I believe this function is no longer referenced anywhere, can you confirm?

src/generic_ui/polymer/feedback.ts, line 92 [r7] (raw file):

  toggleDropdown: function() {
    this.$.collapse.toggle();
    if (this.$.collapse.opened) {

It's a lot easier to just have two elements on the page and have one be hidden if $.collapsed.opened is true/false.  Otherwise, probably better to have an explicit call to a function that takes $.collapsed.opened as an argument in the Polymer element so someone glancing at the HTML can see that it is changing.

src/generic_ui/polymer/feedback.ts, line 98 [r7] (raw file):

    }
  },
  changePlaceholder: function() {

It would be nice if we could collapse the menu when the user makes a selection

src/generic_ui/polymer/feedback.ts, line 99 [r7] (raw file):

  },
  changePlaceholder: function() {
    this.$.dropdownContainer.textContent=this.$.errorInput.children.array()[this.$.errorInput.selected - 2].textContent; //Because errorInput.selected returns values starting from 2 instead of 0 (not sure why)

In response to your comment: because selected returns the attribute you specified (the enum).
I think what you're looking for here is:
if (detail.isSelected) {
  selectedText = detail.item.textContent;
}

Alternatively, what you could do is just have the text for the placeholder be: {{ someArrayOfText[feedbackType] }}
In fact, you could almost have the whole element be something like (this is not real code)
{{someArrayOfText[feedbackType]}}
<core-menu selected="{{ feedbackType }}" ...>
  <template repeat="{{ type, text in someArrayOfText}}">
    <paper-item data-thing="{{type}}">{{text></paper-item>
  </template>
</core-menu>

I think that might be a good way to simplify things, and it might even be useful to try to break this type of selector into its own Polymer element if it's going to be in the UI in multiple places.

Comments from Reviewable

Review status: 2 of 4 files reviewed at latest revision, 9 unresolved discussions.

src/generic_ui/polymer/feedback.html, line 205 [r5] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Can you swap the `'` and `"` here?  Thanks.

Done.

src/generic_ui/polymer/feedback.html, line 216 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> What is the `error` here for?

The error is called when the user tries to submit feedback without choosing one of the options. Because the expansion menu/dropdown thing did not have an error attribute, I had to make an invisible paper-input-decorator, which does have an error field

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> We should probably still keep this so we default to the feedback type being `PROXYING_FAILURE` when that's the reason.

Done.

src/generic_ui/polymer/feedback.ts, line 85 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I believe this function is no longer referenced anywhere, can you confirm?

Yup, forgot to get rid of it

src/generic_ui/polymer/feedback.ts, line 92 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> It's a lot easier to just have two elements on the page and have one be hidden if `$.collapsed.opened` is true/false.  Otherwise, probably better to have an explicit call to a function that takes `$.collapsed.opened` as an argument in the Polymer element so someone glancing at the HTML can see that it is changing.

I'm not entirely sure what you mean by this, so I somewhat fixed it, but I'd love to talk to you about it more

src/generic_ui/polymer/feedback.ts, line 98 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> It would be nice if we could collapse the menu when the user makes a selection

Done.

src/generic_ui/polymer/feedback.ts, line 99 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> In response to your comment: because selected returns the attribute you specified (the enum).
>
> I think what you're looking for here is:
> ```
> if (detail.isSelected) {
>   selectedText = detail.item.textContent;
> }
> ```
>
> Alternatively, what you could do is just have the text for the placeholder be: `{{ someArrayOfText[feedbackType] }}`
>
> In fact, you could almost have the whole element be something like (this is not real code)
>
> ```
> {{someArrayOfText[feedbackType]}}
>
>
>
> ```
>
> I think that might be a good way to simplify things, and it might even be useful to try to break this type of selector into its own Polymer element if it's going to be in the UI in multiple places.

Done. (did it like your first suggestion)

Comments from Reviewable

Reviewed 2 of 2 files at r8.
Review status: all files reviewed at latest revision, 8 unresolved discussions.

src/generic_ui/polymer/feedback.html, line 212 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> Done.

I'm still seeing a lot of inconsistencies, did you push?

src/generic_ui/polymer/feedback.html, line 216 [r7] (raw file):
Previously, shilpa10kumar9 wrote…
> The error is called when the user tries to submit feedback without choosing one of the options. Because the expansion menu/dropdown thing did not have an error attribute, I had to make an invisible paper-input-decorator, which does have an error field

By the way, you have a bunch of unnecessary spaces around the equal signs.  For HTML tags, you should use `foo="bar"`

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> Done.

I'm not seeing this change, did you push it?

src/generic_ui/polymer/feedback.ts, line 92 [r7] (raw file):
Previously, shilpa10kumar9 wrote…
> I'm not entirely sure what you mean by this, so I somewhat fixed it, but I'd love to talk to you about it more

Let's talk about this more in person :)

src/generic_ui/polymer/feedback.ts, line 91 [r8] (raw file):

  changePlaceholder: function(event: Event, detail: any, sender: HTMLElement) {
    if (detail.isSelected) {
      this.$.dropdownContainer.textContent= detail.item.textContent;

Space before the equal sign here

Comments from Reviewable

Review status: 2 of 4 files reviewed at latest revision, 8 unresolved discussions, some commit checks failed.

src/generic_ui/polymer/feedback.html, line 212 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I'm still seeing a lot of inconsistencies, did you push?

Idk why it didn't update! Done.

src/generic_ui/polymer/feedback.html, line 216 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> By the way, you have a bunch of unnecessary spaces around the equal signs.  For HTML tags, you should use `foo="bar"`

Done.

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I'm not seeing this change, did you push it?

when I put back the lines you wanted, the default feedback type was the first one, instead of the placeholder that used to appear. I am pretty sure the placeholder is a better option; plus, if the user selects something and clicks the back arrow, and then clicks on submit feedback again, the selection is still there. Is that what you were talking about? If not, is there a different way to fix the issue you pointed out?

src/generic_ui/polymer/feedback.ts, line 60 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Hopefully we can get rid of a couple of these lines with other changes, see below.

Done.

src/generic_ui/polymer/feedback.ts, line 92 [r7] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Let's talk about this more in person :)

Done.

src/generic_ui/polymer/feedback.ts, line 91 [r8] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Space before the equal sign here

Done.

Comments from Reviewable

Couple tiny issues, I'll glance over everything again once those get resolved.  Thanks for working through all of this!

Reviewed 4 of 4 files at r9.
Review status: all files reviewed at latest revision, 3 unresolved discussions.

src/generic_ui/locales/en/messages.json, line 1311 [r9] (raw file):

  },
  "NO_CUSTOM_ERROR_PLACEHOLDER": {
    "description": "Error that apears if you do not select any feedback in the dropdown menu .",

I think you have an accidental space here

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> when I put back the lines you wanted, the default feedback type was the first one, instead of the placeholder that used to appear. I am pretty sure the placeholder is a better option; plus, if the user selects something and clicks the back arrow, and then clicks on submit feedback again, the selection is still there. Is that what you were talking about? If not, is there a different way to fix the issue you pointed out?

Feel free to have it default to `null` if there is nothing, but if `data.feedbackType` is set, let's make sure we select it for them.

Comments from Reviewable

Review status: 2 of 4 files reviewed at latest revision, 2 unresolved discussions.

src/generic_ui/locales/en/messages.json, line 1311 [r9] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I think you have an accidental space here

Done.

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Feel free to have it default to `null` if there is nothing, but if `data.feedbackType` is set, let's make sure we select it for them.

Done.

Comments from Reviewable

Reviewed 2 of 2 files at r10.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, shilpa10kumar9 wrote…
> Done.

I think you'd be better off here conditionally setting it to `data.feedbackType` instead of having the ternary statement.  No reason to set the value to what it already is.
e.g.:
if (data && data.feedbackType) {
  this.feedbackType = data.feedbackType;
}

Comments from Reviewable

Review status: 3 of 4 files reviewed at latest revision, 1 unresolved discussion.

src/generic_ui/polymer/feedback.ts, line 28 [r1] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> I think you'd be better off here conditionally setting it to `data.feedbackType` instead of having the ternary statement.  No reason to set the value to what it already is.
>
> e.g.:
> ```
> if (data && data.feedbackType) {
>   this.feedbackType = data.feedbackType;
> }
> ```

Done.

Comments from Reviewable

:thumbsup:

Reviewed 1 of 1 files at r11.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable

Ah, sorry, noticed a couple more things.  :thumbsup: after addressed.

Review status: all files reviewed at latest revision, 4 unresolved discussions, all commit checks successful.

src/generic_ui/polymer/feedback.html, line 121 [r11] (raw file):

    #errorDecorator /deep/ .unfocused-underline,
    #errorDecorator /deep/ .focused-underline {
      /* Remove the underline from the errorDecorator textbox, which is there to throw the error for not selecting

For multi-line comments, have the opening and closing tags on their own lines

src/generic_ui/polymer/feedback.html, line 167 [r11] (raw file):

      height: 15px;
      width: 15px;
    }

Trailing whitespace

src/generic_ui/polymer/feedback.html, line 210 [r11] (raw file):

                <paper-item data-feedbackOption="{{ UserFeedbackType.TROUBLE_STARTING_CONNECTION }}"> {{ "TROUBLE_STARTING_CONNECTION" | $$ }}</paper-item>
                <paper-item data-feedbackOption="{{ UserFeedbackType.DISCONNECTED_FROM_FRIEND }}"> {{ "DISCONNECTED_FROM_FRIEND" | $$ }}</paper-item>
                 <paper-item data-feedbackOption="{{ UserFeedbackType.OTHER_FEEDBACK }}"> {{ "OTHER_FEEDBACK" | $$ }} </paper-item>

No space between the tags and curly braces

src/interfaces/uproxy_core_api.ts, line 22 [r11] (raw file):

export enum UserFeedbackType {
  USER_INITIATED = 0,
  PROXYING_FAILURE = 1,

Do we have an error message that corresponds to PROXYING_FAILURE?

Comments from Reviewable

Review status: 3 of 4 files reviewed at latest revision, 4 unresolved discussions.

src/generic_ui/polymer/feedback.html, line 121 [r11] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> For multi-line comments, have the opening and closing tags on their own lines

Done.

src/generic_ui/polymer/feedback.html, line 167 [r11] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Trailing whitespace

Done.

src/generic_ui/polymer/feedback.html, line 210 [r11] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> No space between the tags and curly braces

Done.

src/interfaces/uproxy_core_api.ts, line 22 [r11] (raw file):
Previously, jpevarnek (Jonathan Pevarnek) wrote…
> Do we have an error message that corresponds to `PROXYING_FAILURE`?

I don't think so, Proxying_failure was part of user feedback type before I messed with it (I think feedback automatically gets sent with this feedback type if something in particular happens). I chose not to change anything related to this because I was afraid of messing something else up

Comments from Reviewable


Add support for .select method on State

This is just an idea, but I think there is value in allowing to create substates.
Basically, we'll be able to do const newState = state.select(selector). What is the point? Well, we can effectively denormalize data without touching the "main" store.
For example, we can have:
type Store = {
  tasks: { [id: number]: Task },
  projects: { [id: number]: Project }
}

Meanwhile a denormalized state can contain task arrays which are grouped by due date, project ID, section ID, etc. This can have several benefits compared to typical selector functions from reselect.
First, we can use useValueSelector and if we write a custom comparator, we can easily solve a problem of invalidating previous results. E.g. if we have 12 projects, it is pretty tricky to write a selector which will correctly memoize tasks for each project, we have to compromise to either call it on the first render (create a custom selector per component and memoize it), or just hope that the re-rendering component will have the same project ID, and hence the selector won't be invalidated.
This problem won't exist here, because we can ensure that a subset of a group will be the same by reference (if no tasks have changed there, of course).
Second, we'll still have access to combineStates, which by default doesn't do anything without subscriptions, so with smart comparators we can potentially avoid pretty much any updates where the data didn't change.
Last, by creating a tree of subscriptions, we can calculate pretty much everything in a single iteration. This is a pretty niche use-case, because technically both a single traversal and multiple ones are O(1), but in case we have thousands of items, and we are not too careful, there definitely can be a difference between traversing over 10000 items once, and traversing between 10000 items 30 times (imagine calculating number of tasks per each project in the sidebar separately).
The only downside is that we can calculate some things prematurely, especially if we utilize comparators, so maybe some lazy mechanics can be introduced.

I might be reinventing the wheel here.
First, it is not really necessary to include that in the State type at all. Consider this:
import { createState, type State } from "veles";

function selectState<F, T>(
  state: State<F>,
  selector: (state: F) => T
): State<T> {
  const initialValue = selector(state.getValue());

  const newState = createState(initialValue);
  state.trackValueSelector(
    selector,
    (selectedState) => {
      newState.setValue(selectedState);
    },
    { skipFirstCall: true }
  );

  return newState;
}

This implementation is more or less what I wanted, and essentially is a map operation on observables. If you think of State as a stream of values, we can subscribe to it, modify it as we want, and then continue to use it. Also we can insert custom comparator at every opportunity.

After thinking some more on the nature of createState and potential composability, I feel like it is better to refactor the approach and to extract useAttribute, useValue and so on into their own functions.
So:
<div>
  {useValue(nameState)}
</div>

The idea is that this way we can accept other observables. I am only somewhat familiar with Rxjs, I will need to review what's available, what is their API and if I can offer selector functionality (imo selectors are pretty important to avoid unnecessary re-renders, and cascading selectors should be really good for that).
For now, the API will stay the same, but since I basically re-created observables, I don't see the point to expand basic tools for them. Maybe I can implement from for rxjs to transform, and that would be enough (Solidjs does that).


Add checkoutToken api to unstable release

Background
Resolves https://github.com/Shopify/checkout-web/issues/22608
NOTE: I only included my changes. There's an issue with the current customer-account changes that blows up the build.
Solution
Provides stable id in checkout that can be mapped to WebPixel checkout payloads (via token in checkout payload) and Orders resource (via Admin REST API Orders checkout_token).
🎩

Create a spin instance that includes the ui-extensions repo and checkout this branch: denii/unstable-release-2023-09-05
Create a new app with checkout ui extension locally: yarn create @shopify/app and yarn generate extension
In the local extension, use the new api, both directly and through the hook:

const { checkoutToken } = useApi();

const value = useSubscription(
  checkoutToken,
);

or
const hookValue = useCheckoutToken();

In your app directory, run the following to copy the ui-extensions code into your app:

VM=direct.$(spin show -o fqdn)
rsync -av --delete $VM:~/src/github.com/Shopify/ui-extensions/packages/ui-extensions node_modules/@shopify/ && \
rsync -av --delete $VM:~/src/github.com/Shopify/ui-extensions/packages/ui-extensions-react node_modules/@shopify/

Run yarn dev or yarn build to check that the app builds and can execute without error using the updated unstable api

Checklist

[x] I have :tophat:'d these changes
[x] I have updated relevant documentation

/shipit


Rename lib/domains/uk/org/adacollege.txt to lib/domains/uk/ac/ada.txt

Ada College received their .ac.uk domain.

@rcsole Thank you for the update! Pull request merged.


Web3ApiClient adding default config should extend interface implementations

When registering interface implementations
const client = new Web3ApiClient({
  interfaces: [
    {
      uri: "uri1",
      implementations: [ "impl1" ]
    }
  ]
});

The expected behavior is to have the default implementations for that interface be added to the implementations array
client.getInterfaces();
/*
[
    {
      uri: "uri1",
      implementations: [ "impl1" , "default1"]
    }
]
*/

The actual behavior is that the interface implementations pair is added.
client.getInterfaces();
/*
[
    {
      uri: "uri1",
      implementations: [ "impl1" , "default1"]
    },
    {
      uri: "uri1",
      implementations: [ "default1"]
    }
]
*/

Additionally, if the developer registers multiple interface implementations pairs for the same interface. They should be merged together:
const client = new Web3ApiClient({
  interfaces: [
    {
      uri: "uri1",
      implementations: [ "impl1" ]
    },
    {
      uri: "uri1",
      implementations: [ "impl2" ]
    }
  ]
});

client.getInterfaces();
/*
[
    {
      uri: "uri1",
      implementations: [ "impl1" , "impl2"]
    }
]
*/

Fixed in #766


Problem with using csm_PositionRaw and InstancedMesh

Hello,  @FarazzShaikh, thank you for awsome extension of three.js.
I found a bug with using csm_PositionRaw with InstancedMesh. See screenshots:
1) vertex shader:
void main() {
    csm_PositionRaw = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}

all vertices are set to the zero position

2) vertex shader (empty):
void main() {
}

or
void main() {
    csm_Position = position;
}

works fine:

csm_PositionRaw is the same as gl_Position thus, to use it with InstancedMesh, you need to multiply the position with the instanceMatrix before projection
csm_PositionRaw = projectionMatrix * modelViewMatrix * instanceMatrix * vec4(position, 1.0);

Let me know if this fixes your issue
csm_Position is the prefered way to override vertex position as you dont need to project or multiply the instanceMatrix to it, it is done for you.

What is your baseMaterial?

Here: https://codesandbox.io/s/wizardly-neco-hczrcn?file=/src/App.tsx:869-976
It seems to work just fine. In my sandbox. Toggling "instanceMesh" in the controls will toggle the multiplication of the matrix.

@FarazzShaikh yeah, sorry for delay, I never used the sandbox)
My sandbox is working fine... strange.
https://codesandbox.io/s/kind-vaughan-thjnch?file=/src/index.js
ok, I will search and fix the error in my project.
Thank you so much for support.
Please do not close the Issue, later I will answer what the problem was 😀

Found the cause of the problem, I will used the material not only in InstancedMesh 🤦♂

What was the solution?

What was the solution?

Use USE_INSTANCING preprocessor directive.
   #ifdef USE_INSTANCING
        vec4 vertexWorldPosition = modelViewMatrix * instanceMatrix * vec4(position, 1.0);
   #else
        vec4 vertexWorldPosition = modelViewMatrix * vec4(position, 1.0);
    #endif

Ahh yes, instanceMatrix is not available if not used with InstancedMesh. Glad it’s solved 😄


NewHTTPClientWithBreaker

panel is created and the breaker added but you never do anything with it beyond that.
I think line 72 should look like this
brclient := &HTTPClient{Client: client, Panel: panel, timeout: timeout}

Thanks, fixed in 81c7671ef7d7a10bbdb7346dcc0e23c6b7278ccd


feat(rpc): support launching on same port

Closes #2529
supports launching ws and http and the same port
DUe to a limitation in jsonrpsee we currently can't run different API on the same port, so this currently fails:
reth node --chain goerli --http --http.api eth --ws --ws.port 8545 --http.port 8545

> Error: Different api modules for http and ws on the same port is currently not supported: http: [Eth], ws: [Admin, Eth]

Codecov Report

Merging #2530 (fd5aaed) into main (ec7a10b) will decrease coverage by 17.26%.
The diff coverage is 13.18%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@             Coverage Diff             @@
##             main    #2530       +/-   ##
===========================================
- Coverage   71.66%   54.40%   -17.26%
===========================================
  Files         489      489
  Lines       61288    61421      +133
===========================================
- Hits        43919    33417    -10502
- Misses      17369    28004    +10635

Flag
Coverage Δ

integration-tests
?

unit-tests
54.40% <13.18%> (-12.28%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

crates/rpc/rpc-builder/src/error.rs
0.00% <0.00%> (-50.00%)
:arrow_down:

crates/rpc/rpc-builder/src/lib.rs
20.93% <13.33%> (-39.27%)
:arrow_down:

... and 236 files with indirect coverage changes


Suggestion: Legacy support for the first mup version

Please add support for the initial mup version that ran non-docker.
Perhaps like this:
mup -v1 deploy
mup -legacy deploy
Something like that?
I have Meteor 1.2 apps that are deployed with the old non-docker solution.
arunoda/meteor-up
It was all fine when you used 2 namespaces.
mup for the old, mupx for the new with docker.
Now you have taken over the old name again. I believe this is a mistake.
I love the new features, but I feel it should have either remained in mupx, or been renamed yet again.
Currently I'm forced to fork the old and change the bin in package.json in order to use it simultaneously with the new stable mup.
It shouldn't be too much work :smile:

Hi Greblak,
Would you mind sharing how you do this currently?
thanks !

Change all occurences of meteorhacks/meteord:base in this file to a docker file of your choice that runs whatever node version you need.
I currently use this for meteor 1.4: oleurud/meteor-graphicsmagick
It's the right node version and includes graphicsmagick.

Thanks

@Greblak instead of forking you can use the git code directly and create a symlink for the new mup as /usr/local/bin/mupx. Thus you don't need to maintain a repo and a simple git pull updates your mupx.


Koa 2 ctx.query

// When GET /path?a[b]=c
// I think `ctx.query ` should be:
{
   a:{
      b:'c'
   }
}
// But it is
{
   'a[b]':c
}

// Is this a bug?

// if it is, I think
// koa/lib/request.js line 11
const qs = require('querystring');
// should replaced by
const qs = require('qs');

@liangxingchen you need https://github.com/koajs/qs

Alternatively, you can use the qs module yourself in a middleware and put the parsed result on the context's state, i.e. ctx.state.query = qs.parse(ctx.querystring). That's what I do in my projects.

If my memory serves me correctly - this is simple by design.
Complexities such as depth can be solved in user land, which as you pointed out: qs has done.

There's only an implicit spec for nested query strings, which is why it's not in core. If there's ever a real spec then :+1:, until then it's just random semantics that people attempt to derive out of historical use-cases

Yeah I believe they're working on a real spec for nested query strings. The current semantics is prone to security issues, which is why it isn't included with koa.

the koa-qs works good! thank you all!


Update index.html

add new menu 2

Test reply from email
On Thu, Aug 15, 2024, 6:08 PM KimiKei @.***> wrote:

Merged #2 https://github.com/KimiKeii/myweb/pull/2 into main.
—
Reply to this email directly, view it on GitHub
https://github.com/KimiKeii/myweb/pull/2#event-13894133121, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/A3RKVHIPKKBRIHYEUTY6BMDZRR4YZAVCNFSM6AAAAABMR2MBKGVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJTHA4TIMJTGMYTEMI
.
You are receiving this because you authored the thread.Message ID:
@.***>


data-table-column align center request

Is there a way to center align column headers?
if not is this possible to have this feature?

You can use custom header templates like this:

<data-table-column>
  <template is="header">

Header

  </template>
</data-table-column>

However, there is a best practice which you should be aware of:

Left align text (where appropriate)
Right align numbers (where appropriate)
Align titles with data
Resize columns to data

@web-padawan thanks for the snippet.


Support LbSubsetFallbackPolicy.NO_FALLBACK

Motivation
The default subset policy, LbSubsetFallbackPolicy.NO_FALLBACK, should be supported.
Modifications:

Support LbSubsetFallbackPolicy.NO_FALLBACK
Add toString methods for xDS classes
Result:
XdsEndpointGroup now adheres to the LbSubsetFallbackPolicy.NO_FALLBACK policy.

Thanks for reviewing. 😉