MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Thomas84
Beiträge: 9
Registriert: 31.10.2023, 11:54
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 9 Mal

MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von Thomas84 » 31.10.2023, 12:33

Hallo Zusammen,

zum Hintergrund:
Ich habe in jedem Raum einen Gira Tastsensor 4 Komfort und würde gerne die Temperatur mit meinen HM-CC-RT-DN Thermostaten verbinden.
Damit ich die Homematic-Interne Regelung benutzen kann, habe ich mit Hilfe eines ESP32 ein MQTT zu Homematic Gateway gebaut.
Soweit funktioniert auch alles -> Ich kann die Temperaturen per MQTT an meine Homematic senden (Siehe AktuelleWerte.JPG)

Nun zum Problem:
Wenn ich jetzt diese Temperatur mit dem Temperatursensor-Verknüpfungskanal per direkter Geräteverknüpfung verbinde, passiert entweder gar nichts (Aktuelle Temperatur wird weiter vom Thermostat selbst benutzt), oder das Thermostat geht auf -> Aktuelle Temperatur 0 Grad / Soll-Temperatur 5 Grad.

Kann mir evtl. jemand dabei helfen?
Alle Dateien findet ihr unter: https://github.com/TFIPS/HB-TF-MQTT

Vielen lieben Dank !
Dateianhänge
Verknüpfung.JPG
AktuelleWerte.JPG

jp112sdl
Beiträge: 12143
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 854 Mal
Danksagung erhalten: 2156 Mal
Kontaktdaten:

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von jp112sdl » 31.10.2023, 13:38

Damit ich es richtig verstehe:
Du schickst per MQTT die Temperaturen an den ESP32 und der soll das dann per Funk ans HM-CC-RT-DN senden?

Ein Hauptproblem könnte das Timing sein: Das HM-CC-RT-DN wacht zu unterschiedlichen Zeiten kurz auf, um vom Verknüpfungspartner (z.B. Wandthermostat oder Temperatursensor) Daten entgegenzunehmen. Die Zeiten variieren und ergeben sich aus dem Messagecounter.

Du müsstest also zunächst das Sendeintervall dahingehend anpassen.
Es gab da mal umfangreiche Fummeleien, diesen Zeitslot zu treffen.
https://github.com/pa-pa/AskSinPP/blob/ ... 0-TH-I.ino
https://github.com/pa-pa/AskSinPP/blob/ ... .h#L50-L55

Die Weather-Nachricht sollte m.W. auch per Broadcast gesendet werden
https://github.com/pa-pa/AskSinPP/blob/ ... ther.h#L44
und nicht nur direkt an die Zentrale
https://github.com/TFIPS/HB-TF-MQTT/blo ... n.cpp#L108

Ob deine Payload (stehen die Werte an richtiger Stelle im Telegramm) stimmt, hab ich mangels Zeit jetzt nicht weiter prüfen können.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Thomas84
Beiträge: 9
Registriert: 31.10.2023, 11:54
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 9 Mal

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von Thomas84 » 31.10.2023, 14:38

Hallo Jérôme,

erstmal vielen Dank für deine schnelle Antwort!
Genau so ist es, ich will per MQTT Temperaturen an den ESP schicken und dieser sendet diese dann an die HomeMatic bzw. an die Thermostate.

Ich bin mit ASKSINPP noch nicht so ganz firm, da ich es erst seit 3 Tagen programmiere.

Gibt es zufällig ein Beispiel, das mit mehreren Kanälen und ULists für Einstellungen nutzt, damit ich es mir daher ableiten kann?
Meinen Code habe ich aus deinem Projekt HB-UNI-Sen-TEMP-DS18B20 abgeleitet, das du wahrscheinlich nicht dafür ausgelegt hattest, mit Heizkörper-Thermostaten zu kommunizieren, richtig?


Schade das es keine Dokumentation gibt.
Woher hast du deine ganzen Kenntnisse? Kannst du mir evtl. URLs geben? Auch gerne zum XML-Aufbau der rftypes

Nochmals vielen Dank!

jp112sdl
Beiträge: 12143
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 854 Mal
Danksagung erhalten: 2156 Mal
Kontaktdaten:

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von jp112sdl » 31.10.2023, 16:49

Thomas84 hat geschrieben:
31.10.2023, 14:38
Ich bin mit ASKSINPP noch nicht so ganz firm, da ich es erst seit 3 Tagen programmiere.
Dafür hast du aber verdammt schnell ein funktionierendes Gerät hinbekommen.

Thomas84 hat geschrieben:
31.10.2023, 14:38
Gibt es zufällig ein Beispiel, das mit mehreren Kanälen und ULists für Einstellungen nutzt, damit ich es mir daher ableiten kann?
Meinst du sowas?
https://github.com/jp112sdl/HB-GD-Sw1-T ... -TH-TS.ino
https://github.com/jp112sdl/JP-HB-Devic ... -th-ts.xml
Thomas84 hat geschrieben:
31.10.2023, 14:38
Meinen Code habe ich aus deinem Projekt HB-UNI-Sen-TEMP-DS18B20 abgeleitet, das du wahrscheinlich nicht dafür ausgelegt hattest, mit Heizkörper-Thermostaten zu kommunizieren, richtig?
Ja, richtig.
Thomas84 hat geschrieben:
31.10.2023, 14:38
Woher hast du deine ganzen Kenntnisse?
Probieren, probieren, probieren.
Bis zuletzt die komplexeren Geräte entstanden sind, war über 1 Jahr vergangen.
Thomas84 hat geschrieben:
31.10.2023, 14:38
Kannst du mir evtl. URLs geben? Auch gerne zum XML-Aufbau der rftypes
Da gibt es leider nix. Vieles ist mir da auch immer noch unklar.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Thomas84
Beiträge: 9
Registriert: 31.10.2023, 11:54
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 9 Mal

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von Thomas84 » 01.11.2023, 14:42

Ich habe es jetzt auf Broadcast umgestellt und meiner Meinung nach alle relevanten Umstellungen vorgenommen, allerdings scheint das Timing-Problem dadurch nicht gelöst zu sein. Das Thermostat springt immer wieder auf "0°C Ist" und "5°C Soll".

Vermutlich kann es auch sein, das etwas mit dem Broadcast-Delay in der ESP32 Version noch nicht richtig ist, oder der ESP benötigt eine RTC um den Delay richtig zu timen. Zudem steht ja extra dabei, das noch nicht alles für den ESP32 implementiert ist.
Auch der Config-Button funktioniert noch nicht 100%, obwohl im Code PullUp aktiv ist und ich den GPIO ordnungsgemäß auf GND ziehe.

Meine Änderungen habe ich wieder auf dem GIT veröffentlicht.

Thomas84
Beiträge: 9
Registriert: 31.10.2023, 11:54
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 9 Mal

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von Thomas84 » 03.11.2023, 19:05

Aktueller Stand:
Das Problem mit dem Button hab ich gelöst.
Zusätzlich habe ich mir eine DS3231 RTC geholt, allerdings scheint in der ASKSINpp gar keine RTC auf dem ESP32 unterstützt zu werden.
Da die Entwicklung der Lib scheinbar auch nicht wirklich weitergeht, werde ich mein Projekt leider einstellen müssen.

Schade :( :(

Benutzeravatar
FUEL4EP
Beiträge: 592
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 80 Mal
Kontaktdaten:

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von FUEL4EP » 03.11.2023, 19:46

Vielleicht geht es mit dem CCU-Jack. Der CCU-Jack bringt einen MQTT-Broker mit und erlaubt die Erstellung von virtuellen Geräten in der Raspberrymatic. Ob eine Direktverknüpfung mit einem Thermostaten geht, musst Du ausprobieren.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

jp112sdl
Beiträge: 12143
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 854 Mal
Danksagung erhalten: 2156 Mal
Kontaktdaten:

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von jp112sdl » 03.11.2023, 20:07

FUEL4EP hat geschrieben:
03.11.2023, 19:46
Ob eine Direktverknüpfung mit einem Thermostaten geht, musst Du ausprobieren.
Nein, das geht nicht, da Direktverknüpfungen nur innerhalb einer Geräteklasse funktionieren, mit Ausnahme HmIP<>HmIPW.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Thomas84
Beiträge: 9
Registriert: 31.10.2023, 11:54
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 9 Mal

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von Thomas84 » 08.11.2023, 18:51

Nabend zusammen,
So funktioniert es jetzt mit einem Kanal (nur relevanter Code):

Code: Alles auswählen

typedef LibSPI<CC1101_CS_PIN> RadioSPI;
typedef AskSin<StatusLed<LED_PIN>,BatterySensor,Radio<RadioSPI,CC1101_GDO0_PIN> > Hal;

DEFREGISTER(WeatherRegsList0,MASTERID_REGS,DREG_BURSTRX)
typedef RegList0<WeatherRegsList0> WeatherList0;

class Sensors : public Alarm 
{
	public:
  		Sensors () {}
  		virtual ~Sensors() {}

  		// init the used hardware
  		void init () {}
  		// return how many milliseconds the measure should start in front of sending the message
  		uint16_t before () const { return 4000; }
  		// get the data
  		virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) 
		{
    		DPRINTLN("Measure...  ");
  		}
  		uint16_t temperature () { return 0; }
  		uint8_t  humidity () { return 0; }

};

class SensChannel : public WeatherChannel<Hal,SysClock,Sensors,PEERS_PER_CHANNEL,EXTRAMILLIS,WeatherList0>
{
	public:
  		SensChannel () : WeatherChannel<Hal,SysClock,Sensors,PEERS_PER_CHANNEL,EXTRAMILLIS,WeatherList0>() {}
  		virtual ~SensChannel () {}

  		virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) 
		{
			uint8_t msgcnt = this->device().nextcount();
			// send
			WeatherEventMsg& msg = (WeatherEventMsg&)this->device().message();
			uint16_t temp1 	= mqtt->mTemp1.toInt();
			uint8_t hum1 	= mqtt->mHum1.toInt();
			msg.init(msgcnt,temp1,hum1,this->device().battery().low());
			this->device().broadcastEvent(msg);
			// reactivate for next send
			reactivate(msg);
  		}

};

class SensDevice : public MultiChannelDevice<Hal,SensChannel,1,WeatherList0> 
{
	public:
  		SensDevice (const DeviceInfo& i,uint16_t addr) : MultiChannelDevice<Hal,SensChannel,1,WeatherList0>(i,addr) {}
  		virtual ~SensDevice () {}

  		virtual void configChanged () 
  		{
  		}

};

Hal hal;
SensDevice sdev(devinfo,0x20);
ConfigButton<SensDevice> cfgBtn(sdev);
Allerdings scheine ich etwas beim erweitern der Kanäle falsch zu machen. Könnte mir evtl jemand dabei helfen?
Wenn ich die Kanäle wie angegeben erweitere, springt die Ist-Temp irgendwann wieder auf 0 Grad:

Code: Alles auswählen

typedef LibSPI<CC1101_CS_PIN> RadioSPI;
typedef AskSin<StatusLed<LED_PIN>,BatterySensor,Radio<RadioSPI,CC1101_GDO0_PIN> > Hal;

DEFREGISTER(WeatherRegsList0,MASTERID_REGS,DREG_BURSTRX)
typedef RegList0<WeatherRegsList0> WeatherList0;

class Sensors : public Alarm 
{
	public:
  		Sensors () {}
  		virtual ~Sensors() {}

  		// init the used hardware
  		void init () {}
  		// return how many milliseconds the measure should start in front of sending the message
  		uint16_t before () const { return 4000; }
  		// get the data
  		virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) 
		{
    		DPRINTLN("Measure...  ");
  		}

  		uint16_t temperature () { return 0; }
  		uint8_t  humidity () { return 0; }

};

class SensChannel : public WeatherChannel<Hal,SysClock,Sensors,PEERS_PER_CHANNEL,EXTRAMILLIS,WeatherList0>
{
	public:
  		SensChannel () : WeatherChannel<Hal,SysClock,Sensors,PEERS_PER_CHANNEL,EXTRAMILLIS,WeatherList0>() {}
  		virtual ~SensChannel () {}

  		virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) 
		{
			uint8_t msgcnt = this->device().nextcount();
			// send
			WeatherEventMsg& msg = (WeatherEventMsg&)this->device().message();
			uint16_t temp1 	= mqtt->mTemp1.toInt();
			uint8_t hum1 	= mqtt->mHum1.toInt();
			msg.init(msgcnt,temp1,hum1,this->device().battery().low());

			uint16_t temp2 	= mqtt->mTemp2.toInt();
			uint8_t hum2 	= mqtt->mHum2.toInt();
			uint16_t temp3 	= mqtt->mTemp3.toInt();
			uint8_t hum3 	= mqtt->mHum3.toInt();
			msg.append(temp2);
			msg.append(hum2);
			msg.append(temp3);
			msg.append(hum3);
			
			this->device().broadcastEvent(msg);
			// reactivate for next send
			reactivate(msg);
  		}

};

class SensDevice : public MultiChannelDevice<Hal,SensChannel,3,WeatherList0> 
{
	public:
  		SensDevice (const DeviceInfo& i,uint16_t addr) : MultiChannelDevice<Hal,SensChannel,3,WeatherList0>(i,addr) {}
  		virtual ~SensDevice () {}

  		virtual void configChanged () 
  		{
  		}

};

Hal hal;
SensDevice sdev(devinfo,0x20);
ConfigButton<SensDevice> cfgBtn(sdev);

papa
Beiträge: 708
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 121 Mal

Re: MQTT zu Homematic Gateway ASKSINPP - Fehler bei Heizungsverknüpfung

Beitrag von papa » 09.11.2023, 06:38

Du kannst die WeatherMsg nicht einfach um weitere Temperaturen erweitern. Ich denke, das Thermostat akzeptiert Deine erweiterte Message nicht mehr.
Anfragen zur AskSin++ werden nur im Forum beantwortet

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“