Dilbert66 / esphome-dsckeybus

Esphome custom configuration for interfacing to a DSC POWERSERIES alarm system
177 stars 31 forks source link

Compile error using ESPhome Addon HA #6

Closed PipeDeveloper closed 3 years ago

PipeDeveloper commented 3 years ago

My config.yaml:

#for documentation see project at https://github.com/Dilbert66/esphome-dsckeybus
substitutions:
  systemName: "alarma"
  accessCode: "my_code" #Only comes into effect if a password prompt occurs when arming eg. night mode
  cmdWaitTime: "0" # milliseconds.  set how long to delay before accepting a new 05 cmd as valid to filter out intermittent short duration bogus commands that some panels send. default = 0

esphome:
  name: $systemName
  platform: ESP8266
  board: d1_mini

  includes:
    - dscKeybusInterface/

wifi:
  ssid: "my_wifi"
  password: "my_password"

  ap:
    ssid: "$systemName Fallback"
    password: "my_password"

web_server:
  port: 80
  auth:
    username: "my_user"
    password: "my_password"

logger:
  baud_rate: 0
  level: debug

api:
   password: "my_password"

ota:
   password: "my_password"
   safe_mode: True

status_led:
  pin:
    number: D4
    inverted: yes

custom_component:
- lambda: |-
    auto DSCkeybus = new DSCkeybushome();

    DSCkeybus->accessCode="$accessCode";
    DSCkeybus->cmdWaitTime=$cmdWaitTime;
    DSCkeybus->debug=0;

    DSCkeybus->onSystemStatusChange([&](std::string statusCode) {
       id(system_status).publish_state(statusCode);
    });
    DSCkeybus->onPartitionStatusChange([&](uint8_t partition,std::string statusCode) {
       switch(partition) {
         case 1: id(p1).publish_state(statusCode); break;
         case 2: id(p2).publish_state(statusCode); break;
      }
    });
    DSCkeybus->onPartitionMsgChange([&](uint8_t partition,std::string msg) {
       switch(partition) {
         case 1: id(m1).publish_state(msg); break;
         case 2: id(m2).publish_state(msg); break;
      }
    });
    DSCkeybus->onTroubleStatusChange([&](bool open) {
        id(t1).publish_state(open);
    });
    DSCkeybus->onFireStatusChange([&](uint8_t partition, bool open) {
      switch (partition) {
          case 1: id(f1).publish_state(open); break;
      }
    });
    DSCkeybus->onZoneStatusChange([&](uint8_t zone, bool open) {
      switch (zone) {
        case 1: id(z1).publish_state(open); break;
        case 2: id(z2).publish_state(open); break;
        case 3: id(z3).publish_state(open); break;
        case 4: id(z4).publish_state(open); break;
        case 5: id(z5).publish_state(open); break;
        case 6: id(z6).publish_state(open); break;
        case 7: id(z7).publish_state(open); break;
        case 8: id(z8).publish_state(open); break;
        case 9: id(z9).publish_state(open); break;
        case 10: id(z10).publish_state(open); break;
        case 11: id(z11).publish_state(open); break;
      }
    });
    DSCkeybus->onZoneAlarmChange([&](uint8_t zone, bool open) {
      switch (zone) {
        case 1: id(za1).publish_state(open); break;
        case 2: id(za2).publish_state(open); break;
        case 3: id(za3).publish_state(open); break;
        case 4: id(za4).publish_state(open); break;
        case 5: id(za5).publish_state(open); break;
        case 6: id(za6).publish_state(open); break;
        case 7: id(za7).publish_state(open); break;
        case 8: id(za8).publish_state(open); break;
        case 9: id(za9).publish_state(open); break;
        case 10: id(za10).publish_state(open); break;
        case 11: id(za11).publish_state(open); break;
      }
    });
    return {DSCkeybus};

binary_sensor:
    #zone status
  - platform: template
    id: z1
    name: "$systemName Front door"
    device_class: door
  - platform: template
    id: z2
    name: "$systemName Garage door"
    device_class: door
  - platform: template
    id: z3
    name: "$systemName Back door"
    device_class: door
  - platform: template
    id: z4
    name: "$systemName Living room window"
    device_class: window
  - platform: template
    id: z5
    name: "$systemName Dining room window"
    device_class: window
  - platform: template
    id: z6
    name: "$systemName Family room window LF"
    device_class: window
  - platform: template
    id: z7
    name: "$systemName Family room window RF"
    device_class: window
  - platform: template
    id: z8
    name: "$systemName Basement windows"
    device_class: window
  - platform: template
    id: z9
    name: "$systemName Upstairs motion"
    device_class: motion
  - platform: template
    id: z10
    name: "$systemName Basement motion"
    device_class: motion
  - platform: template
    id: z11
    name: "$systemName Main floor motion"
    device_class: motion

    #zone alarm status
  - platform: template
    id: za1
    name: "$systemName Front door alarm"
    #device_class: safety
  - platform: template
    id: za2
    name: "$systemName Garage door alarm"
    #device_class: safety
  - platform: template
    id: za3
    name: "$systemName Back door alarm"
    #device_class: safety
  - platform: template
    id: za4
    name: "$systemName Living room window alarm"
    #device_class: safety
  - platform: template
    id: za5
    name: "$systemName Dining room window alarm"
    #device_class: safety
  - platform: template
    id: za6
    name: "$systemName Family room window LF alarm"
    #device_class: safety
  - platform: template
    id: za7
    name: "$systemName Family room window RF alarm"
    #device_class: safety
  - platform: template
    id: za8
    name: "$systemName Basement windows alarm"
    #device_class: safety
  - platform: template
    id: za9
    name: "$systemName Upstairs motion alarm"
    #device_class: safety
  - platform: template
    id: za10
    name: "$systemName Basement motion alarm"
    #device_class: safety
  - platform: template
    id: za11
    name: "$systemName Main floor motion alarm"
    #device_class: safety

  - platform: template
    id: t1
    name: "$systemName Trouble Status"
    device_class: problem

  - platform: template
    id: f1
    device_class: safety
    name: "$systemName Partition1 Fire Status"

text_sensor:
  - platform: template
    id: system_status
    name: "$systemName System Status"
    icon: "mdi:shield"
  - platform: template
    id: p1
    name: "$systemName Partition 1 Status "
    icon: "mdi:shield"
  - platform: template
    id: p2
    name: "$systemName Partition 2 Status "
    icon: "mdi:shield"  
  - platform: template
    id: m1
    name: "$systemName Partition 1 Msg "
    icon: "mdi:alert-box"
  - platform: template
    id: m2
    name: "$systemName Partition 2 Msg "
    icon: "mdi:alert-box"

switch:
  - platform: template
    name: "$systemName Connection"
    id: connection_status_switch
    lambda: |-
      return dsc.keybusConnected;
    icon: "mdi:shield-link-variant"
    turn_on_action:
      - switch.toggle: restart_switch
    turn_off_action:
      - lambda: |-
          disconnectKeybus();
  - platform: restart
    id: restart_switch

Valid config: Captura

My ESPhome folder image

And my dscKeybusInterface folder inside image

Compile Output:

INFO Reading configuration /config/esphome/alarma.yaml...
INFO Generating C++ source...
INFO Compiling app...
INFO Running:  platformio run -d /config/esphome/alarma
Processing alarma (board: d1_mini; framework: arduino; platform: espressif8266@2.2.3)
--------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES: 
 - framework-arduinoespressif8266 2.20502.0 (2.5.2) 
 - tool-esptool 1.413.0 (4.13) 
 - tool-esptoolpy 1.20600.0 (2.6.0) 
 - toolchain-xtensa 1.40802.0 (4.8.2)
Looking for ESPAsyncTCP-esphome library in registry
LibraryManager: Installing id=6757 @ 1.2.2
ESPAsyncTCP-esphome @ 1.2.2 has been successfully installed!
Looking for ESPAsyncWebServer-esphome library in registry
LibraryManager: Installing id=6758 @ 1.2.6
ESPAsyncWebServer-esphome @ 1.2.6 has been successfully installed!
Looking for ESPAsyncTCP-esphome library in registry
LibraryManager: Installing id=6757
ESPAsyncTCP-esphome @ 1.2.3 has been successfully installed!
Looking for AsyncTCP-esphome library in registry
LibraryManager: Installing id=6798
AsyncTCP-esphome @ 1.1.1 has been successfully installed!
Looking for ArduinoJson-esphomelib library in registry
LibraryManager: Installing id=3837 @ 5.13.3
ArduinoJson-esphomelib @ 5.13.3 has been successfully installed!
Dependency Graph
|-- <ESPAsyncTCP-esphome> 1.2.2
|   |-- <ESP8266WiFi> 1.0
|-- <ESP8266WiFi> 1.0
|-- <ESP8266mDNS> 1.2
|   |-- <ESP8266WiFi> 1.0
|-- <ESPAsyncWebServer-esphome> 1.2.6
|   |-- <ESPAsyncTCP-esphome> 1.2.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <Hash> 1.0
|   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoJson-esphomelib> 5.13.3
|-- <ArduinoJson-esphomelib> 5.13.3
Compiling /data/alarma/.pioenvs/alarma/src/dscKeybusInterface.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/dscKeybusPrintData.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/dscKeybusProcessData.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/api_connection.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/api_server.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/list_entities.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/proto.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/user_services.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/api/util.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/binary_sensor/automation.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/binary_sensor/binary_sensor.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/binary_sensor/filter.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/json/json_util.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/logger/logger.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/ota/ota_component.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/restart/restart_switch.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/status_led/status_led.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/switch/automation.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/switch/switch.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/template/binary_sensor/template_binary_sensor.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/template/switch/template_switch.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/template/text_sensor/template_text_sensor.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/text_sensor/text_sensor.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/web_server/web_server.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/web_server_base/web_server_base.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/wifi/wifi_component.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/wifi/wifi_component_esp32.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/components/wifi/wifi_component_esp8266.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/application.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/component.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/controller.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/esphal.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/helpers.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/log.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/preferences.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/scheduler.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/esphome/core/util.cpp.o
Compiling /data/alarma/.pioenvs/alarma/src/main.cpp.o
Generating LD script /data/alarma/.pioenvs/alarma/ld/local.eagle.app.v6.common.ld
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/BearSSLHelpers.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/CertStoreBearSSL.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFi.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFiAP.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFiGeneric.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFiMulti.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFiSTA-WPS.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFiSTA.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/ESP8266WiFiScan.cpp.o
In file included from src/main.cpp:52:0:
src/dscAlarm.h:8:1: error: 'dscKeybusInterface' does not name a type
 dscKeybusInterface dsc(dscClockPin, dscReadPin, dscWritePin);
 ^
src/dscAlarm.h: In function 'void disconnectKeybus()':
src/dscAlarm.h:12:3: error: 'dsc' was not declared in this scope
   dsc.stop();
   ^
In file included from src/main.cpp:52:0:
src/dscAlarm.h: At global scope:
src/dscAlarm.h:65:18: error: 'dscPartitions' was not declared in this scope
  byte lastStatus[dscPartitions];
                  ^
src/dscAlarm.h: In member function 'virtual void DSCkeybushome::setup()':
src/dscAlarm.h:79:2: error: 'dsc' was not declared in this scope
  dsc.cmdWaitTime=cmdWaitTime;
  ^
src/dscAlarm.h: In member function 'void DSCkeybushome::alarm_keypress(std::string)':
src/dscAlarm.h:124:5: error: 'dsc' was not declared in this scope
     dsc.write(keys);
     ^
src/dscAlarm.h: In member function 'void DSCkeybushome::set_alarm_state(int, std::string, std::string)':
src/dscAlarm.h:142:37: error: 'dsc' was not declared in this scope
     if (state.compare("S") == 0 && !dsc.armed[partition] && !dsc.exitDelay[partition]) {
                                     ^
src/dscAlarm.h: In member function 'virtual void DSCkeybushome::loop()':
src/dscAlarm.h:182:27: error: 'dsc' was not declared in this scope
  if (!forceDisconnect  && dsc.loop())  { 
                           ^
In file included from src/main.cpp:52:0:
src/dscAlarm.h:190:10: error: 'dsc' was not declared in this scope
     if ( dsc.statusChanged ) {   // Processes data only when a valid Keybus command has been read
          ^
src/dscAlarm.h:238:40: error: 'dscPartitions' was not declared in this scope
   for (byte partition = 0; partition < dscPartitions; partition++) {
                                        ^
src/dscAlarm.h:244:8: error: 'lastStatus' was not declared in this scope
    if (lastStatus[partition] != dsc.status[partition]  ) {
        ^
src/dscAlarm.h:301:41: error: 'dscZones' was not declared in this scope
    for (byte zoneGroup = 0; zoneGroup < dscZones; zoneGroup++) {
                                         ^
src/dscAlarm.h:322:41: error: 'dscZones' was not declared in this scope
    for (byte zoneGroup = 0; zoneGroup < dscZones; zoneGroup++) {
                                         ^
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/WiFiClient.cpp.o
src/main.cpp: In lambda function:
src/main.cpp:559:14: error: 'dsc' was not declared in this scope
       return dsc.keybusConnected;
              ^
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/WiFiClientSecureAxTLS.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/WiFiClientSecureBearSSL.cpp.o
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/WiFiServer.cpp.o
src/main.cpp:560:3: warning: control reaches end of non-void function [-Wreturn-type]
   });
   ^
*** [/data/alarma/.pioenvs/alarma/src/main.cpp.o] Error 1
Compiling /data/alarma/.pioenvs/alarma/lib4d9/ESP8266WiFi/WiFiServerSecureAxTLS.cpp.o
========================== [FAILED] Took 7.55 seconds ==========================
Dilbert66 commented 3 years ago

In file "dscalarm.h" , right below "include "esphome.h" add this line and try again.

include "dscKeybusInterface.h"

PipeDeveloper commented 3 years ago

Nice! it works Thank you!

image