Smarter SMC10EU Coffee in IPS?

Wenn meine da ist,
werde ich mal ein Modul versuchen, habe ja noch Hilfe im Haus…

Hi Tom,

vielen Dank für die Hilfe :slight_smile:

Gruß
Benjamin

Hallo Leute,

meine ist heute gekommen, jetzt gehts mal an die Bytes.
Werde das :smartercoffee/pollingStatusMessage.py at master · nanab/smartercoffee · GitHub
mal nutzen.

Und der Kaffee ist gar nicht so schlecht…

Hallo,
könntet ich mal das checken ?


WaterLevelMessageType = {
0    '0x0' : "Not enough water",
1    '0x1' : "Low",
2    '0x2' : "Half",
18    '0x12' : "Half",
19    '0x13' : "Full",

Bei mir kommt da noch 0x11 mit…
Firmware der Maschine ist : 22

ps KaiS hat schon ein Modul angefangen zu schreiben, ich suche Daten zusammen…

Hi Thomas,

wann genau kommt bei dir denn 0x11? Bzw. bei welchem physischem Wasserstand/Tassen?
Dann checke ich das mal.

Gruß
Benjamin

Hi Benjamin,

ich versuche gerade Werte zu sammeln, und da kommt mir einiges komisch vor.
Ich zeichne mal verschiedene Dinge(Werte) per IPS auf, um zu sehen was, was bedeuten könnte.
Grundfunktionen gehen schon mal, aber da ist noch einiges unklar von den ganzen Beispielen. Die passen bei mir so noch nicht.

Hi 1007,
bei cups hast du einen Fehler drin, bei 2c Hex kommen 44Tassen raus…
2c Hex muss zerlegt werden, nur die zweite Stelle in dem Beispiel scheint die Tassenzahl zu sein.
Was die 2 bedeutet, weiss ich auch noch nicht, könnte aber mit Filter und Bohnen zusammenhängen.

Hallo
Also bei mir kommt bei „2C“ 12 Tassen raus. Das macht der Programmteil

	$cups = hexdec("2C");
	
	for ($x=0;$x<10;$x++)
		{
		if ( $cups > 16 )
			$cups = $cups - 16;
		}

	echo $cups;

Grundlage ist der Link

https://github.com/nanab/smartercoffee/blob/master/pollingStatusMessage.py
cupsMessageType = { #TODO investigate what the first number does?

Hm,will hier so nicht.
Mache es so :

    $cups       = dechex (ord(substr($data,5,1))); 
	$arr=str_split($cups, 1);
	$cups = hexdec($arr[1]);

Hallo
Was kommt den raus wenn du folgendes machst?

	$cups = dechex (ord(substr($data,5,1))); 
	echo "
" . $cups;
    $arr  = str_split($cups, 1);
    $cups = hexdec($arr[1]);  
	echo "
" . $cups;

Kenne jetzt nur den Code, nicht das Protokoll, aber so sollte es auch gehen, oder?
$cups = (ord($data[5]) & 0x0F)
Michael

PS: Bei dem Preis bin ich auch am überlegen, aktuell ist bei uns seit einem Jahr Handbetrieb :wink:

Also, $cups kommt mal als Hex C2, mal als Hex 22 usw, wobei die 2te Stelle die aktuelle Tassenzahl ist.
Die erste Stelle werde ich mal in ein Byte schreiben und aufzeichnen.
Dann kann man mal schauen, was passiert.

@Michael, die Maschine ist ganz ok, und Kai meint auch, der Kaffee ist gut…
Das einzige was nicht so toll ist, ist die App. Aber die brauchen wir bald nicht mehr…

Hi Tomas,

wow vielen Dank für die Mühen.
Wir finden den Kaffe vom Geschmack auch gar nicht mal so schlecht [emoji6].

Schade, dass der Hersteller seine API nicht veröffentlicht. Wäre bestimmt um einiges einfacherer.

Gruß
Benjamin

Gesendet von iPhone mit Tapatalk

Hallo zusammen,

der Kaffee ist echt gut. Bin auch am überlegen mir das Teil zuzulegen und wenn wir ein Modul dafür fertig haben ist das sicherlich noch wesentlich interessanter. :slight_smile: Aber irgendwie auch nur Spielerei. :smiley:

Vielleicht kann ja noch jemand einen Roboter bauen, der das Wasser auffüllt und den Filter leert. :smiley:

Grüße,
Kai

Hi Kai,

wo wir gerade bei Spielerei sind [emoji2].
Für sowas bräuchtest du rein theoretisch nur eine Wasserpumpe aus der PC Wasserkühlung.

Da du den Wasserstand ja dann per IPS abfragen kannst, schaltest du dementsprechend die Pumpe [emoji6].

Aber das brauche ich persönlich jetzt nicht wirklich [emoji12].

Gruß
Benjamin

Gesendet von iPhone mit Tapatalk

Hier mal ein Brühvorgang :

32 07 13 00 02 C2 7E 
32 0B 13 00 02 22 7E Start 2 Tassen 
32 53 13 00 02 22 7E brühen
32 47 13 00 02 22 7E fertig
32 46 13 00 02 22 7E Kanne entnommen
32 47 13 00 02 22 7E Kanne rein gestellt

Jetzt kommt das senden an den Client Socket dran,
Von Hand schon probiert per :

$InstanzID = @IPS_GetInstanceIDByName("Client Socket (IPS_SmarterCoffee #12746)", $ParentID);
$TX_BUF= "\x36\x02\x7e".chr(10);    //Tassen setzen
CSCK_SendText($InstanzID  ,$TX_BUF); 

Und klar, es ist spielerei im Moment, aber ich werde da den Wochplan mal nutzen, damit Morgens die „Arbeitskanne“ fertig ist…:smiley:

Vielleicht kann ja noch jemand einen Roboter bauen, der das Wasser auffüllt und den Filter leert.

Hau rein, Kai:D

So, einige neue Dinge für mich.
32 07 13 00 02 C2 7E
Hier nochmal Byte0 - Byte6.

Byte5 (C2) ist:
C = 12, die Tassen die aktuell, oder zuletzt gebrüht wurden.
2 = Der Sollwert der Tassen, die in der Maschine aktuell stehen.

Byte2 (07) auch hier sollte man teilweise aufteilen.
Byte2 : 07 = Fertig Bohnen, Heizplatte aus
Byte2 :47 = Fertig Bohnen, Heizplatte an
Byte2 :46 = Fertig, Heizplatte an, Kanne nicht vorhanden.

Ich habe das jetzt nur in Skripten, und steuere damit übers Webfront. Geht besser als mit der IOS APP.:eek:
Modul hat Kai angefangen, der Rest kommt dann da rein, wenn ich die Dinge die per Skript laufen, getestet habe.
Bis jetzt sieht es aber gut aus.
Ich denke, zum Ostertreffen ist das fertig.

Super Arbeit [emoji106]

Gesendet von iPhone mit Tapatalk

Ich vermute jetzt,
Byte1 (Status), Byte2( auch Wasserstand), Byte6 (Tassenanzahl, ist klar… Soll-Ist) müssen „zerlegt“ werden.

z.B. Byte2 in HEX für Wasserstand :
13 : 1=?, 3=Voll (bei standby)
12 : 1=?, 2=Halb (bei standby)
02 : 0=?, 2=Halb (bei brühen)
01 : 0=?, 1=Wenig (bei brühen)
00 : 0=?, 0=Leer ( bei brühen)

usw
Jeden Tag ein bischen mehr…

Und wieder was neues…
Status Byte wird in Bit’s zerlegt.
Wasserstand geht jetzt richtig.


<?
//host = '192.168.1.15'
//port = 2081
$ID= IPS_GetParent($_IPS['SELF']);

if ($_IPS['SENDER'] == "RegisterVariable")
   {
       	$data  = RegVar_GetBuffer($_IPS['INSTANCE']);
       	$data .= $_IPS['VALUE'];
		GetStatus($ID,$data);

   }

function GetStatus($ID,$data)
{
//var_dump($data);
    $byte0      = ord(substr($data,0,1));// immer 0x32 - 50 Startbyte
    $status     = ord(substr($data,1,1));//(carafe << 0) + (grind << 1) + (ready << 2) + (grinder << 3) + (heater << 4) + (hotplate << 6) + (working << 5) + (timer << 7))
    $waterlevel = ord(substr($data,2,1)); 1te Stelle Wasser genug für Tassen !, 2te Stelle voll, halb, wenig, leer.
    $byte3      = ord(substr($data,3,1));// immer 0x00 - 0
    $strength   = ord(substr($data,4,1));
    $cups       = dechex (ord(substr($data,5,1))); // 1te Stelle die Anzahl die gekocht würden(werden), 2te Stelle Sollwert
	$byte6      = ord(substr($data,6,1));// immer 0x7E - 126 Endbyte
	
	if ($byte0 == 50){//0x32
		$cups =str_pad($cups, 2 ,'0', STR_PAD_LEFT);
		$arr=str_split($cups, 1);
		$cups = hexdec($arr[0]);
		$cups_soll = hexdec($arr[1]);

		$waterlevel = dechex($waterlevel);
		$waterlevel =(str_pad($waterlevel, 2 ,'0', STR_PAD_LEFT));
		$arr =str_split($waterlevel, 1);
		$genugwasser = hexdec($arr[0]);
		$waterlevel = (hexdec($arr[1]));

	    $id = IPS_GetObjectIDByName("Status",$ID);
	    SetValue($id,$status);


	    $id = IPS_GetObjectIDByName("Wasserstand",$ID);
	    SetValue($id,$waterlevel);

	    $id = IPS_GetObjectIDByName("genug Wasser?",$ID);
	    SetValue($id,$genugwasser);
	
	    $id = IPS_GetObjectIDByName("Stärke",$ID);
	    SetValue($id,$strength);
	
	    $id = IPS_GetObjectIDByName("Tassen",$ID);
	    SetValue($id,$cups);
	    $id = IPS_GetObjectIDByName("Tassen Soll",$ID);
	    SetValue($id,$cups_soll);

        $stat =(str_pad(decbin($status), 8 ,'0', STR_PAD_LEFT));
	    $id = IPS_GetObjectIDByName("Filter/Bohnen",$ID);

	    SetValue($id, substr($stat,6,1));
	    $id = IPS_GetObjectIDByName("Kanne in Maschine ?",$ID);
	    SetValue($id, substr($stat,7,1));

	    $id = IPS_GetObjectIDByName("Heizplatte",$ID);
	    SetValue($id, substr($stat,1,1));

	    $id = IPS_GetObjectIDByName("Kaffee fertig",$ID);
	    SetValue($id, substr($stat,5,1));

	}
}

?>