Neues Modul: 98_SmarterCoffee.pm (Wi-Fi Kaffee Maschine)

Begonnen von jkellerer, 21 August 2016, 19:34:41

Vorheriges Thema - Nächstes Thema

jkellerer


Freut mich dass sich mittlerweile einige gefunden haben die eine Filtermaschine mit Mahlwerk und Automation ebenfalls für ne super Idee halten!

Aus diesem Anlass hab ich heute das Projekt aktualisiert und eine "controls.txt" URL (siehe README auf GitHub) hinzugefügt wodurch die Installation (und Aktualisierung) bequemer und einfacher wird.

@Herwig, meine Anwendungsfälle für dieses Modul sind primär folgende:

  • Die Standardprogramme der Maschine sind für mich nicht ausreichend. Mir war der Kaffee einfach zu schwach (siehe meine Einstellungen unten).
  • Kaffee sollte man je nach Einstatzzweck mit einem beliebigen Schalter machen können. Für mich ist dieser Schalter derzeit meine iOS Geräte und ich hab mich daher für eine HomeKit Anbindung entschieden.
    Die Möglichkeit "Hey Siri mach die Kaffeemaschine an" sagen zu können (wenn man es nach dem Aufwachen denn schon unfallfrei raus bekommt) ist dabei garnicht mal so wichtig. Die Anbindung bietet die Möglichkeit vom Sperrbildschirm aus über das Ausklappmenu die Kaffeemaschine an zu machen und dies ist wirklich ne gute Sache, bequemer als über die originale App.
  • Ich möchte dran erinnert werden wenn die Kaffeemaschine noch gewartet werden muss.
    Für Benachrichtigungen im Allgemeinen hab ich mir vor einiger Zeit eine Utils Funktion angelegt die alle HUE Lampen farbig pulsieren lässt. Über folgendes "at" define wird diese aufgerufen falls die Maschine um 22:00 noch nicht wieder bereit für neuen Kaffee ist:

    define notify_when_coffee_machine_not_ready at *22:00:00 {\
        my $noCoffee = (Value("coffee_machine") !~ /ready/);;\
        my $isSomeoneAtHome = (Value("rgr_Residents") eq "home");;\
        BlinkHue('ff1122', 4) if ($noCoffee and $isSomeoneAtHome);;\
    }

    Hier kann man natürlich auch irgendwas anderes auslösen. Falls es jemand interessiert kann ich die Funktion "BlinkHue" auch gerne mit euch teilen.

Meine Einstellungen





default-hotplate-on-for-minutes15 5=20 8=30 10=35Einschaltdauer der Heizplatte: 20 Minuten ab 5 Tassen, 30 ab 8, 35 ab 10 und 15 Minuten bei weniger als 5 Tassen
strength-extra-percent1.4Stärke "extra" nutzt 140% von "strong" (dies entspricht ca. 6g Kaffee pro Tasse nach meiner eigenen Messung).
strength-extra-pre-brew-delay-seconds90Wenn Stärke "extra" gewählt ist, dann wird erst eine Tasse gebrüht und anschließend 90 Sekunden gewartet bevor die restlichen Tassen gebrüht werden. In meiner Einbildung schmeckt das besser, könnte aber auch nur Einbildung sein ;).
ignore-max-cups0Status ist "maintenance" wenn das Wasser nicht für die eingestellten Tassen ausreicht. Dadurch werde ich auch benachrichtigt wenn Wasser fehlt.

Einstellungen für die HomeBride/HomeKit Anbindung (Anleitung: https://wiki.fhem.de/wiki/Homebridge_einrichten)



genericDeviceTypeswitch
homebridgeMapping{"On": {"cmdOn": "brew 5 extra", "cmdOff": "off", "reading": "state", "valueOn": "/brewing|heating|done/"}}Definiert einen einfachen Schalter in HomeKit (iOS) der beim Einschalten 5 Tassen Kaffee mit Stärke "extra" brüht.

scooty

Zitat von: mahowi am 11 März 2017, 17:11:00
Für alle, denen die Maschine immer zu teuer war (wie mir), gibt es sie jetzt im Onlineshop von T-Online für 77€. Mit Neukundenrabatt (Code NEUKUNDE) habe ich mir jetzt mal eine für 67€ bestellt. :)
Und aktuell im gleichen Shop für 69,- EUR (und für 59,- EUR mit obigem Neukundenrabatt).

Andreas

PS: Danke für das Modul und die eingebrachten echt sinnvollen Optimierungen!
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

scooty

Eines verstehe ich noch nicht:
Nach einem
set SMCOFFEE hotplate off
oder nach Ablauf eines Timers gesetzt z.B. durch
set SMCOFFEE hotplate_on_for_minutes 5 zum Nachheizen
geht der Status auf "maintenance", obwohl sonst alle Bedingungen für "ready" erfüllt sind (Kanne vorhanden, Wassertank ausreichend gefüllt).

Soll das so oder liegt es nur an meinem Verständnis?

Viele Grüße,
Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

jkellerer

Hallo Andreas,

Das was du beschreibst sollte so eigentlich nicht sein.
Habs gerade bei mir ausprobiert und meine Maschine ändert den Status auf "ready" bei "set <name> hotplate off" und auf "heating" bei "set <name> hotplate_on_for_minutes 5".

Sind bei dir folgende Bedingungen erfüllt?

  • (carafe = present und carafe_required = yes) oder carafe_required = no
  • cups <= cups_max
  • cups_single_mode = no

Viele Grüße, Jürgen

scooty

#19
Falls es jemand gebrauchen kann, hier meine Implementierung in FTUI:

    <li data-row="2" data-col="1" data-sizex="6" data-sizey="8">
<header class="big">Status</header>
  <div class="vbox">
   <div class="top-space-2x">
   <div data-type="label"
    data-device="Smarter_Coffee_Device"
    data-get="state"
data-states='["brewing","heating","maintenance","done","ready","disconnected","grinding"]'
        data-colors='["green","red","yellow","green","blue","yellow","green"]'
data-substitution='["brewing","Brühen","heating","Warmhalten","maintenance","!Wartung!","done","Fertig","ready","Bereit","disconnected","?Verbindung?","grinding","Mahlen"]'
    class="great">
   </div>
</div>
     <div class="hbox top-space-3x">
  <div class="vbox verticalLine">
   <div class="card items-center">
    <div data-type="label" class="tall">Wasser</div>
    <div data-type="level"
     data-device="Smarter_Coffee_Device"
     data-get="cups_max"
     data-min="0"
     data-max="12"
data-height="340"
data-limits='["0","4","7"]'
         data-colors='["red","yellow","green"]'
     class="large">
    </div>
    <div class="top-space">
     <div data-type="label"
      data-device="Smarter_Coffee_Device"
      data-get="cups_max"
      class="tall inline">
     </div>
     <div data-type="label" class="tall inline">Tassen</div>
    </div>
   </div>
  </div>
      <div class="vbox">
   <div class="card items-center">
    <div data-type="label" class="tall">Kanne</div>
    <div data-type="symbol"
     data-device="Smarter_Coffee_Device"
     data-get="carafe"
     data-states='["present","missing"]'
     data-icons='["fa-check-square-o","fa-square-o"]'
data-colors='["green","red"]'
     class="tall top-narrow">
    </div>
   </div>
  </div>
     </div>
    </div>
    </li>
    <li data-row="2" data-col="7" data-sizex="4" data-sizey="8">
<header class="big">Bedienung</header>
<div data-type="label" class="tall">Mahlwerk</div>
<div data-type="checkbox"
      data-device="Smarter_Coffee_Device"
      data-get="grinder"
  data-get-on="enabled"
  data-get-off="disabled"
  data-set="grinder"
  data-set-on="enabled"
  data-set-off="disabled"
  data-width="240"
      class="large">
     </div>
<div data-type="label" class="tall top-space">Warmhalten</div>
     <div data-type="circlemenu"
  data-circle-radius="150"
  data-item-width="100"
  data-item-height="100"
      class="left-narrow-2x">
      <ul>
       <li>
        <div data-type="push"
         data-icon=""
data-background-icon="fa-square-o"
class="bigger left-narrow">
         <div data-type="symbol"
          data-device="Smarter_Coffee_Device"
          data-get="hotplate"
          data-states='["on","off"]'
          data-icons='["fa-thermometer-full","fa-thermometer-empty"]'
          data-colors='["red","blue"]'
  class="">
         </div>
        </div>
       </li>
   <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate off" data-icon="" class="bigger">aus</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 5" data-icon="" class="bigger">5</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 10" data-icon="" class="bigger">10</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 15" data-icon="" class="bigger">15</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 20" data-icon="" class="bigger">20</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 25" data-icon="" class="bigger">25</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 30" data-icon="" class="bigger">30</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 35" data-icon="" class="bigger">35</div></li>
       <li><div data-type="push" data-device="Smarter_Coffee_Device" data-set-on="hotplate on 40" data-icon="" class="bigger">40</div></li>
      </ul>
     </div>
<div data-type="label" class="tall top-space-2x">Abbruch</div>
<div data-type="push"
  data-device="Smarter_Coffee_Device"
  data-set-on="stop"
  data-icon="fa-times"
  data-background-icon="fa-square-o"
  class="bigger">
</div>
</li>
   
    <li data-row="2" data-col="11" data-sizex="6" data-sizey="8">
     <header class="big">Brühen</header>
      <div data-type="select"
       data-device="Smarter_Coffee_Device"
       data-get="cups_max"
       data-set="cups"
       data-delimiter=","
       data-list="ftuiMaxCupsStr"
       class="tall">Tassen
      </div>
      <div classs="newline"></div>
      <div data-type="select"
       data-device="Smarter_Coffee_Device"
       data-get="strength"
       data-set="strength"
       data-items='["weak","medium","strong","extra"]'
       data-alias='["schwach","mittel","stark","extra"]'
       class="top-space tall">Stärke
      </div>
      <div data-type="select"
       data-device="Smarter_Coffee_Device"
       data-get="ftuiHotplateOnForMinutesToBrew"
       data-set="ftuiHotplateOnForMinutesToBrew"
       data-cmd="setreading"
       data-items='["Standard","5","10","15","20","25","30","35","40"]'
       class="top-space tall">Warmhalten
      </div>
      <div data-type="link"
       data-width="320"
       data-height="90"
       data-color="white"
       data-background-color="green"
       data-icon="fa-play-circle"
       data-device="Smarter_Coffee_Device"
       data-set="brew"
       data-value="#sendValues"
       class="top-space round centered tall">Start
      </div>
<!-- Verstecktes Element für Parameter -->
      <div data-type="select"
       data-device="Smarter_Coffee_Device"
       data-get="ftuiCommand"
       data-delimiter="/"
       data-list="ftuiCommand"
       id="sendValues"
       class="notransmit transparent">
      </div>
    </li>

Folgende userReadings sind nötig (Raw-Definition):
attr Smarter_Coffee_Device userReadings ftuiMaxCupsStr {my $ftuiMaxCupsStr = "1";;\
for(my $i = 2;; $i <= ReadingsNum($NAME,"cups_max",1);; $i++) {\
   $ftuiMaxCupsStr = $i.",".$ftuiMaxCupsStr\
};;  \
return $ftuiMaxCupsStr;;},\
ftuiCommand {my $command = ReadingsNum($NAME,"cups",1)." ".ReadingsVal($NAME,"strength",undef);;\
if (ReadingsVal($NAME,"ftuiHotplateOnForMinutesToBrew",undef) ne "Standard") {\
   $command = $command." ".ReadingsNum($NAME,"ftuiHotplateOnForMinutesToBrew",15)};;\
return $command;;}


Vielleicht lässt sich das eine oder andere vereinfachen, aber so funktioniert es erst einmal für mich.

Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

scooty

#20
Zitat von: J. Kellerer am 24 April 2017, 09:21:37
Sind bei dir folgende Bedingungen erfüllt?

  • (carafe = present und carafe_required = yes) oder carafe_required = no
  • cups <= cups_max
  • cups_single_mode = no
Hallo Jürgen,
danke für Deine Antwort, ja, alle Bedingungen sind erfüllt.
Anbei ein List des Devices nach "set hotplate off":
Internals:
   CHANGED
   CONNECTION STATUS: 3223130002447e (00100011) | COMMAND: 4a7e => 03007e
   DEF        192.168.0.165:2081
   DeviceName 192.168.0.165:2081
   FD         258
   FIRMWARE   22
   NAME       KUXX_SMCOFF01
   NOTIFYDEV  global,KUXX_SMCOFF01
   NR         775
   NTFY_ORDER 50-KUXX_SMCOFF01
   STATE      maintenance
   TYPE       SmarterCoffee
   Readings:
     2017-04-24 09:30:50   carafe          present
     2017-04-24 08:35:32   carafe_required yes
     2017-04-24 09:30:50   cups            4
     2017-04-24 09:30:50   cups_max        12
     2017-04-24 08:06:50   cups_single_mode no
     2017-04-24 09:30:50   ftuiCommand     4 strong 40
     2017-04-21 10:22:59   ftuiHotplateOnForMinutesToBrew 40
     2017-04-24 09:30:50   ftuiMaxCupsStr  12,11,10,9,8,7,6,5,4,3,2,1
     2017-04-24 09:30:50   grinder         enabled
     2017-04-24 09:30:50   hotplate        off
     2017-04-24 09:30:49   hotplate_on_for_minutes 0
     2017-04-24 09:30:49   last_command    hotplate_off off
     2017-04-24 09:30:49   last_command_message Ok
     2017-04-24 09:30:49   last_command_success yes
     2017-04-24 09:30:50   state           maintenance
     2017-04-24 09:30:50   strength        strong
     2017-04-24 09:30:50   strength_level  3
     2017-04-24 09:30:50   water           full
     2017-04-24 09:30:50   water_level     100
   Helper:
     Bm:
       Smartercoffee_define:
         cnt        1
         dmx        0
         max        596
         tot        596
         mAr:
           HASH(0xa063b38)
           KUXX_SMCOFF01 SmarterCoffee 192.168.0.165:2081
       Smartercoffee_get:
         cnt        22
         dmx        0
         max        398
         tot        441
         mAr:
           HASH(0xa063b38)
           KUXX_SMCOFF01
           get_defaults
       Smartercoffee_notify:
         cnt        156
         dmx        0
         mAr
         max        0
         tot        0
       Smartercoffee_openifrequiredandwritepending:
         cnt        10
         dmx        0
         max        1020
         tot        2336
         mAr:
           HASH(KUXX_SMCOFF01)
       Smartercoffee_read:
         cnt        14550
         dmx        0
         max        1432
         tot        9255
         mAr:
           HASH(0xa063b38)
       Smartercoffee_set:
         cnt        395
         dmx        0
         max        1749
         tot        3439
         mAr:
           HASH(KUXX_SMCOFF01)
           KUXX_SMCOFF01
           hotplate
           off
Attributes:
   alias      Coffee Machine
   default-hotplate-on-for-minutes 15 5=20 8=30 10=35
   devStateIcon { SmarterCoffee_GetDevStateIcon($name) }
   event-on-change-reading .*
   event-on-update-reading last_command.*
   group      DG,OG
   ignore-max-cups 1
   room       KUDG,KUOG
   strength-extra-percent 1.4
   strength-extra-pre-brew-cups 2
   strength-extra-pre-brew-delay-seconds 60
   userReadings ftuiMaxCupsStr {my $ftuiMaxCupsStr = "1";
for(my $i = 2; $i <= ReadingsNum($NAME,"cups_max",1); $i++) {
   $ftuiMaxCupsStr = $i.",".$ftuiMaxCupsStr
};
return $ftuiMaxCupsStr;},
ftuiCommand {my $command = ReadingsNum($NAME,"cups",1)." ".ReadingsVal($NAME,"strength",undef);
if (ReadingsVal($NAME,"ftuiHotplateOnForMinutesToBrew",undef) ne "Standard") {
   $command = $command." ".ReadingsNum($NAME,"ftuiHotplateOnForMinutesToBrew",15)};
return $command;}
   webCmd     strength:cups:start:hotplate:off


Andreas

PS: Noch eine Kleinigkeit: bei mir ist der set-Befehl "reconnect" nicht auswählbar, ein "set Smarter_Coffee_Device reconnect" in der Befehlszeile scheint aber zu funktionieren.
Gerade nochmal die neueste Version eingespielt (mit folgendem shutdown restart), aber beide Problemchen bleiben.
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

jkellerer

#21
Hallo Andreas,

Vielen Dank, das war sehr hilfreich, ich kann den Fehler jetzt reproduzieren.
Schaltet man die Heizplatte erst ein und dann wieder aus (und macht sonst nichts), dann wird fälschlicherweise "maintenance" angezeigt.
Die aktuelle Version behebt das Problem (siehe https://github.com/jkellerer/fhem-smarter-coffee/releases/tag/v0.9.1).

Viele Grüße, Jürgen

jkellerer

Hab heute morgen gemerkt dass mir bei der gestrigen Veröffentlichung ein Fehler unterlaufen ist sodass der "extra" Modus nicht mehr korrekt funktioniert hatte.
Grund war die neu hinzugekommene Erkennung für das Drücken des "Stop" Knopfes an der Maschine und das gleichzeitige Fehlen der Erkennung von "Mahlwerk läuft gerade".

https://github.com/jkellerer/fhem-smarter-coffee/releases/tag/v0.9.1 behebt dieses Problem (ist auch bereits über bintray verfügbar).

Neu hinzugekommen ist der Status "grinding" der gesetzt ist während das Mahlwerk läuft.

scooty

Hallo Jürgen,

vielen Dank für die prompte Überarbeitung, "hotplate" funktioniert einwandfrei.
:)
Hast Du vielleicht auch noch eine Idee zu:
Zitat von: scooty am 24 April 2017, 09:29:13
PS: Noch eine Kleinigkeit: bei mir ist der set-Befehl "reconnect" nicht auswählbar, ein "set Smarter_Coffee_Device reconnect" in der Befehlszeile scheint aber zu funktionieren.

Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

jkellerer

Hallo Andreas,

Kein Ding, du hattest ein gutes Timing, ich hatte eh grad eine kleine Erweiterung fertig. ;-)

Zu "reconnect": Das ist derzeit nicht in der Liste der unterstützten Set-Kommandos und damit zeigt es die UI nicht an (es macht aber trotzdem was es soll). Ich dachte dass man das eigentlich nicht häufig brauchen sollte da sich Verbindungsabbrüche selbst reparieren sollten. Deshalb hab ich es nur in der Anleitung aufgelistet. Nachdem es aber auch nicht schadet könnte ich es beim nächsten Update evtl. auch in der UI anzeigen lassen.

Gruß, Jürgen

mi.ke

Soweit ist es gekommen, ich kaufe Kaffeemaschinen nach fhem-Modulen  :P

Tja, was soll ich sagen, hab vor 2 Tagen durch Zufall diesen THread gelesen und heute steht meine neue Kaffemaschine in der Küche und läuft ihre ersten Runden..

Jürgen, vielen Dank für das Modul !

Mal schauen wie hoch der WAF wird . . .

Cheers
mi.ke
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

mahowi

Zitat von: mi.ke am 27 April 2017, 12:00:04
Soweit ist es gekommen, ich kaufe Kaffeemaschinen nach fhem-Modulen  :P

Mal schauen wie hoch der WAF wird . . .
Deswegen hab ich mir sie auch direkt gekauft, als sie im Angebot war.  :)
Ich finde, die Maschine sieht nicht schlecht aus. Und es sind ja 3 farbige Cover zum Anpassen an die Einrichtung dabei.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

ChristianR


CoolTux

Habe ich auch soeben bestellt. 59€ inkl. Versand. Dafür kann man mal bisschen zum spielen was kaufen. Lach
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mahowi

Und ich hab noch €67 bezahlt und gedacht, billiger wird die nicht mehr.  ::) Ich muß aber auch ehrlich sagen, daß ich mir die Maschine nicht für über €200 gekauft hätte.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee