Smarter SMC10EU Coffee in IPS?

Hi,

da unsere Kaffee Maschine so langsam den Geist aufgibt, sind wir auf der Suche nach einer Neuen. Für mich wäre es wichtig, dass ich diese auch irgendwie in IPS einbinden kann. Wichtig hierbei wäre, dass ich den Brühvorgang über IPS starten kann.

Dabei bin ich auf folgenden gestoßen: Smarter SMC10EU Coffee

Die Suche nach der API ergab dann folgendes:

GitHub - matthanley/smarter-coffee-api: PHP Smarter Coffee API, inspired by https://github.com/AdenForshaw/smarter-coffee-api

Hat jemand diese zufällig bereits im Einstaz oder sogar schon in IPS integriert?

Gruß
Benjamin

Hi,

habe mir jetzt die oben genannte Smarter Coffee Maschine mal bestellt.
Kann mir jemand einen Tipp geben, wie ich die Klasse und die Funktionen in IPS einbauen muss?

Soweit ich mich erinnere, muss ich die .php irgendwo ablegen und dann per include einbinden.

Ist das richtig?

Gruß
Benjamin

Hi,

habe jetzt hinbekommen die Smarter Coffee in IPS zu starten. Falls es jemand noch gebrauchen kann, hier die Steps:

  1. Smarter Coffee Klasse anlegen und umbenennt zu SmarterCoffee.php
<?
class SmarterCoffee
{
	protected $address;
	protected $port;
	protected $cups;
	protected $strength;
	protected $grind; // true for grind, false for filter
	protected $carafe;
	const ACTION_BREW = "7";
	const ACTION_RESET = "\x10";
	const ACTION_TOGGLE_GRIND = "\x3c\x7e";
	const ACTION_SET_STRENGTH = "\x35%s\x7e";
	const ACTION_SET_CUPS = "\x36%s\x7e";
	const BUFFER_LENGTH = 10;
	const RESULT_SUCCESS = 1;
	const RESULT_NOOP = 2;
	const RESULT_CARAFE_NOT_PRESENT = 4;
	const RESULT_NO_WATER = 8;
	const RESULT_BREW_IN_PROGRESS = 16;
	const RESULT_UNKNOWN = 32;
	public function __construct($address, $port = 2081) {
		$this->address = $address;
		$this->port = $port;
		return $this;
	}
	public function brew() {
		return $this->send(self::ACTION_BREW);
	}
	public function reset() {
		return $this->send(self::ACTION_RESET);
	}
	public function setCups($cups) {
		if (!is_null($this->cups) && $this->cups == $cups) {
			return self::RESULT_NOOP;
		}
		$cups = max(1, $cups);
		$cups = min(12, $cups);
		return $this->send(
			sprintf(self::ACTION_SET_CUPS, chr($cups))
		);
	}
	public function setStrength($strength) {
		if (!is_null($this->strength) && $this->strength == $strength) {
			return self::RESULT_NOOP;
		}
		$strength = max(0, $strength);
		$strength = min(2, $strength);
		return $this->send(
			sprintf(self::ACTION_SET_STRENGTH, chr($strength))
		);
	}
	public function setGrind($grind) {
		if (is_null($this->grind)) {
			$this->toggleGrind();
		}
		if ($this->grind != $grind) {
			return $this->toggleGrind();
		}
		return self::RESULT_SUCCESS;
	}
	protected function toggleGrind() {
		return $this->send(self::ACTION_TOGGLE_GRIND);
	}
	protected function send($command) {
		try {
			$sc = fsockopen($this->address, $this->port);
			fwrite($sc, $command);
			$message = $this->parse(fgets($sc, self::BUFFER_LENGTH));
		}
		finally {
			@fclose($sc);
		}
		return $message;
	}
	protected function parse($output) {
		// [0] to [2] are the response code from the last command
		// [3] to [9] are the status codes for the machine
		$output = bin2hex($output);
		$result = substr($output, 0, 6);
		$status = substr($output, 6);
		$this->parseStatus($status);
		return $this->parseResult($result);
	}
	protected function parseResult($result) {
		switch ($result) {
			case "03007e":
				return self::RESULT_SUCCESS;
			case "03017e":
				return self::RESULT_BREW_IN_PROGRESS;
			case "03057e":
				return self::RESULT_CARAFE_NOT_PRESENT;
			case "03067e":
				return self::RESULT_NO_WATER;
			default:
				return self::RESULT_UNKNOWN;
		}
	}
	protected function parseStatus($status) {
		$status = str_split($status, 2);
		$status = array_map(function($elem) {
			return hexdec($elem);
		}, $status);
		$this->carafe = (bool)($status[1] & 1);
		$this->grind = (bool)($status[1] & 2);
		$this->strength = $status[4];
		$this->cups = $status[5] - 64;
		// $status[2] is water level
	}
}
?>
  1. Aufruf mit Übergabe von festen Parametern:
<?
include 'SmarterCoffee.php';

$coffeeMaker = new SmarterCoffee('192.168.100.124');
$coffeeMaker->reset();
$coffeeMaker->setCups(1);
$coffeeMaker->setStrength(1);
$coffeeMaker->setGrind(true);
$coffeeMaker->brew();



?>

Nicht schimpfen, ich weiß dass man das jetzt noch eleganter mit Variablen für Anzahl der Kaffeetassen, Stärker, Mahlgrad machen kann. Das mache ich dann im nächsten Schritt.

Aber das wichtige ist: Diese Kaffeemaschine kann komplett in IPS integriert werden. Somit wird jetzt automatisch mein Kaffee gekocht, wenn mein IPS Wecker mich aufweckt :slight_smile:

Es wird :stuck_out_tongue:

komisch, wenig Reaktionen hier… wahrscheinlich ist dein Projekt noch zu Smart für diese Zeit.
Wobei es ja bei den Alexa Verrückten einen Schritt weiter in Richtung Frauenersatz gehen könnte…
[SIZE=4]ALEXA, MACHE KAFFEE! :cool:

Cooles Projekt, bin kein Kaffeetrinker aber gut zu wissen dass sowas funktioniert :D[/SIZE]

Hi BeLo,

ich denke mal die meisten besitzen gar nicht diese Kaffeemaschine. Sieht man sich die Amazon Bewertungen an, wird diese ja auch sehr kritisiert.
Meistens ist es aber die App, welche jetzt nicht besonders toll ist.

Naja mir war es wichtig, dass es irgendwie in IPS integrierbar ist, was ja jetzt auch ist :smiley:

Mit Alexa steuern klappt natürlich super. Man muss halt nur ein Skript mit festen Parameter erstellen. Da kann man dann auch z.B. ein Skript pro Benutzer und vorlieben machen, z.B.:

„Alexa, 4 Tassen Kaffee“
Alexa, Benjamin Kaffee"

Leider ist ja bekanntermaßen der Smarthome Skill sehr begrenzt. Hier müsste man ggf ein Custom Skill verwenden, damit Alexa auch nachfragt, wie stark der Kaffee werden soll :wink:

Nächster Schritt für mich ist es, das alles irgendwie in ein Modul zu kippen. Leider kenne ich mich so gar nicht mit der Modulerstellung aus… Naja dann dauert das halt ein wenig länger

Gruß
Benjamin

Ich beschäftige mich ja nun schon seit vielen Jahren mit Kaffeevollautomaten aber diese Idee halte ich für völlig überflüssig. Grins
Bekloppte Welt.

Gesendet von iPad mit Tapatalk

Gut, dass wir alle ein bisschen bekloppt sind ;):smiley:

Die Frage nach einer Einbindung einer smarten Kaffeemaschine hatten wir schon mehrere male, immer mit dem Ergebnis das da irgendwo der Nutzen der Automatisierung endet… wobei ich hier sogar mehr nutzen sehe als bei der Automatisierung eines Kaffee-Vollautomaten. Leider mag ich keine Filter-Kaffee, also doch nix für mich…

Hi,

klar den Nutzen muss jeder selber beurteilen. Mich persönlich hat es halt tierisch genervt morgens warten zu müssen, bis die Kaffee Maschine vorgeheizt war (hatten vorher eine Senseo) und bis unsere 2-3 Tassen Kaffee fertig waren.

Nun gehts automatisch und ich gehe in die Küche und kann einfach den Kaffee mitnehmen. Ich persönlich freue mich jedesmal über den Kaffeeduft im Haus früh morgens.

Vorteil dieser Kaffee Maschine für mich war auch, dass sie eine Kanne Kaffee kocht, statt nur ein/zwei Tassen auf einmal.
Die SmarterCoffee erkennt sogar, falls die Kanne fehlt, zuwenig Wasser vorhanden, Bohnen leer sind und startet somit den Brühvorgang erst gar nicht. Das verhindert natürlich bei der Automatisierung, dass es zu einer Sauerei kommt.

Wie gesagt, für mich persönlich ist es genau die Maschine, die wir suchten.

Ggf gibt es ja hier noch jemanden mit der gleichen Anforderung und kann die Skripte gebrauchen :wink:

Gruß
Benjamin

Ich finde Deine Begeisterung für die Sache ansteckend.
Direkt mit Skript ist doch genau das, was immer hilfreich ist.
Man muss ja nicht jede Leidenschaft teilen. [emoji106]

Gesendet von iPhone mit Tapatalk

Blöde Frage aber wie schmeckt der Kaffee? Meine Frau und ich sind jetzt schon begeistert!

Hi Maxx,

das ist natürlich wieder Geschmackssache;)
Also uns schmeckt der Kaffee besser als der von der Senseo. Das hängt aber auch sehr von den verwendeten Bohnen ab. Wir habe bisher die Tschibo feine Milde Bohnen genommen.

Gruß
Benjamin

Hier nochmal ein paar Punkte die zu beachten sind bei dieser Kaffee Maschine:

  1. Die App ist, naja sagen wir mal so „zweckmäßig“

  2. Die App hat eine Timerfunktion in der du quasi einen Wecker/Brühzeit einstellen kannst. Das ist jedoch ein wenig Irre führend, da er dir eine Benachrichtigung zur Zeit schickt. Dort musst du dann noch manuell auf Brühen klicken. Somit kocht die Maschine NICHT automatisch.

–> Deshalb auch die IPS Einbindung. Da funktioniert das natürlich automtisch

  1. Vorsicht beim Wasser auffüllen. Nie über den letzten Strich versuchen aufzufüllen, da die Maschine einen Wasser überlauf hat. D.h. das Wasser läuft hinten raus.

  2. Das Mahlen der Bohnen ist sehr laut

Also falls du überlegst dir die Maschine zu besorgen, denke über die oben genannten Punkte nach ;-).

Gruß
Benjamin

App ist mir egal! Einbinden in IPS und alles ist gut!
Wasser guter Tip, Danke!
Geräusch nehmen wir in kauf!
Da hätte ich gleich ein Geburtstags Geschenk für mich!
Mfg
Maxx

Hallo, danke für das Script funktioniert perfekt. Meine Frau ist begeistert. Gibt es auch die Möglichkeit den Status des Gerätes auszulesen, außer über die App. Wie z. B. Wasserstand, keine Karaffe usw? Die Warmhalteplatte würde ich auch gerne steuern wollen. Hat das schon mal jemand getestet? Für einen Denkanstoß wäre ich sehr dankbar.

Gruß Torsten

Gesendet von iPhone mit Tapatalk

Hi Torsten,

freut mich zu hören, dass es gefällt :smiley:

Wegen dem Status abfragen:
Ich habe diese Klasse auf Github gefunden (siehe ersten Post). Wenn ich mir die Funktionen ansehen, sollte eine Status abfrage möglich sein, da der Ersteller folgendes implementiert hat:

protected function parseStatus($status)
protected function parseResult($result)

Leider bin ich nicht so der PHP Experte und hatte bisher noch keine Zeit, diese Aufrufe zu testen bzw mit einzubinden.

Stimme dir aber zu, Wasserstatus und Karraffenstatus wäre noch praktisch

Gruß
Benjamin

Hallo Benjamin,

die Funktionen habe ich auch gesehen, habe es aber noch nicht geschafft dort ein Array oder irgendwas auszulesen. Wenn ich im Script, wo ich auch die Befehle sende dort diese Variablen abfrage kommt immer das die Variable nicht existiert. Ich dachte man könnte was lesen da die Klasse ja am Anfang includiert ist.
Naja wird schon, vielleicht gibt es noch jemanden der einen Tip geben kann.

Danke und Gruß
Torsten

Gesendet von iPhone mit Tapatalk

Hallo
Hab seit Tagen auch so eine Maschine.
Benutze im Moment die Klasse nicht aber wenn man einen ClientSocket auf den
Port 2081 oeffnet kommen alle 2 Sekunden Daten rein.

32 05 02 00 01 CC 7E

2.Byte - Status
3.Byte - Wasserstand
5.Byte - Staerke
6.Byte - Tassenanzahl

So wie hier beschrieben
https://github.com/nanab/smartercoffee/blob/master/pollingStatusMessage.py

Das schreib ich dann in Variablen mit entsprechenden Profilen

Hi 1007,

das ist ja interessant. Kann ich bestätigen. Alle 2 Sekunden kommen die Daten an.
Arbeitest du dann über einen Cutter oder wie erhälst du die einzelnen Werde aus dem Datensatz?

Magst du uns deine Konfiguration mal genauer Beschrieben wie du das genau gemacht hast?

Gruß
Benjamin