Modul 36_Shelly.pm

Begonnen von Prof. Dr. Peter Henning, 15 November 2018, 10:24:39

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Benötigt man nicht. Man kann einfach in die URL für ein button_long eine andere Button-Nummer eintragen, sagen wir 2 und 3, wenn die short actions 0 und 1 sind.


LG

pah

bombardi

Hallo pah,
ich kann in der Commandref keine Button-Nummer finden, meinst du Channel oder habe ich etwas übersehen ?

Prof. Dr. Peter Henning

Die Button-Nummerierung ist unabhängig von den Channels - nur bei Switching Devices kann man das 1:1 übersetzen. Wie man unter anderem daran ersieht, dass der Dimmer nur einen "Dimmkanal" (channel) hat, aber 2 Button-Inputs.

Es ist auch nicht nötig, in der Web-Oberfläche des Shelly als URL für die Button-Meldung das Shelly-FHEM-Device einzutragen und dann noch in FHEM mit einem notify darauf zu triggern. Sondern man kann mit diesem Aufruf auch einfach beliebige andere FHEM-Aktionen auslösen (sofern diese sich in einem REST-Call ausdrücken lassen). Dass also die Buttons als Reading im Shelly-FHEM-Device auftauchen ist "just for convenience".

LG

pah


cs-online

Zitat von: Prof. Dr. Peter Henning am 27 November 2019, 16:53:23
Ich sehe gerade, dass Allterco da noch mehr Optionen eingebaut hat, um mit den Buttons (2 Eingänge) separate Schaltvorgänge auszulösen.

Habe das gerade noch nachgebessert, die aktuelle Version ist also 2.11.

Ich habe zwar keinen Taster zum Testen zur Hand, aber wenn man das betreffende Kommando beim Shelly in die Oberfläche einträgt:

http://<ip-adresse>/fhem?XHR=1&cmd=set%20dimmer%20button_on%200
(0 oder 1 an der letzten Stelle), registriert das Modul das korrekt.

LG

pah

Hallo pah,

das ist mir noch nicht ganz klar, wofür wird das benötigt ?

Das Modul in der neuen Version arbeitet super. Mit attr <Dimmer> widgetOverride pct:slider,1,1,100 kommt dann auch mein gewünschter Slider zum Vorschein, auch da danke für den Tip (wieder was gelernt)

Grüße Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Prof. Dr. Peter Henning

Hier gibt es eine neu erkannte Inkompatibiliät der Shelly-Devices: https://forum.fhem.de/index.php/topic,106103.0.html

LG

pah

Axel1971

Hallo,

vielen Dank für die Mühe, die Du (ihr) in die Entwicklung des Shelly Moduls steckt. Im Moment scheint es mir so, dass es mehr Attribute in den Shelly Devices gibt, die vom Shelly Modul bisher nicht als Reading zur Verfügung gestellt werden.
Könnten nicht auch die anderen Werte (selbst, wenn es im ersten Schritt mehr Daten generiert) mit aufgenommen werden?
z.B. wifi_sta, um die Empfangsstärke zu protokollieren, temperature, overtemp., uptime, ...

Viele Grüße
Axel

Prof. Dr. Peter Henning

Attribute sind keine Readings, und das Mitprotokollieren der Signalstärke (nicht "Empfangsstärke") stellt keine sinnvolle Messung dar.

LG

pah

supernova1963

Zitat von: Prof. Dr. Peter Henning am 12 Dezember 2019, 21:18:00
Attribute sind keine Readings, und das Mitprotokollieren der Signalstärke (nicht "Empfangsstärke") stellt keine sinnvolle Messung dar.
Shellies haben aber doch Attribute, die ausgegeben werden (zumindest nennen die Entwickler es in der API Dokumentation so)?!
Warum ist das Protkollieren der Signalstärke keine sinnvolle Messung?
Mir hat ein vergleichbares Protokoll bei der Suche nach dem Verursacher einer Signalstörung schon einmal geholfen, oder, ist der vom Shelly ausgegebene Wert von wifi_sta "sinnfrei", da nicht aussagekräftig?

lg

Gernot

Prof. Dr. Peter Henning

ZitatMir hat ein vergleichbares Protokoll bei der Suche nach dem Verursacher einer Signalstörung schon einmal geholfen
Darin liegt schon die Antwort: So etwas benötigt man in seltenen Ausnahmefällen, nicht regulär. Dann kann man sich aber auch mit einem Mausklick direkt auf die Weboberfläche des Shelly-Devices setzen und muss das nicht erst nach FHEM übertragen.

Je komplexer eine Haussteuerung wird, desto mehr sollte man auf Datensparsamkeit achten.

LG

pah

Jens_B

Zitat von: xitolein am 28 September 2019, 21:45:41
Hallo,

mein heutiges Problem konnte ich nur mit einem FritzBox Neustart lösen. Zwei vorherige Strom Reset führten nicht zum Erfolg. Die FritzBox und der Shelly sind Luftlinie 5 m auseinander ohne Störende Hindernisse  dazwischen.

Habe heute Versucht dem Shelly eine Statische IP zu vergeben und bekam die auf dem Bild ersichtliche Fehlermeldung.

Aufgrund dessen gehen ich mal davon aus, dass der Fehler in der Fritzbox liegen muss.

Gruß

Sven

Da die Shelly Schalter nur auf 2.4 kHz senden und das in vielen Fällen schon recht voll ist und die Kanäle sich auch noch gegenseitig stören vermute ich einfach mal das hier eher das Problem ist.
Würde auch dafür sprechen, das nach dem Neustart der Fritz box es wieder ging, die sucht nach dem Neustart nämlich einen anderen Kanal (wenn die default Einstellung unter WLAN -> Funkkanal -> Funkkanal Einstellungen automatisch setzen nicht geändert wurde)

gruß
Jens
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

supernova1963

#430
Zitat von: Prof. Dr. Peter Henning am 13 Dezember 2019, 09:02:36
...
Dann kann man sich aber auch mit einem Mausklick direkt auf die Weboberfläche des Shelly-Devices setzen und muss das nicht erst nach FHEM übertragen.
...

Echt, kann man eine log Datei jetzt über die Weboberfläche aufrufen, wie geht das?

@Axel1971: Für den Ausnahmefall geht es auch mit Fhem:

1. myUtils Datei im anlegen. z.B. /opt/fhem/FHEM/mySHELLYAttributesUtils.pm:
##############################################
# $Id: mySHELLYAttributesUtils.pm supernova1963 $
#
# myUtils für shellies vom Typ Shelly:
# http commnands an Shelly senden und Rückgabe json - string in reading x_json
# ggf. mit expandJSON readings ezeugen

package main;

use strict;
use warnings;
use POSIX;
use HttpUtils;
use JSON;
use Data::Dumper;

sub
mySHELLYAttributesUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

########################################################################################
#
# ShellyHttpRequest - Aus https://wiki.fhem.de/wiki/HttpUtils#Beispiel_f.C3.BCr_HttpUtils_NonblockingGet.28.29_f.C3.BCr_Modulprogrammierer
#
########################################################################################

sub ShellyHttpRequest($$)
{
    my ($name, $request) = @_;
    my $hash = $defs{$name};
    if ($request eq "" || !defined($request))
    {
      Log3 $hash, 5, $name.":mySHELLYAttributesUtils:ShellyHttpRequest($name,$request) Parameter 'request' ist nicht definiert!";
      return;
    }
    my $httpCMND = "http://".Shelly_Credentials($hash).InternalVal($name,"TCPIP","")."/".$request;
    $hash->{helper}{"request"}=$request;
    my $param = {
                    url        => $httpCMND,
                    timeout    => 5,
                    hash       => $hash,
                    method     => "GET",
                    header     => "User-Agent: TeleHeater/2.2.3\r\nAccept: application/json",
                    callback   => \&ShellyHttpResponse
                };

    return HttpUtils_NonblockingGet($param);

}
########################################################################################
#
# ShellyHttpResponse - Aus https://wiki.fhem.de/wiki/HttpUtils#Beispiel_f.C3.BCr_HttpUtils_NonblockingGet.28.29_f.C3.BCr_Modulprogrammierer
#
########################################################################################

sub ShellyHttpResponse($)
{
  my ($param, $err, $data) = @_;
  my $hash = $param->{hash};
  my $name = $hash->{NAME};
  my $rc = "";
  if($err ne "")
  {
    Log3 $name, 5, ":mySHELLYAttributesUtils:ShellyHttpRequest(<name>,>request>): Fehler bei dem URL-Aufruf: ".$param->{url}." - $err";
  }
  elsif($data ne "")
  {
    $hash->{helper}{"Data"} = $data;
    my $json = new JSON;
    if (!defined($defs{$name."_j2r"})) {
      $rc = fhem("defmod ".$name."_j2r expandJSON ".$name.":x_json:.\{.*}");
    }
    readingsSingleUpdate($hash,"x_json",$data,1);

    return $data;
  }
}

########################################################################################
#
# Shelly_Credentials - Aus 36_Shelly.pm übernommen Author: Prof. Dr. Peter A. Henning
#
########################################################################################

########################################################################################
#
#  This programm is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  The GNU General Public License can be found at
#  http://www.gnu.org/copyleft/gpl.html.
#  A copy is found in the textfile GPL.txt and important notices to the license
#  from the author is found in LICENSE.txt distributed with these scripts.
#
#  This script is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
########################################################################################

sub Shelly_Credentials($)
{
  my ($hash) = @_;
  my $name = $hash->{NAME};
  my $user = AttrVal($name, "shellyuser", '');

  return "" if(!$user);

  my ($err, $pw) = getKeyValue("SHELLY_PASSWORD_$name");
  if (defined($err))
  {
    Log3 $hash, 5, $hash->{NAME}.":mySHELLYAttributesUtils:ShellyHttpRequest(<name>,<request>) SHELLY_PASSWORD_$name ist nicht definiert!";
    return ""
  }
  return $user.":".$pw."@";
}


2. notify oder at anlegen, das ShellyHttpRequest($NAME,'<command>') aufruft:
defmod shelly_notify_status notify shelly:relay:.* {ShellyHttpRequest($NAME,'status')}
Es wird ein device vom Typ expandJSON mit dem Namen <ShellyDeviceName>_j2r angelegt, das das reading: x_json überwacht und automatisch readings aus diesem erzeugt.

3. Log anlegen, z.B.:
define shelly_wifi_sta_rssi FileLog ./log/shelly_wifi_sta_rssi-%Y-%W.log shelly:wifi_sta_rssi.*
"shelly" bitte durch den device Namen ersetzten!

Fertig!

lg

Gernot

Geändert: GNU General Public License für Code aus Shelly Modul nach Belehrung durch Herrn Prof. Dr. Peter A. Henning ergänzt

Prof. Dr. Peter Henning

Hmmm. Nach dem neuesten Pisa-Test ist das Leseverständnis wieder auf dem Rückgang.

Erstens ist die Übernahme von Code aus meinem Modul nur zulässig, wenn dabei auch die GPL-Lizensierung mit übernommen wird - dafür ist die GPL nämlich da.

Zweitens habe ich nichts von "log Datei" geschrieben. Sondern vom Zugang zu den Daten.


LG

pah

cs-online

...wenn ich pah richtig verstanden habe, dann meinte er, dass, wenn man im Fehlersuchfall tatsächlich (und eigentlich macht das auch nur dann wirklich Sinn, sonst ist es aber- da bin ich einig - nice to have) den RSSI-Wert braucht, dann kann man sich über die Weboberfläche in den jeweiligen Shelly einloggen (geht bestimmt auch mit der Shelly-App) und den Wert dort anschauen...
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

supernova1963

Zitat von: Prof. Dr. Peter Henning am 14 Dezember 2019, 17:20:02
Erstens ist die Übernahme von Code aus meinem Modul nur zulässig, wenn dabei auch die GPL-Lizensierung mit übernommen wird - dafür ist die GPL nämlich da.
Ich bitte vielmals um Entschuldigung und habe umgehend den Beitrag geändert.

lg

Gernot

supernova1963

Zitat von: cs-online am 14 Dezember 2019, 17:41:47
...wenn ich pah richtig verstanden habe, dann meinte er, dass, wenn man im Fehlersuchfall tatsächlich (und eigentlich macht das auch nur dann wirklich Sinn, sonst ist es aber- da bin ich einig - nice to have) den RSSI-Wert braucht, dann kann man sich über die Weboberfläche in den jeweiligen Shelly einloggen (geht bestimmt auch mit der Shelly-App) und den Wert dort anschauen...

Ich habe doch nur @Axel1971 meinen laienhaften Lösungsansatz eines der gewünschten Protokolle mit fhem umzusetzen, - ohne Shelly Moduländerungen -, vorgestellt. Bei einem solchen Signalstörung hat es mir geholfen, ein Protokoll über längere Zeit zu beobachten.

lg

Gernot