Steuerung "Bayernlüfter"

HMIP lokale Installation

Moderator: Co-Administratoren

Hausbaer1
Beiträge: 22
Registriert: 09.02.2020, 13:34
System: CCU
Danksagung erhalten: 1 Mal

Steuerung "Bayernlüfter"

Beitrag von Hausbaer1 » 05.06.2020, 08:29

Hallo,

mein neues Projekt: Im Bad ein Lüftungsgerät "Bayernlüfter Typ Comfort mit WLAN-Modul" installieren und per Homematic steuern.

Vorarbeiten:
Über einen HmIP-STHO werden Feuchtigkeit und Temperatur außen erfasst. Die Werte innen erhalte ich durch ein HmIP-WTH-B.

Mit den gemessenen Werten erzeuge ich mir unter anderem einen Taupunkt außen und als "Vergleichswert" einen Taupunkt innen.

Wenn innen größer als außen, wird eine Systemvariable "Lüften notwendig" auf ja gesetzt.

Soweit, so gut.
Über ein Script möchte ich nun den Lüfter ansteuern. Die Adressen des Lüfters sind bekannt, deswegen wollte ich schon mal Vorarbeit beim Script leisten. Das Gerät hat 10 Leistungsstufen. Mein Gedanke: Das Delta zwischen dem (theoretischen) "Taupunkt innen" und dem Taupunkt außen wird gleichmäßig auf die Leistungsstufen aufgeteilt. Das möchte ich über folgendes Script darstellen.

Code: Alles auswählen

! Steuerung Lüftung Bad V1.0
! *********************************
string lScriptName="Steuerung Lüftung Bad V1.0";
! Berechnung Delta Taupunkt;
real Taupunkta = dom.GetObject("04-Taupunkt-aussen").Value();
real Taupunkti = dom.GetObject("08-Taupunkt-innen").Value();
real deltat = taupunkti – taupunkta;
real schalt = deltat/10
WriteLine("Taupunkt aussen: "# Taupunkta.Variable());
WriteLine("Taupunkt innen: "# Taupunkti.Variable());
WriteLine("Taupunkt Delta: "# deltat.Variable());
WriteLine("Stufenschaltpunkt: "# schalt.Variable());
Problem: Schon der erste "real"-Wert wird schon nicht ausgegeben. Wo liegt der Fehler?

Edit: Schreibfehler im Script bereinigt. Läuft trotzdem nicht
Zuletzt geändert von alchy am 05.06.2020, 22:10, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

JensDev
Beiträge: 19
Registriert: 10.03.2020, 11:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von JensDev » 05.06.2020, 08:55

Da fehlt erstmal ein Semikolon hinter

Code: Alles auswählen

real schalt = deltat/10

Benutzeravatar
Baxxy
Beiträge: 10782
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Baxxy » 05.06.2020, 09:01

Hausbaer1 hat geschrieben:
05.06.2020, 08:29
Läuft trotzdem nicht
Scripte bitte in Code-Tags posten.
Ich habe mal schnell was zusammengetippt...

Code: Alles auswählen

real taupunkta = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("04-Taupunkt-aussen").Value();
real taupunkti = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("08-Taupunkt-innen").Value();
real deltat = taupunkti - taupunkta;
real schalt = deltat/10.0;
WriteLine("Taupunkt aussen: "# taupunkta);
WriteLine("Taupunkt innen: "# taupunkti);
WriteLine("Taupunkt Delta: "# deltat);
WriteLine("Stufenschaltpunkt: "# schalt);
Teste mal.

Grüße
Baxxy

Hausbaer1
Beiträge: 22
Registriert: 09.02.2020, 13:34
System: CCU
Danksagung erhalten: 1 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Hausbaer1 » 05.06.2020, 16:13

Ja, hat funktioniert.
Und ich wieder was gelernt.

Danke, da kommt bestimmt noch mehr :D

Hausbaer1
Beiträge: 22
Registriert: 09.02.2020, 13:34
System: CCU
Danksagung erhalten: 1 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Hausbaer1 » 05.06.2020, 19:32

Ich hab mal weiter gebastelt.
Ich ermittle die einzelnen Stufenschaltpunkte in Abhängigkeit des Taupunktes außen:

Code: Alles auswählen

! Steuerung Lüftung Bad V1.0
! *********************************
string lScriptName="Steuerung Lüftung Bad V1.0";
! Berechnung Delta Taupunkt;
real taupunkta = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("04-Taupunkt-aussen").Value();
real taupunkti = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("08-Taupunkt-innen").Value();
real deltat = taupunkti - taupunkta;
real schalt = deltat/9.0;
WriteLine("Taupunkt aussen: "# taupunkta);
WriteLine("Taupunkt innen: "# taupunkti);
WriteLine("Taupunkt Delta: "# deltat);
WriteLine("Stufenschaltpunkt: "# schalt);
! Berechnung Schaltstufen
var a =  taupunkta;
WriteLine("Stufe 1: "# a);
var b =  1.2 + taupunkta;
WriteLine("Stufe 2: "# b);
var c =  2.0 + taupunkta;
WriteLine("Stufe 3: "# c);
var d =  2.6 + taupunkta;
WriteLine("Stufe 4: "# d);
var e =  3.1 + taupunkta;
WriteLine("Stufe 5: "# e);
var f =  3.5 + taupunkta;
WriteLine("Stufe 6: "# f);
var g =  4.0 + taupunkta;
WriteLine("Stufe 7: "# g);
var h =  4.5 + taupunkta;
WriteLine("Stufe 8: "# h);
var j =  5.0 + taupunkta;
WriteLine("Stufe 9: "# j);
var k =  5.5 + taupunkta;
WriteLine("Stufe 10: "# k);
if (taupunkti.Value() >= a.Value());
{string stdout;
string stderr; 
string url="http://192.168.XXX.XXX/?power=on";
system.Exec ("wget -q -O /dev/null " # url, &stdout, &stderr);
}
Bis hierher läuft die ganze Geschichte. Die Additionswerte sind willkürlich. Ich denke, da muss ich nach Inbetriebnahme des Lüfters noch justieren.

Folgendes soll jetzt geschehen.
1. Ist Taupunkti größer als Taupunkta soll das Gerät einschalten (durch Ansprechen der Adresse 192.168.XXX.XXX/?power=on). Zugleich in die Variable Luefter "ein" schreiben.

2. 30 Sek Pause (ich bin mir nicht ganz sicher, ob der Lüfter nach dem EInschalten sofort bereits ist)

3. Für die einzelnen Schaltstufen nacheinander prüfen, ob Taupunkti größer als var a aber kleiner als b ist.
Wenn ja: Schaltstufe ..... schalten (Ansprechend der Adresse 192.168.XXX.XXX/?speed=...) und Systemvariable Lüfter läuft auf "Stufe ..." schreiben

4. Wenn Taupunkti kleiner als Taupunkta ist, wird das Gerät ausgeschalten (Ansprechen über entsprechende IP) und Systemvariable Lüfter "aus" schreiben.

Für das Senden der IP habe ich mir unter CuXD einen Schalter (28) als Jalousieaktor angelegt.
Der Ansatz für das Script sieht so aus:

Code: Alles auswählen

if (taupunkti.Value() >= a.Value());
{string stdout;
string stderr; 
string url="http://192.168.XXX.XXX/?power=on";
system.Exec ("wget -q -O /dev/null " # url, &stdout, &stderr);
}
Und funktioniert natürlich - nicht.

Hausbaer1
Beiträge: 22
Registriert: 09.02.2020, 13:34
System: CCU
Danksagung erhalten: 1 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Hausbaer1 » 05.06.2020, 20:02

Hmm, wenn ich unter Pkt. 1 mit else weitermachen würde, kann ich mir Pkt. 4 eigentlich sparen, oder?

Für den zweiten Punkt werde ich die Schaltpunkte in Variablen schreiben und die Leistungsstufen des Lüfter in einem zweiten Script mit 30 Sek Verzögerung starten. Ist das so richtig?

Wenn ich unter 3. mit Abfrage der Schaltstufe 10 starte, brauche ich doch keine Doppelabfrage, oder?

Bleibt noch das Ansprechen der Schaltstufe und das Einschalten über die IP.

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von dtp » 08.06.2020, 08:12

Nur mal eben "hingerotzt" und weder auf Syntaxfehler noch auf Funktionsweise getestet. Aber vielleicht als Denkanstoß geeignet.

EDIT: Denkfehler behoben. Hier gibt's ne neue Version, die soweit funktionieren sollte.
Zuletzt geändert von dtp am 14.06.2020, 16:36, insgesamt 2-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Hausbaer1
Beiträge: 22
Registriert: 09.02.2020, 13:34
System: CCU
Danksagung erhalten: 1 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Hausbaer1 » 08.06.2020, 20:11

Ach du Sch....
Das ist ja komplett anders als ich das jetzt hab.

Code: Alles auswählen

!Schaltstufe 10 einschalten
string tmpa= "http://192.168.8.213/?speed=10";
if (taupunkti >= a)
{
dom.GetObject("CUxD.CUX2801001:2.CMD_EXEC").State("wget -q -O - '"#tmpa#"'") && dom.GetObject("100b-Luefter-laeuft-auf").State("10");
}
Funktionert (zumindest beim Skript testen) und zeigt mir die richtigen Sachen an.

Obs wirklich funktionert, wird sich nach der Montage des Lüfters zeigen.

Aber danke für die Hilfe.

Benutzeravatar
Baxxy
Beiträge: 10782
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Baxxy » 09.06.2020, 00:02

Hausbaer1 hat geschrieben:
08.06.2020, 20:11
Obs wirklich funktionert, wird sich nach der Montage des Lüfters zeigen.
Ich werde das Thema mal im Auge behalten. Bin gespannt ob das dann so läuft wie geplant. :wink:

dtp's
dtp hat geschrieben:
08.06.2020, 08:12
Denkanstoß
sieht gut aus, aber da er sein Script nicht getestet hat (ich schon, funktioniert nicht :| ) kannst du das so erstmal nicht verwenden. Hab versucht es "gerade zu biegen" aber da fehlt mir die Expertise. :shock:
Einen Vorschlag zur "Berechnung" der Schaltstufen kann ich aber anbieten.

Code: Alles auswählen

real taupunkti = 12.08;
real taupunkta = 7.52;

if(taupunkti < (taupunkta + 1.2)){
     WriteLine("Lüften nicht notwendig.");
  }
 else {
  if((taupunkti > (taupunkta + 1.2)) && (taupunkti < (taupunkta +2.0))){
    WriteLine("Stufe 1");
  }
  if((taupunkti > (taupunkta + 2.0)) && (taupunkti < (taupunkta +2.6))){
    WriteLine("Stufe 2");
  }
  if((taupunkti > (taupunkta + 2.6)) && (taupunkti < (taupunkta +3.1))){
    WriteLine("Stufe 3");
  }
  if((taupunkti > (taupunkta + 3.1)) && (taupunkti < (taupunkta +3.5))){
    WriteLine("Stufe 4");
  }
  if((taupunkti > (taupunkta + 3.5)) && (taupunkti < (taupunkta +4.0))){
    WriteLine("Stufe 5");
  }
  if((taupunkti > (taupunkta + 4.0)) && (taupunkti < (taupunkta +5.5))){
    WriteLine("Stufe 6 - 9");
  }
  if(taupunkti > (taupunkta + 5.5)){
    WriteLine("Stufe 10 - volle Power");
  }}
Ob es dann Sinn macht tatsächlich alle 10 Lüfterstufen zu benutzen wird wohl nur die Praxis zeigen.
Bei meinen aktuellen Daten würde der Lüfter ca. mit Stufe 8 laufen. :)

Grüße
Baxxy

Hausbaer1
Beiträge: 22
Registriert: 09.02.2020, 13:34
System: CCU
Danksagung erhalten: 1 Mal

Re: Steuerung "Bayernlüfter"

Beitrag von Hausbaer1 » 14.06.2020, 11:01

Ich hab daraus zwei Programme gemacht.

Eines prüft mir, ob die Lüftung notwendig ist, schaltet den Lüfter ein und setzt mir die Systemvariablen.

Code: Alles auswählen

! Prüfung Lüftung Bad V1.1
! *********************************
string lScriptName="Prüfung Lüftung Bad V1.1";

!Lesen notwendiger Informationen
real taupunkta = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("04-Taupunkt-aussen").Value();
real taupunkti = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("08-Taupunkt-innen").Value();
WriteLine("Taupunkt aussen: "# taupunkta);
WriteLine("Taupunkt innen: "# taupunkti);

! Luefter einschalten
string tmpz= "http://192.168.XXX.XXX/?power=on";
string tmpy= "http://192.168.XXX.XXX/?power=off";
if (taupunkta < taupunkti)
{
dom.GetObject("CUxD.CUX2801001:2.CMD_EXEC").State("wget -q -O - '"#tmpz#"'") && dom.GetObject("100a-Luefter").State(true) && dom.GetObject("100-lueften-notwendig?").State(true);
}
else
{
dom.GetObject("CUxD.CUX2801001:2.CMD_EXEC").State("wget -q -O - '"#tmpy#"'") && dom.GetObject("100a-Luefter").State(false) && dom.GetObject("100-lueften-notwendig?").State(false);
}
WriteLine ("Lüfter ein/aus");
WriteLine ("SysVar Lüfter ein/aus gesetzt");
WriteLine("SysVar Lüften notwendig? befüllt");
Das zweite Programm setzt mir die Lüfterstufen und gibt je nach Stufe die Betriebsstufe an den Lüfter.
Exemplarisch zwei Stufen:

Code: Alles auswählen

! Steuerung Lüftung Bad V1.0
! *********************************
string lScriptName="Steuerung Lüftung Bad V1.0";

!Lesen notwendiger Informationen
var taupunkta = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("04-Taupunkt-aussen").Value();
var taupunkti = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("08-Taupunkt-innen").Value();

WriteLine("Taupunkt aussen: "# taupunkta);
WriteLine("Taupunkt innen: "# taupunkti);

! Berechnung Schaltstufen
var k =  taupunkta;
WriteLine("Stufe 1: "# k);
var i =  1.2 + taupunkta;
WriteLine("Stufe 2: "# i);
var h =  2.0 + taupunkta;
WriteLine("Stufe 3: "# h);
var g =  2.6 + taupunkta;
WriteLine("Stufe 4: "# g);
var f =  3.1 + taupunkta;
WriteLine("Stufe 5: "# f);
var e =  3.5 + taupunkta;
WriteLine("Stufe 6: "# e);
var d =  4.0 + taupunkta;
WriteLine("Stufe 7: "# d);
var c =  4.5 + taupunkta;
WriteLine("Stufe 8: "# c);
var b =  5.0 + taupunkta;
WriteLine("Stufe 9: "# b);
var a =  5.5 + taupunkta;
WriteLine("Stufe 10: "# a);

!Befüllen SysVar Schaltstufen
dom.GetObject ("101a-Schaltstufe-10").State(a);
dom.GetObject ("101b-Schaltstufe-9").State(b);
dom.GetObject ("101c-Schaltstufe-8").State(c);
dom.GetObject ("101d-Schaltstufe-7").State(d);
dom.GetObject ("101e-Schaltstufe-6").State(e);
dom.GetObject ("101f-Schaltstufe-5").State(f);
dom.GetObject ("101g-Schaltstufe-4").State(g);
dom.GetObject ("101h-Schaltstufe-3").State(h);
dom.GetObject ("101i-Schaltstufe-2").State(i);
dom.GetObject ("101k-Schaltstufe-1").State(k);

WriteLine ("Schaltstufe 1: "# k);
WriteLine ("Schaltstufe 2: "# i);
WriteLine ("Schaltstufe 3: "# h);
WriteLine ("Schaltstufe 4: "# g);
WriteLine ("Schaltstufe 5: "# f);
WriteLine ("Schaltstufe 6: "# e);
WriteLine ("Schaltstufe 7: "# d);
WriteLine ("Schaltstufe 8: "# c);
WriteLine ("Schaltstufe 9: "# b);
WriteLine ("Schaltstufe 10: "# a);

! Einschalten und setzen Schaltstufe

!Schaltstufe 10 einschalten
string tmpa= "http://192.168.XXX.XXX/?speed=10";
if (taupunkti >= a)
{
dom.GetObject("CUxD.CUX2801001:2.CMD_EXEC").State("wget -q -O - '"#tmpa#"'") && dom.GetObject("100b-Luefter-laeuft-auf").State("10");
}
WriteLine ("Stufe 10 geschaltet")
WriteLine ("10 eingetragen")



!Schaltstufe 9 einschalten
string tmpb= "http://192.168.XXX.XXX/?speed=9";
if ((taupunkti < a) && (taupunkti >= b))
{
dom.GetObject("CUxD.CUX2801001:2.CMD_EXEC").State("wget -q -O - '"#tmpb#"'") && dom.GetObject("100b-Luefter-laeuft-auf").State("9");
}
WriteLine ("Stufe 9 geschaltet")
WriteLine ("9 eingetragen")
Das zieh ich bis Stufe eins durch. Ob alle Stufen sinnvoll / notwendig sind, wird sich zeigen.

Im Programm zwei wirds zwei Skripte geben. Eines zwischen 7:00 und 22:00 Uhr (alle Stufen möglich), das zweite in der restlichen Zeit nur bis Stufe 3.

Antworten

Zurück zu „HomeMatic IP mit CCU“