DS-102-2 Wi-Fi 2gang Light Switch

Product: DS-102-2 Wi-Fi 2gang Light Switch
CPU: WB3S
Dump:
dump.zip

Profile added on main branch. It actually matches another one, the Lonsonho device, so I presume this is just generic stuff. Could you give it a shot and see if it works for you?

Hm, I cannot get to the point where it should connect to the cloudcutterflash AP. It may be my setup, because there are some strange error messages, but shouldn't I at least receive some connection attempt?
pi@iobroker-pi:~/tuya-cloudcutter $ sudo ./run_flash.sh wlan0 MINCO_HEAT/DS-102-2-Gang-WiFi-Switch
Building cloudcutter docker image..
Sending build context to Docker daemon  36.25MB
Step 1/10 : FROM python:3.9-slim-buster AS base
 ---> 6b557201f18f
Step 2/10 : RUN apt-get -qq update && apt-get install -qy --no-install-recommends git hostapd rfkill dnsmasq build-essential libssl-dev iproute2 mosquitto
 ---> Using cache
 ---> 579561b057dd
Step 3/10 : FROM base AS python-deps
 ---> 579561b057dd
Step 4/10 : RUN pip install --upgrade pipenv
 ---> Using cache
 ---> e9cc68880970
Step 5/10 : COPY src/Pipfile /src/
 ---> Using cache
 ---> 4c68b7a59d0b
Step 6/10 : COPY src/Pipfile.lock /src/
 ---> Using cache
 ---> 3b467e9fac62
Step 7/10 : RUN cd /src && PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
 ---> Using cache
 ---> a71c52131eea
Step 8/10 : FROM python-deps AS cloudcutter
 ---> a71c52131eea
Step 9/10 : COPY src /src
 ---> Using cache
 ---> d317bc225d0d
Step 10/10 : WORKDIR /src
 ---> Using cache
 ---> c8044a181c4e
Successfully built c8044a181c4e
Successfully tagged cloudcutter:latest
Successfully built docker image
[?] Select your custom firmware file: OpenBK7231T_UG_1.0.16.bin
 > OpenBK7231T_UG_1.0.16.bin

==> Toggle Tuya device's power off and on again 6 times, with ~1 sec pauses in between, to enable AP mode. Repeat if your device's SSID doesn't show up within ~30 seconds.
Failed to start network-manager.service: Unit network-manager.service not found.
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Found access point name: "A-9D5C", trying to connect..
Device 'wlan0' successfully activated with '034a1969-1f4b-4d99-8192-c57963f78e5d'.
Connected to access point.
Waiting 1 sec to allow device to set itself up..
Running initial exploit toolchain..
Exploit run, saved device config to!
output=/work/configured-devices/MAGvkxQqOGu2.deviceconfig
Saved device config in /work/configured-devices/MAGvkxQqOGu2.deviceconfig
==> Turn the device off and on again once. Repeat 6 more times if your device's SSID doesn't show up within ~5 seconds.
Failed to start network-manager.service: Unit network-manager.service not found.
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Found access point name: "A-9D5C", trying to connect..
Error: Connection activation failed: (53) The Wi-Fi network could not be found.
Failed to start network-manager.service: Unit network-manager.service not found.
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Found access point name: "A-9D5C", trying to connect..
Device 'wlan0' successfully activated with '034a1969-1f4b-4d99-8192-c57963f78e5d'.
Connected to access point.
Configured device to connect to 'cloudcutterflash'
Device is connecting to 'cloudcutterflash' access point. Passphrase for the AP is 'abcdabcd' (without ')
Flashing custom firmware ..
==> Wait for 20-30 seconds for the device to connect to 'cloudcutterflash'. This script will then show the firmware upgrade requests sent by the device.
Using WLAN adapter: wlan0

dnsmasq: failed to create listening socket for <IP_ADDRESS>: Address already in use
Configuration file: /dev/stdin
Using interface wlan0 with hwaddr 00:0f:00:3a:14:07 and ssid "cloudcutterflash"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
^CTraceback (most recent call last):
  File "/usr/local/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/src/cloudcutter/__main__.py", line 340, in <module>
    args.handler(args)
  File "/src/cloudcutter/__main__.py", line 192, in __update_firmware
    __configure_local_device_or_update_firmware(args, update_firmare=True)
  File "/src/cloudcutter/__main__.py", line 160, in __configure_local_device_or_update_firmware
    tornado.ioloop.IOLoop.current().start()
  File "/src/.venv/lib/python3.9/site-packages/tornado/platform/asyncio.py", line 199, in start
    self.asyncio_loop.run_forever()
  File "/usr/local/lib/python3.9/asyncio/base_events.py", line 601, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.9/asyncio/base_events.py", line 1869, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/local/lib/python3.9/selectors.py", line 469, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt
Oh no, something went wrong with updating firmware! Try again I guess..

you have a dns server running on your linux machine. please disable that, as there is one that has to be run inside the docker container in step 3 that is emulating some tuya cloud api calls.

That solved DHCP issue, but still no connetion to the AP.. Hm
Successfully built c8044a181c4e
Successfully tagged cloudcutter:latest
Successfully built docker image
[?] Select your custom firmware file: OpenBK7231T_UG_1.0.16.bin
 > OpenBK7231T_UG_1.0.16.bin

==> Toggle Tuya device's power off and on again 6 times, with ~1 sec pauses in between, to enable AP mode. Repeat if your device's SSID doesn't show up within ~30 seconds.
Failed to start network-manager.service: Unit network-manager.service not found.
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Found access point name: "A-9D5C", trying to connect..
Device 'wlan0' successfully activated with '034a1969-1f4b-4d99-8192-c57963f78e5d'.
Connected to access point.
Waiting 1 sec to allow device to set itself up..
Running initial exploit toolchain..
Exploit run, saved device config to!
output=/work/configured-devices/CzISE3pV83GH.deviceconfig
Saved device config in /work/configured-devices/CzISE3pV83GH.deviceconfig
==> Turn the device off and on again once. Repeat 6 more times if your device's SSID doesn't show up within ~5 seconds.
Failed to start network-manager.service: Unit network-manager.service not found.
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Found access point name: "A-9D5C", trying to connect..
Error: Connection activation failed: (53) The Wi-Fi network could not be found.
Failed to start network-manager.service: Unit network-manager.service not found.
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Scanning for "A-"  "SmartLife-"  "iHome-"  "Merkury-"  "Geeni-"  "GRID-"  "TreatLife-SL-"  "SL-CreeLighting-"  "LDV SMART+-" SSID...
Found access point name: "A-9D5C", trying to connect..
Device 'wlan0' successfully activated with '034a1969-1f4b-4d99-8192-c57963f78e5d'.
Connected to access point.
Configured device to connect to 'cloudcutterflash'
Device is connecting to 'cloudcutterflash' access point. Passphrase for the AP is 'abcdabcd' (without ')
Flashing custom firmware ..
==> Wait for 20-30 seconds for the device to connect to 'cloudcutterflash'. This script will then show the firmware upgrade requests sent by the device.
Using WLAN adapter: wlan0
Apr 29 15:14:51 dnsmasq[15]: started, version 2.80 cachesize 150
Apr 29 15:14:51 dnsmasq[15]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfile
Apr 29 15:14:51 dnsmasq-dhcp[15]: DHCP, IP range <IP_ADDRESS> -- <IP_ADDRESS>, lease time 12h
Apr 29 15:14:51 dnsmasq-dhcp[15]: DHCP, sockets bound exclusively to interface wlan0
Apr 29 15:14:51 dnsmasq[15]: read /etc/hosts - 5 addresses
Configuration file: /dev/stdin
Using interface wlan0 with hwaddr 00:0f:00:3a:14:07 and ssid "cloudcutterflash"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED

And then it waits forever at this point

How long does it normally take after DHCP request and offt to continue?
Using interface wlan0 with hwaddr 00:0f:00:3a:14:07 and ssid "cloudcutterflash"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
Apr 29 15:15:50 dnsmasq-dhcp[15]: 440222768 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Apr 29 15:15:50 dnsmasq-dhcp[15]: 440222768 client provides name: wlan0
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 DHCPDISCOVER(wlan0) 38:1f:8d:57:9d:5c
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 tags: wlan0
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 next server: <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  1 option: 53 message-type  2
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 51 lease-time  12h
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 58 T1  6h
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 59 T2  10h30m
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  1 netmask  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  3 router  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 client provides name: wlan0
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 DHCPDISCOVER(wlan0) 38:1f:8d:57:9d:5c
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 tags: wlan0
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 next server: <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  1 option: 53 message-type  2
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 51 lease-time  12h
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 58 T1  6h
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 59 T2  10h30m
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  1 netmask  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  3 router  <IP_ADDRESS>
Apr 29 15:15:53 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 client provides name: wlan0
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 DHCPREQUEST(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 tags: wlan0
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 DHCPACK(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c wlan0
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 next server: <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  1 option: 53 message-type  5
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 51 lease-time  12h
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 58 T1  6h
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 59 T2  10h30m
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  1 netmask  <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  3 router  <IP_ADDRESS>
Apr 29 15:15:54 dnsmasq-dhcp[15]: 440222768 sent size:  4 option:  6 dns-server  <IP_ADDRESS>

Hm 5 Minutes passed, now there is another request that gets ACKed. Shouldn't the device be happy with the ACKed lease request?

it should, but some devices can be finicky. I would try recutting a second time.

With this device, entering AP mode works by pressing button 1 for 10 seconds, then it stays in AP mode. So no need for power cycling

Thanks for the hint, will try

Looks better now, but I guess it should download the firmware, I don't think it progresses:
Apr 29 15:33:34 dnsmasq-dhcp[16]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
Apr 29 15:33:34 dnsmasq-dhcp[16]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Apr 29 15:34:10 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:10 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:11 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:11 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:12 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:12 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:14 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:14 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:42 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:42 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:43 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:43 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:44 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:44 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:34:46 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:34:46 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:14 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:14 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:15 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:15 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:16 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:16 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:18 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:18 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:29 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:29 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:30 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:30 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:31 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:31 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:35:33 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:35:33 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:36:02 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:36:02 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:36:02 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:36:02 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:36:03 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:36:03 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 15:36:05 dnsmasq[16]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 15:36:05 dnsmasq[16]: config h3.iot-dns.com is <IP_ADDRESS>

root@iobroker-pi:/var/log# netstat -antp | grep 80
tcp        0      0 <IP_ADDRESS>:80              <IP_ADDRESS>:*               LISTEN      26255/python3
tcp        0      0 <IP_ADDRESS>:80           <IP_ADDRESS>:55180        TIME_WAIT   -
tcp6       0      0 :::80                   :::*                    LISTEN      26255/python3
root@iobroker-pi:/var/log# ps -ef | grep python
root     26207 25049  0 16:33 pts/1    00:00:00 docker run --network=host -ti --privileged -v /home/pi/tuya-cloudcutter:/work cloudcutter bash -c bash /src/setup_apmode.sh wlan0 && pipenv run python3 -m cloudcutter update_firmware "/work/device-profiles/MINCO_HEAT/DS-102-2-Gang-WiFi-Switch" "/work/configured-devices/CNFUIojJUR3t.deviceconfig" "/work/custom-firmware/OpenBK7231T_UG_1.0.16.bin"
root     26255 26233 11 16:33 pts/0    00:00:23 /src/.venv/bin/python3 -m cloudcutter update_firmware /work/device-profiles/MINCO_HEAT/DS-102-2-Gang-WiFi-Switch /work/configured-devices/CNFUIojJUR3t.deviceconfig /work/custom-firmware/OpenBK7231T_UG_1.0.16.bin
root     26638 26539  0 16:36 pts/3    00:00:00 grep python

So I have a TIME_WAIT connection from the client, at least, but that's it. Is there a log that show access to HTTP port 80?

do you have the latest copy of this repo cloned?
have you tested if a normal cut from cloud but use tuya api works?
that error message i've seen in the past for some devices that were using "different" api endpoints. but if i recall, that edge case is now covered, though it is certainly possibly this is yet another edge case.

Yes, using latest repo (otherwise, I wouldn't have device profile). And have not tested "normal" cloud cut. I can try it out, too.. So it would still be possible to flash firmware with the same script after cloud cut?

This might be indeed yet another edge case. I've just pushed a change for more verbose HTTP output, which would help debug the issue.

Hm, that's interesting:
17:02:10.655422 IP <IP_ADDRESS>.bootpc > <IP_ADDRESS>.bootps: BOOTP/DHCP, Request from 38:1f:8d:57:9d:5c (oui Unknown), length 308
17:02:12.580827 IP <IP_ADDRESS>.bootpc > <IP_ADDRESS>.bootps: BOOTP/DHCP, Request from 38:1f:8d:57:9d:5c (oui Unknown), length 308
17:02:13.686497 IP <IP_ADDRESS>.bootps > <IP_ADDRESS>.bootpc: BOOTP/DHCP, Reply, length 300
17:02:13.693897 IP <IP_ADDRESS>.bootps > <IP_ADDRESS>.bootpc: BOOTP/DHCP, Reply, length 300
17:02:13.700793 IP <IP_ADDRESS>.bootpc > <IP_ADDRESS>.bootps: BOOTP/DHCP, Request from 38:1f:8d:57:9d:5c (oui Unknown), length 308
17:02:13.716424 IP <IP_ADDRESS>.bootps > <IP_ADDRESS>.bootpc: BOOTP/DHCP, Reply, length 300
17:02:13.722671 ARP, Request who-has <IP_ADDRESS> tell <IP_ADDRESS>, length 28
17:02:14.558038 ARP, Request who-has <IP_ADDRESS> tell <IP_ADDRESS>, length 28
17:02:14.558149 ARP, Reply <IP_ADDRESS> is-at 00:0f:00:3a:14:07 (oui Unknown), length 28
17:02:14.603500 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:16.307210 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:18.306118 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:18.721422 ARP, Request who-has <IP_ADDRESS> tell <IP_ADDRESS>, length 28
17:02:18.800686 ARP, Reply <IP_ADDRESS> is-at 38:1f:8d:57:9d:5c (oui Unknown), length 28
17:02:20.305955 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:22.305740 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:24.437864 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:26.305206 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:28.507483 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:30.306359 IP <IP_ADDRESS>.53527 > <IP_ADDRESS>.https: Flags [S], seq 6509, win 4380, options [mss 1460], length 0
17:02:31.987009 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:32.158433 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:33.158900 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:35.162020 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:38.478480 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:39.281092 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:40.162434 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:42.076782 IP <IP_ADDRESS>.59618 > <IP_ADDRESS>.domain: 42877+ A? h3.iot-dns.com. (32)
17:02:46.315350 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:02:48.268705 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:02:50.268606 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:02:52.508768 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:02:54.268981 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:02:56.487178 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:02:58.228422 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:03:00.463521 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:03:02.228792 IP <IP_ADDRESS>.53528 > ec2-34-218-107-222.us-west-2.compute.amazonaws.com.https: Flags [S], seq 6542, win 4380, options [mss 1460], length 0
17:03:03.993649 IP <IP_ADDRESS>.23655 > <IP_ADDRESS>.domain: 48469+ A? h3.iot-dns.com. (32)
17:03:04.255894 IP <IP_ADDRESS>.23655 > <IP_ADDRESS>.domain: 48469+ A? h3.iot-dns.com. (32)
17:03:05.213115 IP <IP_ADDRESS>.23655 > <IP_ADDRESS>.domain: 48469+ A? h3.iot-dns.com. (32)
17:03:07.248144 IP <IP_ADDRESS>.23655 > <IP_ADDRESS>.domain: 48469+ A? h3.iot-dns.com. (32)

@leecher1337 this is pretty odd output. It shouldn't even be able to resolve these domain names let alone try to actually connect. Are you absolutely sure nothing else is responding to its DNS queries? The provided dnsmasq configuration should respond with <IP_ADDRESS> for all DNS queries.

It says that it does, but what puzzles me is that I don'T see this reply in tcpdump...?
Apr 29 16:03:36 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 16:03:37 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 16:03:37 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 16:03:39 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 16:03:39 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 16:04:08 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 16:04:08 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 16:04:08 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 16:04:08 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 16:04:09 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 16:04:09 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Apr 29 16:04:11 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Apr 29 16:04:11 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>

I'll clean up the iptables, maybe it's a firewall issue on this box, otherwise I'll buy a second SD card and try with a completely clean RaspPi before botherign you with it again.

Nothing jumps out to me immediately. The docker chain shouldn't really apply anyway and the container is running in the host's network ns so not sure why it'd go off.
Maybe also check the kernel message buf?

Nothing strange in the logs so far. But it must be an issue with the machine if the packet is not leaving the docker container. The DHCP (BOOTP) traffic is leaving the container without issues. hm
Well, I'll get a new SD card then, maybe the RasPi image is broken somehow.

Ok, tried again with a clean Raspian image.
2 things I had to fix:

Package is called NetworkManager on Raspi, so I had to replace "network-manager" with "NetworkManager" in common.sh and run_detach.sh
common.sh: nmcli -f GENERAL.STATE looks for "activated", but that's a localized string, so on my german system, it said "aktiviert". I fixed it by prepending LANG=en_US.UTF-8 to nmcli:

AP_STATUS=$(LANG=en_US.UTF-8 nmcli -f GENERAL.STATE con show "${AP_MATCHED_NAME}" | awk -F ' ' '{print $2}')

It then ran through in my attempt to Install OpenBK firmware. I don't have an OpenBK WiFi now, so something may not work, but maybe OpenBK just isn't supported on the device...?
Here is the log:
Configuration file: /dev/stdin
wlan0: Could not connect to kernel driver
Using interface wlan0 with hwaddr dc:a6:32:31:fe:e7 and ssid "cloudcutterflash"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
May  1 09:09:20 dnsmasq-dhcp[15]: 899820720 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
May  1 09:09:20 dnsmasq-dhcp[15]: 899820720 client provides name: wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 DHCPDISCOVER(wlan0) 38:1f:8d:57:9d:5c
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 tags: wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 next server: <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  1 option: 53 message-type  2
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 51 lease-time  12h
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 58 T1  6h
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 59 T2  10h30m
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  1 netmask  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  3 router  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 client provides name: wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 DHCPDISCOVER(wlan0) 38:1f:8d:57:9d:5c
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 tags: wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 next server: <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  1 option: 53 message-type  2
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 51 lease-time  12h
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 58 T1  6h
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 59 T2  10h30m
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  1 netmask  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  3 router  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 client provides name: wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 DHCPREQUEST(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 tags: wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 DHCPACK(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c wlan0
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 next server: <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  1 option: 53 message-type  5
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 51 lease-time  12h
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 58 T1  6h
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 59 T2  10h30m
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  1 netmask  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  3 router  <IP_ADDRESS>
May  1 09:09:23 dnsmasq-dhcp[15]: 899820720 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
May  1 09:09:58 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
May  1 09:09:58 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Using PSK v1 - Received PSK ID version 01
[I 220501 09:09:59 web:2239] 200 POST /v1/url_config (<IP_ADDRESS>) 81.02ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.active&et=1&t=61&uuid=hCDjuk2KU62w&v=4.4&sign=0403c3dce49eb24ee2078c97886f78b8
[LOG] ==== Client request body ===
{'token': 'AAAAAA', 'softVer': '1.1.5', 'productKey': 'key7axydcvmea3x9', 'protocolVer': '2.2', 'baselineVer': '40.00', 'productKeyStr': 'key7axydcvmea3x9', 'hid': '381f8d579d5c', 'modules': '[{"type":9,"softVer":"1.1.5","online":true}]', 'devAttribute': 515, 'cadVer': '1.0.2', 'cdVer': '1.0.0', 'options': '{"isFK":true}', 't': 61}
[LOG] ==== End client request body ===
tuya.device.active - response: {'result': {'schema': '[{"type":"obj","mode":"rw","property":{"type":"bool"},"id":1},{"type":"obj","mode":"rw","property":{"type":"bool"},"id":2},{"type":"obj","mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":7},{"type":"obj","mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":8},{"type":"obj","mode":"rw","property":{"range":["off","on","memory"],"type":"enum"},"id":14},{"type":"obj","mode":"rw","property":{"type":"string","maxlen":255},"id":17},{"type":"obj","mode":"rw","property":{"type":"string","maxlen":255},"id":18},{"type":"obj","mode":"rw","property":{"type":"string","maxlen":255},"id":19}]', 'devId': 'XgFvWpTpThmp1btHp1GF', 'resetFactory': False, 'timeZone': '+02:00', 'capability': 1025, 'secKey': 'INk1wlDOPrkd0oc3', 'stdTimeZone': '+01:00', 'schemaId': '0000030tuw', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>], [1711846800,<PHONE_NUMBER>], [1743296400,<PHONE_NUMBER>], [1774746000,<PHONE_NUMBER>]], 'localKey': 'mBLWSHEoVtnpnUt3'}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:09:59 web:2239] 200 POST /d.json?a=tuya.device.active&et=1&t=61&uuid=hCDjuk2KU62w&v=4.4&sign=0403c3dce49eb24ee2078c97886f78b8 (<IP_ADDRESS>) 11.52ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396199&v=1.0&sign=2fa9aa276d2f4e24e3ec4600a134ba3f
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time':<PHONE_NUMBER>, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>]]}}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:01 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396199&v=1.0&sign=2fa9aa276d2f4e24e3ec4600a134ba3f (<IP_ADDRESS>) 10.18ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.uuid.pskkey.get&et=1&t=1651396203&uuid=hCDjuk2KU62w&v=1.0&sign=2e267a3a05f84836a18934d785fc6b01
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.uuid.pskkey.get - response: {'result': {'pskKey': ''}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:04 web:2239] 200 POST /d.json?a=tuya.device.uuid.pskkey.get&et=1&t=1651396203&uuid=hCDjuk2KU62w&v=1.0&sign=2e267a3a05f84836a18934d785fc6b01 (<IP_ADDRESS>) 70.75ms
Sending firmware update message {"data":{"firmwareType":0},"protocol":15,"t":1651396206} using protocol 2.2
Firmware update messages triggered. Device will download and reset. Exiting in 30 seconds.
[LOG] Client request PATH: /d.json - QS: a=tuya.device.upgrade.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396205&v=4.3&sign=53d3466b6c2c841c27bb2ea489354a03
[LOG] ==== Client request body ===
{'type': 0, 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.upgrade.get - response: {'result': {'url': 'http://<IP_ADDRESS>:80/files/OpenBK7231N_UG_1.0.19.bin', 'hmac': 'F6CB491D5624119C1A1EA1A9AE8A1710B7E71F64ACC19BEFD791685F8B6E2B7B', 'version': '9.0.0', 'size': '489920', 'type': 0}, 'success': True, 't':<PHONE_NUMBER>}
[I 220501 09:10:07 web:2239] 200 POST /d.json?a=tuya.device.upgrade.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396205&v=4.3&sign=53d3466b6c2c841c27bb2ea489354a03 (<IP_ADDRESS>) 15.94ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.upgrade.status.update&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396207&v=4.1&sign=467de410d19abaffe431c1e1625cd425
[LOG] ==== Client request body ===
{'type': 0, 'upgradeStatus': 2, 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.upgrade.status.update - response: {'success': True, 't':<PHONE_NUMBER>}
[I 220501 09:10:07 web:2239] 200 POST /d.json?a=tuya.device.upgrade.status.update&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396207&v=4.1&sign=467de410d19abaffe431c1e1625cd425 (<IP_ADDRESS>) 99.20ms
[LOG] Client request PATH: /d.json - QS: a=atop.online.debug.log&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396213&sign=3972cc442e0956417620fc482d116895
[LOG] ==== Client request body ===
{'data': '0', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
atop.online.debug.log - response: {'result': True, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:13 web:2239] 200 POST /d.json?a=atop.online.debug.log&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396213&sign=3972cc442e0956417620fc482d116895 (<IP_ADDRESS>) 11.55ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396213&v=1.0&sign=363dd376db2c2afcbcd5ee8661bbca4f
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time':<PHONE_NUMBER>, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>]]}}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:13 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396213&v=1.0&sign=363dd376db2c2afcbcd5ee8661bbca4f (<IP_ADDRESS>) 10.38ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.ack&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396213&v=1.0&sign=7f88d28c96103ca9cba05acb134b2a5e
[LOG] ==== Client request body ===
{'ackId': '0-0', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.ack - response: {'t':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:13 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.ack&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396213&v=1.0&sign=7f88d28c96103ca9cba05acb134b2a5e (<IP_ADDRESS>) 12.71ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.upgrade.silent.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396214&v=4.3&sign=0ac1c2c4aa85be80dc79084d77a330c1
[LOG] ==== Client request body ===
{'subId': None, 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.upgrade.silent.get - response: {'result': {'url': 'http://<IP_ADDRESS>:80/files/OpenBK7231N_UG_1.0.19.bin', 'hmac': 'F6CB491D5624119C1A1EA1A9AE8A1710B7E71F64ACC19BEFD791685F8B6E2B7B', 'version': '9.0.0', 'size': '489920', 'type': 0}, 'success': True, 't':<PHONE_NUMBER>}
[I 220501 09:10:16 web:2239] 200 POST /d.json?a=tuya.device.upgrade.silent.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396214&v=4.3&sign=0ac1c2c4aa85be80dc79084d77a330c1 (<IP_ADDRESS>) 22.66ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.timer.count&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396216&v=4.0&sign=2328002b03f9e7b7c7d2da5185f2c214
[LOG] ==== Client request body ===
{'devId': 'XgFvWpTpThmp1btHp1GF', 'lastFetchTime': '0', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.timer.count - response: {'result': {'devId': 'XgFvWpTpThmp1btHp1GF', 'count': 0, 'lastFetchTime': 0}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:16 web:2239] 200 POST /d.json?a=tuya.device.timer.count&devId=XgFvWpTpThmp1btHp1GF&et=1&t=1651396216&v=4.0&sign=2328002b03f9e7b7c7d2da5185f2c214 (<IP_ADDRESS>) 7.68ms
[I 220501 09:10:16 web:2239] 200 GET /files/OpenBK7231N_UG_1.0.19.bin (<IP_ADDRESS>) 9165.22ms
[DEVICE OTA] Responding to device OTA HTTP request range: bytes=0-489919/489920
Sending firmware update message {"data":{"firmwareType":0},"protocol":15,"t":1651396218} using protocol 2.2
Firmware update messages triggered. Device will download and reset. Exiting in 30 seconds.
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> client provides name: wlan0
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPDISCOVER(wlan0) 38:1f:8d:57:9d:5c
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> tags: wlan0
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> next server: <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  1 option: 53 message-type  2
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 51 lease-time  12h
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 58 T1  6h
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 59 T2  10h30m
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  1 netmask  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 28 broadcast  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> client provides name: wlan0
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPREQUEST(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> tags: wlan0
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPACK(wlan0) <IP_ADDRESS> 38:1f:8d:57:9d:5c wlan0
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> next server: <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  1 option: 53 message-type  5
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 51 lease-time  12h
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 58 T1  6h
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 59 T2  10h30m
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  1 netmask  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 28 broadcast  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
May  1 09:10:31 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
May  1 09:10:32 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
May  1 09:10:32 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Using PSK v1 - Received PSK ID version 01
[I 220501 09:10:32 web:2239] 200 POST /v1/url_config (<IP_ADDRESS>) 4.26ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=15&v=1.0&sign=a71fc044793b3c39f522a4474a0b3543
[LOG] ==== Client request body ===
{'t': 15}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time':<PHONE_NUMBER>, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>]]}}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:33 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=XgFvWpTpThmp1btHp1GF&et=1&t=15&v=1.0&sign=a71fc044793b3c39f522a4474a0b3543 (<IP_ADDRESS>) 10.63ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.uuid.pskkey.get&et=1&t=1651396235&uuid=hCDjuk2KU62w&v=1.0&sign=0a24d580ee7ca16ed89e3948e699bf77
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.uuid.pskkey.get - response: {'result': {'pskKey': ''}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:10:36 web:2239] 200 POST /d.json?a=tuya.device.uuid.pskkey.get&et=1&t=1651396235&uuid=hCDjuk2KU62w&v=1.0&sign=0a24d580ee7ca16ed89e3948e699bf77 (<IP_ADDRESS>) 99.45ms

When trying to flash OpenBK firmware, it quits at a certain stage, not sure, if this is intended?
Using PSK v1 - Received PSK ID version 01
[I 220501 09:41:58 web:2239] 200 POST /v1/url_config (<IP_ADDRESS>) 24.09ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.active&et=1&t=34&uuid=7srgVsgakRcx&v=4.4&sign=dc0eba1b4f083570f5c1d59269008fc5
[LOG] ==== Client request body ===
{'token': 'AAAAAA', 'softVer': '1.1.5', 'productKey': 'key7axydcvmea3x9', 'protocolVer': '2.2', 'baselineVer': '40.00', 'productKeyStr': 'key7axydcvmea3x9', 'devId': 'XgFvWpTpThmp1btHp1GF', 'hid': '381f8d579d5c', 'modules': '[{"type":9,"softVer":"1.1.5","online":true}]', 'devAttribute': 515, 'cadVer': '1.0.2', 'cdVer': '1.0.0', 'options': '{"isFK":true}', 't': 34}
[LOG] ==== End client request body ===
tuya.device.active - response: {'result': {'schema': '[{"type":"obj","mode":"rw","property":{"type":"bool"},"id":1},{"type":"obj","mode":"rw","property":{"type":"bool"},"id":2},{"type":"obj","mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":7},{"type":"obj","mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":8},{"type":"obj","mode":"rw","property":{"range":["off","on","memory"],"type":"enum"},"id":14},{"type":"obj","mode":"rw","property":{"type":"string","maxlen":255},"id":17},{"type":"obj","mode":"rw","property":{"type":"string","maxlen":255},"id":18},{"type":"obj","mode":"rw","property":{"type":"string","maxlen":255},"id":19}]', 'devId': 'BFCFsH21s3vriNY0sJqB', 'resetFactory': False, 'timeZone': '+02:00', 'capability': 1025, 'secKey': 'FcFDaIpyxalnnZD5', 'stdTimeZone': '+01:00', 'schemaId': '0000030tuw', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>], [1711846800,<PHONE_NUMBER>], [1743296400,<PHONE_NUMBER>], [1774746000,<PHONE_NUMBER>]], 'localKey': '34IYDHutrmeK0MfV'}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:41:59 web:2239] 200 POST /d.json?a=tuya.device.active&et=1&t=34&uuid=7srgVsgakRcx&v=4.4&sign=dc0eba1b4f083570f5c1d59269008fc5 (<IP_ADDRESS>) 123.72ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398119&v=1.0&sign=6c02750f76d9d2f9297e38620e4ae889
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time':<PHONE_NUMBER>, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>]]}}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:42:00 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398119&v=1.0&sign=6c02750f76d9d2f9297e38620e4ae889 (<IP_ADDRESS>) 148.80ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.uuid.pskkey.get&et=1&t=1651398122&uuid=7srgVsgakRcx&v=1.0&sign=3e811adc459dfa9c7bcef4bee439fe3c
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.uuid.pskkey.get - response: {'result': {'pskKey': ''}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:42:03 web:2239] 200 POST /d.json?a=tuya.device.uuid.pskkey.get&et=1&t=1651398122&uuid=7srgVsgakRcx&v=1.0&sign=3e811adc459dfa9c7bcef4bee439fe3c (<IP_ADDRESS>) 96.52ms
Sending firmware update message {"data":{"firmwareType":0},"protocol":15,"t":1651398125} using protocol 2.2
Firmware update messages triggered. Device will download and reset. Exiting in 30 seconds.
[LOG] Client request PATH: /d.json - QS: a=tuya.device.upgrade.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398125&v=4.3&sign=1709515cb2fcc739bc7c5b7d989cc596
[LOG] ==== Client request body ===
{'type': 0, 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.upgrade.get - response: {'result': {'url': 'http://<IP_ADDRESS>:80/files/OpenBK7231T_UG_1.0.19.bin', 'hmac': '518F08D860B1979922879A12C4B30CBE2FCD6736A0C55016AE720E16E36EC96F', 'version': '9.0.0', 'size': '368352', 'type': 0}, 'success': True, 't':<PHONE_NUMBER>}
[I 220501 09:42:06 web:2239] 200 POST /d.json?a=tuya.device.upgrade.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398125&v=4.3&sign=1709515cb2fcc739bc7c5b7d989cc596 (<IP_ADDRESS>) 14.62ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.upgrade.status.update&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398126&v=4.1&sign=f8fa2bb4ac4ed0feeef41b258a49a861
[LOG] ==== Client request body ===
{'type': 0, 'upgradeStatus': 2, 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.upgrade.status.update - response: {'success': True, 't':<PHONE_NUMBER>}
[I 220501 09:42:06 web:2239] 200 POST /d.json?a=tuya.device.upgrade.status.update&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398126&v=4.1&sign=f8fa2bb4ac4ed0feeef41b258a49a861 (<IP_ADDRESS>) 23.99ms
[LOG] Client request PATH: /d.json - QS: a=atop.online.debug.log&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398129&sign=4c874c0a133ff3e0d6d671a403f8649f
[LOG] ==== Client request body ===
{'data': '4', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
atop.online.debug.log - response: {'result': True, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:42:09 web:2239] 200 POST /d.json?a=atop.online.debug.log&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398129&sign=4c874c0a133ff3e0d6d671a403f8649f (<IP_ADDRESS>) 17.33ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398129&v=1.0&sign=cee460bdf610cf8605f83ebf1d642b9b
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time':<PHONE_NUMBER>, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>]]}}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:42:10 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398129&v=1.0&sign=cee460bdf610cf8605f83ebf1d642b9b (<IP_ADDRESS>) 142.30ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.ack&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398130&v=1.0&sign=39b052eadea52d2f9a4f5336e6f994fd
[LOG] ==== Client request body ===
{'ackId': '0-0', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.ack - response: {'t':<PHONE_NUMBER>, 'success': True}
[I 220501 09:42:10 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.ack&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398130&v=1.0&sign=39b052eadea52d2f9a4f5336e6f994fd (<IP_ADDRESS>) 33.85ms
Sending firmware update message {"data":{"firmwareType":0},"protocol":15,"t":1651398135} using protocol 2.2
Firmware update messages triggered. Device will download and reset. Exiting in 30 seconds.
[LOG] Client request PATH: /d.json - QS: a=tuya.device.upgrade.silent.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398134&v=4.3&sign=4bab4dc08abbe957c0db7b7ec65934dd
[LOG] ==== Client request body ===
{'subId': None, 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.upgrade.silent.get - response: {'result': {'url': 'http://<IP_ADDRESS>:80/files/OpenBK7231T_UG_1.0.19.bin', 'hmac': '518F08D860B1979922879A12C4B30CBE2FCD6736A0C55016AE720E16E36EC96F', 'version': '9.0.0', 'size': '368352', 'type': 0}, 'success': True, 't':<PHONE_NUMBER>}
[I 220501 09:42:16 web:2239] 200 POST /d.json?a=tuya.device.upgrade.silent.get&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398134&v=4.3&sign=4bab4dc08abbe957c0db7b7ec65934dd (<IP_ADDRESS>) 14.04ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.timer.count&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398136&v=4.0&sign=394cdeff29fcca4d95ad697dba9291c1
[LOG] ==== Client request body ===
{'devId': 'BFCFsH21s3vriNY0sJqB', 'lastFetchTime': '0', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.timer.count - response: {'result': {'devId': 'BFCFsH21s3vriNY0sJqB', 'count': 0, 'lastFetchTime': 0}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 09:42:16 web:2239] 200 POST /d.json?a=tuya.device.timer.count&devId=BFCFsH21s3vriNY0sJqB&et=1&t=1651398136&v=4.0&sign=394cdeff29fcca4d95ad697dba9291c1 (<IP_ADDRESS>) 73.78ms
[I 220501 09:42:16 web:2239] 200 GET /files/OpenBK7231T_UG_1.0.19.bin (<IP_ADDRESS>) 9999.49ms
[DEVICE OTA] Responding to device OTA HTTP request range: bytes=0-368351/368352
[I 220501 09:42:21 web:2239] 206 GET /files/OpenBK7231T_UG_1.0.19.bin (<IP_ADDRESS>) 156.60ms
[DEVICE OTA] Responding to device OTA HTTP request range: bytes=101847-368351/368352
[I 220501 09:42:26 web:2239] 206 GET /files/OpenBK7231T_UG_1.0.19.bin (<IP_ADDRESS>) 326.92ms
[DEVICE OTA] Responding to device OTA HTTP request range: bytes=101847-368351/368352
[I 220501 09:42:32 web:2239] 206 GET /files/OpenBK7231T_UG_1.0.19.bin (<IP_ADDRESS>) 221.57ms
[DEVICE OTA] Responding to device OTA HTTP request range: bytes=101847-368351/368352
pi@raspberrypi:~/tuya-cloudcutter $

It seems that it's downloading the update just fine, but perhaps the exit timeout is too aggressive or the config messages are off for your device. Could you try changing the timeout on this line https://github.com/tuya-cloudcutter/tuya-cloudcutter/blob/26fcb5746b23302725c18934e0ed896434cf97dc/src/cloudcutter/main.py#L81 from 30.0 to something higher, say 60?

Interesting.. Set timeout to 60 sec and retried:
[I 220501 20:40:09 web:2239] 200 POST /d.json?a=atop.online.debug.log&devId=HDaBaJGSmv7TlrH0Ic4e&et=1&t=1651437609&sign=64e00d3a428d79c0a42d1d2a110e7609 (<IP_ADDRESS>) 8.74ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=HDaBaJGSmv7TlrH0Ic4e&et=1&t=1651437609&v=1.0&sign=1ba9d3c591bdae69cf05d574f10ee3a7
[LOG] ==== Client request body ===
{'t':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time':<PHONE_NUMBER>, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800,<PHONE_NUMBER>], [1679792400,<PHONE_NUMBER>]]}}, 't':<PHONE_NUMBER>, 'success': True}
[I 220501 20:40:09 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=HDaBaJGSmv7TlrH0Ic4e&et=1&t=1651437609&v=1.0&sign=1ba9d3c591bdae69cf05d574f10ee3a7 (<IP_ADDRESS>) 11.15ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.ack&devId=HDaBaJGSmv7TlrH0Ic4e&et=1&t=1651437609&v=1.0&sign=e456d5b6bdf26e6b03d4023cce222b78
[LOG] ==== Client request body ===
{'ackId': '0-0', 't':<PHONE_NUMBER>}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.ack - response: {'t':<PHONE_NUMBER>, 'success': True}
[I 220501 20:40:10 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.ack&devId=HDaBaJGSmv7TlrH0Ic4e&et=1&t=1651437609&v=1.0&sign=e456d5b6bdf26e6b03d4023cce222b78 (<IP_ADDRESS>) 12.71ms
[I 220501 20:40:12 web:2239] 200 GET /files/OpenBK7231T_UG_1.0.19.bin (<IP_ADDRESS>) 6343.52ms
[DEVICE OTA] Responding to device OTA HTTP request range: bytes=0-368351/368352
Sending firmware update message {"data":{"firmwareType":0},"protocol":15,"t":1651437614} using protocol 2.2
Firmware update messages triggered. Device will download and reset. Exiting in 30 seconds.
pi@raspberrypi:~/tuya-cloudcutter $

Now it didn't request firmware files and now when I plug in device, it just shows up the blue led and does nothing anymore.
Maybe it erased its flash and killed itself?

Ok, forget it, firmware update worked, I was just confused because it lacked  OTA HTTP request range: bytes=101847-368351/368352 message.
So I can confirm that process works!

awesome great to hear!

Here is a summary on how to flash OpenBK to the device for further reference:

Enter access point mode of device (indicated by LED of left button slowly blinking): Push and hold left button for 10 seconds until device resets and starts to blink slowly
Download repository on RaspPi and set it up according to instructions
Apply patches for NetworkManager and language fix
Adjust timeout
Download current OpenBK7231T_UG release:

cd custom-firmware/
 wget https://github.com/openshwprojects/OpenBK7231T_App/releases/download/1.0.19/OpenBK7231T_UG_1.0.19.bin
cd ..

Flash to device and follow instructions:

sudo ./run_flash.sh wlan0 MINCO_HEAT/DS-102-2-Gang-WiFi-Switch


Does Dapr support CSI secret store in EKS ?

Hi Team,
We are using CSI secret store drivers to wire our EKS to Secret manager, and while deploying Dapr, especially at the stage of creating a statestore such as
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: default
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: localhost:6379
  - name: redisPassword
    secretKeyRef:
      name: redis
      key:$PASSWORD

This password is stored in aws secret manager but i don't quite know how to call it using the csi drivers here.
For a pod, i would generally create an IRSA and simply mount the secret into the pod, but in that case for example, i'm quite unsure  how to do it ? Does anyone made it to work already ?
I saw that dapr seems to have his own way of connecting with aws secret manager https://docs.dapr.io/reference/components-reference/supported-secret-stores/aws-secret-manager/ but i would ideally stick to our current setup using this csi driver.
Thanks a lot

Today, Dapr doesn't fetch secrets from a local volume mount. You have two ways to wire those secrets: use the native AWS Secret Manager integration (as you mentioned) or use the K8s secret store.
I'd be keen to see a design where Dapr can work with a CSI driver to fetch secrets from a volume.


Is it possible to delete superfluous artifacts from a snapshot version?

Hi there,
Sorry to raise an issue for this but I can't figure it out using the readme alone. When you publish snapshots using maven you end up with an entire set of artifacts against a package with a different timestamp for every single build, this is resulting in me having a package version of say, 0.0.2-SNAPSHOT but it has a billion artifacts underneath it, a full set from each time the snapshot was built.
Is it possible to retain only the latest set of artifacts against a package version with this action? I only ever need the latest snapshot, I'm going to max my GitHub storage on one snapshot version at this rate :(
Thanks for your time,
Fhox

https://github.community/t/github-actions-to-purge-maven-repo-hosted-via-github-packages/165472/2
Looks like this isn't supported because they manage all the timestamped SNAPSHOT versions as a single version from GitHub Packages perspective

This is kinda terrible and... somewhat against maven principle? I'd say it's a bug on GitHub part...

Any news on that on? Or any way to remove accumulated SNAPSHOTs?

Two years after and there's not even a workaround for this?
From what I understood the only workaround is to completely delete the version, which seems a little bit too much.


Show real error message when workspace has bad format

Hello. I often start structurizr-lite on my computer to work with structurizr dsl, I make some change, refresh page in browser, look at result and continue work.
But if I make error, I get strange message in browser "No workspace.dsl or workspace.json file was found". If I want to see real error I should look at logs. So I change this behaviour and now I can see real error not only in terminal, but in browser too.
Before:

After:

Already fixed in main.


Adds campaign id to signup card

What's this PR do?
Adds ID to the signup card
How should this be reviewed?
tell us, how can we review, to test that this works
Any background context you want to provide?
what else?
Relevant tickets
Fixes #
Checklist

[ ] Documentation added for new features/changed endpoints.
[ ] Tested on staging.
[ ] Pinged a PM if this is a larger PR that would benefit from some additional testing love.

¡OLÉ! :sheep: it!


Atlas Maps - the ability to define the "Map Region" and the "Projection" is missing

It was available in the older version:

I think it would be good to have that feature back, although it is still possible to define it via JSON tree.

It's in Subplots:


Update CDK Pipelines instructions to use "main" instead of "master" branch

:rocket: Feature Request
General Information

[X] :wave: I may be able to implement this feature request
[ ] :warning: This feature might incur a breaking change

Description
Many git-based projects are using "main" instead of "master" for the primary branch.  Changing the workshop both aligns with that direction and add instructions how customers can use different branch names.
Proposed Solution
My details relate to the .NET Workshop version, but there will be similar changes for each workshop language version.
This involves updating "Create Repository" instructions to use main as upstream, as well as adding a Branch = "main" parameter when creating the CodeCommitSourceAction in the sample code on both "Create New Pipeline" and "Add Application to Pipeline" instructions.
The local changes I had to make:

Update "Create Repository" instructions

https://github.com/aws-samples/aws-cdk-intro-workshop/blob/12962fcf4d1aa426d55adcafe9284fd1c0e56f6c/workshop/content/20-typescript/70-advanced-topics/200-pipelines/2000-create-repo.md#L67-L71
The comment should reference main instead of master and these git commands can be used:
git branch -m master main
git push --set-upstream origin main

Update "Create New Pipeline" instructions to add Branch = "main" under new CodeCommitSourceActionProps

https://github.com/aws-samples/aws-cdk-intro-workshop/blob/8418d678bf54ba1de5d75c76f352d2ec6a9ab436/workshop/content/40-dotnet/70-advanced-topics/100-pipelines/3000-new-pipeline.md#L48-L55

Update "Add Application to Pipeline" instructions to add Branch = "main" under new CodeCommitSourceActionProps

https://github.com/aws-samples/aws-cdk-intro-workshop/blob/8418d678bf54ba1de5d75c76f352d2ec6a9ab436/workshop/content/40-dotnet/70-advanced-topics/100-pipelines/4000-build-stage.md#L66-L73

Update this repos code for PipelineStack.cs to add Branch = "main" under new CodeCommitSourceActionProps

https://github.com/aws-samples/aws-cdk-intro-workshop/blob/8418d678bf54ba1de5d75c76f352d2ec6a9ab436/code/csharp/pipelines-workshop/src/CdkWorkshop/PipelineStack.cs#L33-L39
Environment

CDK CLI Version: 1.116.0 (build d04661d)
Section:  CDK Pipelines (Create Repository, Create New Pipeline, & Add Application to Pipeline)
Browser: all
Language: all

Other information
n/a

Hey @hakanson  👋🏻
Thanks for the feature request. I think it is a great idea to encourage the use of main > master in all workshops.
I'm going to mark this as p2 which means that we are unable to work on this immediately but we'd be happy to review a PR for this.
We use +1s to help prioritize our work, and if anyone is interested to pick this up and submit a PR (please make sure to follow our contribution guidelines 🙏🏻

Thanks for the request again, we're going to fix this up real quick now 🙂


Fix null ref with new env var

@fadnavistanmay to review from Artifacts side

@fadnavistanmay to review from Artifacts side and make sure this fixes the issue. This looks good to me though


Windows dev

I added a EventListener.
So if you click at a person you can interact with the person
I haven't tested yet because there is a problem on my computer.
I will try to test

@MilenaHeim hello，will the code you added be able to run successfully and interact with an agent?I also want to try to add this function recently to realize the dialogue with a certain agent.


Automatically update and publish to GitHub pages using GitHub actions

Hello, I have upgraded uglify-es to uglify-js, and added the feature of using GitHub actions to automatically update and publish to GitHub pages.
Here are the specific changes:

Add GitHub actions to publish on GitHub pages;
Change uglify-es to uglify-js;
When building, download uglify-js from GitHub releases instead of git;
When publishing, use CDN(registry.npmmirror.com) instead of local files for uglify-js;

Update steps:

On the GitHub actions page, manually run workflow update to build and publish to the gh-pages branch;
Let GitHub pages use gh-pages branch;

@BlueHtml, thank you, I really appreciate the PR!


remove stray printout

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (f80303a) 82.74% compared to head (b210667) 82.72%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #138      +/-   ##
==========================================
- Coverage   82.74%   82.72%   -0.03%
==========================================
  Files         120      120
  Lines        9182     9181       -1
==========================================
- Hits         7598     7595       -3
- Misses       1584     1586       +2

Flag
Coverage Δ

unittests
82.72% <ø> (-0.03%)
:arrow_down:

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

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Replace unsafe componentWillReceiveProps with componentDidUpdate

Replace unsafe componentWillReceiveProps with componentDidUpdate so as not to generate strict mode warnings

Currently there's a warning due componentWillReceiveProps, do you plan to merge this pr?


LvSelect multiple disabled/loading improvements

When loading and v-model has already data, height is bugged
when disabled and v-model has data, selection isn't clearly disabled.

Fixed


Errors on site without expected parameters set

Hello!
$subj, when trying to run this theme against my blog source I get following (and site won't render at all):
Building sites … ERROR 2018/03/20 14:45:16 Error while rendering "page" in "post/": template: theme/_default/single.html:1:3: executing "theme/_default/single.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:45:16 Error while rendering "page" in "": template: theme/_default/single.html:1:3: executing "theme/_default/single.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:45:17 Error while rendering "taxonomy" in "": template: theme/_default/list.html:1:3: executing "theme/_default/list.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:45:17 Error while rendering "section" in "": template: theme/_default/list.html:1:3: executing "theme/_default/list.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:45:17 Error while rendering "home" in "": template: theme/_default/list.html:1:3: executing "theme/_default/list.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:45:17 Error while rendering "taxonomyTerm" in "": template: theme/_default/list.html:1:3: executing "theme/_default/list.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:45:17 Error while rendering "404" in "": template: theme/404.html:1:3: executing "theme/404.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>

Change detected, rebuilding site
2018-03-20 14:46:02.673 +0000
Source changed "/srv/hugo/content/post/2018-03-19-lust-for-text-life.markdown": WRITE
ERROR 2018/03/20 14:46:02 Error while rendering "page" in "post/": template: theme/_default/single.html:1:3: executing "theme/_default/single.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:46:02 Error while rendering "home" in "": template: theme/_default/list.html:1:3: executing "theme/_default/list.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
ERROR 2018/03/20 14:46:02 Error while rendering "404" in "": template: theme/404.html:1:3: executing "theme/404.html" at <partial "header" .>: error calling partial: template: theme/partials/header.html:6:18: executing "theme/partials/header.html" at <delimit .Site.Params...>: error calling delimit: can't iterate over <nil>
Total in 144 ms

The reason is likely some absent .Site. parameter but you can't tell it from error message, I guess input parameters handling could be improved.

https://github.com/hivickylai/hugo-theme-sam/pull/3 is an example of how this can be fixed.


Uncaught Error: Unknown token: {title}

Hi,
I have an issue where I've built a RSS reader but for some reason the above error keeps throwing, it worked fine about 2 weeks ago and the RSS-publisher says they've done no changes on their end.. If I change to another RSS-feed, for example this one:

Solved, the reason was that the RSS-feed provided didn't provide "title" for all the items..


gitignore file contians /android/ folder

Description
The gitignore file contains /android/ folder.

React Native version:
Applicable to all the versions if the following gitignore file is used.
Steps To Reproduce
Please visit line number 54 in the following location.
https://github.com/facebook/react-native/blob/master/.gitignore
Expected Results
As someone might need to modify native codes for Android platform, we should not mention
/android/  in gitignore file.
Snack, code example, screenshot, or link to a repository:
Not applicable

The .gitignore file mentioned above is for the this repo (i.e. the react native source code repo). The .gitignore file that is generated when setting up a new react native project is based on the template provided here: https://github.com/facebook/react-native/blob/master/template/_gitignore

@jeswinsimon
Thank you for the clarification!
I will close this issue now.


Proposal(hz): Add a docs folder to the output of "hz new" command for better onboarding experience

Is your feature request related to a problem? Please describe.
Users currently need to browse the web to find information on how to use the hz tool for generating hertz code in a project. This is not convenient and may make it difficult for new users to get started with hz without any guidance or instructions.
用户需要浏览网页来获取有关如何在项目中使用 hz 工具生成 hertz 代码的信息。这不太方便，可能会使没有任何指导或说明的新用户很难开始使用 hz。
Describe the solution you'd like
I would like to propose adding a docs folder to the initial hz code generated by the hz new command. This folder would contain a user guide and instructions on how to use hz to generate hertz code. This would make it much easier for new users to get started with hz and provide them with clear instructions and guidance.
我建议在 hz new 命令生成的初始 hz 代码中添加一个 docs 文件夹。这个文件夹将包含用户指南和说明，指导用户如何使用 hz 生成 hertz 代码。这将使新用户更容易入门 hz，并为他们提供清晰的说明和指导。
Describe alternatives you've considered
Additional context
I believe that adding this feature would improve the usability and accessibility of hz for new users, and would help to make hertz a more widely used and popular web framework in the Go community.
我相信添加这个功能将提高 hz 对新用户的可用性和易用性，并有助于使 hertz 成为 Go 社区中更广泛使用和受欢迎的 Web 框架。

I think optimizing hz -help is a better option.

I think optimizing hz -help is a better option.

But does hz -help already exist? Its appearance is not as good compared to providing a searchable documentation.
但是 hz -help 已经存在对吗? 它和提供一个可查阅的文档比, 它的观感不是很好

But does hz -help already exist? Its appearance is not as good compared to providing a searchable documentation.
但是 hz -help 已经存在对吗? 它和提供一个可查阅的文档比, 它的观感不是很好

It feels a little redundant to generate such a document every time. For example, each of my microservices corresponds to a Hertz service, so I will generate several such documents. Maybe we make hz -help more complete, or add a tag like -d to generate usage documentation.
每次都会产生一个这样的文档感觉会有一点冗余，例如我每一个微服务都对应一个 Hertz 的服务，那么我会生成好几个这样的文档。也许可以使 hz -help 更加完善，或者加一个 -d 这样的 tag 来生成使用文档。

How about adding an option to choose whether to generate docs or not?
那加一个选项用于选择是否生成docs怎么样

Actually, the documentation could also include an introduction to and links for community-provided middleware, similar to what is done in the hertz README, to make it easier for users to utilize.
实际上文档中还可以像 hertz 的 README 一样，加入社区提供的中间件介绍和链接，以方便用户使用。

我认为可以在生成代码中添加一个 readme 用于介绍 hz 的用法以及常见扩展

@Skyenought  any process?

@li-jin-gou yes, wait me make PR


sea-orm-migration has generate in help, but not working

Description

when I execute cargo run -p migration -- help
sea-orm-migration 0.9.1

USAGE:
    migration [OPTIONS] [SUBCOMMAND]

OPTIONS:
    -h, --help       Print help information
    -v, --verbose    Show debug messages
    -V, --version    Print version information

SUBCOMMANDS:
    down        Rollback applied migrations
    fresh       Drop all tables from the database, then reapply all migrations
    generate    Generate a new, empty migration
    help        Print this message or the help of the given subcommand(s)
    init        Initialize migration directory
    refresh     Rollback all applied migrations, then reapply all migrations
    reset       Rollback all applied migrations
    status      Check the status of all migrations
    up          Apply pending migrations

But execute cargo run -p migration -- generate hoge then run migrations.
Steps to Reproduce

cargo run -p migration -- help
cargo run -p migration -- generate hoge

Expected Behavior

generate migration file or delete generate command in help.
Actual Behavior

Reproduces How Often
execute migrations.
Versions

sea-orm-migration v0.9.1 (/Users/s06489/src/github.com/shoichi1023/sea-orm/sea-orm-migration)
├── sea-orm v0.9.1 (/Users/s06489/src/github.com/shoichi1023/sea-orm)
│   ├── sea-orm-macros v0.9.1 (proc-macro) (/Users/s06489/src/github.com/shoichi1023/sea-orm/sea-orm-macros)
│   ├── sea-query v0.26.2
│   │   └── sea-query-derive v0.2.0 (proc-macro)
│   ├── sea-strum v0.23.0
│   │   └── sea-strum_macros v0.23.0 (proc-macro)
├── sea-orm-cli v0.9.1 (/Users/s06489/src/github.com/shoichi1023/sea-orm/sea-orm-cli)
│   ├── sea-schema v0.9.3
│   │   ├── sea-query v0.26.2 (*)
│   │   └── sea-schema-derive v0.1.0 (proc-macro)
├── sea-schema v0.9.3 (*)

Additional Information

I tried to fix it, but I had to use a wrapper or another enum and couldn't figure out a clean fix.
I would like to discuss the best fix with you in this issue.

I know the command.
However, for sea_orm_migration users, installing sea_orm_cli is verbose and should also be possible when running from
./migration/src/main.rs .

DO you mean?
$ sea-orm-cli migrate COMMAND -d ./other/migration/dir

yeah.
where can I execute cargo run migrate generate SOME_FILE_NAME command ?
I use example/axum-example.
I tried that command in example/axum-example, but that not working.
I think execute this one.

https://github.com/SeaQL/sea-orm/blob/87a9eb9d15674830a35ef0c60c46d19fd364590e/sea-orm-cli/template/migration/src/main.rs#L1-L6

but that have not generate command.
therefore, we need to implement the command below.

https://github.com/SeaQL/sea-orm/blob/87a9eb9d15674830a35ef0c60c46d19fd364590e/sea-orm-migration/src/cli.rs#L51-L59

Run cargo run migrate generate SOME_FILE_NAME at https://github.com/SeaQL/sea-orm/tree/master/examples/axum_example directory.

The generate command is provided by sea-orm-cli and have nothing to do with sea-orm-migration. You can check the sourcecode at:

https://github.com/SeaQL/sea-orm/blob/3eee6aa6ecc44d40443aa6ab7c56c03103203247/sea-orm-cli/src/bin/main.rs#L12-L23

yeah, that's right. I know that.
but, when execute help command in sea-orm-migration, It looks like you have an generate command.
I think that will made confused users.
sea-orm-migration 0.9.1

USAGE:
    migration [OPTIONS] [SUBCOMMAND]

OPTIONS:
    -h, --help       Print help information
    -v, --verbose    Show debug messages
    -V, --version    Print version information

SUBCOMMANDS:
    down        Rollback applied migrations
    fresh       Drop all tables from the database, then reapply all migrations
    generate    Generate a new, empty migration
    help        Print this message or the help of the given subcommand(s)
    init        Initialize migration directory
    refresh     Rollback all applied migrations, then reapply all migrations
    reset       Rollback all applied migrations
    status      Check the status of all migrations
    up          Apply pending migrations

Hey @shoichi1023, I see what you mean now! Thanks for reporting! Please check https://github.com/SeaQL/sea-orm/pull/931

thank you for your support!
please close this issue when you merge PR!

Welcome!


Fix issue with composing text not being cleared on some Android devices

Clearing the android TextInput text programmatically (i.e. calling: this.textInputRef.clear()) does not clear the previously composing text, if enabled, causing inconveniences when such behaviour is desired (i.e. chat input box, where you constantly have to clear the input after sending a message). Instead, the currently observed behaviour is that, after a new text is entered (usually as soon as the first letter), the previously composing text reappears deeming the input unusable.
The effect is only observable on some devices, for example, we observed it on Samsung S6 devices using both Android 6 and 7, and several LG devices running Android 6.
This issue is only present when clearing the text; setting text to some other value does not produce the same effect.

Test Plan
// minimum code example
state = { v: "" };
_changeText = v => this.setState({ v });
clear = () => this.textInputRef.clear();

render() {
  return (
    <View style={styles.container}>
      <TouchableOpacity onPress={this.clear}>
        <Text> Clear </Text>
      </TouchableOpacity>
      <TextInput
        ref={ref => this.textInputRef = ref}
        value={this.state.v}
        onChangeText={this._changeText}
      />
    </View>
  );
}

Steps to reproduce(test):

Have a previously named device with default keyboard.
Have autocorrect enabled in the phone settings.
Type something in the input (preferably incomplete word so the autocomplete is not triggered).
Press clear.
Type a letter.
You will then see the previously composing text appear again.

Release Notes
[ANDROID] [BUGFIX] [TextInput] - Fix issue with composing text not being cleared

the code1$1020x996 For kilk por Hacker...

Possibly @mkonicek and @shergin

Can you rebase? We're having issues importing PRs older than a few months old.

Sorry for the late response, I'll do this later tonight.


⚠ SolarOscp has degraded performance

In 89ecc53, SolarOscp ($SOLAROSCP_URL) experienced degraded performance:

HTTP code: 200
Response time: 330 ms

Resolved: SolarOscp performance has improved in 254a606 after 10 minutes.


mvc ssrs report viewer

Hi,
I want to show report.rdlc to reportviewer in mvc 5
Please help me,, thanks

Please keep eye on #121. Unfortunately I do not have time to create a special version for ASP.NET Core 1.0. I hope I will find time this spring.


Add accessor function for the ex_nscert data in X509 object.

Checklist

[ x ] documentation is added or updated
[ ] tests are added or updated
[ x ] CLA is signed

Description of change
Subject says it all.
Signed-off-by: Tomas Mraz<EMAIL_ADDRESS>

Do you actually have any cert that needs this? I thought this was all ancient obsolete stuff.

I don't I just did not want to regress functionally when porting OpenVPN to the new API.

Perhaps @snhenson knows the likelihood of coming across one of these. It might be an opportunity for you to retire some dead code from OpenVPN, rather than introduce dead code into OpenSSL ;-)

Note I am just patching OpenVPN downstream in Fedora and given the improbability of using such certs with Fedora I will just disable this part of code for us for now.

@t8m: make update  is required to amend libcrypto.num file with your new methods

I'd prefer to completely kill NS Cert Type.  But if folks need it, then this is a good patch.

What would be the right forum to find out whether the NS cert type is still used somewhere or not? I'll ask our NSS folks but they might not know either.

post on the mailing lists (openssl and tlswg?)  there is no definitive way to know, we'll just have to make our best guess.

I will close this PR.  Re-open if you need it.  Thanks!


--onefile updating static files without rebooting

I create an exe with the following command:
python -m nuitka --mingw64 --standalone --onefile 'app.py'
The program uses the settings file "config.txt". In the program code itself, the settings file is accessed along the following path:
with open("config.txt" ....
If I manually change the "config.txt" file, then the program launched through this exe will not see these changes until the exe is reloaded. How can I make the program see the changes without rebooting when I change it manually? I know that when I run the exe, the files are unpacked to the temp directory, but I did not find this configuration file "config.txt" there - how then does the program access it from the code?

There are options for including data files in the binary. If you don't use them, the file will not be there. Also in the user manual, there is a section about how to access file near the onefile binary (in case it should not be included and modifiable) and files near the temporary files.


[javascript.format] formatter keep adding spaces in v-for on save with lang="pug"

<template lang="pug">
div(v-for='i in list') {{i}}
</template>
<script setup>
</script>

https://user-images.githubusercontent.com/16459251/172031433-f800a2c7-1379-4923-89dc-0d931dcd1e78.mp4
so this is the line which is causing the issue
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": true,

This issue is caused by an extension, please file it with the repository (or contact) the extension has linked in its overview in VS Code or the marketplace for VS Code. See also our issue reporting guidelines.
Happy Coding!


Application Insight's connection string in App Service module

https://github.com/aztfmod/terraform-azurerm-caf/blob/1ef24023879ad57fff0ab4b3deff2a8cf9d5328b/modules/webapps/appservice/main.tf#L21
Referring to issue here, the connection string should be like this instead.

APPLICATIONINSIGHTS_CONNECTION_STRING = azurerm_application_insights.appinsight.connection_string

Added in 0.4.2


Customizing Alert Configuration in Nested Views

Customizing Alert Configuration in Nested Views
func configureCustomAlert(configure: (inout CustomAlertConfiguration) -> Void) -> some View {     environment(\.customAlertConfiguration, .create(configure: configure)) }
This allows me to customize the alert configuration, and I can set a global configuration in my AppDelegate like this:
.environment(\.customAlertConfiguration, .create { config in     config.background = .color(.red) })
However, when I attempt to customize an alert configuration in an inner view—for example, to only modify the “dismiss on tap” behavior—it resets the entire configuration to its default values. This causes the previous global configuration (e.g., config.background = .color(.red)) to be lost, and the alert uses default settings instead of inheriting the existing configuration.
Expected Behavior
When customizing the alert configuration in an inner view, it should retrieve the existing settings (such as the globally configured background color) and only apply the new customizations (e.g., disabling “dismiss on tap”). The configuration passed to the inner view should inherit and build upon the global configuration rather than resetting it.

This is now the behavior in 4.0.0


Part 3: Reflect & Documentation

Documenting the data
The structure of our dataset is the basic format that Spotify uses as well as our subjective column that we added. Using this we have Song Title, Artist, Album, Genre, Release Year, Mood While listening, Personal Connection, and Subjective Genre. These are topics that give us more detail when it comes to how our group members feel when listening to these songs. The columns that we added as our new columns take in our own feelings when it comes to interacting with the data. Looking at it we can display emotional state, personal significance or memories associated, and even a recategorized column that each group member used for their specific interpretation.
The data types show normal classification that is very specific and Spotify curated. The additional data types that we added give a personal sense and are more specific to our group and data curation. This allows us to have quality data when it comes to creating our own dataset. Given that we were able to provide a dataset, we were able to complete it further using our own interpretations and feelings with subjectiveness.

Song Title
Artist
Album
Genre
Release Year
Mood While Listening
Personal Connection
Subjective Genre

Blinding Lights
The Weeknd
After Hours
Synthwave
2020
Uplifted
Reminds me of late-night drives
Retro Pop

Levitating
Dua Lipa
Future Nostalgia
Pop
2020
Energetic
Played at my friend's wedding party
Disco

Peaches
Justin Bieber
Justice
R&B
2021
Chill
My favorite track during summer
R&B/Pop Fusion

Good 4 U
Olivia Rodrigo
SOUR
Pop Punk
2021
Angry
Reminds me of a breakup I went through
Emo Pop

Watermelon Sugar
Harry Styles
Fine Line
Pop Rock
2019
Happy
Played during a memorable beach day
Soft Rock

drivers license
Olivia Rodrigo
SOUR
Pop
2021
Heartbroken
Makes me think of my high school relationship
Emotional Ballad

Montero
Lil Nas X
Montero
Hip-Hop
2021
Empowering
Reminds me of my coming-out moment
Hip-Hop/Pop Crossover

Stay
The Kid LAROI
F*CK LOVE
Pop
2021
Nostalgic
Played on repeat during summer
Pop

Save Your Tears
The Weeknd
After Hours
Synthwave
2020
Reflective
Makes me think about past regrets
Synthpop

Heat Waves
Glass Animals
Dreamland
Indie
2020
Dreamy
Reminds me of a late summer night with friends
Chillwave

#Reflecting on The Data
We determined as a group that creating a personal connection and subjective genre off of that connection will allow our data to be more curated towards us. This not only makes our dataset one that is unique to our group, but it also allows us to be able to provide more personal connections based off of our groups responses. The personal connection column stays consistent with sharing memories of how each song affects each group member following the format of a personal connection or memory in it.
We determined to collect data from Spotify using the Spotify API and used it to collect public datasets. This was so that we would not violate anything such as private data or licensing errors. This allowed us to obtain the data cleanly as well as use it to provide the necessary transformations that we used on it to curate our own dataset.
When it comes to looking back at the platform dynamics, there can be some issues when it comes to data access. Wanting to get bulk data access, you would have to face restrictions that affect how we can retrieve data. Things such as data retrieval, user personal data, and dataset limits there are restrictions that occur when wanting to retrieve a lot of data. In general, Spotify restrictions can affect data retrieval for research.
When it comes to legal and ethical considerations that can arise when creating this dataset there are a lot of aspects. The first that comes to mind is copyright with media. Things such as musical works and artists are things that come up music related things. This is because Spotify is a paid platform where you can stream music, therefore this is a licensing thing with artists and music labels. Another thing that arose was private user data. Things such as accessing user information (private playlists, user data, images) are things that can be done with Spotify.


Upgrade to Elixir 1.13/OTP 24

With Elixir 1.13 officially released, we might as well develop against the latest features as we move towards our own first release. I assume we would need to change elixir.nix, mix.exs, and the CircleCI config.
What do you think, @samrose?

@garrettmichaelgeorge thank you agree 100%

I’ll do this by tomorrow


Add a pull request template.

While I was here, update the common files.

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: geeknoid
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [geeknoid]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@geeknoid: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/racetest.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-racetest-master

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@geeknoid: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/racetest.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-racetest-master

prow/integ-mixer-k8s-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-k8s-presubmit-tests-master

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@geeknoid: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/racetest.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-racetest-master

prow/integ-mixer-k8s-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-k8s-presubmit-tests-master

prow/integ-mixer-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-presubmit-tests-master

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: geeknoid, howardjohn
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [geeknoid,howardjohn]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

/test all

@geeknoid: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/racetest.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-racetest-master

prow/integ-mixer-k8s-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-k8s-presubmit-tests-master

prow/integ-mixer-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-presubmit-tests-master

prow/istio-pilot-e2e-envoyv2-v1alpha3.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-pilot-e2e-envoyv2-v1alpha3-master

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@geeknoid: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/racetest.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-racetest-master

prow/integ-mixer-k8s-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-k8s-presubmit-tests-master

prow/integ-mixer-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-presubmit-tests-master

prow/istio-pilot-e2e-envoyv2-v1alpha3.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-pilot-e2e-envoyv2-v1alpha3-master

prow/integ-istioctl-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-istioctl-k8s-presubmit-tests-master

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@geeknoid: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-pilot-e2e-envoyv2-v1alpha3.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test istio-pilot-e2e-envoyv2-v1alpha3-master

prow/integ-istioctl-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-istioctl-k8s-presubmit-tests-master

prow/integ-mixer-k8s-presubmit-tests.sh
164740cd751190dbab7963e21ec837a5fb02b3f8
link
/test integ-mixer-k8s-presubmit-tests-master

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/test istio-pilot-e2e-envoyv2-v1alpha3-master


Added trick or treating

Saying "trick or treat" around villages while wearing a costume will make them toss you some pie (eventually candy)
Added a blaze skirt costume

Please merge master into your fork and fix merge conflicts.

Should be fixed

Looks good! I agree that there should be a proper registry for both Costume Items and Candy Items, or perhaps candy items could be a loot table, but that can all be done in a later PR.


Add term offchain

Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes #32  (issue)
Type of change

[x] Bug fix (non-breaking change which fixes an issue)

Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I ran the sort command to make sure all terms are sorted
[x] I have made corresponding changes to the ReadMe
[x] My changes generate no new warnings
[x] Existing unit test passes locally with my changes

Thanks for your contribution


python formatter should enforce consistency of quotes

Title:
python formatter should enforce consistency of quotes
Description:
The python formatter should enforce consistent use of either single or double quotes for strings.
Relevant Links:
Formatter didn't catch it here: https://github.com/envoyproxy/envoy/pull/6049#discussion_r260445208

bump

Bump
On Tue, Apr 30, 2019 at 17:19 stale[bot]<EMAIL_ADDRESS>wrote:

This issue has been automatically marked as stale because it has not had
activity in the last 30 days. It will be closed in the next 7 days unless
it is tagged "help wanted" or other activity occurs. Thank you for your
contributions.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/envoyproxy/envoy/issues/6098#issuecomment-488119565,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAAERARYVY3ECJJKORZL6EDPTCZXXANCNFSM4G2SX2FA
.

Bump