Hauptmenü

Neueste Beiträge

#91
MQTT / Aw: GOVEE2MQTT - Client mit we...
Letzter Beitrag von Dracolein - 22 Februar 2026, 14:40:14
Um mir selbst zu antworten,
Zitat{"state":"ON","brightness":$EVTPART1, "transition": 5}
hatte ich erfolglos probiert und dann die KI befragt, rausgekullert sind 2 notify_devices als workaround:

defmod notify_GoveeNeonEG_SmoothDim notify GoveeNeonEG:set:brightness.* { \
my $target = int($EVTPART1);; \
my $steps = 12;; \
my $duration = 3;; \
my $delay = $duration / $steps;; \
my $current = int(ReadingsVal("GoveeNeonEG", "brightness", 50));; \
my $stepsize = ($target - $current) / $steps;; \
for (my $i = 1;; $i <= $steps;; $i++) \
{ \
my $new = int($current + $i * $stepsize + 0.5);;\
$new = 0 if $new < 0;; $new = 100 if $new > 100;; \
InternalTimer(gettimeofday() + $i * $delay, sub { fhem("set GoveeNeonEG brightness $new") }, "smoothdim_".time()."_".$i);; } \
}

defmod notify_GoveeNeonEG_SmoothONOFF notify GoveeNeonEG:set:(on|off).* { \
my $target = ($EVTPART0 eq "on" ? 100 : 0);; \
my $steps = 10;; \
my $duration = 2;; \
my $delay = $duration / $steps;; \
my $current = int(ReadingsVal("GoveeNeonEG", "brightness", 50));; \
my $stepsize = ($target - $current) / $steps;; \
for (my $i = 1;; $i <= $steps;; $i++) \
{ \
my $new = int($current + $i * $stepsize + 0.5);; \
$new = 0 if $new < 0;; $new = 100 if $new > 100;; \
InternalTimer(gettimeofday() + $i * $delay, sub { fhem("set GoveeNeonEG brightness $new") }, "smooth_onoff_".time()."_".$i);; } \
}
Damit klappt das nun ganz hervorragend.

Eine Frage zu Govee2MQTT hätte ich noch an Euch: Seid Ihr im Stande, einen DIY-Effekt (gebaut in der Govee App) via Govee2mqtt zu aktivieren?
Falls ja, wie  :o  8)
#92
Unterstützende Dienste / Aw: JeeLink über Ser2Net / Fhe...
Letzter Beitrag von rudolfkoenig - 22 Februar 2026, 14:11:53
Ich meine das Problem liegt nicht in der Unterbrechung der Netzwerkverbindung, sondern dass ser2net die Verbindung zum Jeelink verliert.

JeeLink_ReadAnswer liefert dann "No data" oder "NO FD" zurueck
JeeLink_Clear akzeptiert nur Timeout oder kein Fehler, und ruft JeeLink_ReadAnswer in Endlosschleife auf => 100% CPU.

Mein Patch-Vorschlag:
--- FHEM/36_JeeLink.pm    (revision 30843)
+++ FHEM/36_JeeLink.pm    (working copy)
@@ -455,7 +455,7 @@
  $hash->{RA_Timeout} = 1;
  for(;;) {
    my ($err, undef) = JeeLink_ReadAnswer($hash, "Clear", 0, undef);
-    last if($err && $err =~ m/^Timeout/);
+    last if($err);
  }
  delete($hash->{RA_Timeout});
 }

Die Loesung der KI ist interessant: ich wuerde es mit dem Einbau eines zusaetzlichen Rades bei einer Reifenpanne vergleichen: Funktioniert, aber irgendwie unschoen.
Welche KI war das?

Warten wir ab, ob mein Verschlag funktioniert: ich kann es ja auch nicht unter realen Bedingungen testen.
#93
Sonstige Systeme / Aw: Support-Thread Modul 36_Sh...
Letzter Beitrag von Elektron - 22 Februar 2026, 14:08:32
Jetzt bin ich mir nicht sicher was Du meinst mit ,,wie hast Du den Shelly eingerichtet?"?
Also im FHEM ist nur der Shelly definiert mit:

defmod Zirkulationspumpe Shelly 192.168.2.187
attr Zirkulationspumpe model shellyplus1
attr Zirkulationspumpe verbose 5

Im Shelly selber habe ich zwei Aktionen definiert:

1.) ,,wieder an"
     Active time 5:00 - 21:00
     Event trigger ,,switch toggled off"
     Repeat when 300Sekunden
     Then do ,,Output(0); Output State: on; Flip value After 300 Seconds

2.) ,,wieder aus"
     Active time 5:00 - 21:00
     Event trigger ,,switch toggled on"
     Repeat when 30 Sekunden
     Then do ,,output(0); output State: Off; flip value after 4000 Seconds"

Vielen Dank und Grüße Michael
     
#94
EnOcean / Busware TCM515 EUL v2.3 Transp...
Letzter Beitrag von Damu - 22 Februar 2026, 13:42:02
Das Thema wurde geschlossen???

Was ist der TRANSPARENT Modus eigentlich.
Was ist der Unterschied?
Das ist doch nur aktivieren oder deaktivieren?
Wie wird das Aktiviert (FHEM)?
Ist es bei einem Neustart wieder Aus?
Hab auch eine TCM515 von Busware (Version?)
Aber auch TCM515 Uart Module von IP_Symcon.


#95
Sprachsteuerung / Aw: [37_echodevice] Amazon Ech...
Letzter Beitrag von cs-online - 22 Februar 2026, 13:24:26
das Problem habe ich nicht, gerade nochmal getestet, speak wird vernünftig ausgeführt mit der aktuellen Version aus dem FHEM-Update

Grüße

Christian
#96
Codeschnipsel / Aw: Räume room hinzufügen/entf...
Letzter Beitrag von Beta-User - 22 Februar 2026, 13:19:16
Es gäbe da auch noch den show-Befehl, mit dem man dynamisch Räume erstellen bzw. anzeigen kann.
#97
Sonstige Systeme / Aw: Support-Thread Modul 36_Sh...
Letzter Beitrag von Starkstrombastler - 22 Februar 2026, 13:18:20
Zitat von: Elektron am 22 Februar 2026, 10:45:58Bei mir steht der INTERVAL auf 60 Sekunden, ich schalte die Zirkulationspumpe für 5 Minuten ein und das je alle 4000 Sekunden
Wie hast du den Shelly eingerichtet, ich würde das gerne nachstellen.

Zitat von: Elektron am 22 Februar 2026, 10:45:58Wie schon geschrieben, ist die gleiche Konfiguration bis Weihnachten ohne Auffälligkeiten gelaufen, seit de, geht es immer wieder nicht. Gab es in diesem Zeitraum Änderungen?
Ja, schon, es gibt immer wieder Ergänzungen, aber seit Weihnachten nichts Grundlegendes am Timing.
#98
Codeschnipsel / Aw: Räume room hinzufügen/entf...
Letzter Beitrag von Tompsg - 22 Februar 2026, 13:01:19
Zitat von: rudolfkoenig am 22 Februar 2026, 11:45:45Alternativ koennte man auch attr -a verwenden: https://fhem.de/commandref_modular.html#attr


Fuer die Ueberlagerung von Befehlen gibt es auch eine Alternative: cmdalias: https://fhem.de/commandref_modular.html#cmdalias

Danke für den Hinweis. Mit attr -a konnte ich das nicht so "schön" umsetzen. Überlagerung muss ich mir mal ansehen.
#99
Codeschnipsel / Aw: Räume room hinzufügen/entf...
Letzter Beitrag von Tompsg - 22 Februar 2026, 12:59:51
Update mit devspec-Unterstützung:

##############################################
# $Id: 99_myAttrRoom.pm 0001 2026-02-22 12:30:00Z tompsg $
# FORK: Unterstützung für room +/- mit DevSpecs
##############################################
package main;

use strict;
use warnings;
use POSIX;

# Variable für die Sicherung der Originalfunktion
use vars qw($oldCommandAttr);

sub myAttrRoom_Initialize($$) {
    my ($hash) = @_;
    Log3(undef, 1, "myAttrRoom: custom CommandAttr hook loaded - support for room +/- enabled");
}

{
  no warnings 'redefine';
 
  # Sicherung der originalen Funktion (einmalig beim Laden)
  if (!defined($oldCommandAttr)) {
      $oldCommandAttr = \&main::CommandAttr;
  }

  # Überlagerung der Funktion CommandAttr
  *main::CommandAttr = sub {
    my ($cl, $param) = @_;
   
    # Zerlegen des Befehls (Device, Attribut, Neuer Wert)
    my ($dev, $attrName, $newVal) = split("[ \t]+", $param, 3);

    # Wir springen sofort raus, wenn:
    # - kein Attributname vorhanden ist
    # - es nicht um 'room' geht
    # - eine Option wie -a oder -silent verwendet wird (erkannt am führenden - in $dev)
    if (!$attrName || $attrName ne "room" || ($dev && $dev =~ /^-/)) {
        return $oldCommandAttr->($cl, $param);
    }
   
    # Prüfung: Wenn das erste Zeichen + oder - ist
    if ($newVal && $newVal =~ /^[\+\-]/) {

        # Prüfung: Abbruch bei Komma (mehrere Räume nicht erlaubt)
        if (substr($newVal, 1) =~ /,/) {
            return "Fehler: Mehrere Räume (Komma) sind bei +/- nicht erlaubt!";
        }

        # Fehler: Kein Name
        my $modifier = substr($newVal, 0, 1);

        # Zielraum isolieren und Leerzeichen säubern
        my $targetRoom = substr($newVal, 1);
        $targetRoom =~ s/^\s+|\s+$//g;
       
        if (length($targetRoom) == 0) {
            return "Fehler: Kein Raumname nach $modifier angegeben!";
        }
 
        # Fehler: Ziel nicht auffindbar
        my @devices = devspec2array($dev);
        if (scalar @devices == 0) {
             return "Fehler: Device/DevSpec $dev nicht gefunden!";
        }

        # --- VERARBEITUNG ---
        foreach my $singleDev (@devices) {
            # Aktuelle Räume des Devices laden
            my $currentRooms = $attr{$singleDev}{room} // "";
            my @roomList = split(',', $currentRooms);
          
            if ($modifier eq "+") {
                push(@roomList, $targetRoom) unless grep { $_ eq $targetRoom } @roomList;
            }
            elsif ($modifier eq "-") {
                @roomList = grep { $_ ne $targetRoom } @roomList;
            }

            # Bereinigung: Leere Einträge entfernen
            @roomList = grep { length($_) > 0 } @roomList;
            # Sortierung: Alphabetisch (Standard / Case-Sensitive)
            @roomList = sort { $a cmp $b } @roomList;
           
            # Wenn kein Raum mehr übrig ist: Attribut komplett löschen
            if (scalar @roomList == 0) {
                Log 3, "myAttrRoom: Letzter Raum entfernt, lösche Attribut room für $singleDev";
                main::CommandDeleteAttr($cl, "$singleDev room");
            } else {
                my $finalRooms = join(',', @roomList);
                Log 4, "myAttrRoom: $singleDev -> neue Räume: $finalRooms"; # Detail-Log
                $oldCommandAttr->($cl, "$singleDev room $finalRooms");
            }
        }
        return undef; # Erfolg
    }
 
    # Aufruf der Originallogik
    return $oldCommandAttr->($cl, $param);
  };
}

1;
#100
Sprachsteuerung / Aw: [37_echodevice] Amazon Ech...
Letzter Beitrag von Tompsg - 22 Februar 2026, 12:56:16
Ich habe mit der aktuellen Version das Problem, dass z.b speak nicht mehr funktioniert hat.