bekomme ShellyPlugS nicht mehr aktualisiert

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
Wichtelmann007
Beiträge: 222
Registriert: 26.02.2013, 21:11
Hat sich bedankt: 39 Mal

bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von Wichtelmann007 » 14.12.2023, 21:53

Ich habe einen PlugS bisher per Script in meine RM inzegrieren können. Die Leistung wurde in eine SV geschrieben.

Durch den Einsatz von ioBroker habe ich bei dem dem Shelly CoIoT peer aktiviert sowie ein Benutzer mit Passwort festgelegt.
Nun bekomme ich irgendwie keine Daten mehr auf mein CuxD Gerät...
Anbei mal ein Screenshot des CuxD, sowie nachfolgend das Script.

Hatte ich bei den Adressen einen Fehler? Vor lazuter testen weiss ich eh nicht mehr was ich da vorher mal hatte...

Code: Alles auswählen

var execshpl = "CUxD.CUX2801002:3"  ! CUxD-Exec-Device angeben
var shplcuxd = "CUxD.CUX2801002:3" !  CUxD-Device für den Shelly PlugS anpassen
Bildschirmfoto vom 2023-12-14 21-38-41.png

Code: Alles auswählen

! Skript V2.2.2 PlugS Heizung ---------------------------------------
! zur Einbindung Shelly PlugS mit Originalfirmware (c) 2021 by 66er (alias Stefan K.)
! Alle Rechte vorbehalten!
! Publiziert und Updates auf https://www.shelly-support.eu/forum/index.php?board/145-homematic/
! entwickelt und getestet auf PlugS-Firmware 1.9.0, 1.9.3 und 1.11.2
! jede Funktion optional aktivierbar, automatische Homematic-SV-Erstellung, Onlinestatus-Prüfung optional integriert
! Versionsdatum: 09.12.2021
! NEU: Systemvariablen werden autom. dem CUxD-Schalter-Kanal zugeordnet

! BITTE BEACHTEN:
! Dieses Skript legt ggf. selbstständig zusätzliche Systemvariablen auf Deiner Homematic-Zentrale an!
! Das vermeidet Inkonsistenzen und eine temporäre Blockade der CCU durch das Skript.
! Ausserdem erspart es Dir das manuelle Anlegen benötigter Systemvariablen.
! Wer das nicht möchte, kann dieses Skript leider nicht nutzen!

! Die Nutzung des Skriptes erfolgt auf eigenes Risiko.
! Aus der Nutzung entsteht kein Rechtsanspruch auf Suppport oder Fehlerbeseitigung durch den Autor.
! Der Autor haftet nicht für eventuelle Folgen der Nutzung auf der Homematic-Zentrale des Nutzers.

! Das Skript ist ausführlich getestet und sollte problemlos funktionieren.



! Bezeichnung: PlugS Heizung   (kann angepasst werden, dient nur zur Orientierung)


!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***

! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!

! Setup Shelly PlugS

var shplip = "192.168.178.92"      ;     ! IP des Shelly PlugS anpassen
var shplname = "ShellyPlugS_HZG" ;   ! Name des Shelly PlugS anpassen (daraus werden ggf. automatisch weitere Variablennamen erzeugt
var shplrl = "N" ;                      ! Ist Restrict Login im Shelly aktiv, dann auf "J" setzen
var shplbn = "meinBenutzer" ;       ! Ist Restrict login auf J, dann Benutzername anpassen
var shplpw = "meinPasswort"     ;       ! Ist Restrict login auf J, dann Passwort anpassen, keine Sonderzeichen


! Setup der CUxD-GERÄTE

var execshpl = "CUxD.CUX2801002:3"; ! Adresse und Kanal des CUxD-Exec-Device angeben
var shplcuxd = "CUxD.CUX2801002:3" ; ! Adresse und Kanal des CUxD-Device für den Shelly PlugS anpassen

! Setup Online-Status
var shplonl = "J"                 ; ! Variable für Onlinezustandsüberwachung, falls nicht gewünscht, auf "N" setzen""

! Setup Aktualisierungsumfang
var shplstat = "J"                ; ! Status EIN oder AUS wird durch das Skript aktualisiert, wenn nicht gewünscht auf "N" setzen
var shplvba = "J"                  ; ! aktuelle Verbrauchsanzeige, wenn nicht gewünscht auf "N" setzen




!****ENDE SETUP ********ENDE SETUP ********ENDE SETUP ******

!*****Ab hier NICHTS MEHR ÄNDERN ***************************


! Variable für Onlinestatus prüfen,ggf.anlegen

if (shplonl == "J") {

var shplonln = shplname + "_Online-Status_" ;
! WriteLine(shplonln) ;

string sName= ""#shplonln#"";  ! Onlinestatus
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
  object svObj = dom.CreateObject(OT_VARDP,sName);
  svObj.DPInfo("autom. angelegt durch Skript Shelly PlugS");
  svObj.ValueUnit("");
  dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
  svObj.ValueType(ivtBinary);
  svObj.ValueSubType(istBool);
  svObj.ValueName0("Offline");
  svObj.ValueName1("Online");
  svObj.State (true);!SCNR = SHP22266R
  dom.RTUpdate(0);

object oChan= channels.Get (""#shplname#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#shplonln#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );

                                                      }

! Onlineabfrage und setzen des Status
string stderr;
string stdout;
integer Status;
system.Exec("ping -c 1 '"#shplip#"'", &stdout, &stderr);
Status = stdout.Find("ms");
!WriteLine(Status);

if (((shplonl ) == "J" ) && ((Status) == -1)) {
WriteLine("Shelly1 ist offline");
dom.GetObject (""#shplonln#"").State(0);
quit; ! Programmabbruch bei Shelly offline
                                             }

if ((shplonl ) == "J" ) {
dom.GetObject (""#shplonln#"").State(1);
WriteLine("Shelly PlugS ist online");
                       }
                }
!*******************************************************************************


!***** Werte-Abfrage des PlugS *****

if (shplstat == "J"){
var url = "http://" + shplip + "/relay/0/status" ;
!WriteLine(url);

if (shplrl == "J") {
var url =  "http://" + shplbn + ":" + shplpw + "@" +shplip + "/relay/0/status" ;
!WriteLine(url);
                  }

dom.GetObject(""#execshpl#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#execshpl#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execshpl#".CMD_RETS").State();
dom.GetObject(""#execshpl#".CMD_SETS").State("0");
!WriteLine(Antwort);

string word = "ison:";
integer word_laenge = word.Length();
integer word_position = Antwort.Find(word);
string daten = Antwort.Substr((word_position + word_laenge +4), 5);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -3));
!WriteLine(daten);

var zustand = dom.GetObject(""#shplcuxd#".STATE").State();
!WriteLine(zustand);

if (daten == "true,")
{dom.GetObject(""#shplcuxd#".SET_STATE").State(1);
!WriteLine("PlugS ist eingeschaltet");
}
if (daten == "false")  
{
dom.GetObject(""#shplcuxd#".SET_STATE").State(0);
!WriteLine("PlugS ist aus");
}
             }
!*************************************************************************

! Leistung

if (shplvba == "J")    {

!Variable prüfen, ggf. anlegen

string shplvban;
shplvban = shplname + "_Leistung" ;

 string sName= ""#shplvban#"";
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
  object svObj = dom.CreateObject(OT_VARDP,sName);
  svObj.DPInfo("autom. angelegt durch Skript Shelly PlugS");
  svObj.ValueUnit("W");
  dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
  svObj.ValueType(ivtFloat);
  svObj.ValueSubType(istGeneric);
  svObj.ValueMin(0);
  svObj.ValueMax(3500);
  svObj.State (0);!SCNR = SHP22266R
  dom.RTUpdate(0);


object oChan= channels.Get (""#shplname#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#shplvban#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );


}

var url2 = "http://" + shplip + "/meter/0?status" ;
!WriteLine(url2);

if (shplrl == "J") {
var url2 =  "http://" + shplbn + ":" + shplpw + "@" +shplip + "/meter/0?status" ;
WriteLine(url2);
                  }

dom.GetObject(""#execshpl#".CMD_SETS").State("wget -q -O - '"#url2#"'");
dom.GetObject(""#execshpl#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execshpl#".CMD_RETS").State();
dom.GetObject(""#execshpl#".CMD_SETS").State("0");
!WriteLine(Antwort);


string t;
 t = Antwort;
!WriteLine(t);

string s;
foreach (s,t.Split (",")) {
   if (s.LTrim ("{").StartsWith ('"power"')) {
   string p =  (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
   }
}
dom.GetObject(""#shplvban#"").State(p);
                       }

WriteLine("Skript beendet !");


!Ende Skript

Benutzeravatar
Henke
Beiträge: 1557
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 147 Mal
Danksagung erhalten: 323 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von Henke » 14.12.2023, 21:58

Code: Alles auswählen

var shplrl = "N" ;                      ! Ist Restrict Login im Shelly aktiv, dann auf "J" setzen
Ist auf J und entsprechend Benutzername und Passwort eingetragen?

Wichtelmann007
Beiträge: 222
Registriert: 26.02.2013, 21:11
Hat sich bedankt: 39 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von Wichtelmann007 » 14.12.2023, 22:26

Boa, ich sag ja Wald und Bäume und so... :wink:


DANKEEEE

Aber eine Frage hab ich noch, muss ich für ioBroker tatsächlich Benutzername nnd Passwort im Shelly anlegen oder geht das auch irgendwie ohne?

Benutzeravatar
shartelt
Beiträge: 7421
Registriert: 14.01.2015, 14:59
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 524 Mal
Danksagung erhalten: 754 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von shartelt » 15.12.2023, 06:49

geht auch ohne

Wichtelmann007
Beiträge: 222
Registriert: 26.02.2013, 21:11
Hat sich bedankt: 39 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von Wichtelmann007 » 15.12.2023, 18:09

Hat alles soweit funktioniert. Ein Problem habe ich jedoch noch, gibt es dafür eine Lösung?

Ich habe 2 Tasmota-Geräte mit Sensoren. Diese sind per CCU-Jack in die RM eingebunden und dort kann ich auf die Werte zugreifen. Als IP ist die IP meiner Raspberrymatic angegeben.
Nun experimentiere ich mit ioBroker und Vis, die derzeit auf meinem Büro-PC läuft. Bin halt bisl am testen. Um sie dort per Sonof Adapter ans Laufen zu bekommen muss ich in den Tasmota ja die IP auf den Büro-PC umstellen.

Gibt es eine Lösung beies Zweigleisig zu fahren?

Benutzeravatar
gnom
Beiträge: 368
Registriert: 23.06.2022, 05:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Brühl
Hat sich bedankt: 29 Mal
Danksagung erhalten: 63 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von gnom » 15.12.2023, 19:25

Wichtelmann007 hat geschrieben:
15.12.2023, 18:09
Ich habe 2 Tasmota-Geräte mit Sensoren. Diese sind per CCU-Jack in die RM eingebunden und dort kann ich auf die Werte zugreifen. Als IP ist die IP meiner Raspberrymatic angegeben.
Nun experimentiere ich mit ioBroker und Vis, die derzeit auf meinem Büro-PC läuft. Bin halt bisl am testen. Um sie dort per Sonof Adapter ans Laufen zu bekommen muss ich in den Tasmota ja die IP auf den Büro-PC umstellen.
vermute, mit "IP" meinst Du die IP des MQTT Servers in den tasmorta geräten, oder?

Warum möchtest Du denn den Tasmota (Sonoff) Adapter nutzen?
Wenn ich mich nicht irre, implementiert der Sonoff Adapter einen eigenen MQTT server und der kollidiert dann mit CCU-Jack (es sei denn, CCU-Jack wird dann als bridge konfiguriert). Aber das alles ist m.E. unnötig.
Nimm doch den MQTT client in ioBroker, dort hast Du dann die Datenpunkte und kannst weiter machen - mußt halt nur die gewünschten Topics im Adapter abbonieren und etwas filtern
Gruss, Chris

don't fear dying, fear not living (Marc Aurel)
strebst Du nach Respekt, handle selber danach (unbekannt)

2 Systeme:
- Home: Debmatic & IOBroker unter Debian 12 auf Laptop, HM-IP, Asksin++ (HB-+Innogy Devices), Zigbee, Tasmota/Shelly
- WE-Shed: Debmatic & IOBroker unter Debian 11 auf Laptop, HM classic, Asksin++ (HB-+Innogy Devices), RF, Tasmota/Shelly

Wichtelmann007
Beiträge: 222
Registriert: 26.02.2013, 21:11
Hat sich bedankt: 39 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von Wichtelmann007 » 15.12.2023, 21:25

habe ich mal versucht, jedoch muss ich in den mqtt einstellungen des tasmota dann ja die des ioBrokers angeben. Dann kann ich die Sensoren in der RM nicht mehr empfangen...
Zudem habe ich so auch im ioBroker keine brauchbaren Temperaturen auslesen können, Mit dem Sonoff Adapter ging es jedoch probemlos - außer dem "IP Problem"

Benutzeravatar
gnom
Beiträge: 368
Registriert: 23.06.2022, 05:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Brühl
Hat sich bedankt: 29 Mal
Danksagung erhalten: 63 Mal

Re: bekomme ShellyPlugS nicht mehr aktualisiert

Beitrag von gnom » 16.12.2023, 18:21

Zudem habe ich so auch im ioBroker keine brauchbaren Temperaturen auslesen können, Mit dem Sonoff Adapter ging es jedoch probemlos - außer dem "IP Problem"
Du versuchst, das gleiche Gerät mit zwei MQTT Servern zu verbinden. Das geht eben nicht!
Wichtelmann007 hat geschrieben:
15.12.2023, 21:25
habe ich mal versucht, jedoch muss ich in den mqtt einstellungen des tasmota dann ja die des ioBrokers angeben. Dann kann ich die Sensoren in der RM nicht mehr empfangen...
Nein! Du gibst in Tasmota unter MQTT die IP der CCU mit CCU-Jack an.
Unter IOBroker den MQTT Client installieren, der die Topics von CCU-Jack dann abboniert. Genau so habe ich es am laufen, geht also.
Nachteil: die Payloads müssen noch gefiltert werden (Node-Red oder so), um nutzbar zu werden. Der Sonoff Adapter macht das ja im Hintergrund automatisch.

Wenn Du den Sonoff Adapter nutzen möchtest, könnte man mal probieren, den CCU-Jack als bridge zu konfigurieren. Speziell für den Sonoff Adapter scheint es aber ein Problem zu geben. Eine Bridge ist ja auch ein subscriber, ggfls. testen.
bridge.png
Alternative 1: viewtopic.php?f=31&t=62270&hilit=tasmota.sh
Alternative 2 (wenn auch nicht so elegant): (Mess-)Werte des CCU-Jacks per Skript in SVs schreiben. Die sind dann im IO Boker.
Für's schalten (wo es einen Rückkanal bräuchte) CUxD.
Alternative 3: @ptweety/node-Red-contribute-CCU kann CCU-Jack Werte lesen/schreiben
Alternative 4: sich hier mal dranhängen https://github.com/ioBroker/ioBroker.hm-rpc/issues/1003
Gruss, Chris

don't fear dying, fear not living (Marc Aurel)
strebst Du nach Respekt, handle selber danach (unbekannt)

2 Systeme:
- Home: Debmatic & IOBroker unter Debian 12 auf Laptop, HM-IP, Asksin++ (HB-+Innogy Devices), Zigbee, Tasmota/Shelly
- WE-Shed: Debmatic & IOBroker unter Debian 11 auf Laptop, HM classic, Asksin++ (HB-+Innogy Devices), RF, Tasmota/Shelly

Antworten

Zurück zu „CUxD“