FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Wuehler am 09 Oktober 2017, 00:35:16

Titel: Maverick Grillthermometer in FHEM einbinden
Beitrag von: Wuehler am 09 Oktober 2017, 00:35:16
Hallo FHEM und Grill-Gemeinde,

bisher habe ich es mit der bei mir vorliegenden Ausstattung nicht hinbekommen das Maverick ET732 Grillthermometer in FHEM einzubinden.
Nun habe ich endlich ein wenig Zeit und Muße dazu gefunden und möchte meine Einbindung mit euch teilen  :)

Meine Hardware:

Basis für die Idee war der BBQDuino (https://github.com/btodcox/BBQduino (https://github.com/btodcox/BBQduino)), den ich auf das wesentliche reduziert und um FHEM-Features ergänzt habe.

In FHEM benötigt man dazu:
Im Sketch im Anhang sind die Definitionen von dummy, notify und watchdog enthalten (per list -r).

Darauf aufbauend werde ich mir dann bei long jobs einen telegram-Bot aufsetzen, um auch unterwegs zu erfahren, ob die Temperatur noch im richtigen Bereich ist.

Vielleicht hilft es euch. Dann viel Spaß damit.



PS: Feedback natürlich immer gerne
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Papaloewe am 09 Oktober 2017, 20:25:25
Vielen Dank für diese Lösung

Mit dem Signalduino empfange ich auch nur noch Unsinn.
(Das hat einmal auch funktioniert!)

Ich werde diese Lösung mal ausprobieren, sobald ich Zeit dafür finde.
Spätestens zur nächsten Grilsaison.  :) :) :)
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Master_Nick am 09 Oktober 2017, 23:53:25
Mahlzeit :-)

Schade eine Einbindung in aCulFW wäre ja mein Traum gewesen ;-D
Was eigenes dafür aufbauen - muss ich mal schauen.

Aber nice work! :-)
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: igami am 10 Oktober 2017, 06:30:20
Habe das ganze samt Telegram Benachrichtigung​en mit einem RFX laufen. Kann​ ich bei Gelegenheit Mal vorstellen :)
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Wuehler am 10 Oktober 2017, 08:26:33
@nick: aculfw war auch mein Favorit. Dazu haben C-Kenntnisse und Zeit aber nicht ausgereicht.  :-\

@igami: An deinem Telegram_bot bin ich interessiert, man muss ja nicht alles selbst erfinden.  ;D
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: igami am 12 Oktober 2017, 17:45:02
Hier dann mal meine Umsetzung (alles als Raw definition)

1. das Grillthermometer

defmod ET732 TRX_WEATHER ET732
attr ET732 IODev RFXtrx433E
attr ET732 alias Grill: Temperatur

setstate ET732 2017-10-11 18:13:48 temp-bbq 16
setstate ET732 2017-08-29 13:21:21 temp-food 69


2. ein dummy zum setzen der Werte

defmod grill_controlUnit dummy
attr grill_controlUnit alias Grill: Temperatur Steuereinheit
attr grill_controlUnit devStateIcon auto:time_automatic@green:controlMode%20manual manual:time_manual_mode@red:controlMode%20auto
attr grill_controlUnit icon hm_ccu
attr grill_controlUnit readingList controlMode desired limit-lower limit-upper
attr grill_controlUnit setList controlMode:auto,manual desired:50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100 limit-lower:75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250 limit-upper:75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250
attr grill_controlUnit stateFormat controlMode

setstate grill_controlUnit 2017-10-07 19:12:35 controlMode manual
setstate grill_controlUnit 2017-08-19 07:36:55 desired 88
setstate grill_controlUnit 2016-11-21 19:38:59 desired-temp 50
setstate grill_controlUnit 2017-10-07 11:41:45 limit-lower 110
setstate grill_controlUnit 2017-10-07 11:41:45 limit-upper 120


3. Ein DOIF welches die Benachrichtigung auslöst

defmod grill_automation DOIF ([ET732:temp-food] >= [?grill_controlUnit:desired] and\
[?grill_controlUnit:controlMode] eq "auto"\
)(\
  set Grillthermometer_Dialog say done\
)\
DOELSEIF\
([ET732:temp-bbq] < [?grill_controlUnit:limit-lower] and\
[?grill_controlUnit:controlMode] eq "auto"\
)(\
  set Grillthermometer_Dialog say toLow\
)\
DOELSEIF\
([ET732:temp-bbq] > [?grill_controlUnit:limit-upper] and\
[?grill_controlUnit:controlMode] eq "auto"\
)(\
  set Grillthermometer_Dialog say toHigh\
)\
\
DOELSEIF\
([ET732:temp-bbq] > [?grill_controlUnit:limit-lower] and\
[ET732:temp-bbq] < [?grill_controlUnit:limit-upper] and\
[?grill_controlUnit:controlMode] eq "auto"\
)(\
  set Grillthermometer_Dialog say ok\
)
attr grill_automation alias Grill: Temperatur Automatik
attr grill_automation cmdState done|temp low|temp high|temp ok|manual
attr grill_automation icon time_automatic


4. die Benachrichtigung erfolgt über mein msgDialog Modul welches demnächst offiziell eingecheckt wird. Für alle die sich da einlesen möchten hier der Dialog:

defmod Grillthermometer_Dialog msgDialog {\
  "Grillthermometer": {\
    "message": [\
      "(Grillthermometer) ",\
      "{return('(Benachrichtigung ' . (ReadingsVal('%controlUnit%', 'controlMode', '') eq 'manual' ? 'einschalten' : 'ausschalten') . ') ')}",\
      "(programmieren) ",\
      "(Verlaufsdiagramm) ",\
      "(abbrechen) ",\
      "Grilltemperatur: [%sensor%:temp-bbq] ([%controlUnit%:limit-lower]-[%controlUnit%:limit-upper]) °C",\
      "Kerntemperatur: [%sensor%:temp-food] °C",\
      "Solltemperatur: [%controlUnit%:desired] °C",\
      "{return('Beachrichtigung: ' . (ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto' ? 'eingeschaltet' : 'ausgeschaltet'))}"\
    ],\
    "Grillthermometer": {\
      "commands": "set $SELF say @$recipient Grillthermometer"\
    },\
    "Benachrichtigung einschalten": {\
      "commands": "set %controlUnit% controlMode auto",\
      "message": [\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
        "Ich werde dich benachrichtigen sobald das Essen fertig ist oder die Grilltemperatur außerhalb des eingestellten Bereich ist."\
      ]\
    },\
    "Benachrichtigung ausschalten": {\
      "commands": "set %controlUnit% controlMode manual",\
      "message": [\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
        "Ich werde dich nicht mehr benachrichtigen."\
      ]\
    },\
    "programmieren": {\
      "message": [\
        "(bestätigen) ",\
        "(zurück|abbrechen) ",\
        "Bei welcher Kerntemperatur ist das Essen fertig?",\
        "Bitte eine Temperatur im Bereich 50-100 °C angeben.",\
        "Aktuell ist [%controlUnit%:desired] °C eingestellt."\
      ],\
      "Kerntemperatur": {\
        "match": "([5-9][0-9]|100)",\
        "commands": [\
          "set %controlUnit% desired $message",\
          "set $SELF say @$recipient Grillthermometer|programmieren|bestätigen"\
        ]\
      },\
      "bestätigen": {\
        "message": [\
          "(bestätigen) ",\
          "(zurück|abbrechen) ",\
          "Es wurde eine Solltemperatur von [%controlUnit%:desired] °C eingestellt.",\
          "",\
          "In welchem Bereich darf die Grilltemperatur schwanken?",\
          "Bitte einen Bereich in Mindestemperatur-Höchsttemperatur angeben.",\
          "Aktuell ist [%controlUnit%:limit-lower]-[%controlUnit%:limit-upper] °C eingestellt."\
        ],\
        "Grilltemperatur": {\
          "match": "\\d{1,3}-\\d{1,3}",\
          "commands": [\
            "{'$message' =~ m/(\\d{1,3})-(\\d{1,3})/;; fhem(\"set %controlUnit% limit-lower $1;;;; set %controlUnit% limit-upper $2;;;;\")}",\
            "set $SELF say @$recipient Grillthermometer|programmieren|bestätigen|bestätigen"\
          ]\
        },\
        "bestätigen": {\
          "commands": "set %controlUnit% controlMode auto",\
          "message": [\
            "TelegramBot_MTYPE=queryInline (%me%) ",\
            "Für die Grilltemperatur wurde ein Bereich von [%controlUnit%:limit-lower]-[%controlUnit%:limit-upper] °C eingestellt.",\
            "",\
            "Ich werde dich benachrichtigen sobald das Essen fertig ist oder die Grilltemperatur außerhalb des eingestellten Bereich ist."\
          ]\
        }\
      }\
    },\
    "Verlaufsdiagramm": {\
      "commands": "set %TelegramBot% cmdSend {plotAsPng('%plot%')}",\
      "message": [\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
        "Grilltemperatur: [%sensor%:temp-bbq] ([%controlUnit%:limit-lower]-[%controlUnit%:limit-upper]) °C",\
        "Kerntemperatur: [%sensor%:temp-food] °C",\
        "Solltemperatur: [%controlUnit%:desired] °C"\
      ]\
    }\
  },\
  "toLow": {\
    "setOnly": true,\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "Die Grilltemperatur ist zu niedrig.",\
      "Sie beträgt aktuell [%sensor%:temp-bbq] °C und soll im Bereich [%controlUnit%:limit-lower]-[%controlUnit%:limit-upper] °C liegen."\
    ]\
  },\
  "toHigh": {\
    "setOnly": true,\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "Die Grilltemperatur ist zu hoch.",\
      "Sie beträgt aktuell [%sensor%:temp-bbq] °C und soll im Bereich [%controlUnit%:limit-lower]-[%controlUnit%:limit-upper] °C liegen."\
    ]\
  },\
  "ok": {\
    "setOnly": true,\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "Die Grilltemperatur ist in Ordnung.",\
      "Sie beträgt aktuell [%sensor%:temp-bbq] °C und soll im Bereich [%controlUnit%:limit-lower]-[%controlUnit%:limit-upper] °C liegen."\
    ]\
  },\
  "done": {\
    "setOnly": true,\
    "commands": "set %controlUnit% controlMode manual",\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "Das Essen ist fertig."\
    ]\
  }\
}
attr Grillthermometer_Dialog allowed igami
attr Grillthermometer_Dialog evalSpecials controlUnit=grill_controlUnit\
sensor=ET732\
plot=grill_SVG


Ist alles noch nicht perfekt, aber funktioniert bisher ganz gut. Schön wäre noch, wenn nur die Person Benachrichtig wird, welche die Benachrichtigung auch eingeschaltet hat.

Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Wuehler am 18 Oktober 2017, 07:57:03
Danke igami,

ich hatte gehofft schneller dazu zu kommen deinen Dialog einzubauen. Daher jetzt erstmal nur ein Danke
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Wuehler am 20 November 2017, 17:03:20
@igami: habe msg und deinen Dialog vorm letzten PP aufgesetzt. Hat soweit zunächst auch funktioniert. In den Dialogen steckt einiges an Potential. Danke dafür. Werde mein bisheriges Telegram-notify mal dadurch erstezen.
Leider hat die Kombi mit meinem Arduino dazu geführt, dass fhem irgendwann eingefroren ist. Muss ich mal weiter analysieren. Liegt aber vermutlich eher nicht an msg. Wenn es doch msg ist schreibe ich dazu im entsprechenden Modul-Thread. Ansonsten gibt es hier ein Update.
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Ralf9 am 23 Februar 2018, 19:45:57
Zitat von: Papaloewe am 09 Oktober 2017, 20:25:25
Mit dem Signalduino empfange ich auch nur noch Unsinn.
(Das hat einmal auch funktioniert!)

Mich würde interessieren ob es mit meiner Firmware V 3.3.2-dev funktioniert.
https://forum.fhem.de/index.php/topic,82379.msg766909.html#msg766909

Da es hier etwas offtopic ist, bitte im anderen Thema antworten.

Gruß Ralf
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Papaloewe am 24 Februar 2018, 00:01:27
Ok, kann ich jetzt am Wochenende testen.
Berichte dann im anderen Thread.

Vielen Dank und gute Nacht.
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Wuehler am 05 März 2018, 22:30:14
Funktioniert mit SDuino und SD_WS_Maverick  :)
siehe Link von Ralf
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Tommy82 am 18 Dezember 2018, 21:10:35
Hi,
da mich das Thema auch interessiert, funktioniert das auch mit einem 433MHz Cul welchen ich normalerweise für intertechnos verwende?
Titel: Antw:Maverick Grillthermometer in FHEM einbinden
Beitrag von: Wuehler am 18 Dezember 2018, 21:40:00
Hi Tommy,

Das sollte mit Signalduino funktionieren. Siehe hier:
https://forum.fhem.de/index.php/topic,49548.0.html (https://forum.fhem.de/index.php/topic,49548.0.html)

Ist bei mir betzt schon länger her, hatte mir nen signalduino dafür zusammengesteckt. Mache ich dann bei longjobs immer schnell vorher.

Viel Erfolg, Dirk

Edit: auf Signalduino korrigiert