Hallo FHEM und Grill-Gemeinde,
bisher habe ich es mit der bei mir vorliegenden Ausstattung nicht hinbekommen das Maverick ET732 Grillthermometer in FHEM einzubinden.
- RFXTRX habe ich nicht :(
- Signalduino hat nicht funktioniert :-\
Nun habe ich endlich ein wenig Zeit und Muße dazu gefunden und möchte meine Einbindung mit euch teilen :)
Meine Hardware:
- Arduino Uno
- Arduino Ethernet-Shield (W5500)
- RXB6 433 Mhz Empfänger an PIN 8 des Arduino
- 17,3 cm Kupferdraht als Antenne
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:
- dummy Maverick
- Maverick_online_notify
- Maverick_offline_watchdog
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
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. :) :) :)
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! :-)
Habe das ganze samt Telegram Benachrichtigungen mit einem RFX laufen. Kann ich bei Gelegenheit Mal vorstellen :)
@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
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.
Danke igami,
ich hatte gehofft schneller dazu zu kommen deinen Dialog einzubauen. Daher jetzt erstmal nur ein Danke
@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.
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
Ok, kann ich jetzt am Wochenende testen.
Berichte dann im anderen Thread.
Vielen Dank und gute Nacht.
Funktioniert mit SDuino und SD_WS_Maverick :)
siehe Link von Ralf
Hi,
da mich das Thema auch interessiert, funktioniert das auch mit einem 433MHz Cul welchen ich normalerweise für intertechnos verwende?
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