Ich gebe mal wieder gesammeltes Wissen bei und kopiere einen Beitrag von mir hierhin:
Ich muss ja irgendwie sehen dass ich mein Wärmepumpenprojekt in irgendeiner Form gesteuert bekomme. Es handelt sich um eine LG P24EL mit 7kW Kühlen und Heizen
Nachdem der Motordummy per Arduino fertig, aber noch nicht getestet ist, habe ich mich heute mal daran gegeben die Kiste irgendwie per Arduino fernsteuern zu können.
Viel gelesen (u.a. hier: https://homematic-forum.de/forum/viewtopic.php?t=50251)
Hier konnte ich doch die Wesentlichen Bestandteile zusammenstecken:
Kurzum:
Die Klimakisten, wo auf der Fernbedienung die Anzeigen für dies und jenes sind, versenden pro Tastendruck einen (!) kompletten Datensatz mit den Einstellungen, die auf dem Display angezeigt sind. Das ist sehr interessant zu wissen, da ich meiner Innengeräteelektronik die Stellmotoren sowie die Ionizer gemopst habe - wird er in der FB nicht angezeigt, bleibt seine Funktion weg und generiert keine Fehlermeldung.
Nur wie kommt man nun an die Datenpaket?
Viel gefunden habe ich nicht und das was ich fand verstand ich nicht wirklich.
Also musste eine andere Löung her:
Ich habe mir auf dem Steckbrett eine IR Empfänger und Sender aufgebaut und an den Arduino angesteckt:
Mit diesem Empfängerprogramm kann ich den Datensatz empfangen und als sogenannte RAW Datei anzeigen lassen:
Im seriellen Monitor kommt dann eine elendig lange Zeile Zahlen zum Vorschein. Der Befehl AUS sieht dann so aus:
Da jeder AUS-Befehl etwas abweichende Zahlen ausspuckt habe ich dreimal den AUS-Befehl erfasst.
Diese Zahlen müssen jetzt bereinigt werden. Also zunächst das Raw: (59) vorne weg. Die 59 ist ist die Anzahl der Zahlen. Diese wird später noch gebraucht.
Jetzt werden die drei Zahlensätze nach Excel importiert, dann über alle drei Spalten ein Mittelwert ohne Nachkommastelle ermittelt. Diese speichere ich als .csv ab und öffne es nun im Word. Jetzt ersetze ich das ; gegen ein Komma (,) - ich weiss das geht auch noch im Excel - und lösche die Minuszeichen raus
Dieser Zahlenwurm mit 59 Werten lege ich nun erst mal beiseite.
Jeden Befehl, den ich mit dem Ardunio steuern will muss ich so zusammenstellen, für jede geplante Lüfterstellung und Gradzahl einzeln
Hier droht also noch einiges an Arbeit
Zum Test habe ich das noch mit der Gebläsestufe "volle Pulle" gemacht. Die Gasleistungen werden erst diese Woche angeschlossen (Kann also weder Heizen noch Kühlen derzeit testen
Kommt nun der Teil des Datenversandes zur Steuerung durch den Ardunio. Ich habe dem Arduino noch zwei Taster verpasst, einen dritten hatte ich in dem Moment nicht mehr gefunden, vorbereitet ist es zumindest mal codeseitig. Nur muss ich die IRData erstellen.
..... uuuuuund tadaaaaaa...... läuft
Ich bin sehr verwundert das diese Bastelei genauso gut funktioniert wie die Originalfernbedienung. Jetzt kann ich mit dem Ardunio wunderbar weiterexperimentieren und so die Parameter, die ich vorab mit der FB ausgetestet habe übertragen.
Ich denke dass ich mit vier, fünf Funktionen zurechtkommen werde.
Letztendlich möchte ich die Leistung in einigen Stufen regeln können und so in Abhängigkeit der Heizkreistemp und Leistung Solaranlage einstellen.
Noch ist alles auf dem Steckbrett zusammengefummelt:
Ganz recht ist die Empfangseinheit zum Auslesen der FB
Mitte rechts sind die Taster und die IR-LED zur Steuerung
Der Transistor und die Widerstände links von den Tastern gehört noch zum Simulator des Gebläsemotors des IG
Der Ardunio ist natürlich der zentrale Dreh- und Angelpunkt. derzeit muss ich die drei Programme (IR-Lesen, IR-Senden und Simulation BLDC-Motor) einzeln aufspielen. Ich werde mal sehen inwieweit sich das zusammenpacken lässt und sich auf den Nano quetschen lässt - FB und BLDC-Motor wäre schon toll.
Ansonsten muss sich zwei Arduinos einsetzen. Wäre ggf sogar der bessere Weg, so ist dann z.B. die Fernbedienung per IR von der Steuerung galvanisch getrennt. Ich plane schliesslich die Leistung der PV im Netzwerk auszulesen.
Oder ich nehme den ESP8266 oder den Wifikit 8
Muss da aber mal sehen was ich final nehme
Grüsse
Carsten
Ich muss ja irgendwie sehen dass ich mein Wärmepumpenprojekt in irgendeiner Form gesteuert bekomme. Es handelt sich um eine LG P24EL mit 7kW Kühlen und Heizen
Nachdem der Motordummy per Arduino fertig, aber noch nicht getestet ist, habe ich mich heute mal daran gegeben die Kiste irgendwie per Arduino fernsteuern zu können.
Viel gelesen (u.a. hier: https://homematic-forum.de/forum/viewtopic.php?t=50251)
Hier konnte ich doch die Wesentlichen Bestandteile zusammenstecken:
Kurzum:
Die Klimakisten, wo auf der Fernbedienung die Anzeigen für dies und jenes sind, versenden pro Tastendruck einen (!) kompletten Datensatz mit den Einstellungen, die auf dem Display angezeigt sind. Das ist sehr interessant zu wissen, da ich meiner Innengeräteelektronik die Stellmotoren sowie die Ionizer gemopst habe - wird er in der FB nicht angezeigt, bleibt seine Funktion weg und generiert keine Fehlermeldung.
Nur wie kommt man nun an die Datenpaket?
Viel gefunden habe ich nicht und das was ich fand verstand ich nicht wirklich.
Also musste eine andere Löung her:
Ich habe mir auf dem Steckbrett eine IR Empfänger und Sender aufgebaut und an den Arduino angesteckt:
Mit diesem Empfängerprogramm kann ich den Datensatz empfangen und als sogenannte RAW Datei anzeigen lassen:
Code:
/* Erfassung langer IR-Datenpakete, zb von Klimaanlagenfernbedienungen, Ausgabe als RAW Datensatz ACHTUNG: Diese werden abwechselnd als positive und negative Werte dargestellt, zum Senden muss nachher aber alles positiv sein, also alle Minuse rauslöschen. Board Arduino Nano old Bootloader Port USB Serial 410 oder 620 Connections: IR Receiver Arduino V+ -> +5v GND -> GND Signal Out -> Digital Pin 2 (If using a 3V Arduino, you may connect V+ to +3V) */ #define LEDPIN 13 //you may increase this value on Arduinos with greater than 2k SRAM #define maxLen 800 #define rxPinIR 2 // Nur Pin 2 & 3 können Interrupts lesen. ! Pin 3 ist im anderen Programm der Sender volatile unsigned int irBuffer[maxLen]; //stores timings - volatile because changed by ISR volatile unsigned int x = 0; //Pointer thru irBuffer - volatile because changed by ISR void setup() { Serial.begin(9600); //change BAUD rate as required attachInterrupt(digitalPinToInterrupt(rxPinIR), rxIR_Interrupt_Handler, CHANGE);//set up ISR for receiving IR signal nur auf D2/3 } void loop() { // put your main code here, to run repeatedly: Serial.println(F("Press the button on the remote now - once only")); delay(5000); // pause 5 secs if (x) { //if a signal is captured digitalWrite(LEDPIN, HIGH);//visual indicator that signal received Serial.println(); Serial.print(F("Raw: (")); //dump raw header format - for library Serial.print((x - 1)); Serial.print(F(") ")); detachInterrupt(0);//stop interrupts & capture until finshed here for (int i = 1; i < x; i++) { //now dump the times if (!(i & 0x1)) Serial.print(F("-")); Serial.print(irBuffer[i] - irBuffer[i - 1]); Serial.print(F(", ")); } x = 0; Serial.println(); Serial.println(); digitalWrite(LEDPIN, LOW); //end of visual indicator, for this time attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE); //re-enable ISR for receiving IR signal } } void rxIR_Interrupt_Handler() { if (x > maxLen) return; //ignore if irBuffer is already full irBuffer[x++] = micros(); //just continually record the time-stamp of signal transitions }
Code:
Press the button on the remote now - once only Press the button on the remote now - once only Raw: (59) 8496, -4172, 580, -1532, 580, -476, 580, -476, 576, -480, 576, -1532, 580, -476, 580, -476, 580, -476, 580, -1532, 580, -1532, 576, -480, 576, -480, 576, -476, 580, -476, 580, -476, 580, -476, 580, -476, 580, -476, 580, -476, 580, -476, 580, -476, 576, -1532, 580, -476, 580, -1532, 580, -476, 580, -476, 580, -476, 580, -1532, 576,
Diese Zahlen müssen jetzt bereinigt werden. Also zunächst das Raw: (59) vorne weg. Die 59 ist ist die Anzahl der Zahlen. Diese wird später noch gebraucht.
Jetzt werden die drei Zahlensätze nach Excel importiert, dann über alle drei Spalten ein Mittelwert ohne Nachkommastelle ermittelt. Diese speichere ich als .csv ab und öffne es nun im Word. Jetzt ersetze ich das ; gegen ein Komma (,) - ich weiss das geht auch noch im Excel - und lösche die Minuszeichen raus
Dieser Zahlenwurm mit 59 Werten lege ich nun erst mal beiseite.
Jeden Befehl, den ich mit dem Ardunio steuern will muss ich so zusammenstellen, für jede geplante Lüfterstellung und Gradzahl einzeln
Hier droht also noch einiges an Arbeit
Zum Test habe ich das noch mit der Gebläsestufe "volle Pulle" gemacht. Die Gasleistungen werden erst diese Woche angeschlossen (Kann also weder Heizen noch Kühlen derzeit testen
Kommt nun der Teil des Datenversandes zur Steuerung durch den Ardunio. Ich habe dem Arduino noch zwei Taster verpasst, einen dritten hatte ich in dem Moment nicht mehr gefunden, vorbereitet ist es zumindest mal codeseitig. Nur muss ich die IRData erstellen.
Code:
// die Taster werden über einen kleinem Widerstand auf Masse gezogen #include <IRremote.h> IRsend ac_LGWP; // Standardmässig sendets wohl auf PIN 3 int led13 = 13; int time=500; int time1=50; int button10 = 10; int button10Status; int button11 = 11; int button11Status;// Variable für Pin 6 int button12 = 12; int button12Status; //IRDATA unsigned int OFF[] = {8495,4173,577,1532,580,476,580,476,580,476,579,1532,579,477,579,477,577,477,579,1532,580,1532,579,476,579,477,579,477,579,477,579,477,579,475,580,476,580,476,580,476,580,476,577,477,579,1533,579,477,579,1532,579,476,580,476,580,476,579,1532,579}; unsigned int HEIZ1[] = {8507,4160,589,1521,589,467,589,467,589,467,589,1521,589,467,588,467,588,467,589,467,589,467,589,467,589,467,589,1521,589,467,588,1523,588,467,589,467,589,1523,589,1521,589,467,589,465,591,1521,588,467,589,467,589,467,589,1523,588,467,589,467,588}; unsigned int HEIZ4[] = {8507,4160,589,1521,589,467,589,467,589,467,589,1521,589,467,588,467,588,467,589,467,589,467,589,467,589,467,589,1521,589,467,588,1523,588,467,589,467,589,1523,589,1521,589,467,589,465,591,1521,588,467,589,467,589,467,589,1523,588,467,589,467,588}; bool HMinLGWPblocked = false; unsigned long HMinLGWPblockedSINCE = millis(); void lauflicht() { delay(time); digitalWrite(led13, HIGH); // turn the LED on (HIGH is the voltage level) delay(time); // wait for a second digitalWrite(led13, LOW); // turn the LED off by making the voltage LOW delay(time1); // wait for a second } void setup() { Serial.begin(9600); pinMode(led13, OUTPUT); // initialize digital pin LED_BUILTIN as an output. pinMode(button10, INPUT); pinMode(button11, INPUT); pinMode(button12, INPUT);// definiere Pin 11 als Eingang digitalWrite(button10, HIGH); digitalWrite(button11, HIGH); digitalWrite(button12, HIGH);// aktiviert den Pull- Up- Widerstand, die Taster sachalten auf Masse } void loop() { // Eingänge für LGWP lesen, und AC schalten, weiteres lesen blocken if (HMinLGWPblocked == false) { if(digitalRead(button10) == LOW) { ac_LGWP.sendRaw(OFF, 59, 36); HMinLGWPblocked = true; HMinLGWPblockedSINCE = millis(); Serial.println("Klimaanlage aus "); } if(digitalRead(button11) == LOW) { ac_LGWP.sendRaw(HEIZ1, 59, 36); HMinLGWPblocked = true; HMinLGWPblockedSINCE = millis(); Serial.println("Klimaanlage volle Pulle "); } if(digitalRead(button12) == LOW) { ac_LGWP.sendRaw(HEIZ4, 59, 36); HMinLGWPblocked = true; HMinLGWPblockedSINCE = millis(); Serial.println("Klimaanlage halbe Pulle "); } } if ((HMinLGWPblocked == true)&&(millis()-HMinLGWPblockedSINCE>1200)) {HMinLGWPblocked = false; } // un-blocken wenn block länger als 1200ms button10Status = digitalRead(button10); button11Status = digitalRead(button11); button12Status = digitalRead(button12); if(button10Status == LOW) { lauflicht(); } if(button12Status == LOW) { lauflicht(); } }
Ich bin sehr verwundert das diese Bastelei genauso gut funktioniert wie die Originalfernbedienung. Jetzt kann ich mit dem Ardunio wunderbar weiterexperimentieren und so die Parameter, die ich vorab mit der FB ausgetestet habe übertragen.
Ich denke dass ich mit vier, fünf Funktionen zurechtkommen werde.
Letztendlich möchte ich die Leistung in einigen Stufen regeln können und so in Abhängigkeit der Heizkreistemp und Leistung Solaranlage einstellen.
Noch ist alles auf dem Steckbrett zusammengefummelt:
Ganz recht ist die Empfangseinheit zum Auslesen der FB
Mitte rechts sind die Taster und die IR-LED zur Steuerung
Der Transistor und die Widerstände links von den Tastern gehört noch zum Simulator des Gebläsemotors des IG
Der Ardunio ist natürlich der zentrale Dreh- und Angelpunkt. derzeit muss ich die drei Programme (IR-Lesen, IR-Senden und Simulation BLDC-Motor) einzeln aufspielen. Ich werde mal sehen inwieweit sich das zusammenpacken lässt und sich auf den Nano quetschen lässt - FB und BLDC-Motor wäre schon toll.
Ansonsten muss sich zwei Arduinos einsetzen. Wäre ggf sogar der bessere Weg, so ist dann z.B. die Fernbedienung per IR von der Steuerung galvanisch getrennt. Ich plane schliesslich die Leistung der PV im Netzwerk auszulesen.
Oder ich nehme den ESP8266 oder den Wifikit 8
Muss da aber mal sehen was ich final nehme
Grüsse
Carsten
Kommentar