14yannick / HCPBridgeMqtt

emulates Hoermann HAP 1 HCP (HCP2) on ESP8622, ESP32 and Arduino.
1 stars 0 forks source link

Incorrect behavior on SupraMatic P4 #5

Closed stomko11 closed 1 year ago

stomko11 commented 1 year ago

Hello 14yannick. I used your code on ESP32 and experiencing same behavior as on Gifford47's fork, but you seem to be the only one actively looking at/working on code. I mentioned that in the HA forum already, but I will put it here as well. I am experiencing undesired toggling of the gate when ESP restarts or boots. As a result, gate either opens or closes when for example I cut power and restore it. Therefore currently I am using https://github.com/MCLW/HCPBridgeHomeassistant fork which does not do this, but has its flaws ocasionally too. Anyway, here is what I did: I flashed ESP by setting up wifi and mqtt details. When I connect it and power on the gate, gate triggers on its own. I open webinterface and I can see controls, and connected status - this is OK. In HA, however (compared to other fork) - when I move the gate up for instance, and stop it half way there, arrow up is greyed out. I cannot move it further up anymore, I have to bring it down for at least a bit, stop it, to have the possibility to move it up again.

Then I followed your forum advice to see if this could be related to some mqtt messages - on purpose, I changed for instance MQTT server (server, port, does not matter, whatever I change just to kill mqtt connection) in code to non-existing IP and flashed it again.

When I power on the gate, nothing happens. However controls don't work either. I load webinterface, it shows status as not connected to gate. I can click any button there, they don't react. Restarted ESP from web does not change anything either.

When I flash back code with correct mqtt server, controls work again (and gate triggers on its own too)

Can you advise?

14yannick commented 1 year ago

I have an idea. I will publish a branch to debug this behavior.

14yannick commented 1 year ago

So I just create the branch debugAtStart. Try to flash this one with your correct mqtt information. https://github.com/14yannick/HCPBridgeMqtt/tree/debugAtStart The faulty behaviour should still happen as I haven't change anything there but once it's up go to http://[deviceip]/trace Post the response here. I will have a look. I think it has to do with the setposition functionality as it's the biggest change comparing to other repositories.

stomko11 commented 1 year ago

Thanks. I was unable to upload it to ESP, here is the output:

src/main.cpp:197:25: warning: character constant too long for its type
   commands = commands + ' MQTTMessage : Topic ' + lastCommandTopic + 'Payload : ' + lastCommandPayload;
                         ^~~~~~~~~~~~~~~~~~~~~~~
src/main.cpp:197:70: warning: character constant too long for its type
   commands = commands + ' MQTTMessage : Topic ' + lastCommandTopic + 'Payload : ' + lastCommandPayload;
                                                                      ^~~~~~~~~~~~
src/main.cpp:760:37: warning: character constant too long for its type
               commands = commands + ' Http Command : request ' + request->params();
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~
Compiling .pio\build\esp32\lib4a5\WiFi\WiFiGeneric.cpp.o
Compiling .pio\build\esp32\lib4a5\WiFi\WiFiMulti.cpp.o
Compiling .pio\build\esp32\lib4a5\WiFi\WiFiSTA.cpp.o
Compiling .pio\build\esp32\lib4a5\WiFi\WiFiScan.cpp.o
Compiling .pio\build\esp32\lib4a5\WiFi\WiFiServer.cpp.o
Compiling .pio\build\esp32\lib4a5\WiFi\WiFiUdp.cpp.o
Compiling .pio\build\esp32\lib96a\AsyncTCP-esphome\AsyncTCP.cpp.o
Compiling .pio\build\esp32\lib4a4\FS\FS.cpp.o
Compiling .pio\build\esp32\lib4a4\FS\vfs_api.cpp.o
Archiving .pio\build\esp32\lib4a5\libWiFi.a
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\AsyncEventSource.cpp.o
Archiving .pio\build\esp32\lib96a\libAsyncTCP-esphome.a
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\AsyncWebSocket.cpp.o
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\WebAuthentication.cpp.o
Archiving .pio\build\esp32\lib4a4\libFS.a
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\WebHandlers.cpp.o
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\WebRequest.cpp.o
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\WebResponses.cpp.o
Compiling .pio\build\esp32\lib803\ESPAsyncWebServer-esphome\WebServer.cpp.o
Compiling .pio\build\esp32\lib7e9\AsyncTCP\AsyncTCP.cpp.o
Compiling .pio\build\esp32\lib5dc\DNSServer\DNSServer.cpp.o
Archiving .pio\build\esp32\lib803\libESPAsyncWebServer-esphome.a
Compiling .pio\build\esp32\lib240\ESPAsyncWiFiManager\ESPAsyncWiFiManager.cpp.o
Archiving .pio\build\esp32\lib7e9\libAsyncTCP.a
Compiling .pio\build\esp32\lib932\OneWire\OneWire.cpp.o
Compiling .pio\build\esp32\lib9c3\DallasTemperature\DallasTemperature.cpp.o
Archiving .pio\build\esp32\lib5dc\libDNSServer.a
Compiling .pio\build\esp32\libbaf\Wire\Wire.cpp.o
Archiving .pio\build\esp32\lib932\libOneWire.a
Compiling .pio\build\esp32\liba88\SPI\SPI.cpp.o
Archiving .pio\build\esp32\lib9c3\libDallasTemperature.a
Archiving .pio\build\esp32\lib240\libESPAsyncWiFiManager.a
Compiling .pio\build\esp32\lib0aa\Adafruit BusIO\Adafruit_BusIO_Register.cpp.o
Compiling .pio\build\esp32\lib0aa\Adafruit BusIO\Adafruit_I2CDevice.cpp.o
Archiving .pio\build\esp32\liba88\libSPI.a
Compiling .pio\build\esp32\lib0aa\Adafruit BusIO\Adafruit_SPIDevice.cpp.o
Archiving .pio\build\esp32\libbaf\libWire.a
Compiling .pio\build\esp32\lib530\Adafruit Unified Sensor\Adafruit_Sensor.cpp.o
Compiling .pio\build\esp32\liba51\Adafruit BME280 Library\Adafruit_BME280.cpp.o
Archiving .pio\build\esp32\lib0aa\libAdafruit BusIO.a
Compiling .pio\build\esp32\lib9e0\EspSoftwareSerial\SoftwareSerial.cpp.o
Archiving .pio\build\esp32\lib530\libAdafruit Unified Sensor.a
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\ConnAckPacket.cpp.o
Archiving .pio\build\esp32\liba51\libAdafruit BME280 Library.a
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\Connect.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\Disconn.cpp.o
Archiving .pio\build\esp32\lib9e0\libEspSoftwareSerial.a
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\OutPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\PingReq.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\PubAck.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\Publish.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\Subscribe.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\Out\Unsubscribe.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\PingRespPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\PubAckPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\PubCompPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\PubRecPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\PubRelPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\PublishPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\SubAckPacket.cpp.o
Compiling .pio\build\esp32\libc79\AsyncMqttClient\AsyncMqttClient\Packets\UnsubAckPacket.cpp.o
Compiling .pio\build\esp32\lib5e0\Update\HttpsOTAUpdate.cpp.o
Compiling .pio\build\esp32\lib5e0\Update\Updater.cpp.o
Compiling .pio\build\esp32\lib496\Ticker\Ticker.cpp.o
Archiving .pio\build\esp32\libc79\libAsyncMqttClient.a
Compiling .pio\build\esp32\FrameworkArduino\Esp.cpp.o
Archiving .pio\build\esp32\lib496\libTicker.a
Compiling .pio\build\esp32\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\HWCDC.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\HardwareSerial.cpp.o
Archiving .pio\build\esp32\lib5e0\libUpdate.a
Compiling .pio\build\esp32\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\Print.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\USB.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\USBCDC.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\USBMSC.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\WString.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\base64.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-i2c-slave.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-rgb-led.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-tinyusb.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pio\build\esp32\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\esp32\FrameworkArduino\firmware_msc_fat.c.o
Compiling .pio\build\esp32\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\esp32\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\esp32\FrameworkArduino\main.cpp.o
Compiling .pio\build\esp32\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\esp32\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\esp32\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\esp32\libFrameworkArduino.a
Linking .pio\build\esp32\firmware.elf
c:/users/user/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\esp32\src\main.cpp.o:C:\Users\user\Desktop\HCPBridgeMqtt-debugAtStart\HCPBridgeESP32/src/main.cpp:74: multiple definition of `commands'; .pio\build\esp32\src\hciemulator.cpp.o:C:\Users\user\Desktop\HCPBridgeMqtt-debugAtStart\HCPBridgeESP32/src/hciemulator.cpp:30: first defined here
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32\firmware.elf] Error 1
======================================================================================= [FAILED] Took 155.51 seconds =======================================================================================
 *  The terminal process "C:\Users\user\.platformio\penv\Scripts\platformio.exe 'run', '--target', 'upload'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it. 
14yannick commented 1 year ago

Sorry you can try again.

stomko11 commented 1 year ago

here is what I captured after gate moved on its own:

{"log_main":" MQTTMessage : Topic hormann/garage_door/command/doorPayload : stop MQTTMessage : Topic hormann/garage_door/command/set_positionPayload : 40","log_hci":" HCI Stop command is send HCI set Position is send with Position ("}

And allow me to add - stop button in HA actually toggles the gate. I believe one of forks I used before had some "fixes" so that it acts differently while near end positions. So the way I read this log above - it is sending stop command (that toggles gate) - question is why?

14yannick commented 1 year ago

Ok I have done a small adjustment to get more detailed output. But we can already tell that as soon you turn on your device two mqtt message are received which is not normal. Do you have a NodeRed or home Assistant automation who can trigger this? The code we are using have also a check to avoid sending a stop signal on a open/closed door. // Avoid to send a "stop" command if door is already open or closed. It would actually move the door... unsafe! if ( (m_state.doorCurrentPosition == 0) || ((m_state.doorCurrentPosition == 100)) ) In the new output we should see your current door position. So we can see if the above check fails

stomko11 commented 1 year ago

OK, this was really helpful. I am not using neither NodeRED nor any automation that would trigger it, but I looked at that topic, and there were messages being received weirdly, even if I just listened for that topic and refreshed it, I saw "stop" message and position "40"

{"log_main":" MQTTMessage : Topic hormann/garage_door/command/doorPayload : stop MQTTMessage : Topic hormann/garage_door/command/set_positionPayload : 40","log_hci":" HCI Stop command is send actual door position is : 0 machine State is : 0 .  HCI set Position is send with Position 40 actual position0 . "}

This log was there even if that newly flashed ESP was disconnected from gateway. This made me look into my devices, and there were some orphaned devices from previous fork. I have removed those and am no longer seeing it. Thus it is no longer triggering, which is perfect.

Now there is only one more thing outstanding. Now I can position the gate using slider (such as normal cover). However the issue is -it was fully open, I moved it to position "57" but after, I am no longer able to press arrow down to close it. Sure, I could use slider, but usually when I am using it on entities card, it is arrows and stop. So arrow down is greyed out. Here is the log after I moved it to "57"

{"log_main":" MQTTMessage : Topic hormann/garage_door/command/set_positionPayload : 57 MQTTMessage : Topic hormann/garage_door/command/set_positionPayload : 57","log_hci":" HCI set Position is send with Position 57 actual position200 .  HCI set Position is send with Position 57 actual position200 . "}

Which piece of code could be preventing it?

14yannick commented 1 year ago

that's good news. I will close this issue. I will open an other one for the greyed out arrow when door is in stopped position (What is the case when you use set Position). Do you have the same issue when you use this repository? https://github.com/MCLW/HCPBridgeHomeassistant ?