text:
🛑 Clean Standards is down

In 19b1fe7, Clean Standards (https://clean-standards.com/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Clean Standards is back up in 1f0a3ee after 20 minutes.


text:
🛑 Marble Wood is down

In ce75e8d, Marble Wood (https://marblewoodca.com/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Marble Wood is back up in 1f84179 after 20 minutes.

source: gharchive/issue

repo: symapex/upsite

license: MIT

license_type: permissive

license_source: github-api


text:
🛑 Control Ground Landscapers is down

In a8fab01, Control Ground Landscapers (https://controlgroundlandscapers.com/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Control Ground Landscapers is back up in 7949e0d.


text:
🛑 Blooming Pots Landscaping is down

In 1a5db22, Blooming Pots Landscaping (https://bloomingpotslandscaping.com/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Blooming Pots Landscaping is back up in 3833253 after 2 hours, 7 minutes.


text:
Changed "null" by "~" in yaml files

According to:

https://github.com/symfony/recipes/blob/master/symfony/framework-bundle/3.3/config/packages/test/framework.yaml#L2

https://github.com/symfony/recipes/blob/master/symfony/framework-bundle/3.3/config/packages/framework.yaml#L6

https://github.com/symfony/recipes/blob/master/symfony/routing/3.3/config/packages/routing.yaml#L3

Well, null and ~ are exactly the same (both are YAML representations of null

Yeah, it's more about consistency with the default recipes.

source: gharchive/pull-request

authors: stof yceruto

repo: symfony/symfony-demo

license: mit

license_source: bigquery


text:
Error when running "symfony self-update"

// updating Symfony Installer to 1.1.1 version
There was an error while updating the installer.
The previous Symfony Installer version has been restored.

@ZCJ Can you please run it again with the -vvv option and check if you get a more detailed error message?

@xabbuh I have tried it, but no further information .. screen shot attached

@ZCJ have you tried with sudo symfony self-update?

sudo did it ... my bad ...

@ZCJ I told you about sudo because this problem also caused a WTF!? moment to me. The problem is that the error message is not helpful at all. I'm going to prepare a pull request to improve it. For now, I'll close this issue as "fixed". Thanks.

Exactly.. A better error msg will help .. Thank you

On Apr 21, 2015, at 1:07 PM, Javier Eguiluz notifications@github.com wrote:
@ZCJ I told you about sudo because this problem also caused a WTF!? moment to me. The problem is that the error message is not helpful at all. I'm going to prepare a pull request to improve it. For now, I'll close this issue as "fixed". Thanks.
—
Reply to this email directly or view it on GitHub.

Running "sudo symfony selfupdate" worked for me. It updated to the latest version which then allowed to successfully installed Symfony 3.2 .

authors: ZCJ dsteplight javiereguiluz xabbuh

repo: symfony/symfony-installer


text:
Symphony warning when datetime field is both required and empty/invalid

I have a required DateTime field with date ranges enabled.
When content is submitted through a frontend form, the following error is returned if both start and end values are missing/invalid:
Symphony Warning: trim() expects parameter 1 to be string, array given
The error originates from line 191 of class.event.section.php.
I've had a quick look and think I can roughly figure out what's happening - it appears the datetime values being tested are 2D arrays, so although array_reduce is used on line 86, trim is still acting upon an array (one-dimensional), hence the error. At least that's what I think is going on.
p.s. I've hacked together a workaround for now, but can't quite figure out a proper solution. My PHP is quite limited...

Is this the actual DateTime field or the core Date field? Assuming the first?
Also, which version of Symphony are you running?

Sorry, I should have been clearer: yes the DateTime field. I wasn't sure whether it was the extension or the core at fault so it was 50-50 whether I posted there or here.
Oh, and version 2.5.2.

No worries. At first look, it's a Symphony issue, so good work on the coin toss ;)

@johnpuddephatt Does @brendo's commit fixes your issue ?

Appears to have done the trick, yes.
Thanks :+1:

Great!

authors: brendo johnpuddephatt nitriques


text:
Add 1.16.6, 1.15.14 and 1.17beta1

Go 1.16.6, 1.15.14 and 1.17beta1 has been released. Would you please support them? (Ref. https://github.com/syndbg/goenv/issues/182)

Announcement for 1.16.6 and 1.15.14

Announcement for 1.17beta1

Thanks!

repo: syndbg/goenv


text:
Create python-package.yml

trying a first action without docker image

I had to edit the setup.py file to make the installation work, and finally, the pipeline passes: https://github.com/synsense/sinabs-exodus/actions/runs/6251884441/job/16973950218?pr=15
But this works for Python 3.11, PyTorch 2.01, and CUDA 11.8.
Maybe we need different docker images for each CUDA version as well :thinking_face:

It is important to notice that one of the tests is failing randomly. It is necessary to improve it.

Great, thank you!

authors: bauerfe ssinhaleite

repo: synsense/sinabs-exodus


text:
Broken Images in Gallery

There seem to be a lot of broken images in the Module Gallery.

Thanks, good catch. Apparently graphviz is breaking on the name of one of the states because it contains a <. We'll have to escape those.

In the interim, please browse modules here: https://synthetichealth.github.io/module-builder/

Temporarily fixed by removing the <

authors: cmoesel dehall jawalonoski

repo: synthetichealth/synthea


text:
Jahresübersicht über alle Abteilungen drucken

https://github.com/synyx/urlaubsverwaltung/issues/1262 beschreibt die Jahresübersicht pro Abteilung.
Vielleicht ist es nützlich auf einer Seite eine Übersicht über alle Abteilungen zu haben?
Dann muss nicht jede Abteilung einzeln ausgewählt werden fürs drucken.
Erste schnelle Idee: Wie beim ical Feature Tabs einbauen. beim Drucken ist dann alles sichtbar, bei normaler Bedienung im Browser ist nur die ausgewählte Abteilung sichtbar.

Wie kann man die Print-Ausgabe/CSS ansehen ohne in Datei zu drucken?

Grund für die nicht vorhandenen Farben ist wohl bootstrap, welches die definierten backgrounds hard überschriebt:
@media print
*, *:before, *:after {
    ...
    background: transparent !important;
    ...
}
``

This issue is already published in #1264

authors: bseber derTobsch honnel

repo: synyx/urlaubsverwaltung


text:
エラーハンドリングを一部.inspect_err()で書き直す

せっかくの新機能なので

あんまり.inspect_err()の出番ないかも(それはそれとしてエラーハンドリングまわりのリファクタリングはする)

repo: syobocat/plegosa


text:
[Bug-017] : Option to restore Wallet from locked state does not work

What happened?
When Pali is in lock mode, and the user has for some reason forgotten his password, he cannot directly use the restore option.
This causes the user to completely uninstall Pali v3 and reinstall it in order to re-enter his seeds.
https://github.com/user-attachments/assets/35d40987-f03e-4c95-9637-8a16a7457e7c
Version
v3.0.0 QA
What platform are you using?
macOS
What browser are you using?
Brave
Is this a trezor issue?
No
Relevant log output
No response

:white_check_mark: Solved in v.3.0.0.1

repo: syscoin/pali-wallet


text:
Component not found: heltec_balancer_ble.

Does anyone know the problem? Always having the same issue.

I assume the external_components section is missing in your YAML. Please provide the full YAML so I can try to reproduce the issue.

You were absolutely right, it's working now. Thank you

repo: syssi/esphome-jk-bms


text:
Verify WKS EVO CIRCLE compatibility

Hello,
Thanks a lot for this great work.
Unfortunately, it doesn’t work on my side.
Inverter: WKS EVO CIRCLE.

Connections:
ESP32 <-> RS232/TTL
3V3 <-> VCC
RX <-> TX
TX <-> RX
GND <-> GND

Yaml
substitutions:
  name: esphome-web-3d3788
  tx_pin: GPIO1
  rx_pin: GPIO3

esphome:
  name: ${name}
  platform: ESP32
  board: esp32dev
  friendly_name: ESPHome WKS

api:
  encryption:
    key: "xxx"

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Esphome-Web-3D3788"
    password: "xxx"

captive_portal:

logger:
  baud_rate: 0

uart:
  - id: uart0
    baud_rate: 2400
    tx_pin: ${tx_pin}
    rx_pin: ${rx_pin}
    debug:
      direction: BOTH
      dummy_receiver: false
      after:
        delimiter: "\r"
      sequence:
        - lambda: UARTDebug::log_string(direction, bytes);

pipsolar:
  uart_id: uart0
  id: inverter0

sensor:
  - platform: pipsolar
    pipsolar_id: inverter0

    grid_voltage:
      name: "${name} grid_voltage"
    grid_frequency:
      name: "${name} grid_frequency"
    ac_output_voltage:
      name: "${name} ac_output_voltage"
    ac_output_frequency:
      name: "${name} ac_output_frequency"
    ac_output_apparent_power:
      name: "${name} ac_output_apparent_power"
    ac_output_active_power:
      name: "${name} ac_output_active_power"
    output_load_percent:
      name: "${name} output_load_percent"
    bus_voltage:
      name: "${name} bus_voltage"
    battery_voltage:
      name: "${name} battery_voltage"
    battery_charging_current:
      name: "${name} battery_charging_current"
    battery_capacity_percent:
      name: "${name} battery_capacity_percent"
    inverter_heat_sink_temperature:
      name: "${name} inverter_heat_sink_temperature"
    pv_input_current_for_battery:
      name: "${name} pv_input_current_for_battery"
    pv_input_voltage:
      name: "${name} pv_input_voltage"
    battery_voltage_scc:
      name: "${name} battery_voltage_scc"
    battery_discharge_current:
      name: "${name} battery_discharge_current"
    battery_voltage_offset_for_fans_on:
      name: "${name} battery_voltage_offset_for_fans_on"
    pv_charging_power:
      name: "${name} pv_charging_power"

Logs
======================== [SUCCESS] Took 149.94 seconds ========================
INFO Successfully compiled program.
INFO Resolving IP address of esphome-web-3d3788.local
INFO -> 192.168.1.50
INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (962336 bytes)
Uploading: [============================================================] 100% Done... INFO Waiting for result...
INFO OTA successful INFO Successfully uploaded program.
INFO Starting log output from esphome-web-3d3788.local using esphome API
INFO Successfully connected to esphome-web-3d3788.local
[18:44:08][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 18:42:35
[18:44:08][C][wifi:504]: WiFi:
[18:44:08][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[18:44:08][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[18:44:08][C][wifi:364]: IP Address: 192.168.1.50
[18:44:08][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[18:44:08][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[18:44:08][C][wifi:369]: Signal strength: -85 dB ▂▄▆█
[18:44:08][C][wifi:373]: Channel: 11
[18:44:08][C][wifi:374]: Subnet: 255.255.255.0
[18:44:08][C][wifi:375]: Gateway: 192.168.1.1
[18:44:08][C][wifi:376]: DNS1: 192.168.1.1
[18:44:08][C][wifi:377]: DNS2: 0.0.0.0
[18:44:08][C][logger:293]: Logger:
[18:44:08][C][logger:294]: Level: DEBUG
[18:44:08][C][logger:295]: Log Baud Rate: 0
[18:44:08][C][logger:296]: Hardware UART: UART0
[18:44:08][C][uart.arduino_esp32:108]: UART Bus 0:
[18:44:08][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[18:44:08][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[18:44:08][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[18:44:08][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[18:44:08][C][uart.arduino_esp32:115]: Data Bits: 8
[18:44:08][C][uart.arduino_esp32:116]: Parity: NONE
[18:44:08][C][uart.arduino_esp32:117]: Stop bits: 1
[18:44:08][C][pipsolar:860]: Pipsolar:
[18:44:08][C][pipsolar:861]: used commands:
[18:44:08][C][pipsolar:864]: QPIGS
[18:44:08][C][captive_portal:088]: Captive Portal:
[18:44:08][C][mdns:108]: mDNS:
[18:44:08][C][mdns:109]: Hostname: esphome-web-3d3788
[18:44:08][C][ota:093]: Over-The-Air Updates:
[18:44:08][C][ota:094]: Address: esphome-web-3d3788.local:3232
[18:44:08][C][api:138]: API Server:
[18:44:08][C][api:139]: Address: esphome-web-3d3788.local:6053
[18:44:08][C][api:141]: Using noise encryption: YES
[18:44:11][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:11][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:11][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:16][D][api:102]: Accepted 192.168.1.39
[18:44:16][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[18:44:16][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:16][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:16][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:21][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:21][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:21][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:26][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:26][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:26][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:31][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:31][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:31][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:36][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:36][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:36][D][pipsolar:838]: Sending polling command : QPIGS with length 5

Then I tested the “test protocol”.
Yaml
substitutions:
  name: esphome-web-3d3788
  tx_pin: GPIO1
  rx_pin: GPIO3

esphome:
  name: ${name}
  platform: ESP32
  board: esp32dev
  friendly_name: ESPHome WKS

api:
  encryption:
    key: "xxx"

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Esphome-Web-3D3788"
    password: "xxx"

captive_portal:

logger:
  baud_rate: 0

uart:
  - id: uart0
    baud_rate: 2400
    tx_pin: ${tx_pin}
    rx_pin: ${rx_pin}
    debug:
      direction: BOTH
      dummy_receiver: true
      after:
        delimiter: "\r"
      sequence:
        - lambda: UARTDebug::log_string(direction, bytes);

interval:
  - interval: 30s
    then:
      - uart.write: "QPI\r"
      - delay: 2s

      - uart.write: "^P003PI\r"
      - delay: 2s

      - uart.write: "^P005PIq\x8b\r"
      - delay: 2s

      - uart.write: "QPI\xbe\xac\r"
      - delay: 2s

      - uart.write: "QDIq\x1b\r"
      - delay: 2s
      - uart.write: "QPIRI\xF8T\r"
      - delay: 2s
      - uart.write: "QPIGS\xB7\xA9\r"
      - delay: 2s
      - uart.write: "QMODI\xC1\r"
      - delay: 2s
      - uart.write: "QFLAG\x98t\r"

Logs
INFO Reading configuration /config/esphome/esphome-web-3d3788.yaml...
INFO Starting log output from esphome-web-3d3788.local using esphome API
INFO Successfully connected to esphome-web-3d3788.local
[18:32:06][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 18:21:54
[18:32:06][C][wifi:504]: WiFi:
[18:32:06][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[18:32:06][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[18:32:06][C][wifi:364]: IP Address: 192.168.1.50
[18:32:06][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[18:32:06][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[18:32:06][C][wifi:369]: Signal strength: -74 dB ▂▄▆█
[18:32:06][C][wifi:373]: Channel: 11
[18:32:06][C][wifi:374]: Subnet: 255.255.255.0
[18:32:06][C][wifi:375]: Gateway: 192.168.1.1
[18:32:06][C][wifi:376]: DNS1: 192.168.1.1
[18:32:06][C][wifi:377]: DNS2: 0.0.0.0
[18:32:06][C][logger:293]: Logger:
[18:32:06][C][logger:294]: Level: DEBUG
[18:32:06][C][logger:295]: Log Baud Rate: 0
[18:32:06][C][logger:296]: Hardware UART: UART0
[18:32:06][C][uart.arduino_esp32:108]: UART Bus 0:
[18:32:06][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[18:32:06][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[18:32:06][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[18:32:06][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[18:32:06][C][uart.arduino_esp32:115]: Data Bits: 8
[18:32:06][C][uart.arduino_esp32:116]: Parity: NONE
[18:32:06][C][uart.arduino_esp32:117]: Stop bits: 1
[18:32:07][C][captive_portal:088]: Captive Portal:
[18:32:07][C][mdns:108]: mDNS:
[18:32:07][C][mdns:109]: Hostname: esphome-web-3d3788
[18:32:07][C][ota:093]: Over-The-Air Updates:
[18:32:07][C][ota:094]: Address: esphome-web-3d3788.local:3232
[18:32:07][C][api:138]: API Server:
[18:32:07][C][api:139]: Address: esphome-web-3d3788.local:6053
[18:32:07][C][api:141]: Using noise encryption: YES
[18:32:07][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[18:32:09][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[18:32:11][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[18:32:13][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[18:32:27][D][uart_debug:158]: >>> "QPI\r"
[18:32:29][D][uart_debug:158]: >>> "^P003PI\r"
[18:32:31][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[18:32:33][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[18:32:35][D][uart_debug:158]: >>> "QDIq\e\r"
[18:32:37][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[18:32:39][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"

I was not sure of the connection TX <-> RX, so I tested to switch them :
ESP32 <-> RS232/TTL
3V3 <-> VCC
RX <-> RX
TX <-> TX
GND <-> GND

Yaml (same)
substitutions:
name: esphome-web-3d3788
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS
api:
encryption:
key: "xxx"
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3D3788"
password: "xxx"
captive_portal:
logger:
baud_rate: 0
uart:

id: uart0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: false
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);

pipsolar:
uart_id: uart0
id: inverter0
sensor:

platform: pipsolar
pipsolar_id: inverter0
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
pv_charging_power:
name: "${name} pv_charging_power"

Logs
========================= [SUCCESS] Took 75.71 seconds ========================= INFO Successfully compiled program. INFO Resolving IP address of esphome-web-3d3788.local INFO -> 192.168.1.50 INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (962336 bytes) Uploading: [============================================================] 100% Done... INFO Waiting for result... INFO OTA successful INFO Successfully uploaded program. INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[19:18:41][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 19:16:48 [19:18:41][C][wifi:504]: WiFi:
[19:18:41][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[19:18:41][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[19:18:41][C][wifi:364]: IP Address: 192.168.1.50
[19:18:41][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[19:18:41][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[19:18:41][C][wifi:369]: Signal strength: -87 dB ▂▄▆█
[19:18:41][C][wifi:373]: Channel: 11
[19:18:41][C][wifi:374]: Subnet: 255.255.255.0
[19:18:41][C][wifi:375]: Gateway: 192.168.1.1
[19:18:41][C][wifi:376]: DNS1: 192.168.1.1
[19:18:41][C][wifi:377]: DNS2: 0.0.0.0
[19:18:41][C][logger:293]: Logger:
[19:18:41][C][logger:294]: Level: DEBUG
[19:18:41][C][logger:295]: Log Baud Rate: 0
[19:18:41][C][logger:296]: Hardware UART: UART0
[19:18:41][C][uart.arduino_esp32:108]: UART Bus 0:
[19:18:41][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[19:18:41][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[19:18:41][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[19:18:41][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[19:18:41][C][uart.arduino_esp32:115]: Data Bits: 8
[19:18:41][C][uart.arduino_esp32:116]: Parity: NONE
[19:18:41][C][uart.arduino_esp32:117]: Stop bits: 1
[19:18:41][C][pipsolar:860]: Pipsolar:
[19:18:41][C][pipsolar:861]: used commands:
[19:18:41][C][pipsolar:864]: QPIGS
[19:18:41][C][captive_portal:088]: Captive Portal:
[19:18:41][C][mdns:108]: mDNS:
[19:18:41][C][mdns:109]: Hostname: esphome-web-3d3788
[19:18:41][C][ota:093]: Over-The-Air Updates:
[19:18:41][C][ota:094]: Address: esphome-web-3d3788.local:3232
[19:18:41][C][api:138]: API Server:
[19:18:41][C][api:139]: Address: esphome-web-3d3788.local:6053
[19:18:41][C][api:141]: Using noise encryption: YES
[19:18:42][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:42][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:42][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[19:18:47][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:47][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:47][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[19:18:52][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:52][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:52][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[19:18:57][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:57][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:57][D][pipsolar:838]: Sending polling command : QPIGS with length 5

Then the “test protocol”
Yaml
substitutions:
name: esphome-web-3d3788
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS
api:
encryption:
key: "xxx"
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3D3788"
password: "xxx"
captive_portal:
logger:
baud_rate: 0
uart:

id: uart0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: true
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);

interval:

interval: 30s
then:

uart.write: "QPI\r"

delay: 2s

uart.write: "^P003PI\r"

delay: 2s

uart.write: "^P005PIq\x8b\r"

delay: 2s

uart.write: "QPI\xbe\xac\r"

delay: 2s

uart.write: "QDIq\x1b\r"

delay: 2s

uart.write: "QPIRI\xF8T\r"

delay: 2s

uart.write: "QPIGS\xB7\xA9\r"

delay: 2s

uart.write: "QMODI\xC1\r"

delay: 2s

uart.write: "QFLAG\x98t\r"

Logs
======================== [SUCCESS] Took 143.02 seconds ======================== INFO Successfully compiled program. INFO Resolving IP address of esphome-web-3d3788.local INFO -> 192.168.1.50 INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (916768 bytes) Uploading: [============================================================] 100% Done... INFO Waiting for result... INFO OTA successful INFO Successfully uploaded program. INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[19:23:55][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 19:22:19
[19:23:55][C][wifi:504]: WiFi:
[19:23:55][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[19:23:55][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[19:23:56][C][wifi:364]: IP Address: 192.168.1.50
[19:23:56][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[19:23:56][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[19:23:56][C][wifi:369]: Signal strength: -87 dB ▂▄▆█
[19:23:56][C][wifi:373]: Channel: 11
[19:23:56][C][wifi:374]: Subnet: 255.255.255.0
[19:23:56][C][wifi:375]: Gateway: 192.168.1.1
[19:23:56][C][wifi:376]: DNS1: 192.168.1.1
[19:23:56][C][wifi:377]: DNS2: 0.0.0.0
[19:23:56][C][logger:293]: Logger:
[19:23:56][C][logger:294]: Level: DEBUG
[19:23:56][C][logger:295]: Log Baud Rate: 0
[19:23:56][C][logger:296]: Hardware UART: UART0
[19:23:56][C][captive_portal:088]: Captive Portal:
[19:23:56][C][mdns:108]: mDNS:
[19:23:56][C][mdns:109]: Hostname: esphome-web-3d3788
[19:23:56][C][ota:093]: Over-The-Air Updates:
[19:23:56][C][ota:094]: Address: esphome-web-3d3788.local:3232
[19:23:56][C][api:138]: API Server:
[19:23:56][C][api:139]: Address: esphome-web-3d3788.local:6053
[19:23:56][C][api:141]: Using noise encryption: YES
[19:23:56][D][uart_debug:158]: >>> "QDIq\e\r"
[19:23:58][D][api:102]: Accepted 192.168.1.39
[19:23:58][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[19:23:58][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[19:24:00][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[19:24:02][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[19:24:04][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[19:24:09][D][uart_debug:158]: >>> "QPI\r"
[19:24:11][D][uart_debug:158]: >>> "^P003PI\r"
[19:24:13][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[19:24:15][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[19:24:17][D][uart_debug:158]: >>> "QDIq\e\r"
[19:24:19][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[19:24:21][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[19:24:23][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[19:24:25][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[19:24:39][D][uart_debug:158]: >>> "QPI\r"
[19:24:41][D][uart_debug:158]: >>> "^P003PI\r"
[19:24:43][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[19:24:45][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
Thank you for your help.
Mathieu.

Thanks for the issue with all the important details included. Please double check the VCC and GND connection of the RS232 converter. It looks like the power LED isn't on.

Hi Sebastian,
Thank you for your help.
The power led is blinking, I took another picture when it is on.

However, I checked the voltage, it seems OK (picture below).

I also check the connection on RJ45/serial cable (picture below), but it seems not correct (compared with the documentation). It is a standard cable, I didn’t make any modification. Therefore I built a custom cable with correct mapping.
Standard cable mapping currently used:

The documentation:

This is my new custom cable:

Seems OK compared to the documentation.
I connected this to my WKS and the led of the TTL/RS232 converter doesn’t blink anymore!

I tested again the program:
======================== [SUCCESS] Took 152.26 seconds ======================== INFO Successfully compiled program. INFO Resolving IP address of esphome-web-3d3788.local INFO -> 192.168.1.50 INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (962336 bytes) Uploading: [============================================================] 100% Done... INFO Waiting for result... INFO OTA successful INFO Successfully uploaded program. INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[16:57:55][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 13 2023, 16:56:29
[16:57:55][C][wifi:504]: WiFi:
[16:57:55][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[16:57:55][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[16:57:55][C][wifi:364]: IP Address: 192.168.1.50
[16:57:55][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[16:57:55][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[16:57:55][C][wifi:369]: Signal strength: -75 dB ▂▄▆█
[16:57:55][C][wifi:373]: Channel: 11
[16:57:55][C][wifi:374]: Subnet: 255.255.255.0
[16:57:55][C][wifi:375]: Gateway: 192.168.1.1
[16:57:55][C][wifi:376]: DNS1: 192.168.1.1
[16:57:55][C][wifi:377]: DNS2: 0.0.0.0
[16:57:55][C][logger:293]: Logger:
[16:57:55][C][logger:294]: Level: DEBUG
[16:57:55][C][logger:295]: Log Baud Rate: 0
[16:57:55][C][logger:296]: Hardware UART: UART0
[16:57:55][C][uart.arduino_esp32:108]: UART Bus 0:
[16:57:55][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[16:57:55][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[16:57:55][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[16:57:55][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[16:57:55][C][uart.arduino_esp32:115]: Data Bits: 8
[16:57:55][C][uart.arduino_esp32:116]: Parity: NONE
[16:57:55][C][uart.arduino_esp32:117]: Stop bits: 1
[16:57:55][C][pipsolar:860]: Pipsolar:
[16:57:55][C][pipsolar:861]: used commands:
[16:57:55][C][pipsolar:864]: QPIGS
[16:57:55][C][captive_portal:088]: Captive Portal:
[16:57:55][C][mdns:108]: mDNS:
[16:57:55][C][mdns:109]: Hostname: esphome-web-3d3788
[16:57:55][C][ota:093]: Over-The-Air Updates:
[16:57:55][C][ota:094]: Address: esphome-web-3d3788.local:3232
[16:57:55][C][api:138]: API Server:
[16:57:55][C][api:139]: Address: esphome-web-3d3788.local:6053
[16:57:55][C][api:141]: Using noise encryption: YES
[16:57:57][D][api:102]: Accepted 192.168.1.39
[16:57:57][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[16:57:58][D][pipsolar:755]: timeout command to poll: QPIGS
[16:57:58][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[16:57:58][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[16:58:03][D][pipsolar:755]: timeout command to poll: QPIGS
[16:58:03][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[16:58:03][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[16:58:08][D][pipsolar:755]: timeout command to poll: QPIGS
[16:58:08][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[16:58:08][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[16:58:13][D][pipsolar:755]: timeout command to poll: QPIGS
[16:58:13][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[16:58:13][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[16:58:18][D][pipsolar:755]: timeout command to poll: QPIGS
[16:58:18][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"

And the test protocol program:
========================= [SUCCESS] Took 72.77 seconds ========================= INFO Successfully compiled program. INFO Resolving IP address of esphome-web-3d3788.local INFO -> 192.168.1.50 INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (916768 bytes) Uploading: [============================================================] 100% Done... INFO Waiting for result... INFO OTA successful INFO Successfully uploaded program. INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[16:33:11][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 13 2023, 16:31:53
[16:33:11][C][wifi:504]: WiFi:
[16:33:11][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[16:33:11][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[16:33:11][C][wifi:364]: IP Address: 192.168.1.50
[16:33:11][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[16:33:11][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[16:33:11][C][wifi:369]: Signal strength: -78 dB ▂▄▆█
[16:33:11][C][wifi:373]: Channel: 11
[16:33:11][C][wifi:374]: Subnet: 255.255.255.0
[16:33:11][C][wifi:375]: Gateway: 192.168.1.1
[16:33:11][C][wifi:376]: DNS1: 192.168.1.1
[16:33:11][C][wifi:377]: DNS2: 0.0.0.0
[16:33:11][C][logger:293]: Logger:
[16:33:11][C][logger:294]: Level: DEBUG
[16:33:11][C][logger:295]: Log Baud Rate: 0
[16:33:11][C][logger:296]: Hardware UART: UART0
[16:33:11][C][uart.arduino_esp32:108]: UART Bus 0:
[16:33:11][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[16:33:11][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[16:33:11][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[16:33:11][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[16:33:11][C][uart.arduino_esp32:115]: Data Bits: 8
[16:33:11][C][uart.arduino_esp32:116]: Parity: NONE
[16:33:11][C][uart.arduino_esp32:117]: Stop bits: 1
[16:33:11][C][captive_portal:088]: Captive Portal:
[16:33:11][C][mdns:108]: mDNS:
[16:33:11][C][mdns:109]: Hostname: esphome-web-3d3788
[16:33:11][C][ota:093]: Over-The-Air Updates:
[16:33:11][C][ota:094]: Address: esphome-web-3d3788.local:3232
[16:33:11][C][api:138]: API Server:
[16:33:11][C][api:139]: Address: esphome-web-3d3788.local:6053
[16:33:11][C][api:141]: Using noise encryption: YES
[16:33:11][D][uart_debug:158]: >>> "QDIq\e\r"
[16:33:13][D][api:102]: Accepted 192.168.1.39
[16:33:13][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[16:33:13][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[16:33:15][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[16:33:17][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[16:33:19][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[16:33:23][D][uart_debug:158]: >>> "QPI\r"
[16:33:25][D][uart_debug:158]: >>> "^P003PI\r"
[16:33:27][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[16:33:29][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[16:33:31][D][uart_debug:158]: >>> "QDIq\e\r"
[16:33:33][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[16:33:35][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[16:33:37][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[16:33:39][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[16:33:53][D][uart_debug:158]: >>> "QPI\r"
[16:33:55][D][uart_debug:158]: >>> "^P003PI\r"
[16:33:57][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[16:33:59][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[16:34:01][D][uart_debug:158]: >>> "QDIq\e\r"
[16:34:03][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[16:34:05][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[16:34:07][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
…

I tested changed the TX/RX connection between TTL/RS232 converter and ESP32 just in case.
INFO Reading configuration /config/esphome/esphome-web-3d3788.yaml... INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[16:46:21][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 13 2023, 16:31:53
[16:46:21][C][wifi:504]: WiFi:
[16:46:21][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[16:46:21][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[16:46:21][C][wifi:364]: IP Address: 192.168.1.50
[16:46:21][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[16:46:21][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[16:46:21][C][wifi:369]: Signal strength: -76 dB ▂▄▆█
[16:46:21][C][wifi:373]: Channel: 11
[16:46:21][C][wifi:374]: Subnet: 255.255.255.0
[16:46:21][C][wifi:375]: Gateway: 192.168.1.1
[16:46:21][C][wifi:376]: DNS1: 192.168.1.1
[16:46:21][C][wifi:377]: DNS2: 0.0.0.0
[16:46:21][C][logger:293]: Logger:
[16:46:21][C][logger:294]: Level: DEBUG
[16:46:21][C][logger:295]: Log Baud Rate: 0
[16:46:21][C][logger:296]: Hardware UART: UART0
[16:46:21][C][uart.arduino_esp32:108]: UART Bus 0:
[16:46:21][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[16:46:21][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[16:46:21][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[16:46:21][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[16:46:21][C][uart.arduino_esp32:115]: Data Bits: 8
[16:46:21][C][uart.arduino_esp32:116]: Parity: NONE
[16:46:21][C][uart.arduino_esp32:117]: Stop bits: 1
[16:46:22][C][captive_portal:088]: Captive Portal:
[16:46:22][C][mdns:108]: mDNS:
[16:46:22][C][mdns:109]: Hostname: esphome-web-3d3788
[16:46:22][C][ota:093]: Over-The-Air Updates:
[16:46:22][C][ota:094]: Address: esphome-web-3d3788.local:3232
[16:46:22][W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 8 restarts
[16:46:22][C][api:138]: API Server:
[16:46:22][C][api:139]: Address: esphome-web-3d3788.local:6053
[16:46:22][C][api:141]: Using noise encryption: YES
[16:46:34][D][uart_debug:158]: >>> "QPI\r"
[16:46:36][D][uart_debug:158]: >>> "^P003PI\r"
[16:46:38][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[16:46:40][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[16:46:42][D][uart_debug:158]: >>> "QDIq\e\r"
[16:46:44][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[16:46:46][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[16:46:48][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[16:46:50][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[16:47:04][D][uart_debug:158]: >>> "QPI\r"
[16:47:06][D][uart_debug:158]: >>> "^P003PI\r"
[16:47:08][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[16:47:10][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[16:47:12][D][uart_debug:158]: >>> "QDIq\e\r"
☹
Mathieu

Hi,
The converter TLL/RS232 is : DollaTek MAX3232 RS232 Serial Port vers TTL Convertisseur Module DB9 Connecteur W / 4 Jump Cables. Link : https://www.amazon.fr/dp/B07DK3874B?psc=1&ref=ppx_yo2ov_dt_b_product_details
The ESP32 is : ESP32-WROOM-32U. Link : https://fr.aliexpress.com/item/32959541446.html?spm=a2g0o.order_detail.order_detail_item.3.839f7d56cT1alZ&gatewayAdapt=glo2fra
The invertier is : WKS Evo Circle 5,6 kVA 48V. Link : https://www.wattuneed.com/fr/onduleurs-et-convertisseurs/25678-onduleur-hybride-wks-evo-56kva-48v-0768563819193.html
I will perform some more tests tomorrow.
Thanks again.
Mathieu

First of all: It looks like your RS232 converter has a TX and RX led. The periodic blinking from the beginning was fine because the pipsolar implementation sends requests to the inverter once per update_interval. If you increase/decrease the update_interval of the pipsolar component the blinking interval of the TX LED should change.
Did I understand correctly: The inverter was delivered with a D-SUB to RJ45 data cable which doesn't match with the PIP pinout? Please stick to the data cable of the inverter if the TX LED blinks periodically here.

As soon as the TX led blinks again please connect the TX pin to the RX pin to create a loopback. Both LEDs (RX & TX) should blink now. Does it work? You should see incoming / the loopback traffic now if you have a look at the ESPHome log. If this is working we can proceed.

Hello,
Thank you for all these informations.
I need some time to check that, I will come back to you as soon as possible (I hope on monday).
Have a nice weekend.

Hello,
“Did I understand correctly: The inverter was delivered with a D-SUB to RJ45 data cable which doesn't match with the PIP pinout? Please stick to the data cable of the inverter if the TX LED blinks periodically here.”
--> Sorry I was not clear: I never used the cable provided with the inverter because it is a D-SUB FEMALE to RJ45. I need to add a FEMALE/MALE converter to use it (I can buy one if needed).
I bought a D-SUB MALE to RJ45 (the "standard cable" I mention above) and it doesn't match the documentation.
I check the mapping of the cable (D-SUB FEMALE to RJ45) provided with the inverter and it match with the documentation.

Therefore, this point is closed: the cable that I bought is not correct. Now I use my custom cable. It has the same mapping that the cable provided with the inverter.
Thanks for the explanation about the LED of the TTL/RS232 converter. I checked and the LED blink at the same time that the log send data.
Video here: https://drive.google.com/file/d/1Yfs5CwihPt4zCI0fq0S2Bfz4PjS7q9M3/view?usp=sharing
Then, I make the loopback (not connected to the inverter), it works!
The 2 LED are blinking :)

INFO Reading configuration /config/esphome/esphome-web-3d3788.yaml... INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[16:38:16][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 17 2023, 12:42:48 [16:38:16][C][wifi:504]: WiFi:
[16:38:16][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[16:38:16][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[16:38:16][C][wifi:364]: IP Address: 192.168.1.50
[16:38:16][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[16:38:16][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[16:38:16][C][wifi:369]: Signal strength: -89 dB ▂▄▆█
[16:38:16][C][wifi:373]: Channel: 11
[16:38:16][C][wifi:374]: Subnet: 255.255.255.0
[16:38:16][C][wifi:375]: Gateway: 192.168.1.1
[16:38:16][C][wifi:376]: DNS1: 192.168.1.1
[16:38:16][C][wifi:377]: DNS2: 0.0.0.0
[16:38:16][C][logger:293]: Logger:
[16:38:16][C][logger:294]: Level: DEBUG
[16:38:16][C][logger:295]: Log Baud Rate: 0
[16:38:16][C][logger:296]: Hardware UART: UART0
[16:38:16][C][uart.arduino_esp32:108]: UART Bus 0:
[16:38:16][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[16:38:16][C][captive_portal:088]: Captive Portal:
[16:38:16][C][mdns:108]: mDNS:
[16:38:16][C][mdns:109]: Hostname: esphome-web-3d3788
[16:38:16][C][ota:093]: Over-The-Air Updates:
[16:38:16][C][ota:094]: Address: esphome-web-3d3788.local:3232
[16:38:16][W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 8 restarts
[16:38:16][C][api:138]: API Server:
[16:38:16][C][api:139]: Address: esphome-web-3d3788.local:6053
[16:38:16][C][api:141]: Using noise encryption: YES
[16:38:29][D][uart_debug:158]: >>> "QPI\r"
[16:38:29][D][uart_debug:158]: <<< "QPI\r"
[16:38:31][D][uart_debug:158]: >>> "^P003PI\r"
[16:38:31][D][uart_debug:158]: <<< "^P003PI\r"
[16:38:33][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[16:38:33][D][uart_debug:158]: <<< "^P005PIq\xC2\x8B\r"
[16:38:35][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[16:38:35][D][uart_debug:158]: <<< "QPI\xC2\xBE\xC2\xAC\r"
[16:38:37][D][uart_debug:158]: >>> "QDIq\e\r"
[16:38:37][D][uart_debug:158]: <<< "QDIq\e\r"
[16:38:39][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[16:38:39][D][uart_debug:158]: <<< "QPIRI\xC3\xB8T\r"
[16:38:41][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[16:38:41][D][uart_debug:158]: <<< "QPIGS\xC2\xB7\xC2\xA9\r"
[16:38:43][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[16:38:43][D][uart_debug:158]: <<< "QMODI\xC3\x81\r"
[16:38:45][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[16:38:45][D][uart_debug:158]: <<< "QFLAG\xC2\x98t\r"
I connected it with the inverter, still nothing… only one LED is blinking, and no answer in the log.

[17:17:43][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[17:17:45][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[17:17:47][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[17:17:49][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[17:17:55][D][uart_debug:158]: >>> "QPI\r"
[17:17:57][D][uart_debug:158]: >>> "^P003PI\r"
[17:17:59][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[17:18:01][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[17:18:03][D][uart_debug:158]: >>> "QDIq\e\r"
[17:18:05][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[17:18:07][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[17:18:09][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[17:18:11][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[17:18:25][D][uart_debug:158]: >>> "QPI\r"
I tried to switch RX/TX on inverter side, still KO.

[17:22:41][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[17:22:55][D][uart_debug:158]: >>> "QPI\r"
[17:22:57][D][uart_debug:158]: >>> "^P003PI\r"
[17:22:59][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[17:23:01][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[17:23:03][D][uart_debug:158]: >>> "QDIq\e\r"
[17:23:05][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[17:23:07][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[17:23:09][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[17:23:11][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[17:23:25][D][uart_debug:158]: >>> "QPI\r"
[17:23:27][D][uart_debug:158]: >>> "^P003PI\r"
[17:23:29][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
I also tested the “real” program:
[17:27:33][D][api:102]: Accepted 192.168.1.39
[17:27:33][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[17:27:34][D][pipsolar:755]: timeout command to poll: QPIGS
[17:27:34][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[17:27:34][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[17:27:39][D][pipsolar:755]: timeout command to poll: QPIGS
[17:27:39][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[17:27:39][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[17:27:44][D][pipsolar:755]: timeout command to poll: QPIGS
[17:27:44][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[17:27:44][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[17:27:49][D][pipsolar:755]: timeout command to poll: QPIGS
I will buy an RS232 male/male to be able to test with the RJ45/RS232 cable provided with the inverter.

Perfect! If the loopback test is working the connection between the ESP and the RS232 board is fine. If the inverter still doesn't respond please swap the RX/TX-lines of your RJ45<->D-SUB data cable and try again!

Hello,
Sorry for the delay, I did a lot of tests to understand the issue.
I switched the TX/RX and it still didn't worked.
Just to be sure, I tested to communicate with the inverter through Watchpower:
Inverter --> RJ45/RS232 cable (provided with the inverter) --> RS232/USB --> Laptop with WatchPower.
It works!
I investigated again and the issue seems to be in the RJ45 custom cable. I don’t understand why, but :
1/ When I tested the loopback without the RJ45, it works.

2/ When I test the loopback with the RJ45 (not connected to the inverter), it doesn’t work (there is no shortcut in the RX/TX/GND of the RJ45.
I take another RJ45 cable, and it works.
I removed the loopback and connected the RJ45 to the inverter, and… it works! for real! :)
INFO Reading configuration /config/esphome/esphome-web-3d3788.yaml... INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[15:27:22][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 20 2023, 13:26:15 [15:27:22][C][wifi:504]: WiFi:
[15:27:22][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[15:27:22][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[15:27:22][C][wifi:364]: IP Address: 192.168.1.50
[15:27:22][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[15:27:22][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[15:27:22][C][wifi:369]: Signal strength: -89 dB ▂▄▆█
[15:27:22][C][wifi:373]: Channel: 11
[15:27:22][C][wifi:374]: Subnet: 255.255.255.0
[15:27:22][C][wifi:375]: Gateway: 192.168.1.1
[15:27:22][C][wifi:376]: DNS1: 192.168.1.1
[15:27:22][C][wifi:377]: DNS2: 0.0.0.0
[15:27:22][C][logger:293]: Logger:
[15:27:22][C][logger:294]: Level: DEBUG
[15:27:22][C][logger:295]: Log Baud Rate: 0
[15:27:22][C][logger:296]: Hardware UART: UART0
[15:27:22][C][uart.arduino_esp32:108]: UART Bus 0:
[15:27:22][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[15:27:22][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[15:27:22][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[15:27:22][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[15:27:22][C][uart.arduino_esp32:115]: Data Bits: 8
[15:27:22][C][uart.arduino_esp32:116]: Parity: NONE
[15:27:22][C][uart.arduino_esp32:117]: Stop bits: 1
[15:27:23][C][captive_portal:088]: Captive Portal:
[15:27:23][C][mdns:108]: mDNS:
[15:27:23][C][mdns:109]: Hostname: esphome-web-3d3788
[15:27:23][C][ota:093]: Over-The-Air Updates:
[15:27:23][C][ota:094]: Address: esphome-web-3d3788.local:3232
[15:27:23][C][api:138]: API Server:
[15:27:23][C][api:139]: Address: esphome-web-3d3788.local:6053
[15:27:23][C][api:141]: Using noise encryption: YES
[15:27:28][D][uart_debug:158]: >>> "QPI\r"
[15:27:29][D][uart_debug:158]: <<< "(NAKss\r"
[15:27:30][D][uart_debug:158]: >>> "^P003PI\r"
[15:27:32][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[15:27:35][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r" [15:27:35][D][uart_debug:158]: <<< "(NAKss\r"
[15:27:37][D][uart_debug:158]: >>> "QDIq\e\r"
[15:27:37][D][uart_debug:158]: <<< "(230.0 50.0 0030 42.0 54.0 56.4 46.0 60 0 0 2 0 0 0 0 0 1 1 0 0 1 0 54.0 0 1 000\x9E`\r"
[15:27:39][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[15:27:39][D][uart_debug:158]: <<< "(NAKss\r"
[15:27:41][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r" [15:27:41][D][uart_debug:158]: <<< "(NAKss\r"
[15:27:43][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[15:27:43][D][uart_debug:158]: <<< "(NAKss\r"
[15:27:45][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[15:27:45][D][uart_debug:158]: <<< "(NAKss\r"
It takes me a lot of time to identify this RJ45 cable issue!
After that, I tested with the real program, it didn't work... I tested again with the test program, didn't work!
I probably have a problem with a cable or a connection...
I will check this weekend, I need some rest...
But it worked once, so it should work again :)
I keep you informed.
Thanks a lot for your help.
Mathieu

Good job! Your hard work will pay off! ;-)

Hello,
It finally works :)
All details below, if it can help someone else.
Again, thanks a lot for your help!

Test Program
substitutions:
name: esphome-web-3b6f80
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome PZEM 2
api:
encryption:
key: "xxx"
reboot_timeout: 0s
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3B6F80"
password: "xxx"
logger:
baud_rate: 0
level: DEBUG
uart:
id: uart_0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: true
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
interval:

interval: 80s
then:

logger.log:
level: INFO
format: "Testing PI30/PI30MAX/PI30REVO/PI41 commands..."

logger.log:
level: INFO
format: "This is the set of commands supported by the pipsolar component!"

uart.write: [0x51, 0x50, 0x49, 0xBE, 0xAC, 0x0D]  # QPI\xbe\xac\r

delay: 1s

uart.write: [0x51, 0x44, 0x49, 0x71, 0x1B, 0x0D]  # QDIq\x1b\r

delay: 1s

uart.write: [0x51, 0x46, 0x4C, 0x41, 0x47, 0x98, 0x74, 0x0D]  # QFLAG\x98t\r

delay: 1s

uart.write: [0x51, 0x4D, 0x4E, 0xBB, 0x64, 0x0D]  # QMN\xbbd\r

delay: 1s

uart.write: [0x51, 0x4D, 0x4F, 0x44, 0x49, 0xC1, 0x0D]  # QMODI\xc1\r

delay: 1s

uart.write: [0x51, 0x50, 0x49, 0x47, 0x53, 0xB7, 0xA9, 0x0D]  # QPIGS\xB7\xA9\r

delay: 1s

uart.write: [0x51, 0x50, 0x49, 0x52, 0x49, 0xF8, 0x54, 0x0D]  # QPIRI\xF8T\r

delay: 1s

uart.write: [0x51, 0x50, 0x49, 0x57, 0x53, 0xB4, 0xDA, 0x0D]  # QPIWS\xb4\xda\r

delay: 1s

uart.write: [0x51, 0x54, 0x27, 0xFF, 0x0D]  # QT'\xff\r

delay: 1s

logger.log:
level: INFO
format: "Testing PI41 split phase / multiple strings commands..."

uart.write: [0x51, 0x50, 0x49, 0x47, 0x53, 0x32, 0x68, 0x2D, 0x0D]  # QPIGS2h-\r

delay: 1s

uart.write: [0x51, 0x50, 0x32, 0x47, 0x53, 0x30, 0x14, 0x05, 0x0D]  # QP2GS0\x14\x05\r

delay: 1s

uart.write: [0x51, 0x50, 0x32, 0x47, 0x53, 0x31, 0x04, 0x24, 0x0D]  # QP2GS1\x04$\r

delay: 1s

logger.log:
level: INFO
format: "Testing unsupported PI18 commands..."

uart.write: [0x5E, 0x50, 0x30, 0x30, 0x35, 0x50, 0x49, 0x71, 0x8B, 0x0D]  # ^P005PIq\x8b\r

delay: 1s

uart.write: [0x5E, 0x50, 0x30, 0x30, 0x35, 0x47, 0x53, 0x58, 0x14, 0x0D]  # ^P005GSX\x14\r

delay: 1s

uart.write: [0x5E, 0x50, 0x30, 0x30, 0x36, 0x4D, 0x4F, 0x44, 0xDD, 0xBE, 0x0D]  # ^P006MOD\xdd\xbe\r

delay: 1s

logger.log:
level: INFO
format: "Testing unsupported PI17 commands..."

uart.write: [0x5E, 0x50, 0x30, 0x30, 0x33, 0x50, 0x49, 0x0D]  # ^P003PI\r

delay: 1s

uart.write: [0x5E, 0x50, 0x30, 0x30, 0x34, 0x4D, 0x4F, 0x44, 0x0D]  # ^P004MOD\r

delay: 1s

uart.write: [0x5E, 0x50, 0x30, 0x30, 0x35, 0x46, 0x4C, 0x41, 0x47, 0x0D]  # ^P005FLAG\r

delay: 1s

logger.log:
level: INFO
format: "Testing unsupported PI16 commands..."

uart.write: [0x51, 0x50, 0x49, 0x0D]  # QPI\r

delay: 1s

uart.write: [0x51, 0x4D, 0x4F, 0x44, 0x0D]  # QMOD\r

delay: 1s

uart.write: [0x51, 0x50, 0x49, 0x47, 0x53, 0x0D]  # QPIGS\r

delay: 1s

uart.write: [0x51, 0x50, 0x49, 0x52, 0x49, 0x0D]  # QPIRI\r

delay: 1s

uart.write: [0x51, 0x4D, 0x4F, 0x44, 0x0D]  # QMOD\r

logger.log:
level: INFO
format: "Done. Repeating..."

Logs
INFO Reading configuration /config/esphome/esphome-web-3b6f80.yaml...
INFO Starting log output from esphome-web-3b6f80.local using esphome API
INFO Successfully connected to esphome-web-3b6f80.local
[13:29:11][I][app:102]: ESPHome version 2023.4.0 compiled on Apr 26 2023, 13:04:21
[13:29:11][C][wifi:505]: WiFi:
[13:29:11][C][wifi:363]: Local MAC: 40:22:D8:3B:6F:80
[13:29:11][C][wifi:364]: SSID: 'Livebox-8C62'[redacted]
[13:29:11][C][wifi:365]: IP Address: 192.168.1.53
[13:29:11][C][wifi:367]: BSSID: AC:84:C9:28:8C:62[redacted]
[13:29:11][C][wifi:368]: Hostname: 'esphome-web-3b6f80'
[13:29:11][C][wifi:370]: Signal strength: -74 dB ▂▄▆█
[13:29:11][C][wifi:374]: Channel: 1
[13:29:11][C][wifi:375]: Subnet: 255.255.255.0
[13:29:11][C][wifi:376]: Gateway: 192.168.1.1
[13:29:11][C][wifi:377]: DNS1: 192.168.1.1
[13:29:11][C][wifi:378]: DNS2: 0.0.0.0
[13:29:11][C][logger:294]: Logger:
[13:29:11][C][logger:295]: Level: DEBUG
[13:29:11][C][logger:296]: Log Baud Rate: 0
[13:29:11][C][logger:297]: Hardware UART: UART0
[13:29:11][C][uart.arduino_esp32:108]: UART Bus 0:
[13:29:12][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[13:29:12][C][mdns:108]: mDNS:
[13:29:12][C][mdns:109]: Hostname: esphome-web-3b6f80
[13:29:12][C][ota:093]: Over-The-Air Updates:
[13:29:12][C][ota:094]: Address: esphome-web-3b6f80.local:3232
[13:29:12][W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 8 restarts
[13:29:12][C][api:138]: API Server:
[13:29:12][C][api:139]: Address: esphome-web-3b6f80.local:6053
[13:29:12][C][api:141]: Using noise encryption: YES
[13:29:12][I][main:417]: Testing PI30/PI30MAX/PI30REVO/PI41 commands...
[13:29:12][I][main:420]: This is the set of commands supported by the pipsolar component!
[13:29:12][D][uart_debug:158]: >>> "QPI\xBE\xAC\r"
[13:29:12][D][uart_debug:158]: <<< "(PI30\x9A\v\r"
[13:29:13][D][uart_debug:158]: >>> "QDIq\e\r"
[13:29:13][D][uart_debug:158]: <<< "(230.0 50.0 0030 42.0 54.0 56.4 46.0 60 0 0 2 0 0 0 0 0 1 1 0 0 1 0 54.0 0 1 000\x9E\r"
[13:29:14][D][uart_debug:158]: >>> "QFLAG\x98t\r"
[13:29:14][D][uart_debug:158]: <<< "(EakxyzDbjlnuv\xDD>\r"
[13:29:15][D][uart_debug:158]: >>> "QMN\xBBd\r"
[13:29:15][D][uart_debug:158]: <<< "(MKS2-56009\xAB\r"
[13:29:16][D][uart_debug:158]: >>> "QMODI\xC1\r"
[13:29:16][D][uart_debug:158]: <<< "(L\x06\a\r"
[13:29:17][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[13:29:17][D][uart_debug:158]: <<< "(240.3 50.0 240.3 50.0 0024 0000 000 331 00.30 000 000 0019 00.0 000.0 00.00 00000 00010000 00 00 00000 010\x9D\xCE\r"
[13:29:18][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
[13:29:18][D][uart_debug:158]: <<< "(230.0 24.3 230.0 50.0 24.3 5600 5600 48.0 50.0 49.6 54.4 53.6 2 020 040 1 2 3 9 00 0 0 52.0 0 1 030\x92\xB1\r"
[13:29:19][D][uart_debug:158]: >>> "QPIWS\xB4\xDA\r"
[13:29:19][D][uart_debug:158]: <<< "(100000000000000000000010000000010000\xC4\xFF\r"
[13:29:20][D][uart_debug:158]: >>> "QT'\xFF\r"
[13:29:20][D][uart_debug:158]: <<< "(20230426131513\xCC\xF8\r"
[13:29:21][I][main:486]: Testing PI41 split phase / multiple strings commands...
[13:29:21][D][uart_debug:158]: >>> "QPIGS2h-\r"
[13:29:21][D][uart_debug:158]: <<< "(NAKss\r"
[13:29:22][D][uart_debug:158]: >>> "QP2GS0\x14\x05\r"
[13:29:22][D][uart_debug:158]: <<< "(NAKss\r"
[13:29:23][D][uart_debug:158]: >>> "QP2GS1\x04$\r"
[13:29:23][D][uart_debug:158]: <<< "(NAKss\r"
[13:29:24][I][main:510]: Testing unsupported PI18 commands...
[13:29:24][D][uart_debug:158]: >>> "^P005PIq\x8B\r"
[13:29:25][D][uart_debug:158]: >>> "^P005GSX\x14\r"
[13:29:26][D][uart_debug:158]: >>> "^P006MOD\xDD\xBE\r"
[13:29:27][I][main:534]: Testing unsupported PI17 commands...
[13:29:27][D][uart_debug:158]: >>> "^P003PI\r"
[13:29:28][D][uart_debug:158]: >>> "^P004MOD\r"
[13:29:29][D][uart_debug:158]: >>> "^P005FLAG\r"
[13:29:30][I][main:558]: Testing unsupported PI16 commands...
[13:29:30][D][uart_debug:158]: >>> "QPI\r"
[13:29:30][D][uart_debug:158]: <<< "(NAKss\r"
[13:29:31][D][uart_debug:158]: >>> "QMOD\r"
[13:29:31][D][uart_debug:158]: <<< "(NAKss\r"
[13:29:32][D][uart_debug:158]: >>> "QPIGS\r"
[13:29:32][D][uart_debug:158]: <<< "(NAKss\r"
[13:29:33][D][uart_debug:158]: >>> "QPIRI\r"
[13:29:33][D][uart_debug:158]: <<< "(PI30\x9A\v\r"
[13:29:34][D][uart_debug:158]: >>> "QMOD\r"
[13:29:34][I][main:592]: Done. Repeating...
[13:29:34][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:27][I][ota:113]: Boot seems successful, resetting boot loop counter.
[13:30:27][D][esp32.preferences:114]: Saving 1 preferences to flash...
[13:30:27][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[13:30:32][I][main:417]: Testing PI30/PI30MAX/PI30REVO/PI41 commands...
[13:30:32][I][main:420]: This is the set of commands supported by the pipsolar component!
[13:30:32][D][uart_debug:158]: >>> "QPI\xBE\xAC\r"
[13:30:32][D][uart_debug:158]: <<< "(PI30\x9A\v\r"
[13:30:33][D][uart_debug:158]: >>> "QDIq\e\r"
[13:30:33][D][uart_debug:158]: <<< "(230.0 50.0 0030 42.0 54.0 56.4 46.0 60 0 0 2 0 0 0 0 0 1 1 0 0 1 0 54.0 0 1 000\x9E`\r"
[13:30:34][D][uart_debug:158]: >>> "QFLAG\x98t\r"
[13:30:34][D][uart_debug:158]: <<< "(EakxyzDbjlnuv\xDD>\r"
[13:30:35][D][uart_debug:158]: >>> "QMN\xBBd\r"
[13:30:35][D][uart_debug:158]: <<< "(MKS2-56009\xAB\r"
[13:30:36][D][uart_debug:158]: >>> "QMODI\xC1\r"
[13:30:36][D][uart_debug:158]: <<< "(L\x06\a\r"
[13:30:38][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[13:30:38][D][uart_debug:158]: <<< "(241.0 49.9 241.0 49.9 0024 0000 000 334 00.30 000 000 0019 00.0 000.0 00.00 00000 00010000 00 00 00000 010\x8E\xFA\r"
[13:30:38][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
[13:30:38][D][uart_debug:158]: <<< "(230.0 24.3 230.0 50.0 24.3 5600 5600 48.0 50.0 49.6 54.4 53.6 2 020 040 1 2 3 9 00 0 0 52.0 0 1 030\x92\xB1\r"
[13:30:39][D][uart_debug:158]: >>> "QPIWS\xB4\xDA\r"
[13:30:39][D][uart_debug:158]: <<< "(100000000000000000000010000000010000\xC4\xFF\r"
[13:30:40][D][uart_debug:158]: >>> "QT'\xFF\r"
[13:30:40][D][uart_debug:158]: <<< "(20230426131633\xF3\xCA\r"
[13:30:41][I][main:486]: Testing PI41 split phase / multiple strings commands...
[13:30:41][D][uart_debug:158]: >>> "QPIGS2h-\r"
[13:30:41][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:42][D][uart_debug:158]: >>> "QP2GS0\x14\x05\r"
[13:30:42][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:43][D][uart_debug:158]: >>> "QP2GS1\x04$\r"
[13:30:43][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:44][I][main:510]: Testing unsupported PI18 commands...
[13:30:44][D][uart_debug:158]: >>> "^P005PIq\x8B\r"
[13:30:45][D][uart_debug:158]: >>> "^P005GSX\x14\r"
[13:30:46][D][uart_debug:158]: >>> "^P006MOD\xDD\xBE\r"
[13:30:47][I][main:534]: Testing unsupported PI17 commands...
[13:30:47][D][uart_debug:158]: >>> "^P003PI\r"
[13:30:48][D][uart_debug:158]: >>> "^P004MOD\r"
[13:30:49][D][uart_debug:158]: >>> "^P005FLAG\r"
[13:30:50][I][main:558]: Testing unsupported PI16 commands...
[13:30:50][D][uart_debug:158]: >>> "QPI\r"
[13:30:50][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:51][D][uart_debug:158]: >>> "QMOD\r"
[13:30:51][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:52][D][uart_debug:158]: >>> "QPIGS\r"
[13:30:52][D][uart_debug:158]: <<< "(NAKss\r"
[13:30:53][D][uart_debug:158]: >>> "QPIRI\r"
[13:30:53][D][uart_debug:158]: <<< "(PI30\x9A\v\r"
[13:30:54][D][uart_debug:158]: >>> "QMOD\r"
[13:30:54][I][main:592]: Done. Repeating...
[13:30:54][D][uart_debug:158]: <<< "(NAKss\r"

"Real" program
substitutions:
name: esphome-web-3b6f80
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS EVO Circle
api:
encryption:
key: "xxx"
reboot_timeout: 0s
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3B6F80"
password: "xxx"
logger:
baud_rate: 0
level: DEBUG
uart:

id: uart_0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}

pipsolar:
uart_id: uart_0
id: inverter0
sensor:

platform: pipsolar
pipsolar_id: inverter0
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
pv_charging_power:
name: "${name} pv_charging_power"

text_sensor:

platform: pipsolar
pipsolar_id: inverter0
device_mode:
name: "${name} device_mode"

binary_sensor:

platform: pipsolar
pipsolar_id: inverter0
add_sbu_priority_version:
name: "${name} add_sbu_priority_version"
configuration_status:
name: "${name} configuration_status"
load_status:
name: "${name} load_status"
battery_voltage_to_steady_while_charging:
name: "${name} battery_voltage_to_steady_while_charging"
charging_status:
name: "${name} charging_status"
scc_charging_status:
name: "${name} scc_charging_status"
ac_charging_status:
name: "${name} ac_charging_status"
charging_to_floating_mode:
name: "${name} charging_to_floating_mode"
switch_on:
name: "${name} switch_on"
silence_buzzer_open_buzzer:
name: "${name} silence_buzzer_open_buzzer"
overload_bypass_function:
name: "${name} overload_bypass_function"
lcd_escape_to_default:
name: "${name} lcd_escape_to_default"
overload_restart_function:
name: "${name} overload_restart_function"
over_temperature_restart_function:
name: "${name} over_temperature_restart_function"

switch:

platform: pipsolar
pipsolar_id: inverter0
output_source_priority_utility:
name: "${name} output_source_priority_utility"
output_source_priority_solar:
name: "${name} output_source_priority_solar"
output_source_priority_battery:
name: "${name} output_source_priority_battery"
input_voltage_range:
name: "${name} input_voltage_range"
pv_ok_condition_for_parallel:
name: "${name} pv_ok_condition_for_parallel"
pv_power_balance:
name: "${name} pv_power_balance"

output:

platform: pipsolar
pipsolar_id: inverter0
battery_recharge_voltage:
id: inverter0_battery_recharge_voltage_out

Logs
INFO Reading configuration /config/esphome/esphome-web-3b6f80.yaml... INFO Starting log output from esphome-web-3b6f80.local using esphome API INFO Successfully connected to esphome-web-3b6f80.local
[14:33:47][I][app:102]: ESPHome version 2023.4.0 compiled on Apr 26 2023, 14:27:28
[14:33:47][C][wifi:505]: WiFi:
[14:33:47][C][wifi:363]: Local MAC: 40:22:D8:3B:6F:80
[14:33:47][C][wifi:364]: SSID: 'Livebox-8C62'[redacted]
[14:33:47][C][wifi:365]: IP Address: 192.168.1.53
[14:33:47][C][wifi:367]: BSSID: AC:84:C9:28:8C:62[redacted]
[14:33:47][C][wifi:368]: Hostname: 'esphome-web-3b6f80'
[14:33:47][C][wifi:370]: Signal strength: -70 dB ▂▄▆█
[14:33:47][C][wifi:374]: Channel: 1
[14:33:47][C][wifi:375]: Subnet: 255.255.255.0
[14:33:47][C][wifi:376]: Gateway: 192.168.1.1
[14:33:47][C][wifi:377]: DNS1: 192.168.1.1
[14:33:47][C][wifi:378]: DNS2: 0.0.0.0
[14:33:47][C][logger:294]: Logger:
[14:33:47][C][logger:295]: Level: DEBUG
[14:33:47][C][logger:296]: Log Baud Rate: 0
[14:33:47][C][logger:297]: Hardware UART: UART0
[14:33:47][C][uart.arduino_esp32:108]: UART Bus 0:
[14:33:47][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[14:33:47][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[14:33:47][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[14:33:47][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[14:33:47][C][uart.arduino_esp32:115]: Data Bits: 8
[14:33:47][C][pipsolar:864]: QFLAG
[14:33:47][C][pipsolar:864]: QPIRI
[14:33:47][C][pipsolar.switch:075]: Pipsolar Switch 'esphome-web-3b6f80 output_source_priority_solar'
[14:33:47][C][pipsolar.switch:077]: Icon: 'mdi:power'
[14:33:47][C][pipsolar.switch:075]: Pipsolar Switch 'esphome-web-3b6f80 output_source_priority_battery'
[14:33:47][C][pipsolar.switch:077]: Icon: 'mdi:power'
[14:33:47][C][pipsolar.switch:075]: Pipsolar Switch 'esphome-web-3b6f80 input_voltage_range'
[14:33:47][C][pipsolar.switch:077]: Icon: 'mdi:power'
[14:33:47][C][pipsolar.switch:075]: Pipsolar Switch 'esphome-web-3b6f80 pv_ok_condition_for_parallel'
[14:33:47][C][pipsolar.switch:077]: Icon: 'mdi:power'
[14:33:47][C][pipsolar.switch:075]: Pipsolar Switch 'esphome-web-3b6f80 pv_power_balance'
[14:33:47][C][pipsolar.switch:077]: Icon: 'mdi:power'
[14:33:47][D][sensor:110]: 'esphome-web-3b6f80 ac_output_frequency': Sending state 49.90000 Hz with 1 decimals of accuracy
[14:33:47][D][sensor:110]: 'esphome-web-3b6f80 ac_output_apparent_power': Sending state 24.00000 VA with 1 decimals of accuracy
[14:33:47][C][ota:093]: Over-The-Air Updates:
[14:33:47][C][ota:094]: Address: esphome-web-3b6f80.local:3232
[14:33:47][C][api:139]: Address: esphome-web-3b6f80.local:6053
[14:33:47][C][api:141]: Using noise encryption: YES
[14:33:47][D][pipsolar:838]: Sending polling command : QMOD with length 4
[14:33:47][D][pipsolar:772]: checking crc on incoming message
[14:33:47][D][pipsolar:775]: CRC OK
[14:33:47][D][pipsolar:471]: Decode QMOD
[14:33:47][D][text_sensor:064]: 'esphome-web-3b6f80 device_mode': Sending state 'L'
[14:33:48][D][pipsolar:838]: Sending polling command : QFLAG with length 5
[14:33:48][D][pipsolar:772]: checking crc on incoming message
[14:33:48][D][pipsolar:775]: CRC OK
[14:33:48][D][pipsolar:479]: Decode QFLAG
[14:33:49][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[14:33:50][D][pipsolar:772]: checking crc on incoming message
[14:33:50][D][pipsolar:775]: CRC OK
[14:33:50][D][pipsolar:429]: Decode QPIRI
[14:33:50][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[14:33:51][D][pipsolar:772]: checking crc on incoming message
[14:33:51][D][pipsolar:775]: CRC OK
[14:33:51][D][pipsolar:448]: Decode QPIGS
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 grid_voltage': Sending state 240.10001 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 grid_frequency': Sending state 49.90000 Hz with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 ac_output_voltage': Sending state 240.10001 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 ac_output_frequency': Sending state 49.90000 Hz with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 ac_output_apparent_power': Sending state 24.00000 VA with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 ac_output_active_power': Sending state 0.00000 W with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 output_load_percent': Sending state 0.00000 % with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 bus_voltage': Sending state 334.00000 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 battery_voltage': Sending state 0.40000 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 battery_charging_current': Sending state 0.00000 A with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 battery_capacity_percent': Sending state 0.00000 % with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 inverter_heat_sink_temperature': Sending state 19.00000 °C with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 pv_input_current_for_battery': Sending state 0.00000 A with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 pv_input_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 battery_voltage_scc': Sending state 0.00000 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 battery_discharge_current': Sending state 0.00000 A with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 battery_voltage_offset_for_fans_on': Sending state 0.00000 V with 1 decimals of accuracy
[14:33:51][D][sensor:110]: 'esphome-web-3b6f80 pv_charging_power': Sending state 0.00000 W with 1 decimals of accuracy
[14:33:51][D][pipsolar:838]: Sending polling command : QMOD with length 4
[14:33:51][D][pipsolar:772]: checking crc on incoming message
[14:33:51][D][pipsolar:775]: CRC OK
[14:33:51][D][pipsolar:471]: Decode QMOD
[14:33:51][D][text_sensor:064]: 'esphome-web-3b6f80 device_mode': Sending state 'L'
[14:33:52][D][pipsolar:838]: Sending polling command : QFLAG with length 5
[14:33:52][D][pipsolar:772]: checking crc on incoming message
[14:33:53][D][pipsolar:775]: CRC OK
[14:33:53][D][pipsolar:479]: Decode QFLAG
[14:33:53][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[14:33:54][D][pipsolar:772]: checking crc on incoming message
[14:33:54][D][pipsolar:775]: CRC OK
[14:33:54][D][pipsolar:429]: Decode QPIRI
[14:33:54][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[14:33:55][D][pipsolar:772]: checking crc on incoming message
[14:33:55][D][pipsolar:775]: CRC OK
[14:33:55][D][pipsolar:448]: Decode QPIGS

Good job!

authors: Tikaminou syssi

repo: syssi/esphome-pipsolar


text:
Cache for additional home urls is not purged

If in additional home urls field we entered following domains in this way:
http://www.domain.me
http://domain.me
http://m.domain.me
http://www.m.domain.me
The cache is only purged from url from which is accessed.
For example if cache is purged from url http://domain.me everything is fine but on http://www.domain.me / m.domain.me and http://www.m.domain.me is not appearing new content…

@nigrosimone ... curious...can you try adding a trailing slash to each of your entries and see if caching works?  for example in your additional home urls fields put in:
http://www.domain.me/
http://domain.me/
http://m.domain.me/
http://www.m.domain.me/

Update
Ok it seems my hunch may be right.   I think the fix is this: https://github.com/szepeviktor/w3-total-cache-fixed/commit/91dd2ae17de01b26d518a5f50bd90dabca1b567a
Give it a try @nigrosimone and let me know if it does fix the problem so i can pr it.

Yep! Now works. Always thanks.


text:
Change k6 dependency to v0.45.1

A transitive dependency was removed. v0.45.0 was patched to address the issue. See grafana/k6#3252.

Codecov Report

Merging #5 (1c60d27) into master (1b48d1d) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master       #5   +/-   ##
=======================================
  Coverage   83.87%   83.87%
=======================================
  Files           4        4
  Lines         217      217
=======================================
  Hits          182      182
  Misses         24       24
  Partials       11       11

authors: codecov-commenter mstoykov


text:
bug: drizzle error when db:push with base project.

Provide environment information
System:
OS: Linux 6.2 Ubuntu 22.04.3 LTS 22.04.3 LTS (Jammy Jellyfish)
CPU: (4) x64 Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
Memory: 9.28 GB / 15.49 GB
Container: Yes
Shell: 5.8.1 - /usr/bin/zsh
Binaries:
Node: 20.5.0 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 9.8.0 - /usr/local/bin/npm
Describe the bug
When creating a new project npx create-turbo@latest -e https://github.com/t3-oss/create-t3-turbo
then installing with pnpm i and doing cp .env.example to .env
When I run pnpm db:push
> create-t3-turbo@ db:push /home/anon/helloLast
> pnpm -F db push

> @acme/db@0.1.0 push /home/anon/helloLast/packages/db
> drizzle-kit push:mysql

drizzle-kit: v0.19.12
drizzle-orm: v0.28.2

No config path provided, using default 'drizzle.config.ts'
Reading config file '/home/anon/helloLast/packages/db/drizzle.config.ts'
Ignoring invalid configuration option passed to Connection: sslaccept. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection
/home/anon/helloLast/node_modules/drizzle-kit/index.cjs:35555
      const createConnectionErr = new Error();
                                  ^

Error: getaddrinfo EAI_AGAIN host
    at createConnection2 (/home/anon/helloLast/node_modules/drizzle-kit/index.cjs:35555:35)
    at connectToMySQL (/home/anon/helloLast/node_modules/drizzle-kit/index.cjs:37662:60)
    at Command.<anonymous> (/home/anon/helloLast/node_modules/drizzle-kit/index.cjs:53100:28) {
  code: 'EAI_AGAIN',
  errno: -3001,
  sqlState: undefined
}

Node.js v20.5.0
/home/anon/helloLast/packages/db:
 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @acme/db@0.1.0 push: `drizzle-kit push:mysql`
Exit status 1
 ELIFECYCLE  Command failed with exit code 1

Link to reproduction
https://github.com/t3-oss/create-t3-turbo
To reproduce
npx create-turbo@latest -e https://github.com/t3-oss/create-t3-turbo

# Install dependencies
pnpm i

# Configure environment variables
# There is an `.env.example` in the root directory you can use for reference
cp .env.example .env

# Push the Drizzle schema to the database
pnpm db:push

Additional information
No response

Hi @JoeSlain, I've managed to resolve the issue by replacing ?sslaccept=strict with ?ssl={"rejectUnauthorized":true} in the code. This adjustment has successfully eliminated the error message. However, I'm uncertain whether this solution is optimal or not. It would be really helpful if someone with more experience could weigh in and let us know if this is a good approach or if there might be another fix worth considering.

Hi @JoeSlain, I've managed to resolve the issue by replacing ?sslaccept=strict with ?ssl={"rejectUnauthorized":true} in the code. This adjustment has successfully eliminated the error message. However, I'm uncertain whether this solution is optimal or not. It would be really helpful if someone with more experience could weigh in and let us know if this is a good approach or if there might be another fix worth considering.

Works with Planetscale's url, but not with default url: ```
DATABASE_URL='mysql://user:password@host/db?ssl={"rejectUnauthorized":true}'

Any idea why ?

Hi @JoeSlain, I've managed to resolve the issue by replacing ?sslaccept=strict with ?ssl={"rejectUnauthorized":true} in the code. This adjustment has successfully eliminated the error message. However, I'm uncertain whether this solution is optimal or not. It would be really helpful if someone with more experience could weigh in and let us know if this is a good approach or if there might be another fix worth considering.

Works with Planetscale's url, but not with default url:
DATABASE_URL='mysql://user:password@host/db?ssl={"rejectUnauthorized":true}'

Any idea why ?

Just to clarify, what do you mean with default url? The default is just a placeholder for you to replace for your db, if you are trying to connect to DATABASE_URL you provided you are trying to connect to an imaginary db. Keep in mind this is pointing to a mysqlnot a sqliteas in the create-t3-appthat comes with the default app settings.

authors: Ernesto385291 JoeSlain argcast


text:
First row of the dataset turn off sort

Hello,
i have a question of i can do this with your plugin i have this list as below:
id, name, prisindex
1 , hans, 10,
2 , lars  , 13,
3 , tokil , 14,
4 , bo    , 9
Then i sort prisindex, but i want alwas id 1 to be at the top.
id, name, prisindex - decs
1 , hans, 10,
4 , bo    , 9
2 , lars  , 13,
3 , tokil , 14,
id, name, prisindex - asc
1 , hans, 10,
3 , tokil , 14,
2 , lars  , 13,
4 , bo    , 9
This i need for you can sort in all users, but you own accoount need to be at the top at alwasy for compare your own user the top with the sort users below.

I don't think I would recommend this approach. Why don't you display the current account information above the grid? It creates visual separation, results in better usability and would be easier to implement than what you suggest.

you have to implement your custom sorting strategy.
Check the DOC

@rammi987, yes, this is possible. As @maurorulli advised you need to implement your custom sorting strategy.

repo: tabalinas/jsgrid


text:
[FEATURE]: Staff icon in player list

Scope
Web
Feature Description
Provide a staff icon in front of the ID in the player list for the web portal to show staff members who are online.
Use Case
No response
Proposed Solution
By placing the shield before the ID number, this can differentiate between players that have this emoji in their name as well to pretend to be staff.

This was with:
.pping:before {
  content: '🛡';
}

Additional Info
No response

Implemented with v4.8.0

The issue is about the Web UI though, we only have it for the menu.

@tabarra whoops, want me to implement for Web UI real quick?

Meh this one we will have a hard time solving well without the React refactor, so for now probably better to leave it be.

Since I included this in #628, I'll close this as a duplicated.

authors: TasoOneAsia napei tabarra

repo: tabarra/txAdmin


text:
更新Kotlin版本

更新到1.6.21

ok

authors: tabidachinohana tabidachinokaze

repo: tabidachinokaze/Traveler


text:
'NoneType' object has no attribute 'total_available' for users.populate_groups

Describe the bug
I am attempting to get the number of groups a user is in using the code here: https://tableau.github.io/server-client-python/docs/api-ref#users for users.populate_groups
Versions
Details of your environment, including:

Tableau Server version: 3.9 (result from using server.version in Python script)
Tableau Server version: 2020.3.7 (listed under About Tableau Server)
Python version:             3.7.1
TSC library version:       0.15.0

To Reproduce
Code to reproduce:
with server.auth.sign_in(tableau_auth):
    all_users, pagination_item = server.users.get()
    print("\nThere are {} user on site: ".format(pagination_item.total_available))
    print([user.name for user in all_users])
    page_n = server.users.populate_groups(all_users[0])
    print("\nUser {0} is a member of {1} groups".format(all_users[0].name, page_n.total_available))
    print("\nThe groups are:")
    for group in all_users[0].groups :
        print(group.name)

Results
AttributeError: 'NoneType' object has no attribute 'total_available'

My initial thought is that our Tableau Server is not on a sufficient version to handle the request.

@patawan so far I'm puzzled by this one. At first I thought your user might not have enough permission to fetch the list of users (only site admins and server admins can do so), but if that was the case you'd get a 403 'user' isn't authorized to query users on site 'X' type of error.
Can you confirm: using the same user as in your script, if you login to Tableau server web UI can you see a list of users?
Your example is showing that server.users.get() is returning None for pagination_item. I guess one more thing you can try: is all_users also empty or are there entries there?

@bcantoni haha me too!
I'm the user trying to access the list of users. I am an admin for this Tableau Site (not the whole server) and can see the full list of users on the Tableau server web UI.
I altered the code a tiny bit: (also not sure why github doesn't like my code formatting)
`with server.auth.sign_in(tableau_auth):
all_users, pagination_item = server.users.get()
print("\nThere are {} user on site: ".format(pagination_item.total_available))

print([user.name for user in all_users])

print(len(all_users))

page_n = server.users.populate_groups(all_users[0])

print("\nUser {0} is a member of {1} groups".format(all_users[0].name, page_n.total_available))

print("\nThe groups are:")

for group in all_users[0].groups :

    print(group.name)`

I get the same error but this time it does show that all_users is not empty:
Screenshot

You can see my use case there in comments - I was able to find a workaround using Groups rather than users and generate a list of users with their Group Count. I'd be happy to share that if you think others will find it of use.

Good find @SaravShah - thanks for following up!

Thanks for figuring this out @SaravShah - sounds like we need to update our docs or throw a clearer error message for this. Did you look at any specific documentation to work this out, or have a suggestion for us?

Docs have been updated using the example provided in this issue

authors: bcantoni jacalata kramantab patawan

repo: tableau/server-client-python


text:
Outdated SDK

When using Microsoft Bot Framework Channel Emulator it says
[14:00:03] Warning: The bot is using an SDK version earlier than 3.11.0.
[14:00:03] Warning: SDK versions earlier than 3.11.0 use an authentication configuration that will no longer work with the emulator after November 15, 2017.
[14:00:03] Warning: For your bot to continue working with the emulator, please update your bot to use an SDK version greater than or equal to 3.11.0.
[14:00:03] Read about the Bot Framework authentication change.
[14:00:04] Warning: The latest bot SDK version is 3.11.0.
[14:00:04] Warning: Consider upgrading the bot to the latest SDK version.

https://docs.microsoft.com/en-us/bot-framework/rest-api/bot-framework-rest-connector-authentication

Also by the way there doesn't seem to be implemented proper JWT validation, like keys aren't checked at all.

JWT validation is a known issue see #1

authors: davispuh tachyons

repo: tachyons/botframework-ruby


text:
chore: add version control to all the rust tooling

Currently we use rustc, cargo, clippy rustfmt and prettier as our tools. The setup that we have right now doesn't support maintaining a version in the repository and thus your local lint tools version could be different than what's running on CI.
Proposal

Have the ability to maintain consistent versions between the CI and local machine for all the above tools.

/bounty 100$

/attempt #1099

As a general solution for tools managing I know about next options:

Development containers - use docker containers to start dev environment. It's supported mostly by Vs Code
nix - use additional tools that will manage dependencies

The good thing about both of those that it may help with versioning of any tool required, but both requires additional tools already available on dev machine.
Also all of the tools in descriptions except the prettier actually managed by rustup so may suggest to use it and we have already set up toolchains for it.
One more option to consider could be cargo-make that have some kind of version checks and installation scripts for it. We could just migrate from custom lint.sh script to cargo-make

@meskill thanks for the suggestion!
#1156 is ready to be reviewed

authors: meskill neo773 ologbonowiwi tusharmath

repo: tailcallhq/tailcall


text:
Feature Proposal: Function for adding alpha to a color

Hi,
I would like to submit the following feature proposal: Function for adding alpha to a color.
Main reason is because SASS/LESS functions are useless since this is a postCSS framework but also i believe that a color palette should consist only of opaque colors and not mind about opacity.
Have already added the below function inside evaluateTailwindFunctions.js for my personal use and if you believe that such a function would benefit others then i could open a proper PR
colorWithAlpha: (path, opacity = 1, defaultValue = '#000') => {
  let color = _lodash2.default.get(options, _lodash2.default.trim(path, `'"`), defaultValue);
  if (color.indexOf('rgb(') === 0) {
    let rgb = color.replace(/([^1234567890\,]*)/g, '')
    return `rgba(${rgb},${opacity})`
  } else if (color.indexOf('#') === 0) {
    let hex = color.replace(/([^1234567890abcdefABCDEF]*)/, '')
    if (hex.length !== 3 && hex.length !== 6) return color
    if (hex.length === 3) hex = `${hex}${hex}`
    let rgb = hex.match(/.{1,2}/g).map(val => parseInt(val, 16)).join(',')
    return `rgba(${rgb},${opacity})`
  }
  return color
}

Thank you,
GL

Hey @lilisgeorge! So the "Tailwind way" to do this would be to add those rgba colors to your color palette; you don't want to be writing CSS and referencing color values with config if you don't have to, and you especially don't want to be modifying those values in your CSS because that's what leads to a stylesheet full of magic values.
You want to pick your colors from a predefined set, and adding colors with an alpha channel to that predefined set is totally a reasonable thing to do.
That said if you really wanted to do this, a better approach would be to use an existing PostCSS plugin like postcss-color-function which gives you really powerful color manipulation tools and works great with Tailwind.
For example, you can easily write CSS like this:
.text-purple-50 {
  color: color(config('colors.purple') a(50%));
}

...which will generate:
.text-purple-50 {
  color: rgba(149, 97, 226, 0.5);
}

I've created a demo project showing it in action here:
https://github.com/adamwathan/tailwind-color-function-demo
Again all that being said, in my opinion the best approach is to add these colors to your color palette explicitly 👍

@adamwathan could we actually use the CSS color function to declare a relationship of swatches within the tailwind config? I am not as big a fan of hardcoded hex values. I know we can probably use HSL as well, but was wondering if we could use postcss-color-function inside tailwind.js, or if that would break parsing.

You definitely can 👍 If you give me an example of something you'd like to try, I can give it a whirl quickly and verify it works as you'd expect.

@adamwathan
So my thoughts are, we define a base-gray, and then mix with tints and shades to achieve a relational color scale. Maybe this is a function that is applicable to an array of our base colors, or whatever.
  'grey-base': '#9babb4',

// ( I don't know the color function syntax off the top of my head)
'grey-darkest': color(config('colors.grey-base') modifier modifier;
'grey-darker': color(config('colors.grey-base') different modifier different modifier;
etc.

Then, if I ever change my grey-base hex or HSL value, my color scale is already auto-calculated. If individual modifiers needs to be changed, this is easier for a dev to do than to go and edit every hex value just because the HUE changed.

Yeah so you can definitely do that, the only trick is you have to make sure that it's a string in your config file since those functions don't actually exist until processing time:
var colors = {
  'grey': '#70818a',
  'grey-light': 'color(config(colors.grey) lightness(+ 5%))',
  'grey-dark': 'color(config(colors.grey) lightness(- 5%))',
}

There's probably color manipulation libraries you could use directly in JS too if you wanted; that's the beauty of the Tailwind config file being pure JS, you can import any libraries you want and do whatever madness tickles your fancy 😄

Thanks!  @adamwathan Another way I've done it with HSL / sass in the past.
$primary: hsl(230, 45%, 56%);

---

$primary-tint: hsl(hue($primary), 70%, 34%);

So declaring $primary as our base color, and then when defining primary-tint, we extract the hue from $primary and then mix it with different saturation and lightness values.
If I were to write that, and let Sass do its thing, would it have any issues?

I've done that a lot too, works really well!
You can't do that with Sass with Tailwind since your color palette is defined in your config file instead of in Sass, but you can totally accomplish the same thing by just writing JavaScript in your config file:
var hues = {
    'primary': 230,
}
var colors = {
  'primary': `hsl(${hues['primary']}, 45%, 56%)`,
  'primary-tint': `hsl(${hues['primary']}, 70%, 34%)`,
}

Makes sense! Thanks so much!

Could write a couple of functions if you wanted to:
function hsl(hue, saturation, lightness) {
    return `hsl(${hue}, ${saturation}, ${lightness})`
}

var hues = {
    'primary': 230,
}
var colors = {
  'primary': hsl(hues['primary'], '45%', '56%'),
  'primary-tint': hsl(hues['primary'], '70%', '34%'),
}

Feel free to get creative in there 😄

Yes, I love that approach. I would actually suggest maybe having something like that be the default of the tailwind config, since replacing 4 hue values (with maybe some tweaks to the modifiers) is much faster than editing all the hex values. But I defer to you. I'll go ahead with this method!

However something like background opacity, e.g. bg-black-opacity-50, would be really helpful.

Some ideas for opacity colors recycling the current set of colors (no additional alpha colors)
Without custom properties
@keyframes opacify {
  to { background: transparent; }
}

.opacify-text-50 {
  animation: 1s -0.5s 1 paused opacify;
}

## With custom properties

```css
.text-black {
  --opacity: 1;
  color: rgba(0,0,0,var(--opacity));
}

. opacify-text-50 {
  --opacity: 0.5;
}

https://twitter.com/ScottKellum/status/1214273219626057728?s=20

@vricop Love the idea. Seems to look like the new transform way of doing things. I'd love to see this in the core, or as a drop in replacement.

@vricop Love the idea. Seems to look like the new transform way of doing things. I'd love to see this in the core, or as a drop in replacement.

Yeah the composable transform utilities blowed my mind up. What an idea! The animation trick for opacity colors is really awesome too. I want to play more with it to see how colors look compared to rgba + custom properties.

The proposal is closed. But as @adamwathan said a function can be created to achieve something like that.

I love to use the tailwind's generated custom properties like:
--bg-opacity: 1;

but, because tailwind generate custom properties in its utility classes:
.bg-{color} {
  --bg-opacity: 1;
  background-color: {color}
}

so I add manually that custom properties globally:
:root {
  --bg-opacity: 1;
}

then in my config:
extend{
  backgroundColor: {
    level: {
      1: 'rgba(26, 32, 44, var(--bg-opacity))',
      2: 'rgba(45, 55, 72, var(--bg-opacity))',
      3: 'rgba(45, 55, 72, var(--bg-opacity))'
    }
  }
}

Taraaa
I can easily change color alpha using tailwind's .bg-opacity-{value} utils
example:  bg-level-1 bg-opacity-50
we can add more opacity utils via tailwind config:
https://github.com/tailwindlabs/tailwindcss/blob/4ee53f315adde5e8471162e7b8a814faafef95dd/stubs/defaultConfig.stub.js#L358-L364

authors: Wulfheart adamwathan ar-stackrox bvyy kevinruscoe lilisgeorge vricop

repo: tailwindcss/tailwindcss


text:
Implement optional prefix in @apply

Fixes #544.
This would first search for class given in @apply and add the prefix and search again.
This change could increase the time it takes to substitute @apply rules (especially if you no longer use any prefix, since it search 2x as much).
TODO:

[x] Function
[x] Tests

So... this is now working as intended with tests

Thanks @rhurling! 🙌🏻

authors: adamwathan rhurling


text:
Fixed issue with negative classes not being generated when used with a prefix.

Fixes https://github.com/tailwindlabs/tailwindcss-jit/issues/42.
As far as I understood the code, it was checking for the first character to be a - to treat it as a negative class. However, it's not guaranteed that - will always be the first character as the user can freely set a prefix in their config file.
It follows, then, that a class will be negative if the first character after the prefix is -.
What we want to do here is

let tailwind know that it needs to generate a negative class by setting the negative flag to true
retain the user defined prefix in candidatePrefix so that given a tw--ml-4 class tw-ml-4 can be passed to the generator

From that point on the logic stays exactly the same, that is, when the negative flag is set, the modifier from the candidate will be prefixed with a -.
I've added a few test cases which seem to have run fine.
Let me know what you guys think.

My man 👊 Great PR, thank you!

authors: adamwathan barnabasmolnar

repo: tailwindlabs/tailwindcss-jit


text:
TooltipBox is not displayed on screenshot

I'm trying to write a screenshot test for a TooltipBox but the tooltip is not being drawn on the screenshot image.
Here's the code that I'm using...
Box(
    Modifier
        .size(200.dp)
        .background(Color.Green)
        .testTag(testTag)) {
    TooltipBox(
        positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
        state = rememberTooltipState(initialIsVisible = true, isPersistent = true),
        tooltip = {
            PlainTooltip {
                Text(text = "Tooltip")
            }
        },
        content = {
            Text(text = "Content")
        }
    )
}

And I'm using:
composeRule.onNodeWithTag(testTag, useUnmergedTree = true).captureRoboImage()

I also tried the code below without the testTag, but didn't work as well...
composeRule.onRoot().captureRoboImage()

More info:
android-gradle-plugin = "8.2.2"
androidx-compose-bom = "2024.01.00"
androidx-compose-material3 = "1.2.0-rc01"
roborazzi = "1.9.0"

Here's the generated image by Roborazzi and an emulator screenshot

@nelson-glauber
I'm not sure, but I think the tooltip might be in a different window. Could you try captureScreenRoboImage()?

It worked @takahirom. It drew the tooltip on top of the "ActionBar" :/
But it's fine. Thank you very much.

I'm glad to hear that captureScreenRoboImage() worked for you, @nelson-glauber. While I'm closing this issue for now, I'm not entirely clear on the problem with the "ActionBar" and how the tooltip is interacting with it. If you encounter any patterns or specific issues related to this, please don't hesitate to let me know.

@takahirom Just for the record. This is what I meant with "drew the tooltip on top of the "ActionBar".

authors: nelson-glauber takahirom

repo: takahirom/roborazzi


text:
Unable to fork projects

After selected the fork action, the project won't get forked, instead nothing happens, and was forcing me to return back to the project index.
GitBucket Version: 2.0.0

Maybe this issue has been fixed already.

authors: katetem takezoe

repo: takezoe/gitbucket