Skip to content

Commit

Permalink
switching to slack
Browse files Browse the repository at this point in the history
  • Loading branch information
StephanSST committed Sep 29, 2023
1 parent 74f4106 commit a33466f
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 56 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ This code will run on a Raspberry PI in a chicken barn. There are scales under t

### Epic v1: Chicken scale recognizes weight change and sends message about state (which chicken, an egg) via Messenger

* Story: Check if Slack is better than Threema
* Story: switch to feign client
* Story: fix disabled test
* Story: Integration test with whole process (testing)

* Story: (done) Switch to Slack
* Story: (done) tare for both boxes
* Story: (done) maybe distinct discovey result
* Story: (done) keep state of box to prevent multiple messages
Expand Down
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@
<artifactId>tinkerforge</artifactId>
<version>2.1.32</version>
</dependency>
<!--Slack libs -->
<dependency>
<groupId>com.slack.api</groupId>
<artifactId>slack-api-client</artifactId>
<version>1.32.2</version>
</dependency>


<!--test libs -->
<dependency>
Expand Down
2 changes: 1 addition & 1 deletion raspi/docker-chicken-farm.service
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ ExecStartPre=-/usr/bin/docker rm chicken-farm
ExecStartPre=-/usr/bin/docker pull stephanst/chicken-farm:latest
ExecStart=/usr/bin/docker run -d --restart unless-stopped \
-p 8080:8080 --network="host" \
--env THREEMA_FROM=xxxxx --env THREEMA_TO=xxxxx --env THREEMA_SECRET=xxxxx --env MESSENGER_ENABLED=true --env SCHEDULER_FIXED_RATE=60000 \
--env SLACK_CHANNEL=xxxxx --env SLACK_TOKEN=xxxxx --env MESSENGER_ENABLED=true --env SCHEDULER_FIXED_RATE=60000 \
--name chicken-farm stephanst/chicken-farm:latest
ExecStop=/usr/bin/docker stop chicken-farm
TimeoutSec=300
Expand Down
Original file line number Diff line number Diff line change
@@ -1,73 +1,56 @@
package ch.stephan.chickenfarm.messenger;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate;

import com.slack.api.Slack;
import com.slack.api.methods.MethodsClient;
import com.slack.api.methods.request.chat.ChatPostMessageRequest;
import com.slack.api.methods.response.chat.ChatPostMessageResponse;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class MessengerService {

private static final String URL = "https://msgapi.threema.ch/send_simple?to={to}&text={text}&from={from}&secret={secret}";

private final RestTemplate restTemplate;
@Value("${messengerservice.channel}")
private String channel;

@Value("${messengerservice.from}")
private String from;

@Value("${messengerservice.to}")
private String to;

@Value("${messengerservice.secret}")
private String secret;
@Value("${messengerservice.token}")
private String token;

@Value("${messengerservice.enabled}")
private boolean enabled;

public MessengerService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}

public String sendNotification(String message) {
if (!enabled) {
return "Messaging was disabled, not message sent.";
}

try {
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<?> httpEntity = new HttpEntity<>(headers);

Map<String, String> params = new HashMap<>();
params.put("to", to);
params.put("text", message);
params.put("from", from);
params.put("secret", secret);

String messageId = restTemplate.postForObject(URL, httpEntity, String.class, params);

log.info("Message with id {} successfully sent.", messageId);
return messageId;

} catch (HttpStatusCodeException ex) {
log.error("getStatusCode: " + ex.getStatusCode());
log.error("getResponseHeaders: " + ex.getResponseHeaders());
log.error("getResponseBodyAsString: " + ex.getResponseBodyAsString());
log.error("getMessage: " + ex.getMessage());
log.error("Error sending message with http code {}, see logs for more info.", ex.getStatusCode());
return "Error sending message with http code " + ex.getStatusCode();
Slack slack = Slack.getInstance();
// Initialize an API Methods client with the given token
MethodsClient methods = slack.methods(token);

// Build a request object
ChatPostMessageRequest request = ChatPostMessageRequest.builder().channel(channel)//
.text(":wave: " + message).build();

// Get a response as a Java object
ChatPostMessageResponse response = methods.chatPostMessage(request);
if (response.isOk()) {
String messageId = response.getHttpResponseHeaders().get("x-slack-unique-id").toString();
log.info("Message with id {} successfully sent.", messageId);
return messageId;
} else {
String errorCode = response.getError();
return "Error sending message with error " + errorCode;
}
} catch (Exception ex) {
log.error("Unexpected exception calling the Slack API", ex);
return "Error sending message with error " + ex.getMessage();
}

}

}
5 changes: 2 additions & 3 deletions src/main/resources/application-maven.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ spring:
name: chicken-farm

messengerservice:
from: "dummy"
to: "dummy"
secret: "dummy"
channel: "dummy"
token: "dummy"
enabled: false

schedulerservice:
Expand Down
5 changes: 2 additions & 3 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ spring:
name: chicken-farm

messengerservice:
from: ${THREEMA_FROM:huehnerstall}
to: ${THREEMA_TO:myself}
secret: ${THREEMA_SECRET:joshua}
channel: ${SLACK_CHANNEL:c01234567}
token: ${SLACK_TOKEN:myself}
enabled: ${MESSENGER_ENABLED:false}

schedulerservice:
Expand Down

0 comments on commit a33466f

Please sign in to comment.