Versuche nun schon Stunden den Shelly Uni in Homematic einzubinden. Das funktioniert aber leider nur Teilweise.
Also ich habe einen Shelly Uni mit einen 4 - 20 mA Sensor verbunden. Als Widerstand habe ich 2 Stück 1KOhm parralel angeschlossen um eben eine Spannung von ca. 2 bis 10 Volt zu messen. Das funktioniert auch soweit ganz gut. Gut, die Spannung ist niedriger angezeigt (1,34 Volt und der Sensor liegt draußen neben den Schreibtisch). Tauche ich ihn in einen 10 Liter Wassereimer, beträgt die Spannung dann ca. 1,63 Volt. Also sollte das ja schonmal funktionieren.
Aber diese Voltanzeige bekomme ich einfach nicht in Homematic angezeigt. Bin nach dieser Anleitung vom 66er > Shelly UNI zur Batterieüberwachung in Homematic einbinden - mit der Originalfirmware
vorgegangen. Irgendwie stelle ich mich aber zu blöd an, es werden Immer 3 SV erzeugt wenn ich das Script angepasst habe.
Hier mal das Script wie es bei mir aussieht
! V1.1.2 Shelly-Uni als CUxD-Schalter mit Onlinestatus und Spannungsmessung
! (c)2020 - 2021 by 66er (alias Stefan K.)
! Publiziert und Updates auf https://smarthome-forum.eu/forum/index.php?board/145-homematic/
! entwickelt und getestet auf Shelly-Uni-Firmware 1.9.3
! Versionsdatum: 09.12.2021
! BITTE BEACHTEN:
! Dieses Skript legt 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.
! Uni PV Gartenhaus nur zur Orientierung,kann angepasst werden
!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***
! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!
!Setup Shelly-UNI
var uniip = "192.168.0.181" ; ! IP des Shelly Dimmer2 anpassen
var uniname = "Shelly-Uni_Brunnen_Fuellstand" ; ! Name des Shelly-UNI anpassen (daraus werden automatisch weitere Variablennamen erzeugt
! Setup der CUxD-GERÄTE
var execuni = "CUxD.CUX2801001:10" ; ! Adresse und Kanal des CUxD-Exec-Device angeben
var unich1 = "CUxD.CUX4000003:1" ; ! Adresse und Kanal des CUxD-Device für den Shelly-Uni Kanal 1 anpassen
var unich2 = "CUxD.CUX4000003:2" ; ! Adresse und Kanal des CUxD-Device für den Shelly-Uni Kanal 2 anpassen
! Setup Online-Status
var unionl = "J" ; ! Variable für Onlinezustandsüberwachung, falls nicht gewünscht, auf "N" setzen""
! Setup Aktualisierungsumfang
var unich1v = "J" ; ! Schaltkanal 1 des UNI nutzen und aktualisieren, wenn nicht gewünscht auf "N" setzen
var unich2v = "J" ; ! Schaltkanal 2 des UNI nutzen und aktualisieren, wenn nicht gewünscht auf "N" setzen
var univdc = "J" ; ! Spannungsmessung nutzen und aktualisieren, wenn nicht gewünscht auf "N" setzen
! Setup Offset Spannungswert
var uniuos = "-0.2" ; ! Offset anpassen
!****ENDE SETUP ********ENDE SETUP ********ENDE SETUP ******
!*****Ab hier NICHTS MEHR ÄNDERN *****
! Variable für Onlinestatus prüfen,ggf.anlegen
if (unionl == "J") {
var unionln = uniname + "_Online-Status";
string sName= ""#unionln#""; ! Onlinestatus
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly-UNI");
svObj.ValueUnit("");!SHUNI11166R
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtBinary);
svObj.ValueSubType(istBool);
svObj.ValueName0("Offline");
svObj.ValueName1("Online");
svObj.State (true); !SCNSU11266R
dom.RTUpdate(0);
}
}
! Onlineabfrage und setzen des Status
string stderr;
string stdout;
integer Status;
system.Exec("ping -c 1 '"#uniip#"'", &stdout, &stderr);
Status = stdout.Find("ms");
WriteLine(Status);
if (((unionl ) == "J" ) && ((Status) == -1)) {
WriteLine("Shelly-Uni ist offline");
dom.GetObject (""#unionln#"").State(0);
quit; ! Programmabbruch bei Shelly offline
}
if ((unionl ) == "J" ) {
dom.GetObject (""#unionln#"").State(1);
WriteLine("Shelly-UNI ist online");
}
!***********************************************************
! Abfrage des Shelly-UNI
!Abfrage der Werte
string url1 = (""#uniip#"") + "/status" ;
WriteLine(url1);
dom.GetObject(""#execuni#".CMD_SETS").State("wget -q -O - '"#url1#"'");
dom.GetObject(""#execuni#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execuni#".CMD_RETS").State();
string Antwort2 = dom.GetObject(""#execuni#".CMD_RETS").State();
dom.GetObject(""#execuni#".CMD_SETS").State("0");
WriteLine(Antwort);
!Schaltzustand Kanäle
! Kanal 1
if (unich1v == "J" ) {
string urlch1 = (""#uniip#"") + "/relay/0/status" ;
WriteLine(urlch1);
dom.GetObject(""#execuni#".CMD_SETS").State("wget -q -O - '"#urlch1#"'");
dom.GetObject(""#execuni#".CMD_QUERY_RET").State(1);
string ret1 = dom.GetObject(""#execuni#".CMD_RETS").State();
dom.GetObject(""#execuni#".CMD_SETS").State("0");
WriteLine(ret1);
if (ret1.Contains("\"ison\":false")) {
dom.GetObject(""#unich1#".SET_STATE").State(0);
}
if (ret1.Contains("\"ison\":true")) {
dom.GetObject(""#unich1#".SET_STATE").State(1);}
}
! Kanal 2
if (unich2v == "J" ) {
string urlch2 = (""#uniip#"") + "/relay/1/status" ;
WriteLine(urlch2);
dom.GetObject(""#execuni#".CMD_SETS").State("wget -q -O - '"#urlch2#"'");
dom.GetObject(""#execuni#".CMD_QUERY_RET").State(1);
string ret2 = dom.GetObject(""#execuni#".CMD_RETS").State();
dom.GetObject(""#execuni#".CMD_SETS").State("0");
WriteLine(ret2);
if (ret2.Contains("\"ison\":false")) {
dom.GetObject(""#unich2#".SET_STATE").State(0);
}
if (ret2.Contains("\"ison\":true")) {
dom.GetObject(""#unich2#".SET_STATE").State(1);}
}
! Spannungswert
if (univdc == "J") {
! Prüfung Variable, ggf. Erstellung
string svvdc = uniname + "-Spannung" ;
string sName= ""#svvdc#"";
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly-UNI Spannungsmessung");
svObj.ValueUnit("V"); !SHUNI11166R
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.ValueMin(0);
svObj.ValueMax(30);
svObj.State (0); !SCNSU11266R
dom.RTUpdate(0);
}
string t = Antwort ;
!WriteLine(t);
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"adcs"')) {
string vdc = (s.StrValueByIndex (":",2).RTrim ("}]"));
WriteLine(vdc); }}
! Offset
vdc = vdc.ToFloat() + uniuos.ToFloat();
WriteLine(vdc);
dom.GetObject(""#svvdc#"").State(vdc - uniuos);
}
WriteLine("Skript V1.1.1 beendet" );
!Ende Skript
Alles anzeigen
Ich kann zwar die beiden Kanäle in Homematic schalten, aber die SV werden nicht bei Status und Bedienung angezeigt. Bei den neu automatisch erstellten SV sind nun 3 Stück drin, es sollten aber eigentlich ja nur 2 sein. Als Spannungswert wird auch bei der SV 1,44 Volt angezeigt obwohl der Shelly Uni 1,64 Volt richtig anzeigt. Irgendetwas scheint da mit dem Script noch nicht zu stimmen. Auch laut Anleitung zum aktualisieren des Uni
Um eine direkte Rückmeldung über den Schaltstatus der Schaltkanäle des Shelly-UNI zu bekommen, wenn diese auf Shelly-Seite geschaltet werden, kann man wie immer die Actions nutzen:
Eintrag in OUTPUT SWITCHED ON URL:
Code
Eintrag in OUTPUT SWITCHED OFF URL:
Code
gibt es so bei mir nicht. Shelly Uni hat FW Current version: 20220209-095044/v1.11.8-g8c7bb8d
liegt es daran? Eventuell kann ja 66er nochmal etwas dazu sagen. Vielen Dank