Rule1 on Power1#State=1 do WebSend

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

Moderator: Co-Administratoren

Antworten
GodnessHimself
Beiträge: 11
Registriert: 26.04.2020, 20:03

Rule1 on Power1#State=1 do WebSend

Beitrag von GodnessHimself » 18.11.2020, 20:17

Hallo,
ich habe ein Shelly1 der über Tasmota 9.1.0 läuft.
in Homematic habe ich das gerät bereit eingebunden. Nun möchte ich jedoch auch den Status in der CCU3 übertragen bekommen, wenn der Shelly1 über die Tasmota Überfläche eingeschaltet wird. Hierzu meine geschriebene Regel:

1. Über die Tasmota Konsole eingefügt:
Rule1 on Power1#State=1 do WebSend [XXX.XXX.XXX.XXX:8181] /cuxd.exe?ret=dom.GetObject('Shelly1-07:1').State(1) endon on Power1#State=0 do WebSend [XXX.XXX.XXX.XXX:8181] /cuxd.exe?ret=dom.GetObject('Shelly1-07:1').State(0) endon

2. Regel aktiviert:
Rule1 1

Allerding wird der Status nicht übertragen, Was ist daran falsch?

Benutzeravatar
uwe111
Beiträge: 4807
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 239 Mal
Kontaktdaten:

Re: Rule1 on Power1#State=1 do WebSend

Beitrag von uwe111 » 19.11.2020, 09:28

GodnessHimself hat geschrieben:
18.11.2020, 20:17
Allerding wird der Status nicht übertragen, Was ist daran falsch?
Hast Du den Aufruf der URL mal mittels wget, curl oder Deinem Webbrowser probiert?
Funktioniert das?

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

GodnessHimself
Beiträge: 11
Registriert: 26.04.2020, 20:03

Re: Rule1 on Power1#State=1 do WebSend

Beitrag von GodnessHimself » 19.11.2020, 16:47

jap, das habe ich und da wird es auch übertragen!

Benutzeravatar
uwe111
Beiträge: 4807
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 239 Mal
Kontaktdaten:

Re: Rule1 on Power1#State=1 do WebSend

Beitrag von uwe111 » 19.11.2020, 17:23

Wie sieht denn der funktioniernde wget-Aufruf aus?
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Matten Matten
Beiträge: 278
Registriert: 09.12.2018, 17:14
System: CCU
Hat sich bedankt: 68 Mal
Danksagung erhalten: 21 Mal
Kontaktdaten:

Re: Rule1 on Power1#State=1 do WebSend

Beitrag von Matten Matten » 08.12.2020, 11:38

GodnessHimself hat geschrieben:
18.11.2020, 20:17
Hallo,
ich habe ein Shelly1 der über Tasmota 9.1.0 läuft.
in Homematic habe ich das gerät bereit eingebunden. Nun möchte ich jedoch auch den Status in der CCU3 übertragen bekommen, wenn der Shelly1 über die Tasmota Überfläche eingeschaltet wird. Hierzu meine geschriebene Regel:

1. Über die Tasmota Konsole eingefügt:
Rule1 on Power1#State=1 do WebSend [XXX.XXX.XXX.XXX:8181] /cuxd.exe?ret=dom.GetObject('Shelly1-07:1').State(1) endon on Power1#State=0 do WebSend [XXX.XXX.XXX.XXX:8181] /cuxd.exe?ret=dom.GetObject('Shelly1-07:1').State(0) endon

2. Regel aktiviert:
Rule1 1

Allerding wird der Status nicht übertragen, Was ist daran falsch?
'Shelly1-07:1' Ist das der exakte cuxd name?
probiere es mal so: GetObject('Shelly1-07:1.STATE').State(1)

ich realisiere das mit der cuxd Seriennummer wie folgt:

Code: Alles auswählen

Rule1 on Power1#State=1 do WebSend [192.168.xx.xx:8181] /cuxd.exe?ret=dom.GetObject('CUxD.CUX2801001:1.SET_STATE').State(1) endon on Power1#State=0 do WebSend [192.168.xx.xx:8181] /cuxd.exe?ret=dom.GetObject('CUxD.CUX2801001:1.SET_STATE').State(0) endon
als tip nutze "SET_STATE" damit der befehl nicht erneut von cuxd ausgeführt wird.

Gruß
Matten Matten

Matten Matten
Beiträge: 278
Registriert: 09.12.2018, 17:14
System: CCU
Hat sich bedankt: 68 Mal
Danksagung erhalten: 21 Mal
Kontaktdaten:

Re: Rule1 on Power1#State=1 do WebSend

Beitrag von Matten Matten » 08.12.2020, 11:40

Mega wäre wenn es ein Device in CuxD für Tasmotha speziell gäbe... :?: :idea:

vieleicht mit an und abwahl für Energie & Verbraucher Übergabe.

Ich nutze aktuell Systemvariablen die mit dem CuxD Device verknüpft sind. Habe dafür ein kleines Script geschrieben
was auch die Einträge erledigt im Cuxd Device so wie Die Rules an das Tasmota Gerät überträgt und aktiviert.
(Script nur für Steckdosen mit maximal 2 Kanäle)

sobald das skript ausgeführt wurde muss gewartet werden bis etwas in der Ausgabe steht.

Code: Alles auswählen

!#      >>> Tasmota HM CCU Script V 1.1.0 <<<
!#
!#      >>> Bitte als erstes ein CUxD Gerät anlegen <<<
!#
!#  - CUxD Gerätetyp: "(28) System"
!#	- Funktion: "Exec"
!#  - Seriennummer: Zahl merken! und in Punkt (3) eintragen!
!#  - Name: leer lassen!
!#  - Geräte-Icon: "virtueller Schalter"
!#  - Control: "Schalter"
!#  - Gerät auf CCU erzeugen ! anklicken
!#  - dann im Geräte Posteingang das Gerät auf Fertig klicken.
!#  - jetzt die Punkte 1-6 ausfüllen und das skript ausführen.
!#
!#### Nur umbenennen wenn Name nicht automatisch erstellt ####
var new_cuxd_device = "";                                   !#
!#############################################################
!#
!#             >>> Geräte Variablen erstellen <<<
!#
!#   >>> Bitte die Punkte (1) bis (6) korrekt ausfüllen <<<
!#
!#
!##### Name der Steckdose ####################################
var dev_name = "Gosund_Plug_1";                             !# (1)
!#############################################################
!#
!#
!##### IP der Tasmota Steckdose ##############################
var dev_ip = "192.168.0.1";                              !# (2)
!#############################################################
!#
!#
!##### Cuxdeamon Seriennummer Nummer #########################
var new_cuxd_nr = "1";                                     !# (3)
!#############################################################
!#
!#
!##### IP der CCU3 ###########################################
var ccu_ip = "192.168.0.10";                               !# (4)
!#############################################################
!#
!#
!##### Steckdose mit Leistungsmessung "ja" oder "nein" #######
var dev_typ = "ja";                      										!# (5)
!#############################################################
!#
!#
!##### Steckdosen Schalt Kanäle Anzahl "1" oder "2" ##########
var dev_chanel = "1";                   										!# (6)
!#############################################################
!#
!#
!##### Steckdose Kanal 1 mit Leistungsmessung? "ja" oder "nein" ######
var dev_chanel_1 = "ja";                           									!# (6.1)
!#####################################################################
!#
!#
!##### Steckdose Kanal 2 mit Leistungsmessung? "ja" oder "nein" ######
var dev_chanel_2 = "nein";                           								!# (6.2)
!#####################################################################
!#
!#
!##### Steckdose Kanal 2 mit USB? "ja" oder "nein" ###################
var dev_chanel_2_usb = "nein";                     									!# (6.3)
!#####################################################################
!#
!#
!#
!#
!#   <<< !!! ab hier nichts mehr ändern !!!  >>>
!#
!##############################################################

WriteLine("Start...");

! "HM-ES-PMSw1-Pl CUX2801 000"
if ( new_cuxd_nr.Length() == 1 ){
  new_cuxd_nr = "00" + new_cuxd_nr;
  ! WriteLine("HM-ES-PMSw1-Pl CUX2801"#new_cuxd_nr);
}
if ( new_cuxd_nr.Length() == 2 ){
  new_cuxd_nr = "0" + new_cuxd_nr;
  ! WriteLine("HM-ES-PMSw1-Pl CUX2801"#new_cuxd_nr);
} else {
  ! WriteLine("HM-ES-PMSw1-Pl CUX2801"#new_cuxd_nr);
}

var cuxd_id = "CUxD.CUX2801" + new_cuxd_nr;

! HM-ES-PMSw1-Pl
!var cuxd_id_alt = "HM-ES-PMSw1-Pl CUX2801" + new_cuxd_nr;
! VIR-LG-ONOFF
var cuxd_id_alt = "VIR-LG-ONOFF CUX2801" + new_cuxd_nr;

var dev_info = "Wifi Steckdose";


! CuxDevice umbenennen
if (new_cuxd_device==""){
	string sAltName = cuxd_id_alt;
} else {
	string sAltName = new_cuxd_device;
}
string sNeuName= dev_name;
string sCHN;
object oCHN;
object oDEV= devices.Get (sAltName);

if (oDEV) {
  if (oDEV.Type()==OT_DEVICE) {
     
    ! Device umbenennen wenn NeuerName ungleich dem Istnamen
    if (sNeuName!=oDEV.Name()) {
      oDEV.Name(sNeuName);
      WriteLine("CuxD Gerät umbenannt in "#sNeuName);
    }
    ! Device Name Ende
    
    ! CH1
    oCHN = dom.GetObject(oDEV.Channels().GetAt(1));
    if (oCHN) {
      if (oCHN.Type()==OT_CHANNEL) {
        WriteLine("Chanel1 umbenannt in "#sNeuName#":1_Steckdose");
        oCHN.Name(sNeuName#":1_Steckdose");
		var cuxd_name = sNeuName#":1_Steckdose";
      }
    }
    ! CH1 Ende
    
	if ( dev_chanel == "2" ){
		
	if ( dev_chanel_2_usb == "ja" ){
		
    ! CH2
    oCHN = dom.GetObject(oDEV.Channels().GetAt(2));
    if (oCHN) {
      if (oCHN.Type()==OT_CHANNEL) {
        WriteLine("Chanel2 umbenannt in "#sNeuName#":2_USB");
        oCHN.Name( sNeuName # ":2_USB" );
      }
    }
    ! CH2 Ende
	
	} else {
		
    ! CH2
    oCHN = dom.GetObject(oDEV.Channels().GetAt(2));
    if (oCHN) {
      if (oCHN.Type()==OT_CHANNEL) {
        WriteLine("Chanel 2 umbenannt in "#sNeuName#":2_Steckdose");
        oCHN.Name( sNeuName # ":2_Steckdose" );
      }
    }
    ! CH2 Ende
	
	}
	
	! CH3 RESET
	oCHN = dom.GetObject(oDEV.Channels().GetAt(3));
    if (oCHN) {
      if (oCHN.Type()==OT_CHANNEL) {
        WriteLine("Chanel 3 umbenannt in "#sNeuName#":3_RESET");
        oCHN.Name( sNeuName # ":3_RESET" );
      }
    }
	! CH3 RESET ENDE
	
	! Rest leeren
	foreach (sCHN,system.GenerateEnum (4,oDEV.Channels().Count()-1)) {
		oCHN=dom.GetObject (oDEV.Channels().GetAt (sCHN.ToInteger () ));
		if (oCHN) {
		    if (oCHN.Type()==OT_CHANNEL) {
			   WriteLine (oCHN.Name () # " umbenannt in " # sNeuName # ":" # oCHN.ChnNumber().ToString () );
			   oCHN.Name (sNeuName # ":" # oCHN.ChnNumber().ToString () );
			}
		}
	}
	! leeren ende
	} else {
		
		! CH2 RESET
		oCHN = dom.GetObject(oDEV.Channels().GetAt(2));
		if (oCHN) {
			if (oCHN.Type()==OT_CHANNEL) {
				WriteLine("Chanel 2 umbenannt in "#sNeuName#":2_RESET");
				oCHN.Name( sNeuName # ":2_RESET" );
			}
		}
		! CH2 RESET ENDE
		
		! Rest leeren
		foreach (sCHN,system.GenerateEnum (3,oDEV.Channels().Count()-1)) {
			oCHN=dom.GetObject (oDEV.Channels().GetAt (sCHN.ToInteger () ));
			if (oCHN) {
				if (oCHN.Type()==OT_CHANNEL) {
					WriteLine (oCHN.Name () # " umbenannt in " # sNeuName # ":" # oCHN.ChnNumber().ToString () );
					oCHN.Name (sNeuName # ":" # oCHN.ChnNumber().ToString () );
				}
			}
		}
		! leeren ende
	}
	
  }
} 

! Datenpunkte anlegen CH1
if ( dev_chanel_1 == "ja" ){
	string  svName = dev_name + "_POWER";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("Watt");
		svObj.ValueMin(0);
		svObj.ValueMax(4000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _POWER
	
	string  svName = dev_name + "_CURRENT";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("A");
		svObj.ValueMin(0);
		svObj.ValueMax(10000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _CURRENT
	
	string  svName = dev_name + "_VOLTAGE";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("Volt");
		svObj.ValueMin(0);
		svObj.ValueMax(250);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _VOLTAGE
	
	string  svName = dev_name + "_ENERGY_YESTERDAY";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("kWh");
		svObj.ValueMin(0);
		svObj.ValueMax(10000000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _ENERGY_YESTERDAY
	
	string  svName = dev_name + "_ENERGY_TODAY";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("kWh");
		svObj.ValueMin(0);
		svObj.ValueMax(10000000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _ENERGY_TODAY
	
	string  svName = dev_name + "_ENERGY_TOTAL";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("kWh");
		svObj.ValueMin(0);
		svObj.ValueMax(10000000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _ENERGY_TOTAL
}
! Ende Datenpunkte anlegen CH1

! Datenpunkte anlegen CH2
if ( dev_chanel_2 == "ja" ){
	string  svName = dev_name + "_2_POWER";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("Watt");
		svObj.ValueMin(0);
		svObj.ValueMax(4000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _2_POWER
	
	string  svName = dev_name + "_2_CURRENT";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("A");
		svObj.ValueMin(0);
		svObj.ValueMax(10000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _2_CURRENT
	
	string  svName = dev_name + "_2_VOLTAGE";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("Volt");
		svObj.ValueMin(0);
		svObj.ValueMax(250);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _2_VOLTAGE
	
	string  svName = dev_name + "_2_ENERGY_YESTERDAY";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("kWh");
		svObj.ValueMin(0);
		svObj.ValueMax(10000000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _2_ENERGY_YESTERDAY
	
	string  svName = dev_name + "_2_ENERGY_TODAY";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("kWh");
		svObj.ValueMin(0);
		svObj.ValueMax(10000000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _2_ENERGY_TODAY
	
	string  svName = dev_name + "_2_ENERGY_TOTAL";
	object  svObj  = dom.GetObject(svName);
	if (!svObj){   
		object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObj = dom.CreateObject(OT_VARDP);
		svObjects.Add(svObj.ID());
		svObj.Name(svName);   
		svObj.ValueType(ivtFloat);
		svObj.ValueSubType(istGeneric);
		svObj.DPInfo(dev_info);
		svObj.ValueUnit("kWh");
		svObj.ValueMin(0);
		svObj.ValueMax(10000000);
		svObj.DPArchive(false);
		svObj.State(0);
		svObj.Internal(false);
		svObj.Visible(true);
		dom.RTUpdate(0);
		object oChan= channels.Get (cuxd_name);
		object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (svName);
		oChan.DPs().Add (oSys);
		oSys.Channel (oChan.ID());
		WriteLine("Datenpunkt "#svName#" angelegt & verknüpft");
	} else {
		WriteLine("Geräte Variable mit dem Namen:" + svName + " existiert bereits!");
	}! Ende _2_ENERGY_TOTAL
}! Ende Datenpunkte anlegen CH2

! auf tasmota Device zugreifen und Einstellungen vor nehmen
! Rule1
var text1 = "Rule1%201";
var text2 = "Rule1%20on%20Power1%23State=1%20do%20WebSend%20[";
var text3 = ":8181]%20/cuxd.exe?ret=dom.GetObject(%27";
var text4 = ":1.SET_STATE%27).State(1)%20endon%20on%20Power1%23State=0%20do%20WebSend%20[";
var text5 = ":8181]%20/cuxd.exe?ret=dom.GetObject(%27";
var text6 = ":1.SET_STATE%27).State(0)%20endon";
var rule = text2#ccu_ip#text3#cuxd_id#text4#ccu_ip#text5#cuxd_id#text6;
var url = "\'http://"#dev_ip#"/cm?cmnd="#rule#"\'";
dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
WriteLine("Rule1 erfolgreich übertragen");
var url = "\'http://"#dev_ip#"/cm?cmnd="#text1#"\'";
dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
WriteLine("Rule1 aktiviert");
! Ende Rule1

if ( dev_chanel == "2" ){
	! Rule2
	var text1 = "Rule2%201";
	var text2 = "Rule2%20on%20Power1%23State=1%20do%20WebSend%20[";
	var text3 = ":8181]%20/cuxd.exe?ret=dom.GetObject(%27";
	var text4 = ":2.SET_STATE%27).State(1)%20endon%20on%20Power1%23State=0%20do%20WebSend%20[";
	var text5 = ":8181]%20/cuxd.exe?ret=dom.GetObject(%27";
	var text6 = ":2.SET_STATE%27).State(0)%20endon";
	var rule = text2#ccu_ip#text3#cuxd_id#text4#ccu_ip#text5#cuxd_id#text6;
	var url = "\'http://"#dev_ip#"/cm?cmnd="#rule#"\'";
	dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
	WriteLine("Rule2 erfolgreich übertragen");
	var url="\'http://"#dev_ip#"/cm?cmnd="#text1#"\'";
	dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
	WriteLine("Rule2 aktiviert");
	! Ende Rule2
}

! Rule3 Energie Daten an CCU übermitteln
if ( dev_chanel_1 == "ja" ){
var text1 = "Rule3%201";
var text12 = "Rule3%20on%20Tele-Energy%23Power%20do%20WebSend%20[";
var text13 = ":8181]%20/cuxd.exe?ret=dom.GetObject(%27";
var text14 = "_POWER%27).State(%value%)%20endon%20on%20Tele-Energy%23Current%20do%20WebSend%20[";
var text15 = "_CURRENT%27).State(%value%)%20endon%20on%20Tele-Energy%23Voltage%20do%20WebSend%20[";
var text16 = "_VOLTAGE%27).State(%value%)%20endon%20on%20Tele-Energy%23Total%20do%20WebSend%20[";
var text17 = "_ENERGY_TOTAL%27).State(%value%)%20endon%20on%20Tele-Energy%23Today%20do%20WebSend%20[";
var text18 = "_ENERGY_TODAY%27).State(%value%)%20endon%20on%20Tele-Energy%23Yesterday%20do%20WebSend%20[";
var text19 = "_ENERGY_YESTERDAY%27).State(%value%)%20endon";
var rule = text12#ccu_ip#text13#dev_name#text14#ccu_ip#text13#dev_name#text15#ccu_ip#text13#dev_name#text16#ccu_ip#text13#dev_name#text17#ccu_ip#text13#dev_name#text18#ccu_ip#text13#dev_name#text19;
var url = "\'http://"#dev_ip#"/cm?cmnd="#rule#"\'";
dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
WriteLine("Rule3 erfolgreich übertragen");
var url = "\'http://"#dev_ip#"/cm?cmnd="#text1#"\'";
dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
WriteLine("Rule3 aktiviert");
}
! Ende Rule 3

! Pollintervall auf 1 min
var poll = "TelePeriod%2060";
var url="\'http://"#dev_ip#"/cm?cmnd="#poll#"\'";
dom.GetObject("CUxD.CUX2801"#new_cuxd_nr#":1.CMD_EXEC").State("wget -q -O /dev/null " # url);
WriteLine("Pollintervall auf 1 Minute gesetzt");

! Ende tasmota Device zugreifen und Einstellungen vor nehmen

! automatisch füllen von cuxd CMD_SHORT/CMD_LONG

! CH1
var cmdip = dev_ip;
var devcmd = "CUX2801" + new_cuxd_nr + ":1";

! var cmdshort = "\"/usr/local/addons/cuxd/curl -s http://"#cmdip#"/cm?cmnd=Power1%20false\"";
var cmdshort = "\"/usr/local/addons/cuxd/curl -s http://$_P1$/cm?cmnd=Power1%20false\"";
object i1 = dom.GetObject("CUxD");
xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_SHORT",cmdshort);
WriteLine("CuxD Parameter für Tasmota CH1 'AUS' gesetzt");

! var cmdlong = "\"/usr/local/addons/cuxd/curl -s http://"#cmdip#"/cm?cmnd=Power1%20true\"";
var cmdlong = "\"/usr/local/addons/cuxd/curl -s http://$_P1$/cm?cmnd=Power1%20true\"";
object i1 = dom.GetObject("CUxD");
xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_LONG",cmdlong);
WriteLine("CuxD Parameter für Tasmota CH1 'EIN' gesetzt");


! IP in PARAM1 setzen
var devcmd = "CUX2801" + new_cuxd_nr;
var cmdipx = "\""#cmdip#"\"";
object i1 = dom.GetObject("CUxD");
xmlrpc.PutParamset(i1,devcmd,"CMD","PARAM1",cmdipx);
WriteLine("CuxD PARAM1 auf "#cmdip#" gesetzt");

! UNREACH setzen
var devcmd = "CUX2801" + new_cuxd_nr;
var cmdUN = -1;
object i1 = dom.GetObject("CUxD");
xmlrpc.PutParamset(i1,devcmd,"CMD","UNREACH",cmdUN);
WriteLine("CuxD UNREACH auf -1 gesetzt");

! CHANNELS setzen
var devcmd = "CUX2801" + new_cuxd_nr;
var cmdCH = dev_chanel.ToFloat()+1;
object i1 = dom.GetObject("CUxD");
xmlrpc.PutParamset(i1,devcmd,"CMD","CHANNELS",cmdCH);
WriteLine("CuxD CHANNELS auf "#cmdCH.ToString(0)#" gesetzt");


! CH2
if ( dev_chanel == "2" ){
	
	var cmdip = dev_ip;
	var devcmd = "CUX2801" + new_cuxd_nr + ":2";
	
	! var cmdshort = "\"/usr/local/addons/cuxd/curl -s http://"#cmdip#"/cm?cmnd=Power1%20false\"";
	var cmdshort = "\"/usr/local/addons/cuxd/curl -s http://$_P1$/cm?cmnd=Power1%20false\"";
	object i1 = dom.GetObject("CUxD");
	xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_SHORT",cmdshort);
	WriteLine("CuxD Parameter für Tasmota CH2 'AUS' gesetzt");
	
	! var cmdlong = "\"/usr/local/addons/cuxd/curl -s http://"#cmdip#"/cm?cmnd=Power1%20true\"";
	var cmdlong = "\"/usr/local/addons/cuxd/curl -s http://$_P1$/cm?cmnd=Power1%20true\"";
	object i1 = dom.GetObject("CUxD");
	xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_LONG",cmdlong);
	WriteLine("CuxD Parameter für Tasmota CH2 'EIN' gesetzt");
}

! RESET
if ( dev_chanel == "1" ){
	
	var cmdip = dev_ip;
	var devcmd = "CUX2801" + new_cuxd_nr + ":2";
	
	var cmdreset = "\"/usr/local/addons/cuxd/curl -s http://$_P1$/cm?cmnd=EnergyReset%200\"";
	object i1 = dom.GetObject("CUxD");
	xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_SHORT",cmdreset);

	object i1 = dom.GetObject("CUxD");
	xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_LONG",cmdreset);
	WriteLine("CuxD Parameter für Tasmota RESET gesetzt");

}
if ( dev_chanel == "2" ){
	
	var cmdip = dev_ip;
	var devcmd = "CUX2801" + new_cuxd_nr + ":3";
	
	var cmdreset = "\"/usr/local/addons/cuxd/curl -s http://$_P1$/cm?cmnd=EnergyReset%200\"";
	object i1 = dom.GetObject("CUxD");
	xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_SHORT",cmdreset);

	object i1 = dom.GetObject("CUxD");
	xmlrpc.PutParamset(i1,devcmd,"SWITCH","CMD_LONG",cmdreset);
	WriteLine("CuxD Parameter für Tasmota RESET gesetzt");

}
! ENDE RESET

! Ende automatisch füllen von cuxd CMD_SHORT/CMD_LONG/PARAM1


! Ende Script
var testmode = "1";
if (testmode=="1"){
var textende = "\n\n\nDeine Tasmota Steckdose ist jetzt mit dem CUxD Gerät verbunden.\nNun kannst du dir die Werte auf der CCU anzeigen lassen und schalten,";
var textende2 = " in dem du unter Status und Bedienung Auf Geräte gehst und dir das Gerät " + dev_name + " anwählst.";
WriteLine(textende#textende2);
}

! Ende <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
EDIT: hab noch ein paar sachen angepasst.

V1.1.0
(unreach Meldung wird erzeugt wenn WiFi Steckdose nicht erreichbar)
(IP muss nur noch in PARAM1 stehen)
(CHANNELS wird gesetzt)

tasmota hm script bsp.png
Gruß
Matten Matten

Slice
Beiträge: 1192
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 135 Mal
Danksagung erhalten: 82 Mal

Re: Rule1 on Power1#State=1 do WebSend

Beitrag von Slice » 14.03.2023, 14:37

Hallo Matten Matten,

ich hole mal diesen älteren Beitrag aus der Versenkung.
Vor ein paar Tagen habe ich mir eine Nous A5T Steckdosenleiste mit Tasmota gekauft und bin über die Suche im Forum auf das Script hier aufmerksam geworden.
Matten Matten hat geschrieben:
08.12.2020, 11:40
Ich nutze aktuell Systemvariablen die mit dem CuxD Device verknüpft sind. Habe dafür ein kleines Script geschrieben
was auch die Einträge erledigt im Cuxd Device so wie Die Rules an das Tasmota Gerät überträgt und aktiviert.
(Script nur für Steckdosen mit maximal 2 Kanäle)
Gibt es eine Möglichkeit das Script auch für 3 Steckdosen + 1 USB umzuändern? :?:
Ich habe mir den Code mal angeschaut, aber ich befürchte das überfordert mich ein wenig das auf 4 abzuändern.
Mein Ziel wäre an der Steckdosenleiste meine externen Festplatten anzuschließen um automatisiert meine Backups auf diese abzuspeichern.
Das schalten der entsprechenden Steckdose würde ich gerne über die Homematic machen.
Finde den Ansatz hier echt super und würde mich über Hilfe freuen.

EDIT:
Hat sich für mich erledigt!

Danke und Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.73.9 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

Antworten

Zurück zu „CUxD“