Coder Social home page Coder Social logo

matth-x / microocpp Goto Github PK

View Code? Open in Web Editor NEW
282.0 20.0 124.0 3.3 MB

OCPP 1.6 client for microcontrollers

License: MIT License

C++ 98.64% C 0.89% CMake 0.40% Python 0.08%
arduino-ocpp ocpp evse ocpp-controller esp32 esp32-arduino arduino embedded esp8266 platformio

microocpp's Introduction

Icon   MicroOcpp

Build Status Unit tests codecov

OCPP 1.6 client for microcontrollers. Portable C/C++. Compatible with Espressif, Arduino, NXP, STM, Linux and more.

✔️ Works with 15+ commercial Central Systems

✔️ Eligible for public chargers (Eichrecht-compliant)

✔️ Supports all OCPP 1.6 feature profiles and OCPP 2.0.1 preview

Reference usage: OpenEVSE | Technical introduction: Docs | Website: www.micro-ocpp.com

Updated branches (2024-03-24): the default branch was renamed from master into main. The develop branch hasn't been used anymore, so it is deleted. This better represents how branches are used in MicroOcpp: active development takes place on main (plus the feature and fixing branches) and the releases are stable versions of this library. To get a release version, checkout a tag, e.g. v1.0.3, or download it from GitHub / PlatformIO.

Tester / Demo App

Main repository: MicroOcppSimulator

The Simulator is a demo & development tool for MicroOcpp which allows to quickly assess the compatibility with different OCPP backends. It simulates a full charging station, adds a GUI and a mocked hardware binding to MicroOcpp and runs in the browser (using WebAssembly): Try it

Screenshot

Usage

OCPP server setup: Navigate to "Control Center". In the WebSocket options, add the OCPP backend URL, charge box ID and authorization key if existent. Press "Update WebSocket" to save. The Simulator should connect to the OCPP server. To check the connection status, it could be helpful to open the developer tools of the browser.

If you don't have an OCPP server at hand, leave the charge box ID blank and enter the following backend address: wss://echo.websocket.events/ (this server is sponsored by Lob.com)

RFID authentication: Go to "Control Center" > "Connectors" > "Transaction" and update the idTag with the desired value.

Benchmarks

Full report: MicroOcpp benchmark (esp-idf)

The following measurements were taken on the ESP32 @ 160MHz and represent the optimistic best case scenario for a charger with two physical connectors (i.e. compiled with -Os, disabled debug output and logs).

Description Value
Flash size (minimal) 121,170 B
Heap occupation (idle) 12,308 B
Heap occupation (peak) 21,916 B
Initailization 21 ms
loop() call (idle) 0.05 ms
Large message sent 5 ms

In practical setups, the execution time is largely determined by IO delays and the heap occupation is significantly influenced by the configuration with reservation, local authorization and charging profile lists.

Developers guide

PlatformIO package: MicroOcpp

MicroOcpp is an implementation of the OCPP communication behavior. It automatically initiates the corresponding OCPP operations once the hardware status changes or the RFID input is updated with a new value. Conversely it processes new data from the server, stores it locally and updates the hardware controls when applicable.

Please take examples/ESP/main.cpp as the starting point for the first project. It is a minimal example which shows how to establish an OCPP connection and how to start and stop charging sessions. The API documentation can be found in MicroOcpp.h. Also check out the Docs.

Dependencies

Mandatory:

If compiled with the Arduino integration:

If using the built-in certificate store (to enable, set build flag MO_ENABLE_MBEDTLS=1):

In case you use PlatformIO, you can copy all dependencies from platformio.ini into your own configuration file. Alternatively, you can install the full library with dependencies by adding matth-x/[email protected] in the PIO library manager.

OCPP 2.0.1 and ISO 15118

The following OCPP 2.0.1 use cases are implemented:

UC Description Note
M03 - M05 Certificate management Enable Mbed-TLS to use the built-in certificate store
B05 - B07 Variables
B01 - B04
B11 - B12
Provisioning Ported from OCPP 1.6
E01 - E12 Transactions
F01 - F02 Remote Start/Stop Tx
- Protocol negotiation The charger can select the OCPP version at runtime

The OCPP 2.0.1 features are in an alpha development stage (no persistency yet). By default, they are disabled and excluded from the build, so they have no impact on the firmware size. To enable, set the build flag MO_ENABLE_V201=1 and initialize the library with the ProtocolVersion parameter 2.0.1 (see this example in the Simulator).

An integration of the library for OCPP 1.6 will also be functional with the 2.0.1 upgrade. It works with the same API in MicroOcpp.h.

ISO 15118 defines some use cases which include a message exchange between the charger and server. This library facilitates the integration of ISO 15118 by handling its OCPP-side communication.

Contact

If you have further questions, feel free to reach out!

✉️ : matthias [A⊤] micro-ocpp [DО⊤] com

microocpp's People

Contributors

agruenb avatar fbisinger avatar matth-x avatar nelopauselli avatar ollilenz avatar pedro-fuoco avatar zhushengsheng001 avatar ziyadtarek7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

microocpp's Issues

ESP32 port

Hi Matth-x,
I would like to test this library on ESP32, byt an getting errors.
Any tips on what would be needed to port it?

Thanks!

uniqueptr+jsondocument ambiguous error

image
Hi Matthias
This error is appearing in development branch library.
Whenever a new json document is declared with uniqueptr, swap ambiguous error is appearing during compilation.
Need help in resolving the compilation error.

How to collect energy data to send OCPP based CMS

Hello matt,

First of all we congralutate you for creating this amazing thing

I do have few Questions in my Mind !

We are working with ESP8266

How to collect energy for sending to OCPP based CMS

  1. Can we use Eastron Energy Meter and connect with rs485 to take the energy data
  2. Can it stop the session in case of Car Got full Charged

Regards
Thanks

compile issue on latest repo code

Hello matt,

I am compling latest code on ardunio

but not able to compile the same, giving some dependencies error

image

Please do advise

CALLRESULT error

This error happens randomly, if I keep my esp on it will show this error on heartbeat, then sometimes it also shows the same error when I reboot my esp.
@matth-x Have you faced this problem, every suggestion on this issue would be helpful
[OcppEngine] Received CALLRESULT doesn't match any pending operation!

Energy sampler issue

This is more of a question than an issue. I'm testing this some more and I am currently getting:

[ConnectorMeterValuesRecorder] Called readEnergyActiveImportRegister(), but no energySampler or handling strategy set!

Is this a setup error of the code from ArduinoOCPP or from my OCPP test server? I'm using the HW_integration example with some changes, mostly just within the loop.
I'm currently using the python library to test this.

The OCPP server for testing if it helps:

import asyncio
import logging
from datetime import datetime

try:
    import websockets
except ModuleNotFoundError:
    print("This example relies on the 'websockets' package.")
    print("Please install it by running: ")
    print()
    print(" $ pip install websockets")
    import sys
    sys.exit(1)

from ocpp.routing import on
from ocpp.v16 import ChargePoint as cp
from ocpp.v16.enums import Action, RegistrationStatus
from ocpp.v16 import call_result

logging.basicConfig(level=logging.DEBUG)


class ChargePoint(cp):
    @on(Action.BootNotification)
    def on_boot_notification(self, charge_point_vendor: str, charge_point_model: str, **kwargs):
        return call_result.BootNotificationPayload(
            current_time=datetime.utcnow().isoformat(),
            interval=10,
            status=RegistrationStatus.accepted
        )

    @on(Action.Authorize)
    def on_authorize(self, id_tag: str):
        return call_result.AuthorizePayload(
            id_tag_info={"status": 'Accepted'},
        )

    @on(Action.StatusNotification)
    def on_status_notification(self, connector_id: str, error_code: str, status: str, timestamp: str):        
        return call_result.StatusNotificationPayload()

    @on(Action.MeterValues)
    def on_meter_value(self):
        return call_result.MeterValuesPayload()

    @on(Action.StartTransaction)
    def on_start_transaction(self, connector_id, id_tag, timestamp, meter_start):
        return call_result.StartTransactionPayload(
            id_tag_info={
                "status": 'Accepted'
            },
            transaction_id=int(1)
        )

    @on(Action.StopTransaction)
    def on_stop_transaction(self, transaction_id, timestamp, meter_stop):
        return call_result.StopTransactionPayload()


async def on_connect(websocket, path):
    """ For every new charge point that connects, create a ChargePoint
    instance and start listening for messages.
    """
    try:
        requested_protocols = websocket.request_headers[
            'Sec-WebSocket-Protocol']
    except KeyError:
        logging.error(
            "Client hasn't requested any Subprotocol. Closing Connection"
        )
        return await websocket.close()
    if websocket.subprotocol:
        logging.info("Protocols Matched: %s", websocket.subprotocol)
    else:
        # In the websockets lib if no subprotocols are supported by the
        # client and the server, it proceeds without a subprotocol,
        # so we have to manually close the connection.
        logging.warning('Protocols Mismatched | Expected Subprotocols: %s,'
                        ' but client supports  %s | Closing connection',
                        websocket.available_subprotocols,
                        requested_protocols)
        return await websocket.close()

    charge_point_id = path.strip('/')
    cp = ChargePoint(charge_point_id, websocket)

    await cp.start()


async def main():
    server = await websockets.serve(
        on_connect,
        '0.0.0.0',
        8834,
        subprotocols=['ocpp1.6']
    )

    logging.info("Server Started listening to new connections...")
    await server.wait_closed()


if __name__ == '__main__':
    try:
        # asyncio.run() is used when running this example with Python 3.7 and
        # higher.
        asyncio.run(main())
    except AttributeError:
        # For Python 3.6 a bit more code is required to run the main() task on
        # an event loop.
        loop = asyncio.get_event_loop()
        loop.run_until_complete(main())
        loop.close()

OCPP request not coming to server

Hello Matt,

I have successfully uploaded the code in nodemcu and wifi also connected properly but nodemcu not sending request for ocpp connection to server, proper url defined

same ocpp working with other ev charging machine

image

can you please advise on the same ?

any troubleshooting hint, i have tested with other websocket request test but no luck

please help

thank you

Boot Notification (interval) error

I am trying to print the JsonObject payload in Boot Notif but I am not able to, as I have read the whole OCPPv1.6 documentation, while receiving .conf of Boot Notification the Json file should contain "interval" as one of the parameters and I am not able to access the same, my esp restarts whenever I type:

Serial.printf(confMsg["interval"]);

Consecutive startTransaction requests are sent, even before getting the response within the timeout period.

Hey @matth-x ,

The logs look something like this:

[OcppOperation] Sent requirement (success): [2,"531531536","StartTransaction",{"connectorId":1,"meterStart":0,"timestamp":"2022-02-24T10:01:39.000Z","idTag":"vckjvcJvjk337nKJCn92"}]
[OcppOperation] Sent requirement (success): [2,"531531536","StartTransaction",{"connectorId":1,"meterStart":0,"timestamp":"2022-02-24T10:01:39.000Z","idTag":"vckjvcJvjk337nKJCn92"}]
[OcppClientSocket] get pong
[OcppOperation] Sent requirement (success): [2,"531531536","StartTransaction",{"connectorId":1,"meterStart":0,"timestamp":"2022-02-24T10:01:39.000Z","idTag":"vckjvcJvjk337nKJCn92"}]
[OcppClientSocket] get pong
[OcppOperation] Sent requirement (success): [2,"531531536","StartTransaction",{"connectorId":1,"meterStart":0,"timestamp":"2022-02-24T10:01:39.000Z","idTag":"vckjvcJvjk337nKJCn92"}]

Use with Grizzl-E smart charger

Hi, the Grizzl-E smart charger uses an ESP32 for Wi-Fi and it's application. Their firmware is a mess, and not very compliant to OCPP. What all would be required to see if ArduinoOcpp could control this box?

This issue has some pictures and details on the fw provided.

lbbrhzn/ocpp#442

It may be possible to follow the traces on the esp32 daughter board there is an 8 pin header that connects is to the main pcb. There is a buzzer and led so I'm guessing those would be 2 of the gpio pins.

Appreciate any input
Thank you

Unable to initialize: could not open configuration file

image
Hi @matth-x ,I upload the project in the nodemcuv2,now the serial printf the following msg:
[Configuration] Unable to initialize: could not open configuration file [Configuration] Loading default configurations file failed! [Configuration<T>] Initialized config object. Key = ChargeProfileMaxStackLevel, value = 20 [Configuration<T>] Initialized config object. Key = OCPP_STATE_TRANSACTION_ID_CONNECTOR_0, value = -1 [Configuration<T>] Initialized config object. Key = OCPP_STATE_AVAILABILITY_CONNECTOR_0, value = 2 [Configuration<T>] Initialized config object. Key = OCPP_STATE_TRANSACTION_ID_CONNECTOR_1, value = -1 [Configuration<T>] Initialized config object. Key = OCPP_STATE_AVAILABILITY_CONNECTOR_1, value = 2 [Configuration<T>] Initialized config object. Key = MeterValueSampleInterval, value = 60 [Configuration<T>] Initialized config object. Key = MeterValuesSampledDataMaxLength, value = 4 [Configuration<T>] Initialized config object. Key = HeartbeatInterval, value = 86400 [Configuration<const char*>] Initialized config object. Key = BUILD_NUMBER, value = 12345789 [OcppClientSocket] Disconnected! [OcppOperation] Send requirement: [2,"531531531","BootNotification",{"chargePointModel":"My Charging Station","chargePointVendor":"My company name"}] [OcppOperation] Send requirement: [2,"531531531","BootNotification",{"chargePointModel":"My Charging Station","chargePointVendor":"My company name"}] [OcppClientSocket] Disconnected!
Please tell me how I can solve this problem, thanks.

Need guidance on how the code would look like for remote start transaction

I am trying to get our OCPP server to start the charger using RemoteStartTransaction request. Question I have here is with OCPP_loop() does the program automatically detect such a request and react to it OR would we need to enable a function to start the energy flow when onRemoteStartTransactionRecevieRequest is invoked?

An example function on how this would look like would be very helpful.

Sending Status Notification

I am trying to figure out how to send status notification for different states like charging, unavailable and faulted. Does this happen automatically in OCPP_loop() or we have to define functions as we did for start and stop notification?

Build problem

Hello, I try to upload occp on ESP32 but it can't even build.
Here is screenshot, could you please help me?
image

relay once start and autoclose

Hello Matt,

Getting issue with autorization

[StartTransaction] Request has been denied!

image

image

and Central system,

the status showing

Preparing

Please do advise

thanks

WSS not supported on ESP32

Hi!

First of all, thanks for your work! It's been very helpfull to us.

We are developing an EVSE using ESP32 and we need to communicate with a CS using wss. This library uses a websocket library which does not support wss comunication, but we found that it is possible to use another websocket library instead of links2004/WebSockets library here:

`#ifndef AO_CUSTOM_WS
//uses links2004/WebSockets library
void OCPP_initialize(String CS_hostname, uint16_t CS_port, String CS_url, float V_eff = 230.f /German grid/, ArduinoOcpp::FilesystemOpt fsOpt = ArduinoOcpp::FilesystemOpt::Use_Mount_FormatOnFail, ArduinoOcpp::OcppClock system_time = ArduinoOcpp::Clocks::DEFAULT_CLOCK);
#endif

//Lets you use your own WebSocket implementation
void OCPP_initialize(ArduinoOcpp::OcppSocket *ocppSocket, float V_eff = 230.f /German grid/, ArduinoOcpp::FilesystemOpt fsOpt = ArduinoOcpp::FilesystemOpt::Use_Mount_FormatOnFail, ArduinoOcpp::OcppClock system_time = ArduinoOcpp::Clocks::DEFAULT_CLOCK);`

How can we use another websocket library? Could you help us?

Warning compiling with VSCode and PlatformIO

I am using PlatformIO on MAC with VSCode. I have successfully compiled and run the code on ESP32. Thank you so much for this work. I do see two warnings that require higher version of c++ compiler. I am not sure what version the VScode compiler provided by Microsoft is at or how to upgrade. I wanted to know if these warning are serious and whether they will impact code at runtime. I am not familiar with lambda capture initializers.

.pio/libdeps/esp32-development-board/ArduinoOcpp/src/ArduinoOcpp/MessagesV16/ClearChargingProfile.cpp: In member function 'virtual void ArduinoOcpp::Ocpp16::ClearChargingProfile::processReq(ArduinoJson::JsonObject)':
.pio/libdeps/esp32-development-board/ArduinoOcpp/src/ArduinoOcpp/MessagesV16/ClearChargingProfile.cpp:23:78: warning: lambda capture initializers only available with -std=c++14 or -std=gnu++14
std::function<bool(int, int, ChargingProfilePurposeType, int)> filter = [payload = payload]

.pio/libdeps/esp32-development-board/ArduinoOcpp/src/ArduinoOcpp/Tasks/FirmwareManagement/FirmwareService.cpp: In function 'ArduinoOcpp::FirmwareService* ArduinoOcpp::EspWiFi::makeFirmwareService(const char*)':
.pio/libdeps/esp32-development-board/ArduinoOcpp/src/ArduinoOcpp/Tasks/FirmwareManagement/FirmwareService.cpp:317:30: warning: lambda capture initializers only available with -std=c++14 or -std=gnu++14
fwService->setOnInstall([fwService = fwService] (String &location) {

.pio/libdeps/esp32-development-board/ArduinoOcpp/src/ArduinoOcpp/Tasks/FirmwareManagement/FirmwareService.cpp:348:46: warning: lambda capture initializers only available with -std=c++14 or -std=gnu++14
fwService->setInstallationStatusSampler([fwService = fwService] () {

Transaction still starting despite `Invalid` response from Central System

I'm trying to start a transaction from the CP using the following idTag FFFFFF the Central System fails it but the charger still tries to start a charge with a different idTag "A0-00-00-00"

is this intended?

Here are the logs:

[OcppOperation] Sent requirement (success): [2,"531531534","Authorize",{"idTag":"FFFFFF"}]
[OcppClientSocket] get text: [3,"531531534",{"idTagInfo":{"status":"Invalid"}}]
[Authorize] Request has been denied![ConnectorMeterValuesRecorder] Called readEnergyActiveImportRegister(), but no energySampler or handling strategy set!
[ChargePointStatusService] Authorize connector though there is no unbound ID tag
[ChargePointStatusService] Connector 1 occupies idTag 
[StartTransaction] StartTransaction initiated!
[OcppOperation] Sent requirement (success): [2,"531531535","StartTransaction",{"connectorId":1,"meterStart":0,"timestamp":"2021-09-22T20:57:14.000Z","idTag":"A0-00-00-00"}]
[SmartChargingService] New Limit! Values: {scheduled at = 2021-09-22T20:57:14.000Z, nextChange = 2037-01-01T00:00:00.000Z, limit = 11000.00}

And the code I'm running to execute this:

authorize(
            rfidTag,
            [](JsonObject confMsg) {
                startTransaction([](JsonObject conf) {
                    Log.infoln("[EVSE] Successfully authorized and started transaction");
                    EasyBuzzer.beep(1000, 2);
                    setState(true);
                });
            },
            nullptr, nullptr,
            [](const char *code, const char *description, JsonObject details) {
                printError(code, description);
                setState(false);
            });

Disconnect sequence

Would be nice to be able to safety disconnect from the OCPP server i.e do the following things before restarting or shutting down:

  • Stop any ongoing transactions
  • Set status to unavailable
  • Disconnect safely from WS

Arduino IDE setup process

Hi Matth, I am trying to setup your github repo within my Arduino repo. Is there a wiki or a step by step instruction on how one can setup the OneConnector_EVSE.ino file on arduino IDE? Very much appreciate any help you can offer here.

Get Current Timestamp when OCPP is not connected

Yesterday I wrote a code to get the current timestamp and print it in my serial monitor. I noticed that, if I use current timestamp just after OCPP_Initialize it prints 1970 timestamp, and if I print it after Start or Stop Notification it gets me perfect timestamp.

This is the function to print current timestamp.

void current_timestamp() {
    using namespace::ArduinoOcpp;
    OcppTime *ocppTime = getOcppTime();
    OcppTimestamp time_stamp = ocppTime->getOcppTimestampNow();
    char timestamp[JSONDATE_LENGTH + 1] = {'\0'};
    time_stamp.toJsonString(timestamp, JSONDATE_LENGTH + 1);
    Serial.print(timestamp); 
}

I was thinking that if my OCPP starts and my server is not connected will I still be able to get exact timestamp?
If yes, then how?

ready to use for ESP32?

compile error with ESP32.
error return
In file included from src/main.cpp:18:0:
.pio/libdeps/esp32dev/WiFiManager/WiFiManager.h:16:25: fatal error: ESP8266WiFi.h: No such file or directory



compilation terminated.
*** [.pio\build\esp32dev\src\main.cpp.o] Error 1

Build error using PlatformIO

Hello, I'm trying to build the project using platformio and I'm always getting this error at link time:
I stay using: PlatformIO Core, version 5.1.1 . Thanks

DEBUG: Current (ftdi) On-board (ftdi) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:

  • framework-arduinoespressif32 2.10004.191002 (1.0.4)
  • tool-esptoolpy 1.20600.0 (2.6.0)
  • toolchain-xtensa32 2.50200.97 (5.2.0)
    LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 29 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- 6.17.2
    |-- 2.2.0
    | |-- 1.0
    | |-- 1.0
    | |-- 1.0
    | | |-- 1.0
    |-- <LittleFS_esp32> 1.0.5
    | |-- 1.0
    |-- 1.0
    Building in release mode
    Linking .pio/build/esp32-development-board/firmware.elf
    .pio/build/esp32-development-board/libFrameworkArduino.a(main.cpp.o):(.literal._Z8loopTaskPv+0x4): undefined reference to setup()' .pio/build/esp32-development-board/libFrameworkArduino.a(main.cpp.o):(.literal._Z8loopTaskPv+0x8): undefined reference to loop()'
    .pio/build/esp32-development-board/libFrameworkArduino.a(main.cpp.o): In function loopTask(void*)': /home/welesley/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:14: undefined reference to setup()'
    /home/welesley/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:17: undefined reference to `loop()'
    collect2: error: ld returned 1 exit status
    *** [.pio/build/esp32-development-board/firmware.elf] Error 1
    ========================================================= [FAILED] Took 4.81 seconds =========================================================

Environment Status Duration


esp32-development-board FAILED 00:00:04.807
=================================================== 1 failed, 0 succeeded in 00:00:04.807 ===================================================

FirmwareService.cpp warning

@matth-x
I am getting a warning when I am trying to compile my code on ArduinoIDE.
Also,
HTTP_UPDATE_FAILED Error (-11): HTTP error: read Timeout
I am not sure if this error because of this warning.

warning: lambda capture initializers only available with -std=c++14 or -std=gnu++14
     fwService->setOnInstall([fwService = fwService] (String &location) {

And how to remove this warning?

How to setup the project?

I am using NodeMcuv2
I have downloaded the project, and selected the moved the examples file "ESP/mail.ino" into the source file, but still I am getting errors
image

How should I setup the project, I am unbale to do it.
Detailed Step would be really helpful

Errors when building SECC example

Hi.

I am having issues compiling the SECC example you provided as the try out sketch. I tried with arduino IDE and with platformIO. And I seem to get the same error on both builds.

Arduino IDE:
WARNING: library ArduinoOcpp-master claims to run on espressif8266, espressif32 architecture(s) and may be incompatible with your current board which runs on esp8266 architecture(s).
C:\Users\Matus\AppData\Local\Temp\arduino_modified_sketch_160544\main.ino: In function 'void setup()':
main:193:101: error: no matching function for call to 'WebSocketsClient::beginSSL(String&, uint16_t&, String&, const char [1], const char [8])'
wSock->beginSSL(ocppUrlParsed.host, ocppUrlParsed.port, ocppUrlParsed.url, "", "ocpp1.6");
^
C:\Users\Matus\AppData\Local\Temp\arduino_modified_sketch_160544\main.ino:193:101: note: candidate is:
In file included from C:\Users\Matus\Documents\Arduino\libraries\ArduinoOcpp-master\src/ArduinoOcpp/Core/OcppSocket.h:29:0,
from C:\Users\Matus\Documents\Arduino\libraries\ArduinoOcpp-master\src/ArduinoOcpp/Core/OcppOperation.h:16,
from C:\Users\Matus\Documents\Arduino\libraries\ArduinoOcpp-master\src/ArduinoOcpp.h:8,
from C:\Users\Matus\AppData\Local\Temp\arduino_modified_sketch_160544\main.ino:20:
C:\Users\Matus\Documents\Arduino\libraries\arduinoWebSockets-master\src/WebSocketsClient.h:50:10: note: void WebSocketsClient::beginSSL(const char*, uint16_t, const char*, const uint8_t*, const char*)
void beginSSL(const char * host, uint16_t port, const char * url = "/", const uint8_t * fingerprint = NULL, const char * protocol = "arduino");
^
C:\Users\Matus\Documents\Arduino\libraries\arduinoWebSockets-master\src/WebSocketsClient.h:50:10: note: no known conversion for argument 1 from 'String' to 'const char*'
exit status 1
no matching function for call to 'WebSocketsClient::beginSSL(String&, uint16_t&, String&, const char [1], const char [8])'
PlatformIO :

Executing task in folder OCPP4: C:\Users\Matus.platformio\penv\Scripts\platformio.exe run --environment nodemcuv2 <

Warning! Ignore unknown configuration option build_partitions in section [env:esp32-development-board]
Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html
PLATFORM: Espressif 8266 (3.2.0) > NodeMCU 1.0 (ESP-12E Module)
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:

  • framework-arduinoespressif8266 3.30002.0 (3.0.2)
  • tool-esptool 1.413.0 (4.13)
  • tool-esptoolpy 1.30000.201119 (3.0.0)
  • toolchain-xtensa 2.100300.210717 (10.3.0)
    Converting main.ino
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:34: warning: "EV_PLUGGED" redefined
    34 | #define EV_PLUGGED LOW
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:31: note: this is the location of the previous definition
    31 | #define EV_PLUGGED HIGH
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:35: warning: "EV_UNPLUGGED" redefined
    35 | #define EV_UNPLUGGED HIGH
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:32: note: this is the location of the previous definition
    32 | #define EV_UNPLUGGED LOW
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:47: warning: "EV_CHARGING" redefined
    47 | #define EV_CHARGING HIGH
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:44: note: this is the location of the previous definition
    44 | #define EV_CHARGING LOW
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:48: warning: "EV_SUSPENDED" redefined
    48 | #define EV_SUSPENDED LOW
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:45: note: this is the location of the previous definition
    45 | #define EV_SUSPENDED HIGH
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:73: warning: "CHARGE_PERMISSION_ON" redefined
    73 | #define CHARGE_PERMISSION_ON LOW
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:70: note: this is the location of the previous definition
    70 | #define CHARGE_PERMISSION_ON HIGH
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:74: warning: "CHARGE_PERMISSION_OFF" redefined
    74 | #define CHARGE_PERMISSION_OFF HIGH
    |
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:71: note: this is the location of the previous definition
    71 | #define CHARGE_PERMISSION_OFF LOW
    |
    LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 39 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- 6.17.2
    |-- 2.2.0
    | |-- 1.0
    | |-- 2.0.0
    | | |-- 1.0
    | |-- 1.0
    | |-- 1.0
    |-- 0.16.0
    | |-- 1.1.1
    | | |-- 1.0
    | |-- 1.0
    | | |-- 1.0
    | |-- 1.0
    |-- 0.0.4
    | |-- 6.17.2
    | |-- 2.2.0
    | | |-- 1.0
    | | |-- 2.0.0
    | | | |-- 1.0
    | | |-- 1.0
    | | |-- 1.0
    | |-- 1.3
    | | |-- 1.2
    | | | |-- 1.0
    | | |-- 1.0
    | |-- 0.1.0
    Building in release mode
    Compiling .pio\build\nodemcuv2\src\main.ino.cpp.o
    Generating LD script .pio\build\nodemcuv2\ld\local.eagle.app.v6.common.ld
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\BearSSLHelpers.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\CertStoreBearSSL.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFi.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiAP.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiGratuitous.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiMulti.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiSTA-WPS.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiSTA.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\ESP8266WiFiScan.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\WiFiClient.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\WiFiClientSecureBearSSL.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\WiFiServer.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\WiFiServerSecureBearSSL.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\WiFiUdp.cpp.o
    Compiling .pio\build\nodemcuv2\lib3ee\ESP8266WiFi\enable_wifi_at_boot_time.cpp.o
    Compiling .pio\build\nodemcuv2\lib17d\SPI\SPI.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\Dhcp.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\Dns.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\Ethernet.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\EthernetClient.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\EthernetServer.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\EthernetUdp.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\socket.cpp.o
    Compiling .pio\build\nodemcuv2\libaa1\Ethernet\utility\w5100.cpp.o
    Compiling .pio\build\nodemcuv2\lib529\Hash\Hash.cpp.o
    Compiling .pio\build\nodemcuv2\libf9e\WebSockets\SocketIOclient.cpp.o
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino: In function 'bool runWiFiManager()':
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:356:17: error: 'class WiFiManager' has no member named 'setTitle'
    356 | wifiManager.setTitle("EVSE configuration portal");
    | ^~~~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:357:17: error: 'class WiFiManager' has no member named 'setParamsPage'
    357 | wifiManager.setParamsPage(true);
    | ^~~~~~~~~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:374:17: error: 'class WiFiManager' has no member named 'setSaveParamsCallback'; did you mean 'setSaveConfigCallback'?
    374 | wifiManager.setSaveParamsCallback([&ocppUrlParam = ocppUrlParam, &ocppUrl = ocppUrl, &wifiManager = wifiManager, &CA_cert = CA_cert, &caCertParam = caCertParam, &httpAuthentication = httpAuthentication, &httpAuthenticationParam = httpAuthenticationParam] () {
    | ^~~~~~~~~~~~~~~~~~~~~
    | setSaveConfigCallback
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino: In lambda function:
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:385:24: error: 'std::unique_ptr<esp8266webserver::ESP8266WebServerTemplate > WiFiManager::server' is private within this context
    385 | if(wifiManager.server->hasArg(caCertChangedParam)) {
    | ^~~~~~
    In file included from C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:18:
    .pio\libdeps\nodemcuv2\WiFiManager/WiFiManager.h:123:39: note: declared private here
    123 | std::unique_ptr server;
    | ^~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:386:55: error: 'std::unique_ptr<esp8266webserver::ESP8266WebServerTemplate > WiFiManager::server' is private within this context
    386 | String caCertChanged = String(wifiManager.server->arg(caCertChangedParam));
    | ^~~~~~
    In file included from C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:18:
    .pio\libdeps\nodemcuv2\WiFiManager/WiFiManager.h:123:39: note: declared private here
    123 | std::unique_ptr server;
    | ^~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:397:24: error: 'std::unique_ptr<esp8266webserver::ESP8266WebServerTemplate > WiFiManager::server' is private within this context
    397 | if(wifiManager.server->hasArg(authChangedParam)) {
    | ^~~~~~
    In file included from C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:18:
    .pio\libdeps\nodemcuv2\WiFiManager/WiFiManager.h:123:39: note: declared private here
    123 | std::unique_ptr server;
    | ^~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:398:53: error: 'std::unique_ptr<esp8266webserver::ESP8266WebServerTemplate > WiFiManager::server' is private within this context
    398 | String authChanged = String(wifiManager.server->arg(authChangedParam));
    | ^~~~~~
    In file included from C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:18:
    .pio\libdeps\nodemcuv2\WiFiManager/WiFiManager.h:123:39: note: declared private here
    123 | std::unique_ptr server;
    | ^~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino: In function 'bool runWiFiManager()':
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:409:17: error: 'class WiFiManager' has no member named 'setDarkMode'
    409 | wifiManager.setDarkMode(true);
    | ^~~~~~~~~~~
    C:/Users/Matus/Documents/PlatformIO/Projects/OCPP4/src/main.ino:415:17: error: 'class WiFiManager' has no member named 'setAPClientCheck'
    415 | wifiManager.setAPClientCheck(true); // avoid timeout if client connected to softap
    | ^~~~~~~~~~~~~~~~
    Compiling .pio\build\nodemcuv2\libf9e\WebSockets\WebSockets.cpp.o
    Compiling .pio\build\nodemcuv2\libf9e\WebSockets\WebSocketsClient.cpp.o
    Compiling .pio\build\nodemcuv2\libf9e\WebSockets\WebSocketsServer.cpp.o
    Compiling .pio\build\nodemcuv2\libf9e\WebSockets\libb64\cdecode.c.o
    Compiling .pio\build\nodemcuv2\libf9e\WebSockets\libb64\cencode.c.o
    *** [.pio\build\nodemcuv2\src\main.ino.cpp.o] Error 1
    .pio\libdeps\nodemcuv2\WebSockets\src\SocketIOclient.cpp: In member function 'void SocketIOclient::handleCbEvent(WStype_t, uint8_t*, size_t)':
    .pio\libdeps\nodemcuv2\WebSockets\src\SocketIOclient.cpp:102:11: warning: enumeration value 'WStype_ERROR' not handled in switch [-Wswitch]
    102 | switch(type) {
    | ^
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsClient.cpp: In member function 'void WebSocketsClient::loop()':
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsClient.cpp:172:30: error: 'class BearSSL::WiFiClientSecure' has no member named 'setCACert'
    172 | _client.ssl->setCACert((const uint8_t )_CA_cert, strlen(_CA_cert) + 1);
    | ^~~~~~~~~
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsClient.cpp: In member function 'void WebSocketsClient::connectedCb()':
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsClient.cpp:759:26: error: 'class BearSSL::WiFiClientSecure' has no member named 'verify'
    759 | if(!_client.ssl->verify(_fingerprint.c_str(), _host.c_str())) {
    | ^~~~~~
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp: In constructor 'WebSocketsServer::WebSocketsServer(uint16_t, String, String)':
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp:49:83: warning: 'void
    memset(void*, int, size_t)' clearing an object of type 'struct WSclient_t' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]
    49 | memset(&_clients[0], 0x00, (sizeof(WSclient_t) * WEBSOCKETS_SERVER_CLIENT_MAX));
    | ^
    In file included from .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp:25:
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSockets.h:237:16: note: 'struct WSclient_t' declared here
    237 | typedef struct {
    | ^
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp: In member function 'bool WebSocketsServer::newClient(WiFiClient*)':
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp:465:23: warning: variable 'ip' set but not used [-Wunused-but-set-variable]
    465 | IPAddress ip = client->tcp->remoteIP();
    | ^~
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp: In member function 'void WebSocketsServer::handleNewClients()':
    .pio\libdeps\nodemcuv2\WebSockets\src\WebSocketsServer.cpp:638:23: warning: variable 'ip' set but not used [-Wunused-but-set-variable]
    638 | IPAddress ip = tcpClient->remoteIP();
    | ^~
    *** [.pio\build\nodemcuv2\libf9e\WebSockets\WebSocketsClient.cpp.o] Error 1
    ==================================================== [FAILED] Took 5.44 seconds ====================================================

Environment Status Duration


nodemcuv2 FAILED 00:00:05.445
=============================================== 1 failed, 0 succeeded in 00:00:05.445 ===============================================

I currently dont own any EVSE and I would love to try out OCPP to be used with my own backend system.

Ocpp tags (rfid)

Hello!

This project is looking great. Congrats on the amazing work! Ocpp has great functionality in respect to id tags. This predominantly looks to RFID as a way to locally authenticate the evse. Identification, start a transaction, stop a transaction. SteVe also has a great implementation for such tags and their management.

It looks as if OpenEVSE doesn't currently support RFID. It could be an option in the future or added. What's the possibility of supporting tags in your project, specifically for RFID?

Thank you so much for your time! 🙂

Websocket does not respons, esp stuck

When I switch on metering service loop,
Sometimes my websocket connection closes, My esp is connected to internet but websocket connection does not work, it doesn't display anything.

[ArduinoOcpp] : BootNotification was answered. Central System clock:

After boot notification when I send remote start from my server, it does not responds

Multiple connectors example

Hi, I see there is a commit for multiple connectors support and that the example was changed, but that was for the single connector from the looks of it, could be I'm blind.

How would you implement multiple connectors with this library?

How to retrieve the JSON string from a function ?

Hello everyone,

I use this library to carry out a project as part of my internship. I have to design a module capable of sending fake OCPP frames to an application in order to test its behavior in front of a large influx of data.
However I don’t know how to display the frames I send on the Arduino terminal. For exemple on the function :

    **startTransaction("my-id-tag", [] (JsonObject payload) {
        //Callback: Central System has answered. Could flash a confirmation light here.
        Serial.print(F("[main] Started OCPP transaction\n"));
    });**

I can’t retrieve the JSON created by this function in order to print it on the terminal. I have tried to program my own WebSocket to see if I receive the frames, but without success ( I have never done this before , so I'll continue to try this way), my ESP32 don't send any data on my webSocket while I could do it from the plugin "Simple WebSocket Client" of Chrome.

I have also tried to do some function like serializeJson() but it also don't work.

Thanks in advance for your help !

Vector Compile Error

Hi @matth-x
I am trying to implement OCPPv1.6 on Node-MCU32S, I was able to make the websocket connection but I am not able to send Boot Notification as I am getting a compiled error, can you please help me out with this?
this is some vector error, i am not yet familiar with vectors and how to solve this error

In file included from ~\Arduino\libraries\ArduinoOcpp\src\ArduinoOcpp\Core\Configuration.cpp:5:
~\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:26: error: 'vector' is not a member of 'std'

td::shared_ptr<std::vector<std::shared_ptr>> getAllConfigurations();
^~~~~~
~\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:26: note: 'std::vector' is defined in header ''; did you forget to '#include '?
~\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:10:1:
+#include

~\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:26:
std::shared_ptr<std::vector<std::shared_ptr>> getAllConfigurations();
^~~~~~
~\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:26: error: 'vector' is not a member of 'std'
~\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:26: note: 'std::vector' is defined in header ''; did you forget to '#include '?
\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:70: error: template argument 1 is invalid
std::shared_ptr<std::vector<std::shared_ptr>> getAllConfigurations();
^

~\Arduino\libraries\ArduinoOcpp\src/ArduinoOcpp/Core/Configuration.h:24:72: error: expected unqualified-id before '>' token
std::shared_ptr<std::vector<std::shared_ptr>> getAllConfigurations();
^

Littlefs not finding default configuration

Hi!!

I´m trying to build your proyect in an ESP32 withthe esp-idf. I´m able to build and flash it, but i have a problem when loading the default configuration file. I changed my partitions file to create a spiffs directory and I created an arduino-ocpp.cnf file, but of course it is empty and im not able to find in your repository that file.

thanks in advance for your help and your work with this amazing repo!

OCPP_initialize function not calling

Hello @matth-x

I have successfully upload the code in esp8266 and it is connected to wifi but

OCPP_initialize not calling

no ocpp request coming on central server

image

Please do advise

Thank You

Tier-2 Connectors Support

Appreciated your efforts to provide great platform.
As I have implemented single connector (1-Tier ) EV Charger with steve server and found working as expected.
As steve is supporting multiple connector I am trying add another connector with same charge point in ESP32 but not having idea to where to start modifying the existing code, it will be very helpful if I get some support to add another connector support in existing code.

not able to complie the code

Hello Matt

Getting the following error the compile time, can you please advise me something so i can do it fix

image

Thank You

ESP8266-OCPP integration

Hi @matth-x ,
First of all, congratulations on your work. I'm interested in using your development for a proof of concept where I would like to provide an OCPP functionallities to a simple EV charger. My charger is now controlled by switches connected to a GPIO.

But I have no clue how you integrated OCPP-enabled ESP8266 into a ClipperCreek Inc. charging station. Does the ClipperCreek loader have an API that allows you to send primitives to it?

Cheers,
EG

Websocket cloud server connection issue

I am unable to connect NodeMCU to the OCPP server hosted in cloud while able to connect in localhost with IP : 192.168.1.11:9055/v1.6/alpha
The same OCPP cloud server can be connected from chrome extension Websocket King Client.
There is no SSL enabled on cloud

Sample URL :
ws://splendidwasp21.loca.lt/v1.6/alpha.

Node MCU main.cpp macro definitions for server

#define OCPP_HOST "splendidwasp21.loca.lt"
#define OCPP_PORT '\0'
#define OCPP_URL "v1.6/alpha"

Is the above assignment correct to connect to cloud server.
if not what is the right way to connect to cloud server. Is something needs to be added during initialisation?

esp-idf component

Is this project somehow compatible with esp-idf?

We ditched platformio long ago to avoid so many problems aand improve compile times (our firmware takes already quarter hour to compile :D)

esp-idf has a concept of components, each containing its own CMakeLists.txt and linking required dependencies

Using PZEM004 to capture metervalues

Hi Matth-x, I am planning to use the PZEM004 sensor and arduino library to capture the metervalues once the chargers is started. What are the ArduinoOCPP functions I should invoke in order to register the appropriate metervalues to the central system?

Stand alone ESP8266 example

Thank you so much for your work here.
It is very interesting that you prove the concept of a working implementation of OCCP on ESP8266.

Unfortunately I am not able to make my own tests due of missing external charging point.
I think, it should be very helpful to dispose of a working example of a stand alone ESP8266 without external hardware.

The example may "just" do the following sequence :
On boot

  • Open web sockets
  • Boot notification
  • Send a status notification on a "virtual" connector 1

On loop :

  • Ping pong for the web socket
  • Heartbeat

This example probably needs a specific EVSE.h.

Any help will be highly appreciated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.