Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Andy123Andy1

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    A
    • Profile
    • Following 0
    • Followers 1
    • Topics 0
    • Posts 16
    • Best 1
    • Groups 1

    Andy123Andy1

    @Andy123Andy1

    Starter

    1
    Reputation
    7
    Profile views
    16
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    Andy123Andy1 Follow
    Starter

    Best posts made by Andy123Andy1

    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @dieter_p

      sketch_jun25a.ino.bin

      ist die 7

      posted in Hardware
      A
      Andy123Andy1

    Latest posts made by Andy123Andy1

    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @dieter_p said in S0 - Signal mit Wemos D1 Mini erzeugen?:

      @andy123andy1 said in S0 - Signal mit Wemos D1 Mini erzeugen?:

      @dieter_p S0 ist der Verbrauch (Lichtstrom) ohne Wäremepumpe. Entsteht ein PV Überschuss soll die anlange die Heiz/ Kühl kurve um 2 verschieben und das Brauchwasser auf "hoch" stellen. So die Idee.

      TCP modbus funktioniert.

      Ok verstanden.

      Wo da die Schaltschwellen inkl. Pufferzeiten liegen kann ich Dir nicht sagen. Das steckt in der Logik dieser Steuerung. Tendentiell würde ich nur keine "HauRuck"-Aktionen der Logik erwarten und andauerndes Takten für solche Vorgänge ist eher schädlich. Du schaltest immerhin 11kW im Worst-Case.
      Das muß erstmal vom Dach kommen.
      Daher würde ich bei so einer Simulation den Verbrauch des sonstigen Haushaltstroms eher zum Testen runter setzen und Du simlierst doch gerade eine Dauerlast (Haushaltsstrom) von 1kW. Das finde ich schon heftig und bin bei mir eher bei 0,25kW. Kommt natürlich auch darauf an was gerade von Deinem Dach kommt und welche Leistung die WP zieht.

      Ich hatte das so Verstanden: Wenn das Haus 1kWH verbaucht wird dieser vom Überschuss abgezogen. Heißt wenn 6kwH Überschuss vorhanden sind kann die LWP nur 5kwH verwenden. Ich würde den Wert sogar auf 2kWH setzen dann ist man vermutlich zu 90% auf der sicheren Seite. Wenn von der PV Anlage 8 kWH kommen werden 2 kWH abgezogen. Bleiben also 4kWH für die LWP. Wenn keine Sonne scheint oder die Leistung der PV Anlage nicht über 2kWH steigt wird eben nichts optimiert. Zumindest so mein Verständnis.

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      Mit einem Adurino UNO klappt es sofort. Allerdings hab ich ein Ver­ständ­nis Problem der Zähler der LWP zählt nur nach oben. Ich dachte da soll der aktuelle verbrauchte Stromverbrauch abgebildet werden. Um eben die Differenz aus PV Strom und aktuell verbrauchten Strom zu bilden.

      edit
      Daraus kann man dann den aktuellen Strom verbrauch errechnen okay 🙂

      Frag mich nur gerade ob der Aufwand dem Nutzen wert ist. Ich müsste jetzt den Wechselrichter fragen wie viel Strom verbracht das Haus, dann die LWP wie viel verbrauchst du. Daraus die Differenz bilden und warten bis eine kWh erreicht ist. Diese Information müsste ich dann dem Adurino geben der wiederum den S0 Eingang der LWP anspricht.

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @dieter_p Genau um dabei sicher zu sein hätte ich, wenn es funktioniert, den akutellen Lichtstrom-Verbrauch auf den Adurino/S0 geschrieben. Die Logik der Wärmepumpe hätte dann die Kontrolle über die Taktung. Die alternative wäre per tcp-modbus der LWP die Wert (wasser hoch/ kurve +-2) zu setzen. Dadurch würde man aber über die Taktung selbst entscheiden.

      Im Moment habe ich einfach eine Zeitsteuerung der LWP von 22:00-08:00 Uhr alles blockiert und von 14:00-17:00 Uhr Brauchwasser hoch.

      Ohne den S0 macht die LWP mit den werten der PV Anlage nix.

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @dieter_p S0 ist der Verbrauch (Lichtstrom) ohne Wäremepumpe. Entsteht ein PV Überschuss soll die anlange die Heiz/ Kühl kurve um 2 verschieben und das Brauchwasser auf "hoch" stellen. So die Idee.

      TCP modbus funktioniert.

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @dieter_p das ist eine nibe s320

      https://www.photovoltaikforum.com/core/attachment/215014-ih-pv-modulsteuerung-allg-pdf/

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      hihi ja so ähnlich.

      Ich hab jetzt nochmal gemessen die 20mA kommen bei High an. Das Interval sollte stimmen aber die Luftwärmepume erkennt das Signal nicht. Hab erst mal keine Idee warum nicht.

      Vielleicht findet sich noch jemand bei dem es klappt. Vielleicht ist die Spannung zu gering ? Die Klemmen der LWP sind mit 5V beschriftet, wobei das eigentlich egal sein sollte.

      Mein Aufbau sieht so aus:

      Wemos D1 -> Optokoppler -> + 100 ohm Wiederstand -> LWP

      Und ein möglichst einfaches Program aufgespielt. Wärmepume auf 500 Impulse gestellt.

      #define S0_PIN D6 // Use the D6 pin on Wemos D1
      
      
      unsigned long pulseInterval;
      float kWh = 1.0; // Default kWh value (example value)
      unsigned long pulseDuration = 30; /
      
      void setup() {
      
        pinMode(S0_PIN, OUTPUT);
        
      
        pulseInterval = (3600.0 * 1000.0) / (kWh * 500.0); // 500 pulses per kWh
        
      
        Serial.begin(115200);
        while (!Serial) {
          ; // Wait for serial port to connect
        }
        
        Serial.println("S0 Signal Simulation Started");
        Serial.print("Initial kWh: ");
        Serial.println(kWh);
        Serial.print("Initial pulse interval: ");
        Serial.print(pulseInterval);
        Serial.println(" ms");
      }
      
      void loop() {
        unsigned long currentMillis = millis();
        digitalWrite(S0_PIN, HIGH);
        Serial.print("Pulse ON at ");
        Serial.print(currentMillis);
        Serial.println(" ms");
        delay(pulseDuration);
      
        digitalWrite(S0_PIN, LOW);
        currentMillis = millis();
        Serial.print("Pulse OFF at ");
        Serial.print(currentMillis);
        Serial.println(" ms");
        delay(pulseInterval - pulseDuration); 
      }
      

      Fall jemand eine Idee hat warum das nicht klappt immer her damit 🙂

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      Ich hab mal alles angeschlossen wo sieht man den ob es funktioniert?

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @andy123andy1

      Mit Watt müsste das so aussehen.

      const int s0Pin = 7; // Pin connected to the S0 output signal
      
      // Timing variables
      unsigned long pulseDuration = 100; // Duration of each pulse in milliseconds
      unsigned long pulseInterval = 3600000 / 1000 - pulseDuration; // Interval between pulses in milliseconds (initial value)
      float watts = 1000.0; // Initial watts value
      
      unsigned long previousMillis = 0; // Store the last time a pulse was generated
      unsigned long pulseEndMillis = 0; // Store the end time of the pulse
      bool pulseActive = false; // Flag to track pulse state
      
      void setup() {
        // Set the S0 pin as an output
        pinMode(s0Pin, OUTPUT);
      
        // Initialize Serial for communication
        Serial.begin(115200);
        while (!Serial) {
          ; // Wait for the serial port to connect. Needed for native USB port only
        }
      
        Serial.println("Enter watts value:");
      }
      
      void loop() {
        // Check if data is available on the serial port
        if (Serial.available() > 0) {
          String input = Serial.readStringUntil('\n'); // Read the input
          watts = input.toFloat(); // Convert input to float
      
          if (watts > 0) {
            // Calculate pulse interval based on watts value
            pulseInterval = (3600.0 * 1000.0) / watts - pulseDuration;
            Serial.print("Updated watts: ");
            Serial.println(watts);
            Serial.print("Updated pulse interval: ");
            Serial.println(pulseInterval);
          }
        }
      
        unsigned long currentMillis = millis();
      
        // Check if it's time to generate a new pulse
        if (currentMillis - previousMillis >= pulseInterval && !pulseActive) {
          // Save the last time a pulse was started
          previousMillis = currentMillis;
          
          // Start the pulse
          digitalWrite(s0Pin, HIGH);
          pulseEndMillis = currentMillis + pulseDuration;
          pulseActive = true;
        }
      
        // Check if it's time to end the pulse
        if (pulseActive && currentMillis >= pulseEndMillis) {
          digitalWrite(s0Pin, LOW);
          pulseActive = false;
        }
      }
      

      bzw.

      import serial
      import time
      
      # Configure the serial port and baud rate
      ser = serial.Serial('COM3', 115200)  # Change 'COM3' to the appropriate port for your system
      time.sleep(2)  # Give some time to establish the connection
      
      def send_watts_value(watts):
          ser.write(f"{watts}\n".encode())  # Send watts value as a string with newline
          time.sleep(1)  # Give some time for the Arduino to process and respond
      
          # Read response lines from the serial port
          response_lines = []
          while ser.in_waiting > 0:
              line = ser.readline().decode('utf-8').rstrip()
              response_lines.append(line)
          
          return response_lines
      
      # Example usage
      response = send_watts_value(1000.0)  # Send 1000 watts value
      for line in response:
          print(line)
      
      response = send_watts_value(1500.5)  # Send 1500.5 watts value
      for line in response:
          print(line)
      
      ser.close()
      

      Dann kann man Watt senden.

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      @dieter_p

      also laut wikipedia sind es kWh

      https://de.wikipedia.org/wiki/Stromzähler

      posted in Hardware
      A
      Andy123Andy1
    • RE: S0 - Signal mit Wemos D1 Mini erzeugen?

      Kleines update das ist jetzt das finale "script" auf einem Adurino Nano. Der sendet pauschal 2kwH an die LWP. Man kann wenn man will über eine USB/Serial Verbindung die richtige kwH in Fließkomma (1.3 etc) setzen. Bei mir hängt der Nano am USB vom "NAS".

      const int s0Pin = 7; // Pin connected to the S0 output signal
      
      // Timing variables
      unsigned long pulseDuration = 100; // Duration of each pulse in milliseconds
      unsigned long pulseInterval = 3500; // Interval between pulses in milliseconds (initial value)
      float kWh = 1.0; // Initial kWh value
      
      unsigned long previousMillis = 0; // Store the last time a pulse was generated
      unsigned long pulseEndMillis = 0; // Store the end time of the pulse
      bool pulseActive = false; // Flag to track pulse state
      
      void setup() {
        // Set the S0 pin as an output
        pinMode(s0Pin, OUTPUT);
      
        // Initialize Serial for communication
        Serial.begin(115200);
        while (!Serial) {
          ; // Wait for the serial port to connect. Needed for native USB port only
        }
      
        Serial.println("Enter kWh value:");
      }
      
      void loop() {
        // Check if data is available on the serial port
        if (Serial.available() > 0) {
          String input = Serial.readStringUntil('\n'); // Read the input
          kWh = input.toFloat(); // Convert input to float
      
          if (kWh > 0) {
            // Calculate pulse interval based on kWh value
            pulseInterval = (3600.0 * 1000.0) / (kWh * 1000.0) - pulseDuration;
            Serial.print("Updated kWh: ");
            Serial.println(kWh);
            Serial.print("Updated pulse interval: ");
            Serial.println(pulseInterval);
          }
        }
      
        unsigned long currentMillis = millis();
      
        // Check if it's time to generate a new pulse
        if (currentMillis - previousMillis >= pulseInterval && !pulseActive) {
          // Save the last time a pulse was started
          previousMillis = currentMillis;
          
          // Start the pulse
          digitalWrite(s0Pin, HIGH);
          pulseEndMillis = currentMillis + pulseDuration;
          pulseActive = true;
        }
      
        // Check if it's time to end the pulse
        if (pulseActive && currentMillis >= pulseEndMillis) {
          digitalWrite(s0Pin, LOW);
          pulseActive = false;
        }
      }
      

      senden vom pc aus könnte so aussehen:

      import serial
      import time
      
      # Configure the serial port and baud rate
      ser = serial.Serial('/dev/ttyUSB0', 115200)  # Change 'COM3' to the appropriate port for your system
      time.sleep(2)  # Give some time to establish the connection
      
      def send_kwh_value(kwh):
          ser.write(f"{kwh}\n".encode())  # Send kWh value as a string with newline
          time.sleep(1)  # Give some time for the Arduino to process and respond
      
          # Read response lines from the serial port
          response_lines = []
          while ser.in_waiting > 0:
              line = ser.readline().decode('utf-8').rstrip()
              response_lines.append(line)
          
          return response_lines
      
      # Example usage
      response = send_kwh_value(5.0)  # Send 5.0 kWh value
      for line in response:
          print(line)
      
      ser.close()
      
      
      posted in Hardware
      A
      Andy123Andy1
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo