Support-Thread Modul 36_Shelly.pm

Begonnen von Prof. Dr. Peter Henning, 03 Februar 2021, 08:03:09

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

Zitat von: Lichti6 am 22 Dezember 2022, 16:35:44
Hallo zusammen,
ich wollte mal nachfragen, ob es zu Shelly TRV in der Zwischenzeit war neues gibt.


Meine Fhem Shelly hat aktuell den Stand
##########################################################
#
Shelly.pm
#
#  FHEM module to communicate with Shelly switch/roller actor devices
#  Prof. Dr. Peter A. Henning, 2022
#
#  $Id: 36_Shelly.pm 26017 2022-05-02 07:04:23Z phenning $
#
##########################################################

Ich würde mich über jeder Antwort freuen und schon jetzt vielen Dank

Matze

Mit dem Shelly-Modul mWn (noch) nicht, siehe: https://forum.fhem.de/index.php/topic,118446.msg1247500.html#msg1247500
(ist ja gar nicht sooo weit weg von hier ;)  )

Und fraglich, ob (wann) das kommt: https://forum.fhem.de/index.php/topic,118446.msg1248978.html#msg1248978

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Xaneu

#301
Hallo,

Klasse, dass es mit dem ShellyPlus2PM weitergeht.

Zu
Zitat
ich wollte mal nachfragen, ob es zu Shelly TRV in der Zwischenzeit war neues gibt.
und um das von Prof. Dr. Henning genannte Problem
Zitat
Ich kann nicht ohne Ende Hardware kaufen, die ich dann nicht benutze.
zu entschärfen, wäre ich bereit einen Shelly TRV zu kaufen und diesen ein paar Monate Starkstrombastler zur Verfügung zu stellen.

@ Starkstrombastler:
Wenn das für Dich in Ordnung ist, brauchst Du mir nur Deine Adresse am besten über das Forum-Mitteilungssystem zu senden.

Xaneu
FHEM 6.1 @ RPi4, raspbian (buster) auf USB-SSD, PIUSV+, HM-MOD-RPI-PCB und viele Homematic-Komponenten, OBIS, vclient, VBUS, Modbus, E3DC-Photovoltaikumrichter, 1-wire, Shelly und eigene Module

Machen ist wie wollen, nur krasser!

GerhardJ

#302
Hi,

Zitat von: freetz am 31 Oktober 2022, 13:16:40
Aber bleibt bei dieser Version nicht auch das Problem mit der geänderten Passwort-Abfrage bestehen? Die Shelly Pro 1 und 2 laufen ja nicht mehr mit http Auth. Ich kann damit zwar die Shellys steuern, aber nicht, wenn ich ein Passwort vergebe.
das Problem ist in HttpUtils.pm zu suchen. Beigefügter Patch 'rüstet' die SHA-256 Authentifizierung nach. Damit ein Shelly Plus1 damit funktioniert, muss das shellyuser Attribut auf admin gesetzt werden (könnte man im 36_Shelly.pm automagisch erledigen...).

Grüße
Gerhard

Ralli

#303
Guten Abend,

hat jemand einen Shelly Pro 3 und dafür die richtige / passende Konfiguration gefunden/parat? Dann würde ich mich über einen Hinweis freuen.

Als Modell kann man Shelly Pro 3 nicht auswählen. Die Auswahl anderer Modelle hat mich bislang nicht zum Ziel geführt.


Internals:
   CFGFN     
   DEF        192.168.7.41
   FUUID      63b0441d-f33f-f7fe-f06c-757bf9caf7930630
   INTERVAL   60
   NAME       GAR_Shelly
   NR         15108
   STATE      Error
   TCPIP      192.168.7.41
   TYPE       Shelly
   eventCount 8
   Helper:
     DBLOG:
       network:
         Eventlog:
           TIME       1672496157.05404
           VALUE      <html>connected to <a href="http://192.168.7.41">192.168.7.41</a></html>
       state:
         Eventlog:
           TIME       1672498121.14058
           VALUE      Error
   READINGS:
     2022-12-31 15:15:57   network         <html>connected to <a href="http://192.168.7.41">192.168.7.41</a></html>
     2022-12-31 15:48:41   state           Error
   hmccu:
Attributes:
   model      generic


Das Log sagt


2022.12.31 15:48:20.477 1: [Shelly_configure] invalid JSON data for device GAR_Shelly
2022.12.31 15:48:41.140 1: [Shelly_proc1G] invalid JSON data for device GAR_Shelly


Die Firmware des Shelly ist die 0.12.0

Edit:
Erledigt. Hab den Shelly Pro 3 stattdessen mittels MQTT eingebunden.
Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

RalfRog

#304
Add-On zum Shelly 3EM

Modul 36_ShellyMonitor
gvzdus hat seinem Modul (ergänzt das Modul 36_Shelly hier) ein Update verpasst. Jetzt werden die Werte für "total" korrekt angezeigt und zusätzlich auch die "total_returned" ausgeggeben.
https://forum.fhem.de/index.php/topic,117805.msg1254106.html#msg1254106

Zum 36_Shelly
Auf Basis dieses Beitrags    https://forum.fhem.de/index.php/topic,118446.msg1233953.html#msg1233953
#253 hier im Thread habe ich mal mit meinen Nichtprogrammierkünsten (echt ohne Gewähr ::) ich habe nur den 3EM und einen Plug-S) einen "Patch" auf die letzte Zwischenversion
vom 36_Shelly (4.02f https://forum.fhem.de/index.php/topic,118446.msg1233686.html#msg1233686) hier aus dem Thread gemacht.

Damit stellt das Modul auch ohne den ShellyMonitor die Werte "total-Returned" und "current" für die drei Phasen zur Verfügung sowie das Reading für die Summenleistung "total_power" (siehe http://<ip-3em>/status).

ab Zeile 1112

  my ($subs,$ison,$overpower,$rpower,$rstate,$power,$energy,$rstopreason,$rcurrpos,$position,$rlastdir,$pct,$pctnormal);
  my ($total_power,$energy_returned,$current);                              # Ralf Variablen fuer 3 weitere Readings des Shelly 3EM
 
  readingsBeginUpdate($hash);
  readingsBulkUpdateIfChanged($hash,"network","<html>connected to <a href=\"http://".$hash->{TCPIP}."\">".$hash->{TCPIP}."</a></html>",1);
 
  #-- for all models set internal temperature reading
  if ($jhash->{'temperature'}) {
    readingsBulkUpdateIfChanged($hash,"inttemp",$jhash->{'temperature'});
  }
  #############################################################################################################################
  #-- 1st generation: we have a shelly1, shelly1pm, shellypro4, shelly2, shelly25, shellyplug or shellyem switch type device
  if( ($model =~ /shelly1.*/) || ($model eq "shellyuni") || ($model eq "shellyplug") || ($model =~ /shelly(pro)?4/) || ($model =~ /shelly\d?em/) || (($model =~ /shelly2(\.5)?/) && ($mode eq "relay")) ){
    for( my $i=0;$i<$channels;$i++){
      $subs = (($channels == 1) ? "" : "_".$i);
      $ison       = $jhash->{'relays'}[$i]{'ison'};
      $ison =~ s/0|(false)/off/;
      $ison =~ s/1|(true)/on/;
      $overpower = $jhash->{'relays'}[$i]{'overpower'};
      readingsBulkUpdateIfChanged($hash,"relay".$subs,$ison);
      readingsBulkUpdateIfChanged($hash,"overpower".$subs,$overpower)
        if(defined($overpower));
      if($model =~ /shelly(1|(plug)).*/){
        readingsBulkUpdateIfChanged($hash,"state",$ison)
      }else{
        readingsBulkUpdateIfChanged($hash,"state","OK");
      }
    }
    if ($model eq "shellyuni") {
      my  $voltage = $jhash->{'adcs'}[0]{'voltage'};
      readingsBulkUpdateIfChanged($hash,"voltage",$voltage);
    }

    my $metern = ($model =~ /shelly.?em/)?"emeters":"meters";
# 2 Zeilen Addon für 3EM Einzelparameter Gesamtleitung Summe der drei Phasen        # Ralf
$total_power = $jhash->{'total_power'};                                      # Ralf
    readingsBulkUpdateIfChanged($hash,"total_power",$total_power);                  # Ralf
    for( my $i=0;$i<$meters;$i++){
      $subs  = ($meters == 1) ? "" : "_".$i;
      $power = $jhash->{$metern}[$i]{'power'};
      $energy = int($jhash->{$metern}[$i]{'total'}/6)/10;
# 1 Zeile Addon für 3EM 3 Werte Einspeiserichtung von L1,2,3                        # Ralf
  $energy_returned = int($jhash->{$metern}[$i]{'total_returned'}/6)/10;      # Ralf
      readingsBulkUpdateIfChanged($hash,"power".$subs,$power);
      if ($model =~ /shelly.?em/) {
        my $voltage = $jhash->{$metern}[$i]{'voltage'};
        readingsBulkUpdateIfChanged($hash,'voltage'.$subs,$voltage);
# 2 Zeilen Addon für 3EM 3 Werte Strom L1,2,3                                      # Ralf
        $current = $jhash->{$metern}[$i]{'current'};                                # Ralf
        readingsBulkUpdateIfChanged($hash,'current'.$subs,$current);                # Ralf
# my $reactivePower = $jhash->{$metern}[$i]{'reactive'};                    # Ralf auskommentiert, welcher Shelly hat reactve => kann ein Fehler sein
        #my $apparentPower = sqrt( ($power * $power) + ($reactivePower * $reactivePower) );
        #my $powerFactor = ($apparentPower != 0)?(int($power / $apparentPower * 100) / 100):"0";
        #readingsBulkUpdateIfChanged($hash,'powerFactor'.$subs,$powerFactor);
        $energy = $jhash->{$metern}[$i]{'total'};
# 1 Zeile Addon für 3EM 3 Werte Einspeiserichtung L1,2,3                            # Ralf  nochmal wie in Zeile 1153 u. 1154 -> ist hier nach dem if shelly.?em
$energy_returned = $jhash->{$metern}[$i]{'total_returned'};              # Ralf
      }else{
       $energy = int($jhash->{$metern}[$i]{'total'}/6)/10;
      }
      readingsBulkUpdateIfChanged($hash,"energy".$subs,$energy);
# 1 Zeile Addon für 3EM 3 Werte Einspeiserichtung L1,2,3                            # Ralf    nochmal wie in Zeile 1153 u. 1154 -> ist hier nach dem else
  readingsBulkUpdateIfChanged($hash,"energy_returned".$subs,$energy_returned);  # Ralf
    }



Wer es brauchen kann...
Gruß Ralf

Edit wegen Variablen Namen, doppelte Readings
Damit die Ergänzung zum 36_ShellyMonitor passt muss die Variable mit "$energyReturned" bezeichnet werden (nicht $energy_returned).
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

RalfRog

Hmmmm...
So ganz nebenwirkungsfrei ist die Geschichte doch nicht.
Mein Shelly Plug-S erhält damit auch das Reading energyReturned. Den Wert (total-returned) stellt er natürlich in der Statusabfrage nicht zur Verfügung.

Zu einfach gedacht - aber für mich funktioniert es.

Wenn es mit dem Modul weitergehen sollte, wäre eine Ergänzung für den 3EM toll  :)

FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

maci

Ich bekomme im Log laufend Perl Warnungen bei diesem Modul.

Zitat2023.01.08 11:37:44.040 1: PERL WARNING: Use of uninitialized value $value in string eq at fhem.pl line 5003.
2023.01.08 11:37:44.041 1: stacktrace:
2023.01.08 11:37:44.041 1:     main::__ANON__                      called by fhem.pl (5003)
2023.01.08 11:37:44.041 1:     main::readingsBulkUpdateIfChanged   called by ./FHEM/36_Shelly.pm (1314)
2023.01.08 11:37:44.041 1:     main::Shelly_proc1G                 called by ./FHEM/36_Shelly.pm (1058)
2023.01.08 11:37:44.042 1:     main::Shelly_status                 called by ./FHEM/36_Shelly.pm (1045)
2023.01.08 11:37:44.042 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (729)
2023.01.08 11:37:44.042 1:     main::__ANON__                      called by fhem.pl (779)

Kann ich das genauer nachsehen, welches Shelly Gerät dies verursacht?
Da ich ich ein paar definiert habe, ist es schwer.
Diese Meldung habe ich eigentlich per Zufall entdeckt, als ich stacktrace auf 1 gesetzt habe.
Ansonsten war im Log nur einmal einige Zeilen:
Zitat2023.01.07 17:00:00.006 1: PERL WARNING: Argument "???" isn't numeric in numeric le (<=) at (eval 45715863) line 1.
2023.01.07 17:05:00.004 1: PERL WARNING: Argument "???" isn't numeric in numeric le (<=) at (eval 45723768) line 1.

Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

RalfRog

#307
Vielleicht hilft bei der Analyse der Loglevel 4 oder 5 im Shelly Modul....

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

Feller

Hallo,

ich habe ein paar Shelly Geräte im Einsatz, u.a. ShellyPlug, Shelly3em, Shelly2.5. Diese Shelly Geräte haben alle ein oder mehrere Reading "energy...". Dort wird der bisherige Verbrauch in Wh gespeichert.

Jetzt habe ich ein ShellyPlus1PM installiert, den Typ kann ich auch im ShellyModul auswählen, aber es gibt kein "energy" Reading. Stattdessen liefert der Adapter ein "Current" Reading, also die Stromstärke in Ampere.

Hier ein Listing vom ShellyPlus1PM:

Internals:
   DEF        10.10.0.110
   DURATION   0
   FUUID      63b6fd76-f33f-2d4d-8ae5-b221b39e654f3a33
   INTERVAL   60
   NAME       hk_Speicherladepumpe
   NR         792
   STATE      on
   TCPIP      10.10.0.110
   TYPE       Shelly
   eventCount 25
   READINGS:
     2023-01-05 17:43:36   cloud           disabled
     2023-01-12 10:52:25   current         0.047
     2023-01-11 11:56:27   firmware        v1.12.2
     2023-01-12 10:52:25   inttemp         58.8
     2023-01-12 10:39:52   network         <html>connected to <a href="http://10.10.0.110">10.10.0.110</a></html>
     2023-01-12 10:51:22   overpower       0
     2023-01-12 10:52:25   power           5.7
     2023-01-12 10:51:22   relay           on
     2023-01-12 10:52:25   state           OK
     2023-01-12 10:52:25   voltage         232.4
Attributes:
   devStateIcon on:sani_pump@red:off off:sani_pump@blue:on
   group      Pumpen
   model      shellyplus1pm
   room       Heizungskeller,Shelly
   shellyuser admin
   stateFormat relay
   userReadings energyTotal:energy.* monotonic { ReadingsVal($name,"energy",0)/1000 }


Das userReading am Ende habe ich hinzugefügt. Ist bei mir als Standard für Shelly Energiewerte. FHEM update all und Restart wurde vorher durchgeführt, Stand heute.
Hat jemand eine Idee wie ich an den "energy" Wert komme, bzw. wie ich den Langzeitverbrauch aufzeichnen kann?

Grüße
Feller

RalfRog

#309
Hallo

Der ShellyPlus1PM ist ja 2. Generation (hab ich nicht). Liefert der denn Energy überhaupt?

Kennst Du die http API. Da kann man mal über den Browser in die Daten gucken.
https://shelly-api-docs.shelly.cloud/gen2/

Z.B. mit http://<ip>/rpc/EM.GetStatus?id=0 kommt ein JSON zurück. Schau mal rein.

Gruß

Edit:
Hier ist der EM (EnergyMeter Teil)
https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EM/

Scroll mal etwas nach unten zum Status. Mir scheint, dass da nur Strom, Spannung und Power zur Verfügung steht.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

RalfRog

Ich habe nen 3EM. Der speichert auch Daten an die man per HTTP drankommt.
<IP>/emeter/<id>/em_data.csv   id = 0 | 1 | 2 | 3

Lt. Beschreibung kann der PLus1PM: Strommessung mit Datenspeicherung

In der API-Beschreibung steht für EMData (https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EMData) in der Mitte etwas davon wie man zumindest mal schauen kann ob es Daten gibt.

CSV file download
Alternatively to the RPC method GetData, the same data can be downloaded in CSV file by calling HTTP url:
http://<device ip>/emdata/<id>/data.csv
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

birdy

Hallo

Ich habe einen ShellyPlus1PM.
Soeben habe ich
Zitat von: RalfRog am 12 Januar 2023, 13:02:10
Z.B. mit http://<ip>/rpc/EM.GetStatus?id=0 kommt ein JSON zurück. Schau mal rein.
ausprobiert. Dabei erhalte ich folgenden Antwort:
code 404
message "No handler for EM.GetStatus"

Gruss birdy
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

RalfRog

Tja...      auf die Schnelle in der Gen2DeviceAPI bei Shelly gelesen.
War nur ne Idee, da man die Gen1 Geräte per HTTP-Abfrage relativ leicht darauf checken kann was sie so liefern und ob energy dabei ist.

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

birdy

Ggemäss
https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EM#methods

solle http://192.168.33.1/rpc/EM.GetStatus?id=0 funktionieren.
Tut es aber nicht, zumindest nicht bei mir. 

Aber http://<ip>/rpc/Shelly.GetStatus funktioneirt und liefert aengergy.total


ble {}
cloud
connected true
input:0
id 0
state false
mqtt
connected false
switch:0
id 0
source "loopback"
output true
apower 8.5
voltage 223.3
current 0.148
aenergy
total 12624.232
by_minute
0 40.969
1 138.33
2 143.149
minute_ts 1673784736
temperature
tC 43.9
tF 111
sys
mac "84CCA87733D0"
restart_required false
time "13:12"
unixtime 1673784738
uptime 3282502
ram_size 234484
ram_free 155620
fs_size 458752
fs_free 106496
cfg_rev 15
kvs_rev 0
schedule_rev 15
webhook_rev 0
available_updates
beta
version "0.13.0-beta1"
wifi
sta_ip "10.xx.xx.xx"
status "got ip"
ssid "xxxxxxxxxx"
rssi -69
ws
connected false
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

RalfRog

Als Idee...
Dann besteht für Feller ja die Möglichkeit -  wenn das Modul die Daten nicht in ein Reading packt bzw. MQTT als Ausweg nicht in Frage kommt -   z.B. über HTTPMOD den Wert  auszulesen.

Für mich lese ich daraus, dass man sich bei Gen2 Geräten vorab intensiv damit beschäftigen sollte was und wie die Dinger Daten liefern.


Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder