Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Mitsubishi Heavy Industries Split Klimaanlage

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    545

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

Mitsubishi Heavy Industries Split Klimaanlage

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
253 Beiträge 24 Kommentatoren 49.4k Aufrufe 23 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H hacki11

    @saeft_2003 Mein IG nimmt auch immer den weiter entfernten AP statt dem der 4m entfernt steht. Roaming ist in dem WLAN deaktiviert, da viele IOT Geräte damit nicht klar kommen. Das IG vermutlich gleich dreimal nicht.

    MrLarodosM Offline
    MrLarodosM Offline
    MrLarodos
    schrieb am zuletzt editiert von MrLarodos
    #193

    @hacki11 Ich habe das WLAN so konfiguriert, dass die Geräte in einem separaten WLAN in 2.4Ghz am jeweils nächstliegenden AP eingesperrt sind. Habe kurz ein Shellscript für Linux mit Chat GPT entwickelt, was ne csv mitloggt (im Subfolder "Log" im Scriptordner. Inhalt der CSV:

    Name;Zeitstempel;Erreichbar;Zeit(ms)
    Klima-Spitzboden;2025-05-15 13:39:18;True;30.4
    Klima-K1;2025-05-15 13:39:18;True;85.3
    Klima-K2;2025-05-15 13:39:18;True;95.8
    

    Ist auch ein Billigfrontend drauf:
    6f150060-cc27-493e-a71d-e04fd9d3fcbe-grafik.png

    Hier das Script (IPs und Aliase anpassen!):

    #!/bin/bash
    
    # Intervall in Sekunden
    INTERVAL=5
    
    # IP-Adressen und Aliasnamen
    IPS=("192.168.120.135" "192.168.120.138" "192.168.120.137" "192.168.120.136" "192.168.120.166")
    ALIASES=("Klima-Spitzboden" "Klima-K1" "Klima-K2" "Klima-Esszimmer" "Klima-Buero")
    
    # Logging-Verzeichnis und -Datei
    SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    LOG_DIR="$SCRIPT_DIR/log"
    CSV_FILE="$LOG_DIR/ping_log.csv"
    mkdir -p "$LOG_DIR"
    
    # CSV-Datei initialisieren, falls noch nicht vorhanden
    if [ ! -f "$CSV_FILE" ]; then
        echo "Name;Zeitstempel;Erreichbar;Zeit(ms)" >> "$CSV_FILE"
    fi
    
    # Statusspeicher
    declare -A LAST_RESPONSE
    declare -A LAST_SEEN_DOWN
    
    # Spaltenbreiten
    WIDTH_ALIAS=20
    WIDTH_REACH=12
    WIDTH_TIME=10
    WIDTH_LASTDOWN=25
    
    # Initialisieren
    for alias in "${ALIASES[@]}"; do
        LAST_RESPONSE["$alias"]="-"
        LAST_SEEN_DOWN["$alias"]="-"
    done
    
    # Letzte bekannte False-Zeiten aus CSV rekonstruieren
    if [ -f "$CSV_FILE" ]; then
        for alias in "${ALIASES[@]}"; do
            last_false=$(grep "^$alias;" "$CSV_FILE" | grep ";False;" | tail -n 1 | cut -d';' -f2)
            if [ -n "$last_false" ]; then
                epoch=$(date -d "$last_false" +%s 2>/dev/null)
                if [ -n "$epoch" ]; then
                    LAST_SEEN_DOWN["$alias"]=$epoch
                fi
            fi
        done
    fi
    
    # Funktion für menschenlesbare Zeitangabe
    time_diff_human() {
        local last_time=$1
        [[ "$last_time" == "-" ]] && echo "-" && return
        local now=$(date +%s)
        local diff=$((now - last_time))
        (( diff < 60 )) && echo "vor $diff Sek." && return
        (( diff < 3600 )) && echo "vor $((diff / 60)) Min." && return
        echo "vor $((diff / 3600)) Std."
    }
    
    # Hauptschleife
    while true; do
        clear
    
        printf "%-${WIDTH_ALIAS}s | %-${WIDTH_REACH}s | %-${WIDTH_TIME}s | %-${WIDTH_LASTDOWN}s\n" "Alias" "Erreichbar" "Zeit(ms)" "Nicht erreichbar vor"
        printf "%-${WIDTH_ALIAS}s-+-%-${WIDTH_REACH}s-+-%-${WIDTH_TIME}s-+-%-${WIDTH_LASTDOWN}s\n" \
            "$(printf '─%.0s' $(seq 1 $WIDTH_ALIAS))" \
            "$(printf '─%.0s' $(seq 1 $WIDTH_REACH))" \
            "$(printf '─%.0s' $(seq 1 $WIDTH_TIME))" \
            "$(printf '─%.0s' $(seq 1 $WIDTH_LASTDOWN))"
    
        for i in "${!IPS[@]}"; do
            IP=${IPS[$i]}
            NAME=${ALIASES[$i]}
            TIMESTAMP_HUMAN=$(date '+%Y-%m-%d %H:%M:%S')
            TIMESTAMP_EPOCH=$(date +%s)
            PING_OUTPUT=$(ping -c 1 -W 1 "$IP" 2>/dev/null)
    
            if echo "$PING_OUTPUT" | grep -q "1 received"; then
                TIME_MS=$(echo "$PING_OUTPUT" | grep "time=" | sed -E 's/.*time=([0-9.]+) ms/\1/')
                LAST_RESPONSE["$NAME"]=$TIME_MS
                REACH="Ja"
                DOWNTIME=$(time_diff_human "${LAST_SEEN_DOWN[$NAME]}")
                echo "$NAME;$TIMESTAMP_HUMAN;True;$TIME_MS" >> "$CSV_FILE"
            else
                REACH="Nein"
                TIME_MS="-"
                if [[ "${LAST_SEEN_DOWN[$NAME]}" == "-" ]]; then
                    LAST_SEEN_DOWN["$NAME"]=$TIMESTAMP_EPOCH
                fi
                DOWNTIME=$(time_diff_human "${LAST_SEEN_DOWN[$NAME]}")
                echo "$NAME;$TIMESTAMP_HUMAN;False;" >> "$CSV_FILE"
            fi
    
            printf "%-${WIDTH_ALIAS}s | %-${WIDTH_REACH}s | %-${WIDTH_TIME}s | %-${WIDTH_LASTDOWN}s\n" \
                "$NAME" "$REACH" "${LAST_RESPONSE[$NAME]}" "$DOWNTIME"
        done
    
        sleep "$INTERVAL"
    done
    

    Falls Ihr irgendwo Linux habt, könnt Ihr das da laufen lassen.

    Und hier das Script, um die CSV als Bild darzustellen:

    #!/usr/bin/env python3
    
    import pandas as pd
    import matplotlib.pyplot as plt
    from datetime import timedelta
    import matplotlib.dates as mdates
    import os
    
    # 🕒 Benutzerabfrage zum Stundenbereich
    try:
        user_input = input("Wie viele Stunden zurück anzeigen? [Default: 24]: ").strip()
        MAX_HOURS = int(user_input) if user_input else 24
    except Exception:
        MAX_HOURS = 24
    
    # 📥 CSV einlesen
    CSV_PATH = "./log/ping_log.csv"
    df = pd.read_csv(CSV_PATH, sep=';')
    df['Zeitstempel'] = pd.to_datetime(df['Zeitstempel'], format="%Y-%m-%d %H:%M:%S")
    df['Farbe'] = df['Erreichbar'].apply(lambda x: 'green' if str(x).strip().lower() == 'true' else 'red')
    df['Erreichbar_bool'] = df['Erreichbar'].apply(lambda x: str(x).strip().lower() == 'true')
    
    # 🧭 Zeitbereich setzen
    latest_time = df['Zeitstempel'].max()
    earliest_time = df['Zeitstempel'].min()
    start_time = max(earliest_time, latest_time - timedelta(hours=MAX_HOURS))
    df = df[df['Zeitstempel'] >= start_time].copy()
    
    # 📋 Aliasnamen extrahieren
    aliases = df['Name'].unique()
    aliases_sorted = list(aliases)
    
    # 📁 Diagrammverzeichnis erstellen
    output_dir = "./diagramm_pix"
    os.makedirs(output_dir, exist_ok=True)
    
    # 📊 Plot vorbereiten
    fig, ax = plt.subplots(figsize=(14, len(aliases_sorted) * 1.2))
    
    def plot_status_blocks(data, y_pos):
        current_color = None
        block_start = None
        for _, row in data.iterrows():
            color = row['Farbe']
            timestamp = row['Zeitstempel']
            if color != current_color:
                if current_color is not None:
                    duration = (timestamp - block_start).total_seconds()
                    ax.barh(
                        y=y_pos,
                        width=duration / 3600,
                        left=block_start,
                        height=0.6,
                        color=current_color,
                        edgecolor='none'
                    )
                block_start = timestamp
                current_color = color
        if block_start is not None and current_color is not None:
            duration = (latest_time - block_start).total_seconds()
            ax.barh(
                y=y_pos,
                width=duration / 3600,
                left=block_start,
                height=0.6,
                color=current_color,
                edgecolor='none'
            )
    
    for i, alias in enumerate(aliases_sorted):
        data = df[df['Name'] == alias].sort_values(by='Zeitstempel')
        plot_status_blocks(data, i)
    
    # 📐 Achsen und Format
    ax.set_yticks(range(len(aliases_sorted)))
    ax.set_yticklabels(aliases_sorted)
    ax.set_xlim(start_time, latest_time)
    ax.invert_yaxis()
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
    ax.set_xlabel("Uhrzeit")
    ax.set_title("Erreichbarkeit der IPs – zusammenhängende Zustandsbereiche")
    plt.grid(axis='x', linestyle='--', alpha=0.5)
    plt.tight_layout()
    
    # 💾 Bild speichern
    image_filename = f"{output_dir}/ping_status_{latest_time.strftime('%Y%m%d_%H%M%S')}.png"
    plt.savefig(image_filename)
    plt.show()
    
    # 📋 Zusammenfassung pro Alias
    print("\nZusammenfassung:")
    total_minutes = MAX_HOURS * 60
    
    for alias in aliases_sorted:
        alias_data = df[df['Name'] == alias].sort_values(by='Zeitstempel')
        alias_data['diff'] = alias_data['Zeitstempel'].diff().dt.total_seconds().fillna(0)
    
        # Statuswechsel ermitteln
        alias_data['is_new_block'] = (alias_data['Erreichbar_bool'] != alias_data['Erreichbar_bool'].shift())
        alias_data['block_id'] = alias_data['is_new_block'].cumsum()
    
        # Offline-Blöcke
        false_blocks = alias_data[alias_data['Erreichbar_bool'] == False]
        grouped = false_blocks.groupby('block_id')
    
        total_offline_secs = grouped['diff'].sum().sum()
        total_offline_minutes = round(total_offline_secs / 60, 2)
    
        total_outages = grouped.ngroups
        outages_per_hour = round(total_outages / MAX_HOURS, 2)
        avg_offline_per_hour = round(total_offline_minutes / MAX_HOURS, 2)
    
        # Antwortzeiten nur bei True
        true_responses = alias_data[alias_data['Erreichbar_bool'] == True].copy()
        true_responses['Zeit(ms)'] = pd.to_numeric(true_responses['Zeit(ms)'], errors='coerce')
        min_time = round(true_responses['Zeit(ms)'].min(), 2)
        avg_time = round(true_responses['Zeit(ms)'].mean(), 2)
        max_time = round(true_responses['Zeit(ms)'].max(), 2)
    
        print(f"{alias}:")
        print(f"  Gesamtofflinezeit:       {total_offline_minutes:.2f} Min")
        print(f"  Ø Offlinezeit/Stunde:    {avg_offline_per_hour:.2f} Min")
        print(f"  Gesamtzahl Ausfälle:     {total_outages}")
        print(f"  Ø Ausfälle/Stunde:       {outages_per_hour}")
        print(f"  Antwortzeit (Min/Ø/Max): {min_time:.2f} / {avg_time:.2f} / {max_time:.2f} ms\n")
    

    «Underground werden mit Stil»

    MrLarodosM 1 Antwort Letzte Antwort
    0
    • MrLarodosM MrLarodos

      @hacki11 Ich habe das WLAN so konfiguriert, dass die Geräte in einem separaten WLAN in 2.4Ghz am jeweils nächstliegenden AP eingesperrt sind. Habe kurz ein Shellscript für Linux mit Chat GPT entwickelt, was ne csv mitloggt (im Subfolder "Log" im Scriptordner. Inhalt der CSV:

      Name;Zeitstempel;Erreichbar;Zeit(ms)
      Klima-Spitzboden;2025-05-15 13:39:18;True;30.4
      Klima-K1;2025-05-15 13:39:18;True;85.3
      Klima-K2;2025-05-15 13:39:18;True;95.8
      

      Ist auch ein Billigfrontend drauf:
      6f150060-cc27-493e-a71d-e04fd9d3fcbe-grafik.png

      Hier das Script (IPs und Aliase anpassen!):

      #!/bin/bash
      
      # Intervall in Sekunden
      INTERVAL=5
      
      # IP-Adressen und Aliasnamen
      IPS=("192.168.120.135" "192.168.120.138" "192.168.120.137" "192.168.120.136" "192.168.120.166")
      ALIASES=("Klima-Spitzboden" "Klima-K1" "Klima-K2" "Klima-Esszimmer" "Klima-Buero")
      
      # Logging-Verzeichnis und -Datei
      SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
      LOG_DIR="$SCRIPT_DIR/log"
      CSV_FILE="$LOG_DIR/ping_log.csv"
      mkdir -p "$LOG_DIR"
      
      # CSV-Datei initialisieren, falls noch nicht vorhanden
      if [ ! -f "$CSV_FILE" ]; then
          echo "Name;Zeitstempel;Erreichbar;Zeit(ms)" >> "$CSV_FILE"
      fi
      
      # Statusspeicher
      declare -A LAST_RESPONSE
      declare -A LAST_SEEN_DOWN
      
      # Spaltenbreiten
      WIDTH_ALIAS=20
      WIDTH_REACH=12
      WIDTH_TIME=10
      WIDTH_LASTDOWN=25
      
      # Initialisieren
      for alias in "${ALIASES[@]}"; do
          LAST_RESPONSE["$alias"]="-"
          LAST_SEEN_DOWN["$alias"]="-"
      done
      
      # Letzte bekannte False-Zeiten aus CSV rekonstruieren
      if [ -f "$CSV_FILE" ]; then
          for alias in "${ALIASES[@]}"; do
              last_false=$(grep "^$alias;" "$CSV_FILE" | grep ";False;" | tail -n 1 | cut -d';' -f2)
              if [ -n "$last_false" ]; then
                  epoch=$(date -d "$last_false" +%s 2>/dev/null)
                  if [ -n "$epoch" ]; then
                      LAST_SEEN_DOWN["$alias"]=$epoch
                  fi
              fi
          done
      fi
      
      # Funktion für menschenlesbare Zeitangabe
      time_diff_human() {
          local last_time=$1
          [[ "$last_time" == "-" ]] && echo "-" && return
          local now=$(date +%s)
          local diff=$((now - last_time))
          (( diff < 60 )) && echo "vor $diff Sek." && return
          (( diff < 3600 )) && echo "vor $((diff / 60)) Min." && return
          echo "vor $((diff / 3600)) Std."
      }
      
      # Hauptschleife
      while true; do
          clear
      
          printf "%-${WIDTH_ALIAS}s | %-${WIDTH_REACH}s | %-${WIDTH_TIME}s | %-${WIDTH_LASTDOWN}s\n" "Alias" "Erreichbar" "Zeit(ms)" "Nicht erreichbar vor"
          printf "%-${WIDTH_ALIAS}s-+-%-${WIDTH_REACH}s-+-%-${WIDTH_TIME}s-+-%-${WIDTH_LASTDOWN}s\n" \
              "$(printf '─%.0s' $(seq 1 $WIDTH_ALIAS))" \
              "$(printf '─%.0s' $(seq 1 $WIDTH_REACH))" \
              "$(printf '─%.0s' $(seq 1 $WIDTH_TIME))" \
              "$(printf '─%.0s' $(seq 1 $WIDTH_LASTDOWN))"
      
          for i in "${!IPS[@]}"; do
              IP=${IPS[$i]}
              NAME=${ALIASES[$i]}
              TIMESTAMP_HUMAN=$(date '+%Y-%m-%d %H:%M:%S')
              TIMESTAMP_EPOCH=$(date +%s)
              PING_OUTPUT=$(ping -c 1 -W 1 "$IP" 2>/dev/null)
      
              if echo "$PING_OUTPUT" | grep -q "1 received"; then
                  TIME_MS=$(echo "$PING_OUTPUT" | grep "time=" | sed -E 's/.*time=([0-9.]+) ms/\1/')
                  LAST_RESPONSE["$NAME"]=$TIME_MS
                  REACH="Ja"
                  DOWNTIME=$(time_diff_human "${LAST_SEEN_DOWN[$NAME]}")
                  echo "$NAME;$TIMESTAMP_HUMAN;True;$TIME_MS" >> "$CSV_FILE"
              else
                  REACH="Nein"
                  TIME_MS="-"
                  if [[ "${LAST_SEEN_DOWN[$NAME]}" == "-" ]]; then
                      LAST_SEEN_DOWN["$NAME"]=$TIMESTAMP_EPOCH
                  fi
                  DOWNTIME=$(time_diff_human "${LAST_SEEN_DOWN[$NAME]}")
                  echo "$NAME;$TIMESTAMP_HUMAN;False;" >> "$CSV_FILE"
              fi
      
              printf "%-${WIDTH_ALIAS}s | %-${WIDTH_REACH}s | %-${WIDTH_TIME}s | %-${WIDTH_LASTDOWN}s\n" \
                  "$NAME" "$REACH" "${LAST_RESPONSE[$NAME]}" "$DOWNTIME"
          done
      
          sleep "$INTERVAL"
      done
      

      Falls Ihr irgendwo Linux habt, könnt Ihr das da laufen lassen.

      Und hier das Script, um die CSV als Bild darzustellen:

      #!/usr/bin/env python3
      
      import pandas as pd
      import matplotlib.pyplot as plt
      from datetime import timedelta
      import matplotlib.dates as mdates
      import os
      
      # 🕒 Benutzerabfrage zum Stundenbereich
      try:
          user_input = input("Wie viele Stunden zurück anzeigen? [Default: 24]: ").strip()
          MAX_HOURS = int(user_input) if user_input else 24
      except Exception:
          MAX_HOURS = 24
      
      # 📥 CSV einlesen
      CSV_PATH = "./log/ping_log.csv"
      df = pd.read_csv(CSV_PATH, sep=';')
      df['Zeitstempel'] = pd.to_datetime(df['Zeitstempel'], format="%Y-%m-%d %H:%M:%S")
      df['Farbe'] = df['Erreichbar'].apply(lambda x: 'green' if str(x).strip().lower() == 'true' else 'red')
      df['Erreichbar_bool'] = df['Erreichbar'].apply(lambda x: str(x).strip().lower() == 'true')
      
      # 🧭 Zeitbereich setzen
      latest_time = df['Zeitstempel'].max()
      earliest_time = df['Zeitstempel'].min()
      start_time = max(earliest_time, latest_time - timedelta(hours=MAX_HOURS))
      df = df[df['Zeitstempel'] >= start_time].copy()
      
      # 📋 Aliasnamen extrahieren
      aliases = df['Name'].unique()
      aliases_sorted = list(aliases)
      
      # 📁 Diagrammverzeichnis erstellen
      output_dir = "./diagramm_pix"
      os.makedirs(output_dir, exist_ok=True)
      
      # 📊 Plot vorbereiten
      fig, ax = plt.subplots(figsize=(14, len(aliases_sorted) * 1.2))
      
      def plot_status_blocks(data, y_pos):
          current_color = None
          block_start = None
          for _, row in data.iterrows():
              color = row['Farbe']
              timestamp = row['Zeitstempel']
              if color != current_color:
                  if current_color is not None:
                      duration = (timestamp - block_start).total_seconds()
                      ax.barh(
                          y=y_pos,
                          width=duration / 3600,
                          left=block_start,
                          height=0.6,
                          color=current_color,
                          edgecolor='none'
                      )
                  block_start = timestamp
                  current_color = color
          if block_start is not None and current_color is not None:
              duration = (latest_time - block_start).total_seconds()
              ax.barh(
                  y=y_pos,
                  width=duration / 3600,
                  left=block_start,
                  height=0.6,
                  color=current_color,
                  edgecolor='none'
              )
      
      for i, alias in enumerate(aliases_sorted):
          data = df[df['Name'] == alias].sort_values(by='Zeitstempel')
          plot_status_blocks(data, i)
      
      # 📐 Achsen und Format
      ax.set_yticks(range(len(aliases_sorted)))
      ax.set_yticklabels(aliases_sorted)
      ax.set_xlim(start_time, latest_time)
      ax.invert_yaxis()
      ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
      ax.set_xlabel("Uhrzeit")
      ax.set_title("Erreichbarkeit der IPs – zusammenhängende Zustandsbereiche")
      plt.grid(axis='x', linestyle='--', alpha=0.5)
      plt.tight_layout()
      
      # 💾 Bild speichern
      image_filename = f"{output_dir}/ping_status_{latest_time.strftime('%Y%m%d_%H%M%S')}.png"
      plt.savefig(image_filename)
      plt.show()
      
      # 📋 Zusammenfassung pro Alias
      print("\nZusammenfassung:")
      total_minutes = MAX_HOURS * 60
      
      for alias in aliases_sorted:
          alias_data = df[df['Name'] == alias].sort_values(by='Zeitstempel')
          alias_data['diff'] = alias_data['Zeitstempel'].diff().dt.total_seconds().fillna(0)
      
          # Statuswechsel ermitteln
          alias_data['is_new_block'] = (alias_data['Erreichbar_bool'] != alias_data['Erreichbar_bool'].shift())
          alias_data['block_id'] = alias_data['is_new_block'].cumsum()
      
          # Offline-Blöcke
          false_blocks = alias_data[alias_data['Erreichbar_bool'] == False]
          grouped = false_blocks.groupby('block_id')
      
          total_offline_secs = grouped['diff'].sum().sum()
          total_offline_minutes = round(total_offline_secs / 60, 2)
      
          total_outages = grouped.ngroups
          outages_per_hour = round(total_outages / MAX_HOURS, 2)
          avg_offline_per_hour = round(total_offline_minutes / MAX_HOURS, 2)
      
          # Antwortzeiten nur bei True
          true_responses = alias_data[alias_data['Erreichbar_bool'] == True].copy()
          true_responses['Zeit(ms)'] = pd.to_numeric(true_responses['Zeit(ms)'], errors='coerce')
          min_time = round(true_responses['Zeit(ms)'].min(), 2)
          avg_time = round(true_responses['Zeit(ms)'].mean(), 2)
          max_time = round(true_responses['Zeit(ms)'].max(), 2)
      
          print(f"{alias}:")
          print(f"  Gesamtofflinezeit:       {total_offline_minutes:.2f} Min")
          print(f"  Ø Offlinezeit/Stunde:    {avg_offline_per_hour:.2f} Min")
          print(f"  Gesamtzahl Ausfälle:     {total_outages}")
          print(f"  Ø Ausfälle/Stunde:       {outages_per_hour}")
          print(f"  Antwortzeit (Min/Ø/Max): {min_time:.2f} / {avg_time:.2f} / {max_time:.2f} ms\n")
      
      MrLarodosM Offline
      MrLarodosM Offline
      MrLarodos
      schrieb am zuletzt editiert von MrLarodos
      #194

      @mrlarodos Habe mir noch ein Script gebaut, das die CSV als Diagramm visualisiert:
      0cae9fa0-2530-432a-a78e-056fb5f6e743-ping_status_20250515_193136.png

      Und hier die Zusammenfassung der bisherigen Messung:
      Klima-Spitzboden:
      Gesamtofflinezeit: 3.50 Min
      Ø Offlinezeit/Stunde: 0.15 Min
      Gesamtzahl Ausfälle: 19
      Ø Ausfälle/Stunde: 0.79
      Antwortzeit (Min/Ø/Max): 4.30 / 82.30 / 878.00 ms

      Klima-K1:
      Gesamtofflinezeit: 6.25 Min
      Ø Offlinezeit/Stunde: 0.26 Min
      Gesamtzahl Ausfälle: 21
      Ø Ausfälle/Stunde: 0.88
      Antwortzeit (Min/Ø/Max): 4.09 / 77.67 / 452.00 ms

      Klima-K2:
      Gesamtofflinezeit: 6.42 Min
      Ø Offlinezeit/Stunde: 0.27 Min
      Gesamtzahl Ausfälle: 28
      Ø Ausfälle/Stunde: 1.17
      Antwortzeit (Min/Ø/Max): 3.88 / 85.14 / 680.00 ms

      Klima-Esszimmer:
      Gesamtofflinezeit: 3.35 Min
      Ø Offlinezeit/Stunde: 0.14 Min
      Gesamtzahl Ausfälle: 8
      Ø Ausfälle/Stunde: 0.33
      Antwortzeit (Min/Ø/Max): 3.74 / 78.01 / 979.00 ms

      Klima-Buero:
      Gesamtofflinezeit: 0.18 Min
      Ø Offlinezeit/Stunde: 0.01 Min
      Gesamtzahl Ausfälle: 2
      Ø Ausfälle/Stunde: 0.08
      Antwortzeit (Min/Ø/Max): 4.20 / 73.71 / 993.00 ms

      Hm. Hilft uns das sehr? :)

      «Underground werden mit Stil»

      H 1 Antwort Letzte Antwort
      0
      • MrLarodosM MrLarodos

        @mrlarodos Habe mir noch ein Script gebaut, das die CSV als Diagramm visualisiert:
        0cae9fa0-2530-432a-a78e-056fb5f6e743-ping_status_20250515_193136.png

        Und hier die Zusammenfassung der bisherigen Messung:
        Klima-Spitzboden:
        Gesamtofflinezeit: 3.50 Min
        Ø Offlinezeit/Stunde: 0.15 Min
        Gesamtzahl Ausfälle: 19
        Ø Ausfälle/Stunde: 0.79
        Antwortzeit (Min/Ø/Max): 4.30 / 82.30 / 878.00 ms

        Klima-K1:
        Gesamtofflinezeit: 6.25 Min
        Ø Offlinezeit/Stunde: 0.26 Min
        Gesamtzahl Ausfälle: 21
        Ø Ausfälle/Stunde: 0.88
        Antwortzeit (Min/Ø/Max): 4.09 / 77.67 / 452.00 ms

        Klima-K2:
        Gesamtofflinezeit: 6.42 Min
        Ø Offlinezeit/Stunde: 0.27 Min
        Gesamtzahl Ausfälle: 28
        Ø Ausfälle/Stunde: 1.17
        Antwortzeit (Min/Ø/Max): 3.88 / 85.14 / 680.00 ms

        Klima-Esszimmer:
        Gesamtofflinezeit: 3.35 Min
        Ø Offlinezeit/Stunde: 0.14 Min
        Gesamtzahl Ausfälle: 8
        Ø Ausfälle/Stunde: 0.33
        Antwortzeit (Min/Ø/Max): 3.74 / 78.01 / 979.00 ms

        Klima-Buero:
        Gesamtofflinezeit: 0.18 Min
        Ø Offlinezeit/Stunde: 0.01 Min
        Gesamtzahl Ausfälle: 2
        Ø Ausfälle/Stunde: 0.08
        Antwortzeit (Min/Ø/Max): 4.20 / 73.71 / 993.00 ms

        Hm. Hilft uns das sehr? :)

        H Offline
        H Offline
        hacki11
        schrieb am zuletzt editiert von
        #195

        @mrlarodos Zur Sicherheit mal den Adapter stoppen und prüfen ob die Offlinezeit dadurch beeinflusst wird. Falls nicht ist zumindest der Adapter raus 🫠

        MrLarodosM 1 Antwort Letzte Antwort
        0
        • H hacki11

          @mrlarodos Zur Sicherheit mal den Adapter stoppen und prüfen ob die Offlinezeit dadurch beeinflusst wird. Falls nicht ist zumindest der Adapter raus 🫠

          MrLarodosM Offline
          MrLarodosM Offline
          MrLarodos
          schrieb am zuletzt editiert von
          #196

          @hacki11 Gute Idee :) Ich hoffe, dann ist alles grün :grimacing: <sleep canceled> ist dann angesagt :laughing:

          «Underground werden mit Stil»

          MrLarodosM H 2 Antworten Letzte Antwort
          0
          • MrLarodosM MrLarodos

            @hacki11 Gute Idee :) Ich hoffe, dann ist alles grün :grimacing: <sleep canceled> ist dann angesagt :laughing:

            MrLarodosM Offline
            MrLarodosM Offline
            MrLarodos
            schrieb am zuletzt editiert von
            #197

            @mrlarodos So, der Adapter ist aus. Nun wird es spannend :)
            c07d497a-7485-46c1-a821-a2732e978c28-grafik.png

            «Underground werden mit Stil»

            1 Antwort Letzte Antwort
            0
            • MrLarodosM MrLarodos

              @hacki11 Gute Idee :) Ich hoffe, dann ist alles grün :grimacing: <sleep canceled> ist dann angesagt :laughing:

              H Offline
              H Offline
              hacki11
              schrieb am zuletzt editiert von
              #198

              @mrlarodos :sweat:

              MrLarodosM 1 Antwort Letzte Antwort
              1
              • H hacki11

                @mrlarodos :sweat:

                MrLarodosM Offline
                MrLarodosM Offline
                MrLarodos
                schrieb am zuletzt editiert von MrLarodos
                #199

                @hacki11 42ee90ec-5852-4fdd-8764-a38cdd49aaf6-grafik.png

                Ich lass mal noch ein paar Stunden laufen und dann checken wir. Ich vermute eher, dass die Verbindung von den Dingern einfach nicht besonders stabil ist. Büro besonders stabil, weil der AP 2 Meter in Sichtlinie liegt. Schauen wir mal.

                «Underground werden mit Stil»

                MrLarodosM 1 Antwort Letzte Antwort
                0
                • MrLarodosM MrLarodos

                  @hacki11 42ee90ec-5852-4fdd-8764-a38cdd49aaf6-grafik.png

                  Ich lass mal noch ein paar Stunden laufen und dann checken wir. Ich vermute eher, dass die Verbindung von den Dingern einfach nicht besonders stabil ist. Büro besonders stabil, weil der AP 2 Meter in Sichtlinie liegt. Schauen wir mal.

                  MrLarodosM Offline
                  MrLarodosM Offline
                  MrLarodos
                  schrieb am zuletzt editiert von
                  #200

                  @mrlarodos So, um 20:20 Uhr hatte ich den Adapter deaktiviert:
                  4ef83d4c-63d6-483f-a09f-afc6ddcb1e30-grafik.png
                  Ab der blauen Linie also. Danach sind zwar weniger kleine Abbrüche erkennbar, aber das Phänomen ist nicht weg.

                  Signalstärke ist bei Klima-K1, Klima-K2 und Spitzboden bei ca. -47 dBm / -50 dBm, also kein großer Unterschied und auch kein erklärend schlechter Wert, oder?

                  Im Büro sind es -31 dBm und Esszimmer -35 dBm, da beide Sichtline zum AP haben. K1, K2 und Spitzboden sind auch nur 1 - 3 Meter vom AP entfernt, wenn auch ohne Sichtlinie.

                  Feste Kopplung an den jeweils nächsten AP und separates, eigenes WLAN mit 2,4 Ghz. Bin da etwas ratlos und kann nur mutmaßen, dass die WLAN-Module einfach nicht sehr gut sind.

                  Dass der Adapter runtergefahren ist, die Objekte aber weiterhin als online angezeigt werden, kannst Du nicht ändern, oder? Falls es möglich ist bei proaktivem Abschalten des Adapters auch noch ein Stopscript laufen zu lassen, wäre ein offline in den Objekten und der "Summe" wünschenswert :)

                  Ansonsten kann man wohl nicht viel machen. Der fette Ausfall der Pingbarkeit von K2 ist schon Mist ...

                  LG MrLarodos

                  «Underground werden mit Stil»

                  H 1 Antwort Letzte Antwort
                  0
                  • MrLarodosM MrLarodos

                    @mrlarodos So, um 20:20 Uhr hatte ich den Adapter deaktiviert:
                    4ef83d4c-63d6-483f-a09f-afc6ddcb1e30-grafik.png
                    Ab der blauen Linie also. Danach sind zwar weniger kleine Abbrüche erkennbar, aber das Phänomen ist nicht weg.

                    Signalstärke ist bei Klima-K1, Klima-K2 und Spitzboden bei ca. -47 dBm / -50 dBm, also kein großer Unterschied und auch kein erklärend schlechter Wert, oder?

                    Im Büro sind es -31 dBm und Esszimmer -35 dBm, da beide Sichtline zum AP haben. K1, K2 und Spitzboden sind auch nur 1 - 3 Meter vom AP entfernt, wenn auch ohne Sichtlinie.

                    Feste Kopplung an den jeweils nächsten AP und separates, eigenes WLAN mit 2,4 Ghz. Bin da etwas ratlos und kann nur mutmaßen, dass die WLAN-Module einfach nicht sehr gut sind.

                    Dass der Adapter runtergefahren ist, die Objekte aber weiterhin als online angezeigt werden, kannst Du nicht ändern, oder? Falls es möglich ist bei proaktivem Abschalten des Adapters auch noch ein Stopscript laufen zu lassen, wäre ein offline in den Objekten und der "Summe" wünschenswert :)

                    Ansonsten kann man wohl nicht viel machen. Der fette Ausfall der Pingbarkeit von K2 ist schon Mist ...

                    LG MrLarodos

                    H Offline
                    H Offline
                    hacki11
                    schrieb am zuletzt editiert von hacki11
                    #201

                    @mrlarodos Ohne, dass der Adapter läuft kann man die Erreichbarkeit der IG nicht wissen. Offline ist hier dann genauso falsch wie online. Wie ist es denn bei den anderen Adaptern wie Shelly? Wird hier auch noch was vorm beenden verändert? Der letzte bekannte Zustand ist der beste den wir haben. Falls es um ne Vis geht bräuchte man evtl. den Adapterzustand oder?

                    Ansonsten gut analysiert. Wer mag ein WLan Modul zerlegen, damit wir sehen was da drin ist? Vielleicht findet man auch noch Infos in englischsprachigen Foren.

                    MrLarodosM 1 Antwort Letzte Antwort
                    0
                    • H Offline
                      H Offline
                      hacki11
                      schrieb am zuletzt editiert von hacki11
                      #202

                      Habt ihr den IG bereits feste IP Adressen zugewiesen? Glaube nicht, dass es was ändert aber das ist zumindest bei mir der Fall.

                      Hier nochmal der Thread mit der Bestätigung der stündlichen Restarts seitens MHI.
                      https://community.ui.com/questions/AC-Units-IOT-disconnecting-from-UniFi-Wi-Fi-at-regular-hourly-Intervals/821cd3e4-46a0-4d6b-8fd0-8d5cf182b90f

                      Dort ist auch die Rede von der Verwendung identischer Source-Ports für ausgehende Verbindungen, was bei NAT zu Problemen führen kann. Vermutlich aber lokal weniger ein Problem?

                      Ein anderer User spricht von ARP Paketen, die dem Netzwerk vorgaukeln, WF-RAC wäre der Router:
                      https://community.home-assistant.io/t/mitsubishi-wifi-module-wf-rac-smart-m-air/411025/142

                      Vielleicht einen Versuch wert, ein eigenes Subnetz + eigenes Wlan nur für ein IG aufzuspannen? Mit Ubiqiti ja recht schnell erledigt.

                      Welche Firmware habt ihr auf dem Modul? Meine:
                      mcuFirmwareVersion: 131
                      wirelessFirmwareVersion: 010

                      MrLarodosM 1 Antwort Letzte Antwort
                      0
                      • H hacki11

                        @mrlarodos Ohne, dass der Adapter läuft kann man die Erreichbarkeit der IG nicht wissen. Offline ist hier dann genauso falsch wie online. Wie ist es denn bei den anderen Adaptern wie Shelly? Wird hier auch noch was vorm beenden verändert? Der letzte bekannte Zustand ist der beste den wir haben. Falls es um ne Vis geht bräuchte man evtl. den Adapterzustand oder?

                        Ansonsten gut analysiert. Wer mag ein WLan Modul zerlegen, damit wir sehen was da drin ist? Vielleicht findet man auch noch Infos in englischsprachigen Foren.

                        MrLarodosM Offline
                        MrLarodosM Offline
                        MrLarodos
                        schrieb am zuletzt editiert von MrLarodos
                        #203

                        @hacki11 sagte in Mitsubishi Heavy Industries Split Klimaanlage:

                        Offline ist hier dann genauso falsch wie online

                        Hm, ich sehe, was Du meinst. Allerdings ist für mich eine Anzeige von "online" aus ioBroker-Sicht falsch. Es hilft niemandem, dass ein "online" zu sehen ist, obwohl der Adapter nachweislich off ist. Das "online" ist in diesem Kontext ja eher ein "Ich bin für ioBroker erreichbar" für mich. Das nun zu separieren in einen zusätzlichen Adapterstatus fände ich suboptimal. Wenn Du bei dem "online ist online" aus rein retzwerktechnischer Sicht bleibst, ist das für mich okay, da das eine reine Philosophiefrage ist und Du die Regeln machst ;) Ich würde mir dann aber ein "connected" oder ähnliches pro Innengerät wünschen, dass "true" ausgibt, wenn Adapter on & Innengerät online sind. Sobald entweder Adapter off oder Innengerät offline, dann "connected" = false. Gerne auch Daraus die "Summe" im Hauptknoten. Der soll true sein, wenn alle Innengeräte true, sonst false.

                        Ich brauche halt den Status, um in den Scripten und Visualisierungen einen nicht-Erreichbarkeit der Geräte verarbeiten zu können. Ob das nun an einem Adapter liegt der aus ist, oder an den Innengeräten die im Netzwerk offline sind, ist dafür ja nicht relevant. Wäre also eine coole Erweiterung und ich danke für die wohlwollende Prüfung :)

                        LG MrLarodos

                        «Underground werden mit Stil»

                        H 1 Antwort Letzte Antwort
                        0
                        • H hacki11

                          Habt ihr den IG bereits feste IP Adressen zugewiesen? Glaube nicht, dass es was ändert aber das ist zumindest bei mir der Fall.

                          Hier nochmal der Thread mit der Bestätigung der stündlichen Restarts seitens MHI.
                          https://community.ui.com/questions/AC-Units-IOT-disconnecting-from-UniFi-Wi-Fi-at-regular-hourly-Intervals/821cd3e4-46a0-4d6b-8fd0-8d5cf182b90f

                          Dort ist auch die Rede von der Verwendung identischer Source-Ports für ausgehende Verbindungen, was bei NAT zu Problemen führen kann. Vermutlich aber lokal weniger ein Problem?

                          Ein anderer User spricht von ARP Paketen, die dem Netzwerk vorgaukeln, WF-RAC wäre der Router:
                          https://community.home-assistant.io/t/mitsubishi-wifi-module-wf-rac-smart-m-air/411025/142

                          Vielleicht einen Versuch wert, ein eigenes Subnetz + eigenes Wlan nur für ein IG aufzuspannen? Mit Ubiqiti ja recht schnell erledigt.

                          Welche Firmware habt ihr auf dem Modul? Meine:
                          mcuFirmwareVersion: 131
                          wirelessFirmwareVersion: 010

                          MrLarodosM Offline
                          MrLarodosM Offline
                          MrLarodos
                          schrieb am zuletzt editiert von
                          #204

                          @hacki11 sagte in Mitsubishi Heavy Industries Split Klimaanlage:

                          eigenes Subnetz + eigenes Wlan nur für ein IG

                          Das ist bei mir im Büro bereits der Fall. Da ist ja auch alles grün. Ich kanns bei einem der anderen IG auch mal versuchen, aber das kann dann wohl nicht deren Ernst sein, falls das hilft. Dann hat Mitsu ein Problem und nicht wir ;)

                          «Underground werden mit Stil»

                          S H 2 Antworten Letzte Antwort
                          0
                          • MrLarodosM MrLarodos

                            @hacki11 sagte in Mitsubishi Heavy Industries Split Klimaanlage:

                            eigenes Subnetz + eigenes Wlan nur für ein IG

                            Das ist bei mir im Büro bereits der Fall. Da ist ja auch alles grün. Ich kanns bei einem der anderen IG auch mal versuchen, aber das kann dann wohl nicht deren Ernst sein, falls das hilft. Dann hat Mitsu ein Problem und nicht wir ;)

                            S Offline
                            S Offline
                            saeft_2003
                            Most Active
                            schrieb am zuletzt editiert von
                            #205

                            @mrlarodos

                            Das wäre super wenn du das testen könntest. Ich hab zwar auch unifi mit vielen APs bin aber kein Netzwerk Experte und würde das nur zur Not angehen.

                            1 Antwort Letzte Antwort
                            1
                            • MrLarodosM MrLarodos

                              @hacki11 sagte in Mitsubishi Heavy Industries Split Klimaanlage:

                              Offline ist hier dann genauso falsch wie online

                              Hm, ich sehe, was Du meinst. Allerdings ist für mich eine Anzeige von "online" aus ioBroker-Sicht falsch. Es hilft niemandem, dass ein "online" zu sehen ist, obwohl der Adapter nachweislich off ist. Das "online" ist in diesem Kontext ja eher ein "Ich bin für ioBroker erreichbar" für mich. Das nun zu separieren in einen zusätzlichen Adapterstatus fände ich suboptimal. Wenn Du bei dem "online ist online" aus rein retzwerktechnischer Sicht bleibst, ist das für mich okay, da das eine reine Philosophiefrage ist und Du die Regeln machst ;) Ich würde mir dann aber ein "connected" oder ähnliches pro Innengerät wünschen, dass "true" ausgibt, wenn Adapter on & Innengerät online sind. Sobald entweder Adapter off oder Innengerät offline, dann "connected" = false. Gerne auch Daraus die "Summe" im Hauptknoten. Der soll true sein, wenn alle Innengeräte true, sonst false.

                              Ich brauche halt den Status, um in den Scripten und Visualisierungen einen nicht-Erreichbarkeit der Geräte verarbeiten zu können. Ob das nun an einem Adapter liegt der aus ist, oder an den Innengeräten die im Netzwerk offline sind, ist dafür ja nicht relevant. Wäre also eine coole Erweiterung und ich danke für die wohlwollende Prüfung :)

                              LG MrLarodos

                              H Offline
                              H Offline
                              hacki11
                              schrieb am zuletzt editiert von hacki11
                              #206

                              @mrlarodos Kann deine Sichtweise nachvollziehen und auch der Sonoff Adapter macht das beispielsweise auch in dem es beim Stoppen die alive Datenpunkte auf false setzt. Ich bau das ein.

                              MrLarodosM 1 Antwort Letzte Antwort
                              1
                              • H hacki11

                                @mrlarodos Kann deine Sichtweise nachvollziehen und auch der Sonoff Adapter macht das beispielsweise auch in dem es beim Stoppen die alive Datenpunkte auf false setzt. Ich bau das ein.

                                MrLarodosM Offline
                                MrLarodosM Offline
                                MrLarodos
                                schrieb am zuletzt editiert von
                                #207

                                @hacki11 Danke Dir für den wie immer sehr konstruktiven und effizienten Austausch :) Ich freue mich wirklich sehr darüber :)

                                «Underground werden mit Stil»

                                H 1 Antwort Letzte Antwort
                                0
                                • S Offline
                                  S Offline
                                  saeft_2003
                                  Most Active
                                  schrieb am zuletzt editiert von saeft_2003
                                  #208

                                  Bitte löschen

                                  MrLarodosM 1 Antwort Letzte Antwort
                                  0
                                  • MrLarodosM MrLarodos

                                    @hacki11 Danke Dir für den wie immer sehr konstruktiven und effizienten Austausch :) Ich freue mich wirklich sehr darüber :)

                                    H Offline
                                    H Offline
                                    hacki11
                                    schrieb am zuletzt editiert von
                                    #209

                                    @mrlarodos done in latest: https://forum.iobroker.net/post/1272558

                                    1 Antwort Letzte Antwort
                                    1
                                    • S saeft_2003

                                      Bitte löschen

                                      MrLarodosM Offline
                                      MrLarodosM Offline
                                      MrLarodos
                                      schrieb am zuletzt editiert von
                                      #210

                                      @saeft_2003 Was soll ich löschen? :-o

                                      «Underground werden mit Stil»

                                      MrLarodosM S 2 Antworten Letzte Antwort
                                      0
                                      • MrLarodosM MrLarodos

                                        @saeft_2003 Was soll ich löschen? :-o

                                        MrLarodosM Offline
                                        MrLarodosM Offline
                                        MrLarodos
                                        schrieb am zuletzt editiert von
                                        #211

                                        @mrlarodos Super, danke :)

                                        «Underground werden mit Stil»

                                        1 Antwort Letzte Antwort
                                        0
                                        • MrLarodosM MrLarodos

                                          @saeft_2003 Was soll ich löschen? :-o

                                          S Offline
                                          S Offline
                                          saeft_2003
                                          Most Active
                                          schrieb am zuletzt editiert von
                                          #212

                                          @mrlarodos sagte in Mitsubishi Heavy Industries Split Klimaanlage:

                                          @saeft_2003 Was soll ich löschen? :-o

                                          Nein das hast du falsch verstanden. Ich habe ein Beitrag geschrieben der Käse war. Ich kann aber nur den Inhalt ändern und nicht komplett löschen. Deswegen ist das für die Mods, die können den Beitrag komplett löschen.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          784

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe