mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-25 14:55:55 +01:00
[ferroamp] Binding for ferroamp 20241111
Changes done in: FerroampHandler.java FerroampMqttCommunication.java README.md Signed-off-by: Örjan Backsell <orjan.backsell@gmail.com>
This commit is contained in:
parent
2cd249119a
commit
70688ede67
@ -4,6 +4,8 @@ The Ferroamp binding is used to get live data from Ferroamp EnergyHub
|
||||
|
||||
The Ferroamp binding is compatible with EnergyHub Wall and EnergyHub XL, and connects to your local EnergyHub via LAN.
|
||||
Data and commands are received/sent using MQTT where the user connects to the MQTT broker residing on the EnergyHub.
|
||||
The communication with the broker might take some minute to establish, so Please just be patient. The Thing will be
|
||||
in state INITIALIZATION during this time and ONLINE once connection is established.
|
||||
|
||||
*note* Contact Ferroamp support to enable MQTT in the EnergyHub and to get the Username and Password:
|
||||
|
||||
@ -209,11 +211,7 @@ Thing ferroamp:energyhub:myenergyhub [ hostName="energyhub-ip", userName="myUser
|
||||
```
|
||||
|
||||
```java
|
||||
Thing ferroamp:energyhub:myenergyhub [ hostName="energyhub-ip", userName="myUserName", password="myPassword", hasBattery=false, ssoS0=true ]
|
||||
```
|
||||
|
||||
```java
|
||||
Thing ferroamp:energyhub:myenergyhub [ hostName="energyhub-ip", userName="myUserName", password="myPassword", hasBattery=true, ssoS0=true, eso=true ]
|
||||
Thing ferroamp:energyhub:myenergyhub [ hostName="energyhub-ip", userName="myUserName", password="myPassword", hasBattery=true, eso=true ]
|
||||
```
|
||||
|
||||
|
||||
@ -226,20 +224,21 @@ String Ferroamp "RequestCharge" <energy> { channel="ferroamp:energyhub:myenergyh
|
||||
|
||||
## Rules
|
||||
|
||||
Ex. Set Charging with 5000W with cron trigger:
|
||||
Ex. Rule name: Set Charge Level.
|
||||
Set charging level to 5000W when item RequestCharge is updated.
|
||||
|
||||
```yaml
|
||||
configuration: {}
|
||||
triggers:
|
||||
id: "1"
|
||||
- id: "1"
|
||||
configuration:
|
||||
cronExpression: 0 0/2 * * * ? *
|
||||
type: timer.GenericCronTrigger
|
||||
itemName: EnergyHub_RequestCharge
|
||||
type: core.ItemStateUpdateTrigger
|
||||
conditions: []
|
||||
actions:
|
||||
inputs: {}
|
||||
id: "2"
|
||||
- id: "2"
|
||||
configuration:
|
||||
type: application/vnd.openhab.dsl.rule
|
||||
script: ChargingWith5000W.sendCommand("5000")
|
||||
type: script.ScriptAction
|
||||
itemName: EnergyHub_RequestCharge
|
||||
command: "5000"
|
||||
type: core.ItemCommandAction
|
||||
```
|
||||
|
@ -68,16 +68,16 @@ public class FerroampHandler extends BaseThingHandler implements MqttMessageSubs
|
||||
if (FerroampBindingConstants.CHANNEL_REQUESTCHARGE.equals(channelUID.getId())) {
|
||||
String requestCmdJsonCharge = "{\"" + "transId" + "\":\"" + transId
|
||||
+ "\",\"cmd\":{\"name\":\"charge\",\"arg\":\"" + valueConfiguration + "\"}}";
|
||||
FerroampMqttCommunication.sendMQTT(requestCmdJsonCharge, ferroampConfig);
|
||||
FerroampMqttCommunication.sendPublishedTopic(requestCmdJsonCharge, ferroampConfig);
|
||||
}
|
||||
if (FerroampBindingConstants.CHANNEL_REQUESTDISCHARGE.equals(channelUID.getId())) {
|
||||
String requestCmdJsonDisCharge = "{\"" + "transId" + "\":\"" + transId
|
||||
+ "\",\"cmd\":{\"name\":\"discharge\",\"arg\":\"" + valueConfiguration + "\"}}";
|
||||
FerroampMqttCommunication.sendMQTT(requestCmdJsonDisCharge, ferroampConfig);
|
||||
FerroampMqttCommunication.sendPublishedTopic(requestCmdJsonDisCharge, ferroampConfig);
|
||||
}
|
||||
if (FerroampBindingConstants.CHANNEL_AUTO.equals(channelUID.getId())) {
|
||||
String requestCmdJsonAuto = "{\"" + "transId" + "\":\"" + transId + "\",\"cmd\":{\"name\":\"auto\"}}";
|
||||
FerroampMqttCommunication.sendMQTT(requestCmdJsonAuto, ferroampConfig);
|
||||
FerroampMqttCommunication.sendPublishedTopic(requestCmdJsonAuto, ferroampConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,26 +95,26 @@ public class FerroampHandler extends BaseThingHandler implements MqttMessageSubs
|
||||
final MqttBrokerConnection ferroampConnection = new MqttBrokerConnection(ferroampConfig.hostName,
|
||||
FerroampBindingConstants.BROKER_PORT, false, false, ferroampConfig.userName);
|
||||
|
||||
scheduler.execute(() -> {
|
||||
try {
|
||||
startMqttConnection();
|
||||
} catch (InterruptedException e) {
|
||||
logger.debug("Faulty startMqttConnection()");
|
||||
}
|
||||
});
|
||||
|
||||
scheduler.scheduleWithFixedDelay(this::pollTask, 60, refreshInterval, TimeUnit.SECONDS);
|
||||
this.setFerroampConnection(ferroampConnection);
|
||||
}
|
||||
|
||||
private void pollTask() {
|
||||
try {
|
||||
startMqttConnection();
|
||||
} catch (InterruptedException e) {
|
||||
logger.debug("Problems with startMqttConnection()");
|
||||
}
|
||||
if (getFerroampConnection().connectionState().toString().equals("DISCONNECTED")) {
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR);
|
||||
logger.debug("Problem connection to MqttBroker");
|
||||
} else {
|
||||
// } else {
|
||||
}
|
||||
if (getFerroampConnection().connectionState().toString().equals("CONNECTED")) {
|
||||
try {
|
||||
channelUpdate();
|
||||
updateStatus(ThingStatus.ONLINE);
|
||||
|
||||
} catch (RuntimeException scheduleWithFixedDelayException) {
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||
scheduleWithFixedDelayException.getClass().getName() + ":"
|
||||
@ -124,15 +124,15 @@ public class FerroampHandler extends BaseThingHandler implements MqttMessageSubs
|
||||
}
|
||||
|
||||
private void startMqttConnection() throws InterruptedException {
|
||||
try {
|
||||
TimeUnit.SECONDS.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
logger.debug("Connection to MqttBroker disturbed during startup of MqttConnection");
|
||||
}
|
||||
ferroampMqttCommunication.getMQTT("ehubTopic", ferroampConfig);
|
||||
ferroampMqttCommunication.getMQTT("ssoTopic", ferroampConfig);
|
||||
ferroampMqttCommunication.getMQTT("esoTopic", ferroampConfig);
|
||||
ferroampMqttCommunication.getMQTT("esmTopic", ferroampConfig);
|
||||
MqttBrokerConnection localSubscribeConnection = FerroampHandler.getFerroampConnection();
|
||||
|
||||
localSubscribeConnection.start();
|
||||
localSubscribeConnection.setCredentials(ferroampConfig.userName, ferroampConfig.password);
|
||||
|
||||
ferroampMqttCommunication.getSubscribedTopic("ehubTopic", ferroampConfig);
|
||||
ferroampMqttCommunication.getSubscribedTopic("ssoTopic", ferroampConfig);
|
||||
ferroampMqttCommunication.getSubscribedTopic("esoTopic", ferroampConfig);
|
||||
ferroampMqttCommunication.getSubscribedTopic("esmTopic", ferroampConfig);
|
||||
}
|
||||
|
||||
private void channelUpdate() {
|
||||
|
@ -60,7 +60,7 @@ public class FerroampMqttCommunication implements MqttMessageSubscriber {
|
||||
}
|
||||
|
||||
// Handles request topic
|
||||
static void sendMQTT(String payload, FerroampConfiguration ferroampConfig) {
|
||||
static void sendPublishedTopic(String payload, FerroampConfiguration ferroampConfig) {
|
||||
|
||||
MqttBrokerConnection localConfigurationConnection = FerroampHandler.getFerroampConnection();
|
||||
|
||||
@ -70,12 +70,12 @@ public class FerroampMqttCommunication implements MqttMessageSubscriber {
|
||||
}
|
||||
|
||||
// Handles respective topic type
|
||||
void getMQTT(String topic, FerroampConfiguration ferroampConfig) {
|
||||
void getSubscribedTopic(String topic, FerroampConfiguration ferroampConfig) {
|
||||
|
||||
MqttBrokerConnection localSubscribeConnection = FerroampHandler.getFerroampConnection();
|
||||
|
||||
localSubscribeConnection.start();
|
||||
localSubscribeConnection.setCredentials(ferroampConfig.userName, ferroampConfig.password);
|
||||
// localSubscribeConnection.start();
|
||||
// localSubscribeConnection.setCredentials(ferroampConfig.userName, ferroampConfig.password);
|
||||
|
||||
if ("ehubTopic".equals(topic)) {
|
||||
localSubscribeConnection.subscribe(FerroampBindingConstants.EHUB_TOPIC, this);
|
||||
|
Loading…
Reference in New Issue
Block a user