• chevron_right

      Antw:[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 20:50 edit

    Hab mich mit der RADIO-Option nicht wirklich beschäftigt seit dem daß das letzte mal Thema war, wenn ich das jetzt aber so mal kurz wieder angeschaut habe und glaube zu verstehen, drängt sich mir jetzt die Frage auf, ob man es nicht einfach dem User überlässt, ob er ein ip-Reading haben möchte oder nicht ?
    Wie wäre es mit einer "Option" bei beiden IODevs ? Bei M2C hat man die Wahl eine IP anzugeben bei Auswahl der Option und bei M2S  wird bei Auswahl der Option das Reading einfach aus dem Internal .*_CONN "geschrieben" ?


    • chevron_right

      Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 12:48 edit

    Hallo Reiner,

    zeig mal bitte die Ausgabe von

    list SonosBridge devicetopic setList
    announcementall schau ich mir an.

    Gruß Otto
    • wifi_tethering open_in_new

      This post is public

      forum.fhem.de /index.php/topic,111711.msg1258318.html

    • chevron_right

      Antw:[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 12:36 edit

    Hmm, vielleicht noch ein paar (zu?) schnelle Gedanken von meiner Seite:
    - Wenn man die IP über die Connection ausliest, setzt das zwingend einen MQTT2_SERVER voraus und funktioniert mit MQTT2_CLIENT nicht (was ich vermutlich in einer Woche vergessen haben werde). Von daher würde ich eher dazu neigen, die IP beim Anwenden des attrTemplate auszulesen (versuchsweise), oder eben alternativ vom User eingeben zu lassen. Speichern dann als Reading*?
    - Das mit der Groß- und Kleinschreibung ist auch irgendwie seltsam; eigentlich wäre es besser, auch diese Angabe direkt im attrTemplate ermitteln zu lassen (M2C kennt die CID nicht...), und dann wieder irgendwo zwischenzuspeichern. Da das Teil des Topics ist, wäre ggf. auch $DEVICETOPIC ein möglicher Speicherort.

    *Da M2D zwischenzeitlich auch die Option bietet, mehrere deviceTopics anzugeben, könnte man so auch die IP in ein Attribut verlagern. Stellt sich nur die Frage des "Regel-/Ausnahmeverhältnisses". Da anscheinend bisher die Zahl der M2C-Nutzer in der Minderheit ist, würde man mit dem Internal anfangen, und wenn das nichts liefert, deviceTopic anzapfen?

    • chevron_right

      Antw:Modul-Diskussion/Hilfe: MQTT_GENERIC_BRIDGE

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 12:25 edit

    Kann es sein, dass das limit des mosquitto-Servers überschritten ist: https://stackoverflow.com/questions/67344858/mqtt-mosquitto-broker-does-not-sent-all-retained-messages (1020 per default, wenn ich das richtig interpretiert habe).

    MQTT_GENERIC_BRIDGE ist mAn. auch weiter aktuell, es wurde nur daran gearbeitet, dass man es auch (besser) mit MQTT2_(CLIENT|SERVER) nutzen kann.

    • chevron_right

      Antw:[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 12:19 edit · 1 minute

    Und den Vorschlag aus #206 die IP in ein Reading zu schreiben ?


    Klar, kann man auch machen! Sorry, hatte da nicht mehr dran gedacht.
    Aber eigentlich steht ja die IP schon im Internal "IODev_CONN", dort allerdings noch mit Pre- und Suffix.
    Von mir aus kann die IP aber auch noch in ein Reading geschrieben werden. Dann würde ich das Reading allerdings nur neu schreiben wenn es sich auch geändert hat, denn es ist ja im Normalfall nicht davon auszugehen dass sich die IP bei jedem Abruf ändert.

    Zitat

    sub WLED_get {
      my $dev = shift // return;
      my $event = shift // undef;
      my $c;
      my $h = {
        sx => 'speed',
        ix => 'intensity',
        fp => 'palette',
        fx => 'effect',
        ps => 'preset'
      };
      for (keys %{$h}) {
        next if $event !~ m/(?<=<$_>)([\d]+)(?=<\/$_>)/x;
        if ($1 != ReadingsNum($dev,$h->{$_},-2)){
          $c->{$h->{$_}} = $1;
        }
      }
      my $io = InternalVal($dev,'LASTInputDev',AttrVal($dev,'IODev',InternalVal($dev,'IODev',undef)->{NAME})) // return defined $event ? $c : undef;
      my $ip = InternalVal($dev,$io.'_CONN',ReadingsVal($dev,'ip', undef)) =~ m/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/x ? $1 : return defined $event ? $c : undef;
      HttpUtils_NonblockingGet({
        url=>"http://$ip/json",
        callback=>sub($$$){
          my ($hash,$err,$data) = @_;
          WLED_setReadings($dev,$data,$ip);
        }
      });
      return defined $event ? $c : undef;
    }

    sub WLED_setReadings {
      my $dev  = shift // return;
      my $data = shift // return;
      my $ip   = shift // return;
      my $fx   = $data =~  m/effects..\[([^[]*?)]/x ? WLED_subst($1) : '';
      my $pl   = $data =~ m/palettes..\[([^[]*?)]/x ? WLED_subst($1) : '';
      my $hash = $defs{$dev};
      my @f    = split(',',$fx);
      my @p    = split(',',$pl);
      readingsBeginUpdate($hash);
      readingsBulkUpdate($hash,'effectname',$f[ReadingsNum($dev,'effect',0)]);
      readingsBulkUpdate($hash,'palettename',$p[ReadingsNum($dev,'palette',0)]);
      readingsEndUpdate($hash,1);...

    • chevron_right

      Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 12:14 edit

    Zitat

    notifyall funktioniert wie notify - das ist genau wie pauseall einfach durchgereicht https://svrooij.io/sonos2mqtt/global-commands.html
    PauseAll funktioniert bei mir bei allen Playern die etwas abspielen, also wo nicht der Eingang gespielt wird (TV zum Beispiel)


    Beides funktioniert nicht, es erfolgt keine Durchsage bzw. die Player spielen weiter!
    set SonosBridge PauseAll
    set SonosBridge notifyall 20 https://cdn.smartersoft-group.com/various/pull-bell-short.mp3

    Das funktioniert einwandfrei:
    set MQTT2_RINCON_542A1BBE498001400 notify 20 https://cdn.smartersoft-group.com/various/pull-bell-short.mp3
    Vielleicht hast du ja noch ein paar Tipps für mich!?

    Beste Grüße
    Reiner
    • wifi_tethering open_in_new

      This post is public

      forum.fhem.de /index.php/topic,111711.msg1258314.html

    • chevron_right

      Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 11:59 edit · 1 minute

    Zitat

    "Abstürzen" bedeutet FHEM startet neu?

    Der set Befehl ohne weitere Angabe von Parametern
    set SonosBridge announcementallerzeugt den Neustart und das im Log:
    2023.01.17 12:53:33.012 3: MQTT2_DEVICE set SonosBridge announcementall
    2023.01.17 12:53:33.017 1: PERL WARNING: Use of uninitialized value $text in concatenation (.) or string at ./FHEM/99_sonos2mqttUtils.pm line 38.
    2023.01.17 12:53:33.017 3: eval: my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $NAME=   $evalSpecials->{'%NAME'};{sonos2mqtt($NAME,$EVENT)}
    2023.01.17 12:53:33.017 3: setreading SonosTTS text   ;sleep 0.4 tts;set SonosTTS tts [SonosTTS:text];sleep SonosTTS:playing:.0 ;set SonosBridge notifyall [SonosTTS:vol] [SonosTTS:httpName];deletereading SonosTTS text : Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
    where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
    Can't locate object method "name" via package "Empty string, empty guess" (perhaps you forgot to load "Empty string, empty guess"?) at ./FHEM/98_Text2Speech.pm line 627.
    /entry.sh: line 621: kill: (17580) - No such process
    Abrupt daemon termination, starting 10s countdown .../entry.sh: line 625: kill: (17580) - No such process
     10/entry.sh: line 625: kill: (17580) - No such process
     9/entry.sh: line 625: kill: (17580) - No such process
     8/entry.sh: line 625: kill: (17580) - No such process
     7/entry.sh: line 625: kill: (17580) - No such process
     6/entry.sh: line 625: kill: (17580) - No such process
     5/entry.sh: line 625: kill: (17580) - No such process
     4/entry.sh: line 625: kill: (17580) - No such process
     3/entry.sh: line 625: kill: (17580) - No such process
     2/entry.sh: line 625: kill: (17580) - No such process
     1/entry.sh: line 625: kill: (17580) - No such process
    /entry.sh: line 632: kill: (17580) - No such process
     0
    Automatic restart ...
    • wifi_tethering open_in_new

      This post is public

      forum.fhem.de /index.php/topic,111711.msg1258313.html

    • chevron_right

      Antw:[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 11:20 edit

    Zitat

    @Beta-User:
    Könntest Du bitte bei Gelegenheit die Funktion so abändern und einchecken?


    Und den Vorschlag aus #206 die IP in ein Reading zu schreiben ?
    • chevron_right

      Antw:[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

      feed.jabber.ddnss.eu / FHEMForum · Tuesday, 17 January, 2023 - 10:38 edit

    Guten Morgen,
    funktioniert bei mir.

    lg Andreas


    Danke fürs Testen Andreas.

    @Beta-User:
    Könntest Du bitte bei Gelegenheit die Funktion so abändern und einchecken?

    sub WLED_set {
      my $dev  = shift // return;
      my $read = shift // return;
      my $val  = shift // return;
      my $cid = InternalVal($dev,'CID',undef) // return;
      my @wled = split('_',$cid);
      my $arr  = ReadingsVal($dev,'.'.$read.'s',undef) // return WLED_get($dev);
      my $top  = lc($wled[0]).'/'.$wled[1].'/api F';
      $top .= $read eq 'effect'?'X=':'P=';
      my $id;
      my $i = 0;
      for (split(',',$arr)){
        if ($_ ne $val) {
          $i++;
          next;
        } else {
          $id = $i;
          last;
        }
      }
      return defined $id ? $top.$id : undef;
    }


    Vielen Dank.

    Gruß
    Dan