LUXTRONIK2 (Wärmepumpe) - stark erweitert - bitte um Tests

Begonnen von tupol, 25 Januar 2014, 19:42:59

Vorheriges Thema - Nächstes Thema

ch.eick

Zitat von: Manos am 09 November 2020, 22:11:32
hast du Zugriff auf die FHEM WiKi?
Die Beschreibung der userHeatpumpValues ist einfach schlecht, damit kann niemand(= Manos) etwas anfangen. Ohne deine Erklaerungen haette ich das nie geschaft!
Dann schick mir die bessere Beschreibung und ich füge sie dann im Wiki ein. Oder der Maintainer meldet sich noch :-)

Zitat
Uebrigens, ich habe in der https://www.loxwiki.eu/pages/viewpage.action?pageId=18219334 eine weitere Variabel, die zwar nicht als Default definiert ist, trotzdem extrem wichtig (fuer mein Geschmack) ist:
80   ID_WEB_WP_BZ_akt  Betriebszustand
0 = Heizen
1 = Warmwasser
2 = Schwimmbad / Photovoltaik
3 = EVU
4 = Abtauen
5 = Keine Anforderung
6 = Heizen ext. Energiequelle
7 = Kühlbetrieb


Interessant, meine LWP hat sie als 80 WP_BZ_akt (mindestens die Stelle 80 war die gleiche).
Das muss ich auch noch checken, ich reagiere auf einige Texte, aber auf Zahlen zu gehen ist immer besser.
Mal schauen, ob meine LWP da auch hat.

opStateHeatPump1 Wärmepumpe steht
opStateHeatPump2 seit 00:18:16
opStateHeatPump3 Keine Anforderung
opStateHeating Abgesenkt -6.0°C
opStateHotWater Sperrzeit


Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Manos

Zitat von: ch.eick am 09 November 2020, 22:57:24
Mal schauen, ob meine LWP da auch hat.
Also, ich finde:

opStateHeatPump1 Wärmepumpe steht
opStateHeatPump2 seit 00:18:16
opStateHeatPump3 Keine Anforderung
opStateHeating Abgesenkt -6.0°C
opStateHotWater Sperrzeit


Aha!
Bei mir funktionieren die ersten drei Parameter nicht (siehe unten, opStateHeatPump1,opStateHeatPump2,opStateHeatPump3)
Ich habe:

opStateHeatPump1 Wärmepumpe läuft
opStateHeatPump2 seit 00:00:00
opStateHeatPump3 Heizbetrieb
opStateHeating Abgesenkt -6.0°C 2020-11-10 01:03:33
opStateHotWater Sperrzeit 2020-11-10 00:03:33

Weiss du welche Nummer die opStateHeatPump1,opStateHeatPump2,opStateHeatPump3 haben?
Ich tippe auf:

117 HauptMenuStatus_Zeile1 : 0           
118 HauptMenuStatus_Zeile2 : 0           
119 HauptMenuStatus_Zeile3 : 0 

wobei
117 HauptMenuStatus_Zeile1 : 0           
0 = Wärmepumpe läuft
1 = Wärmepumpe steht
2 = Wärmepumpe kommt
3 = Fehlercode Speicherplatz 0
4 = Abtauen
5 = Warte auf LIN-Verbindung
6 = Verdichter heizt auf
7 = Pumpenvorlauf

118 HauptMenuStatus_Zeile2 : 0   
0 = seit :
1 = in :

und 119 HauptMenuStatus_Zeile3 : 0 
0 = Heizbetrieb
1 = Keine Anforderung
2 = Netz-Einschaltverzögerung
3 = Schaltspielsperre
4 = Sperrzeit
5 = Brauchwasser
6 = Info Ausheizprogramm
7 = Abtauen
8 = Pumpenvorlauf
9 = Thermische Desinfektion
10 = Kühlbetrieb
12 = Schwimmbad / Photovoltaik
13 = Heizen ext. Energiequelle
14 = Brauchwasser ext. Energiequelle
16 = Durchflussüberachung
17 = Zweiter Wärmeerzeuger 1 Betrieb


Leider bei mir funktionieren sie nicht, alle drei bleiben auf 0  ::) Deswegen war ich so begeistert als ich die "80 WP_BZ_akt" Variabel gefunden habe (und Dank dir, einbinden konnte).

Gut, dass das LUXTRONIK Modul so flexibel ist  :)


Als Text fuer die Wiki wuerde ich vorschlagen:

Nicht alle Werte werden im default ausgelesen, können jedoch definiert werden. <-- Der Satz existiert bereits
Eine Beschreibung der Java-Schnittstelle gibt es hier. <-- Der Satz existiert bereits
Die Seite enthält auch eine Liste der Betriebsdaten (sog. berechnete Werte) die man mit get <device> rawdata anzeigen und mit dem Attribut userHeatpumpValues zum Gerät hinzufügen kann.  <-- Der Satz existiert bereits
Tragen Sie die bei den Raw Werten ausgewählte Nummer und auch den Wunschnamen Ihre Wahl ein. Es können wohl auch mehrere sein.
z.B. userHeatpumpValues [rawdata Nummer] [Wunschnamen],[rawdata Nummer] [Wunschnamen],[rawdata Nummer] [Wunschnamen] 

HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

ch.eick

Zitat von: Manos am 10 November 2020, 02:30:12
Bei mir funktionieren die ersten drei Parameter nicht (siehe unten, opStateHeatPump1,opStateHeatPump2,opStateHeatPump3)
Leider bei mir funktionieren sie nicht, alle drei bleiben auf 0  ::) Deswegen war ich so begeistert als ich die "80 WP_BZ_akt" Variabel gefunden habe (und Dank dir, einbinden konnte).
Das scheint dann ein FW Unterschied zu sein.
Danke für das Text Mapping, das wird dann ja im Modul vorgenommen, da bei mir im RAW auch nur die Zahlen drin stehen.

Zitat
Als Text fuer die Wiki wuerde ich vorschlagen:

Tragen Sie die bei den Raw Werten ausgewählte Nummer und auch den Wunschnamen Ihre Wahl ein. Es können wohl auch mehrere sein.
z.B. userHeatpumpValues [rawdata Nummer] [Wunschnamen],[rawdata Nummer] [Wunschnamen],[rawdata Nummer] [Wunschnamen] 

Ich habe es eingetragen und umformatiert. Bitte überprüfe es noch mal, damit auch alles passt.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Moin zusammen,

hier noch eine allgemeine Information für Photovoltaik Betreiber.
Die Luxtronk2 v2.84 an einer Novelan LAD9 unterstützt auch ein PV Signal
Um das aktuelle Signal auszulesen verwendet man das Attrobut userHeatpumpValues .
Für die Anschaltung des Signals über einen Relais Kontakt des Wechselrichters oder mit einem Shelly über Wlan vom Fhem sollte man natürlich einen Fachmann beauftragen.
Das 220V Signal wird auf den  SWTin Eingang in der WP Steuerung geschaltet.
Dann muss noch in der Luxtronik2 der Photovoltaikmodus aktiviert werden.

Und das Signal anzeigen lassen

attr <Device> userHeatpumpValues 36 SWTin_PV-Eigenverbrauch


Damit kann bei PV Überschuss der Pufferspeicher für die Heizung überheizt werden.
Das Warmwasser wird auf auf die maximale Temperatur, die die WP liefern kann aufgeheizt. Bei mir verwende ich das um z.B. bei drohendem Besuch das Wasser höher aufzuheizen,
um den höheren Bedarf zu decken. Die LAD9 WP schaft auch über 60°C was die Legionellenangst beruhigen kann. Auch der WAF steigt, wenn man trotz allem Sparen mal das Putzwasser
mit höherer Temperatur bekommt.

Normalerweise habe ich Sperrzeiten von 18-14 Uhr, was also nur um 14:00 Uhr das Wasser auf 50°C aufheizt. Bei unserem zwei Personen Haushalt reicht das WW dann 24h und im PV Modus sogar 48h,
bevor nachgeheizt wird.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Manos

#184
Die  https://www.loxwiki.eu/pages/viewpage.action?pageId=18219334 Seite hat eine ausführliche Liste von "Status Codes"
ein paar Beispiele:

106 ID_WEB_Switchoff_file_Nr0 Grund Abschaltung 0 im Speicher
1 = Wärmepumpe Störung
2 = Anlagen Störung
3 = Betriebsart Zweiter Wärmeerzeuger
4 = EVU-Sperre
5 = Lauftabtau (nur LW-Geräte)
6 = Temperatur Einsatzgrenze maximal
7 = Temperatur Einsatzgrenze minimal (bei LWD reversibel möglicherweise Abschaltung wegen Frostschutz bei Kühlbetrieb - Verdampfungstemperatur zu lange unter 0°C)
8 = Untere Einsatzgrenze
9 = Keine Anforderung

ID_WEB_HauptMenuStatus_Zeile1 Status Zeile 1
0 = Wärmepumpe läuft
1 = Wärmepumpe steht
2 = Wärmepumpe kommt
3 = Fehlercode Speicherplatz 0
4 = Abtauen
5 = Warte auf LIN-Verbindung
6 = Verdichter heizt auf
7 = Pumpenvorlauf

119 ID_WEB_HauptMenuStatus_Zeile3 Status Zeile 3
0 = Heizbetrieb
1 = Keine Anforderung
2 = Netz-Einschaltverzögerung
3 = Schaltspielsperre
4 = Sperrzeit
5 = Brauchwasser
6 = Info Ausheizprogramm
7 = Abtauen
8 = Pumpenvorlauf
9 = Thermische Desinfektion
10 = Kühlbetrieb
12 = Schwimmbad / Photovoltaik
13 = Heizen ext. Energiequelle
14 = Brauchwasser ext. Energiequelle
16 = Durchflussüberachung
17 = Zweiter Wärmeerzeuger 1 Betrieb



siehe Meldung 9 = Thermische Desinfektion bei 119 auf der Liste....   :o

Falls du mit den "Zahlen" arbeiten willst, anbei meine Einträge:
Ich habe in userHeatpumpValues 80 Operation definiert (Position 80, ernannt "Operation") , dies ist nur die Zahl.
Die UserReadings Definition die du gepostet hast (nochmals Danke), habe ich "OperationText" addiert um die "Operation" in Text umzuwandeln:

OperationText { ReadingsVal($name,"Operation","Error") == 0 ? "Heizen" : ReadingsVal($name,"Operation","Error") == 1 ? "Warmwasser" : ReadingsVal($name,"Operation","Error") == 2 ? "Schwimmbad / Photovoltaik" : ReadingsVal($name,"Operation","Error") == 3 ? "EVU" : ReadingsVal($name,"Operation","Error") == 4 ? "Abtauen" : ReadingsVal($name,"Operation","Error") == 5 ? "Keine Anforderung" : ReadingsVal($name,"Operation","Error") == 6 ? "Heizen ext. Energiequelle" : ReadingsVal($name,"Operation","Error") == 7 ? "Kühlbetrieb" : "Error" }

Update: Eine verbesserte Variante mit Array:

attr WaermePumpe userReadings OperationText { my $v=ReadingsNum($name,"Operation","8");; my @a=("Heizen","Warmwasser","Schwimmbad Photovoltaik","EVU","Abtauen","Keine Anforderung","Heizen ext. Energiequelle","Kühlbetrieb","Error");; return $a[$v];; }

(Wichtig! Falls Ihr event-on-change-reading nutzt, dann muss OperationText auch auf der event-on-change-reading Liste sein)




Ich fange erst an, die Daten auszuwerten, bin ich aber schon begeistert!  ;D


Zitat von: ch.eick am 10 November 2020, 09:10:29
Das scheint dann ein FW Unterschied zu sein.

Ich habe es eingetragen und umformatiert. Bitte überprüfe es noch mal, damit auch alles passt.

Ich finde die Ergänzung sehr gut geschrieben. Ich würde sogar vorschlagen, anstatt sie ganz unten zu platzieren (unter "nützliche Links"), lieber viel höher positionieren, am Ende der Paragraph "Erläuterung der Readings".

Falls du wieder in der WiKi bist, könntest du ruhig eine weitere Korrektur machen. Der Eintrag

LWD90V - ?? Duale Luft/Wasser-Wärmepumpe invertergeführt zur Außenaufstellung

Die zwei ?? sind überflüssig, meine LWP ist eine LWDV91-1/3, ich kann bestätigen, sie heist "Duale Luft/Wasser-Wärmepumpe invertergeführt zur Außenaufstellung" ("V" steht fuer Inverter).

Schöne Grüße,
Manos
HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

ch.eick

Hallo Manos,

Zitat
Falls du mit den "Zahlen" arbeiten willst, anbei meine Einträge:
Ich habe in userHeatpumpValues 80 Operation definiert (Position 80, ernannt "Operation") , dies ist nur die Zahl.
Die UserReadings Definition die du gepostet hast (nochmals Danke), habe ich "OperationText" addiert um die "Operation" in Text umzuwandeln:


OperationText { ReadingsVal($name,"Operation","Error") == 0 ? "Heizen" : ReadingsVal($name,"Operation","Error") == 1 ? "Warmwasser" : ReadingsVal($name,"Operation","Error") == 2 ? "Schwimmbad / Photovoltaik" : ReadingsVal($name,"Operation","Error") == 3 ? "EVU" : ReadingsVal($name,"Operation","Error") == 4 ? "Abtauen" : ReadingsVal($name,"Operation","Error") == 5 ? "Keine Anforderung" : ReadingsVal($name,"Operation","Error") == 6 ? "Heizen ext. Energiequelle" : ReadingsVal($name,"Operation","Error") == 7 ? "Kühlbetrieb" : "Error" }

ich habe auch mal an anderer Stelle ein Replacement gemacht. Eventuell gefällt Dir der Code ja.
Bei meiner Variante spart man auch die vielen ReadingsVal()

Es wird nur einmal der Wert gelesen

{my $first_called = InternalVal("$NAME","path","n.a");;
my %replace = ("/auth/me" => "04_/auth/me","/info/version" => "05_/info/version","/processdata/scb_statistic_EnergyFlow" => "20_/processdata/scb_statistic_EnergyFlow","/modules_list" => "21_/modules_list","/logdata/download" => "24_/logdata/download","/update/status" => "41_/update/status","/system/reboot" => "04_/auth/me",);;
$replace{$first_called};;}


Bei den Bedienungsanleitungen wäre es besser den Link ins Wiki zu schreiben.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo Manos,

Zitat von: Manos am 11 November 2020, 03:06:35
Ich finde die Ergänzung sehr gut geschrieben. Ich würde sogar vorschlagen, anstatt sie ganz unten zu platzieren (unter "nützliche Links"), lieber viel höher positionieren, am Ende der Paragraph "Erläuterung der Readings".

Falls du wieder in der WiKi bist, könntest du ruhig eine weitere Korrektur machen. Der Eintrag

LWD90V - ?? Duale Luft/Wasser-Wärmepumpe invertergeführt zur Außenaufstellung

Die zwei ?? sind überflüssig, meine LWP ist eine LWDV91-1/3, ich kann bestätigen, sie heist "Duale Luft/Wasser-Wärmepumpe invertergeführt zur Außenaufstellung" ("V" steht fuer Inverter).
Ich habe das Wiki entsprechend geändert und bitte Dich das nochmals zu überprüfe, da ich nicht der ersteller der Seite bin, soll es wenigstens richtig sein.

Ein Zugang zum Wiki für Änderungen kann übrigens jeder beantragen und somit helfen, das es immer besser wird.
Schlechte Information wird seltener gelesen :-)

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Manos

Zitat von: ch.eick am 11 November 2020, 10:16:52
Hallo Manos,
Ich habe das Wiki entsprechend geändert und bitte Dich das nochmals zu überprüfen, da ich nicht der Ersteller der Seite bin, soll es wenigstens richtig sein.

Ich habe die Anpassungen gesehen, sie sind perfekt!  :D

Zitat
ich habe auch mal an anderer Stelle ein Replacement gemacht. Eventuell gefällt Dir der Code ja.
Bei meiner Variante spart man auch die vielen ReadingsVal()

Es wird nur einmal der Wert gelesen
{my $first_called = InternalVal("$NAME","path","n.a");;
my %replace = ("/auth/me" => "04_/auth/me","/info/version" => "05_/info/version","/processdata/scb_statistic_EnergyFlow" => "20_/processdata/scb_statistic_EnergyFlow","/modules_list" => "21_/modules_list","/logdata/download" => "24_/logdata/download","/update/status" => "41_/update/status","/system/reboot" => "04_/auth/me",);;
$replace{$first_called};;}

Das ist weit über mein Auffassungsvermögen...  :o
Frag mich in ein paar Jahren wieder....   ;D ;D ;D

Schoene Gruesse
Manos
HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

ch.eick

Zitat von: Manos am 17 November 2020, 02:51:24
Das ist weit über mein Auffassungsvermögen...  :o
Frag mich in ein paar Jahren wieder....   ;D ;D ;D
Das kannst Du so verwenden, wie es da steht :-)
%replace ist die Liste, was womit ersetzt werden soll.
$replace{} geht dann mit den Wert in diese Liste und gibt jeweils den ersatz Wert wieder zurück.

Der komplette Aufruf kann auch in der Commandline ausgeführt werden, da kannst Du schön testen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Manos

Zitat von: ch.eick am 17 November 2020, 08:51:41
Das kannst Du so verwenden, wie es da steht :-)
%replace ist die Liste, was womit ersetzt werden soll.
$replace{} geht dann mit den Wert in diese Liste und gibt jeweils den ersatz Wert wieder zurück.

Der komplette Aufruf kann auch in der Commandline ausgeführt werden, da kannst Du schön testen.

Na gut, ich werde mich damit auseinandersetzen   :D

Ich habe bis jetzt unzählige Stunden verbracht in meinem Versuch zu verstehen warum mein Array nicht funktioniert

attr WaermePumpe userReadings OperationTextTEST { my $v=ReadingsNum($name,"Operation","8");; my @a=("Heizen","Warmwasser","Schwimmbad Photovoltaik","EVU","Abtauen","Keine Anforderung","Heizen ext. Energiequelle","Kühlbetrieb","Error");; return $a[$v];; }

bis ich am Ende drauf kam: OperationTextTEST war nicht auf der  event-on-change-reading Liste!  ::) ::) ::)
attr WaermePumpe event-on-change-reading OperationTextTEST

HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

ch.eick

Zitat von: Manos am 17 November 2020, 20:08:54

attr WaermePumpe userReadings OperationTextTEST { my $v=ReadingsNum($name,"Operation","8");; my @a=("Heizen","Warmwasser","Schwimmbad Photovoltaik","EVU","Abtauen","Keine Anforderung","Heizen ext. Energiequelle","Kühlbetrieb","Error");; return $a[$v];; }

Ich kann auch noch kein Perl, aber es kommt immer was dazu :-)
Das mit dem Array funktioniert ja gut, wenn man einen Zahlenwert hat. Die andere Variante ist toll für das Umsetzen vom Zeichenketten.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Manos

#191
Hallo an alle,

ich stelle hier die Frage da meine Google Suche Erfolglos bliebt:
Dankt Luxtronic2 habe ich jetzt eine bessere Transparenz ueber die Funktion der WP.
Ich stelle fest, dass bereits ab -5°C der elektrische Heizstab ( 2ndHeatSource1 ) eingeschaltet wird. Ist das normal?
Ich haette gedacht, er wird erst bei kaelteren Temperaturen eingeschaltet wird.

Vielen Dank fuer das Luxtronic2 Modul, dadurch kann ich endlich verstehen was meine WP den ganzen Tag treibt....

EDIT: Die restliche Diskussion ist unter:  https://forum.fhem.de/index.php?topic=118734.msg1131726#msg1131726
HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

frober

Freigabe.ZWE unter Temperaturen müsste das sein. Steht bei mir auf -5°, ist aber auch bei -20° noch nie angesprungen.
Da die Pumpen meist überdimensioniert sind, braucht man den ZWE bei uns in der Regel nicht.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

#193
Zitat von: ch.eick am 08 Februar 2021, 18:16:09
Das konnte ich leider mit der Angabe nicht finden. Wärst Du so nett und könntest das mal genauer nachschauen?
Danke für die Umstände im voraus.
   Christian

Service>Einstellungen>Temperaturen>Freig. ZWE

Laut Bedienungsanleitung ist das die Temperatur, ab der der ZWE bedarfsgerecht freigegeben werden kann...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

regii

Hallo zusammen,

aktuell kann man die Heizkurve mittels heatingCurveOffset und  heatingCurveEndPoint einstellen.
Ist es auch denkbar dies bei der Heizkurve für den Mischerkreis zu machen?

Viele Grüße
Sebastian