Fhem / AC IR Control zur Steuerung einer mobilen (Baumarkt) Klimaanlage (Gree.h)

Begonnen von halloaber, 26 März 2020, 10:39:00

Vorheriges Thema - Nächstes Thema

halloaber

Der Sommer wird kommen:  8)

ich habe mich mal hingesetzt und versucht eine mobile Klimaanlage per Infrarot zu steuern und in Fhem zu integrieren.

AnwendungsBesispiel:
*  Klimaanlage kühlt den Raum bis zur Temperaturgleiche innen/außen.
*  Sobald Fhem den Gleichstand der Temperaturen erkennt, wird das Dachfenster geöffnet und die Klimaanlage per IR abgeschaltet.
(die Klimaanlage wird erst abgeschaltet nachdem das Dachfester entriegelt ist.[Geräuschkulisse])

Hier mein Ergebnis:

Zur Steuerung setze ich einen NODEMCU mit IR-Diode ein.
Zusätzlich ist ein DS18xx Temperatur Sensor zur Bestimmung der Raum IST Temperatur verbaut. Für die Außentemperaturmessung habt ihr ja bestimmt bereits einen Sensor im Einsatz.
Der ESP per OTA ansprechbar.
In Fhem wird das HTTPMOD Modul verwendet, um mit dem ESP zu sprechen( alle 2 Minuten).
Sofern das Projekt nachgebaut wird, sollte man zuerst einen IR Receiver verwenden, um das eigene Protokoll zu erkennen.
Falls es nicht das von mir verwendete Gree.h ist, bitte entsprechend die Lib austauschen.
Der ESP Code könnte noch etwas bereinigt werden. (später)
Rückfragen gern:
Viele Grüße
Rainer

Beschattung des ESP:
##################
Vin = 5Volt
3V = DS18xx Vin
GND = DS18xx GND
D1 = 4,7K -> 3V
D1 = DS18xx Data
——————————-
D2 = Basis NPN
GND = Emitter NPN
Collector NPN = IR Diode
VV = IR Diode
####################

Fhem Code:
Folgende Anpassungen sind vorzunehmen:
Name des Device:
<Klima_Schlafzimmer>
IP:
<192.168.1.71>
########## Device:
defmod Klima_Schlafzimmer HTTPMOD http://192.168.1.71/state 120
attr Klima_Schlafzimmer userattr get1Data get1Name get1URL getDecode reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04OMap reading04Regex reading05Name reading05Regex set01Data set01Name set01NoArg:0,1 set01ParseResponse:0,1 set01TextArg:0,1 set01URL set02Data set02IMap set02Name set02NoArg:0,1 set02ParseResponse:0,1 set02TextArg:0,1 set02URL set03Data set03IMap set03Name set03NoArg:0,1 set03OMap set03ParseResponse:0,1 set03TextArg:0,1 set03URL set04Data set04IMap set04Name set04NoArg:0,1 set04OMap set04ParseResponse:0,1 set04TextArg:0,1 set04URL set05Data set05IMap set05Name set05NoArg:0,1 set05ParseResponse:0,1 set05TextArg:0,1 set05URL set06Data set06IMap set06Name set06NoArg:0,1 set06ParseResponse:0,1 set06TextArg:0,1 set06URL set07Data set07IMap set07Name set07NoArg:0,1 set07ParseResponse:0,1 set07TextArg:0,1 set07URL setHeader1
attr Klima_Schlafzimmer enableControlSet 1
attr Klima_Schlafzimmer enableCookies 1
attr Klima_Schlafzimmer enforceGoodReadingNames 1
attr Klima_Schlafzimmer extractAllJSON 1
attr Klima_Schlafzimmer get1Data {'mode':9,'fan':1,'temp':27,'power':1}
attr Klima_Schlafzimmer get1Name Update
attr Klima_Schlafzimmer get1URL http://192.168.1.71/state
attr Klima_Schlafzimmer group AC
attr Klima_Schlafzimmer handleRedirects 1
attr Klima_Schlafzimmer icon frost@blue
attr Klima_Schlafzimmer reading01Name mode
attr Klima_Schlafzimmer reading01Regex mode.value":[ \t]+"([\d\.]+)"
attr Klima_Schlafzimmer reading02Name fan
attr Klima_Schlafzimmer reading02Regex fan.value":[ \t]+"([\d\.]+)"
attr Klima_Schlafzimmer reading03Name temp
attr Klima_Schlafzimmer reading03Regex temp.value":[ \t]+"([\d\.]+)"
attr Klima_Schlafzimmer reading04Name power
attr Klima_Schlafzimmer reading05Name temp_in
attr Klima_Schlafzimmer reading05Regex temp_in.value":[ \t]+"([\d\.]+)"
attr Klima_Schlafzimmer room Server
attr Klima_Schlafzimmer set01Data {'power':1, 'mode':1, 'temp':$val}
attr Klima_Schlafzimmer set01Name temp
attr Klima_Schlafzimmer set01NoArg 0
attr Klima_Schlafzimmer set01ParseResponse 1
attr Klima_Schlafzimmer set01TextArg 0
attr Klima_Schlafzimmer set01URL http://192.168.1.71/state
attr Klima_Schlafzimmer set02Data {'fan':$val}
attr Klima_Schlafzimmer set02IMap 0:Auto, 1:Low, 2:Med, 3:High
attr Klima_Schlafzimmer set02Name fan
attr Klima_Schlafzimmer set02NoArg 0
attr Klima_Schlafzimmer set02ParseResponse 1
attr Klima_Schlafzimmer set02TextArg 0
attr Klima_Schlafzimmer set02URL http://192.168.1.71/state
attr Klima_Schlafzimmer set03Data {'power':$val, 'mode':1, 'fan':1}
attr Klima_Schlafzimmer set03IMap 1:An, 0:Aus
attr Klima_Schlafzimmer set03Name power
attr Klima_Schlafzimmer set03NoArg 0
attr Klima_Schlafzimmer set03OMap 1:An, 0:Aus
attr Klima_Schlafzimmer set03ParseResponse 1
attr Klima_Schlafzimmer set03TextArg 1
attr Klima_Schlafzimmer set03URL http://192.168.1.71/state
attr Klima_Schlafzimmer set04Data {'power':1, 'mode':$val}
attr Klima_Schlafzimmer set04IMap 0:Auto, 1:Klima, 2:Dry, 4:Fan
attr Klima_Schlafzimmer set04Name mode
attr Klima_Schlafzimmer set04NoArg 0
attr Klima_Schlafzimmer set04ParseResponse 1
attr Klima_Schlafzimmer set04TextArg 1
attr Klima_Schlafzimmer set04URL http://192.168.1.71/state
attr Klima_Schlafzimmer set05Data {'timer_on':$val}
attr Klima_Schlafzimmer set05Name timer_on
attr Klima_Schlafzimmer set05NoArg 0
attr Klima_Schlafzimmer set05ParseResponse 1
attr Klima_Schlafzimmer set05TextArg 0
attr Klima_Schlafzimmer set05URL http://192.168.1.71/state
attr Klima_Schlafzimmer set06Data {'sleep_on':$val}
attr Klima_Schlafzimmer set06IMap 0:Aus, 1:An
attr Klima_Schlafzimmer set06Name sleep_on
attr Klima_Schlafzimmer set06NoArg 0
attr Klima_Schlafzimmer set06ParseResponse 1
attr Klima_Schlafzimmer set06TextArg 0
attr Klima_Schlafzimmer set06URL http://192.168.1.71/state
attr Klima_Schlafzimmer set07Data {'turbo_on':$val}
attr Klima_Schlafzimmer set07IMap 0:Aus, 1:An
attr Klima_Schlafzimmer set07Name turbo_on
attr Klima_Schlafzimmer set07NoArg 0
attr Klima_Schlafzimmer set07ParseResponse 1
attr Klima_Schlafzimmer set07TextArg 0
attr Klima_Schlafzimmer set07URL http://192.168.1.71/state
attr Klima_Schlafzimmer setHeader1 Content-Type:  text/plain
attr Klima_Schlafzimmer stateFormat {sprintf("<DIV VALIGN=\"TOP\" ALIGN=\"LEFT\"><table><tr><td>Klima:</td><td> %d</td></tr><tr><td>Fan:</td><td> %d </td></tr><tr><td>Temp:</td><td>%d</td></tr> <tr><td>Power:</td><td>%s </td></tr><tr><td>Temp_in:</td> <td>%4.2f</td></tr><tr><td>Timer:</td><td>%d</td></tr><tr><td>Sleep:</td><td>%d</td></tr><tr><td>Turbo:</td><td>%d</td></tr></table></div>", ReadingsVal($name,"mode",0), ReadingsVal($name,"fan",0), ReadingsVal($name,"temp",0), ReadingsVal($name,"power",0), ReadingsVal($name,"temp_in",0), ReadingsVal($name,"timer_on",0),, ReadingsVal($name,"sleep_on",0), ReadingsVal($name,"turbo_on",0))}
attr Klima_Schlafzimmer verbose 0
attr Klima_Schlafzimmer webCmd power:temp:timer_on:fan:mode:sleep_on:turbo_on
attr Klima_Schlafzimmer webCmdLabel Power\
:Temp:Timer\
:Lüfter \
:Mode \
:Sleep \
:Turbo\

attr Klima_Schlafzimmer widgetOverride power:uzsuSelectRadio,An,Aus temp:select,17,18,19,20,21,22,23,24 timer_on:select,0,30,60,90,120 fan:uzsuSelectRadio,Auto,Low,Med,High mode:uzsuSelectRadio,Auto,Klima,Dry,Fan sleep_on:uzsuSelectRadio,An,Aus turbo_on:uzsuSelectRadio,An,Aus

setstate Klima_Schlafzimmer <DIV VALIGN="TOP" ALIGN="LEFT"><table><tr><td>Klima:</td><td> 4</td></tr><tr><td>Fan:</td><td> 0 </td></tr><tr><td>Temp:</td><td>24</td></tr> <tr><td>Power:</td><td>An </td></tr><tr><td>Temp_in:</td> <td>26.69</td></tr><tr><td>Timer:</td><td>0</td></tr><tr><td>Sleep:</td><td>1</td></tr><tr><td>Turbo:</td><td>1</td></tr></table></div>
setstate Klima_Schlafzimmer 2020-03-24 15:18:07 fan 0
setstate Klima_Schlafzimmer 2020-03-24 15:18:07 mode 4
setstate Klima_Schlafzimmer 2020-03-24 15:18:07 power An
setstate Klima_Schlafzimmer 2020-03-24 13:09:33 sleep_on 1
setstate Klima_Schlafzimmer 2020-03-24 15:18:07 temp 24
setstate Klima_Schlafzimmer 2020-03-24 15:18:07 temp_in 26.6875
setstate Klima_Schlafzimmer 2020-03-24 14:14:41 timer_on 0
setstate Klima_Schlafzimmer 2020-03-24 13:22:11 turbo_on 1
#######


und nun noch die Software für den ESP:

kask

Genau das was ich gesucht habe.
Musste es für das TCL112AC Protocol umschreiben. Meine Klimaanlagen sind aber keine Mobilen sondern Splitgeräte.
Gut so eine 10Jahre alte Anlage günstig Smart zu bekommen. Die andere hat einen Tuya-chip und hiermit keine China-cloud mehr nötig.

Anbei die Quelle und das bin file. Ich hoffe das geht in ordnung so.