HMIP WIREDDRS-8 per Skript schalten

Kabelgebundene Sender und Empfänger aus der Serie Homematic IP wired

Moderator: Co-Administratoren

Antworten
ckohrt
Beiträge: 43
Registriert: 27.09.2018, 13:05
Hat sich bedankt: 2 Mal

HMIP WIREDDRS-8 per Skript schalten

Beitrag von ckohrt » 27.03.2019, 08:46

Hallo,
ich bin nun in den Genuß eines HMIP WIREDDRS-8 Aktors gekommen und wollte ihn per Skript schalten.

Ich habe die neue Antenne mit aktueller RaspberryMatic verbaut. Der DRS-8 hängt am angemeldeten DRAP. Verbindung etc. alles gut. Per Taste aus der WebUI heraus kann ich ihn steuern, insofern sollte es gehen.

Hier mein Versuch. Es soll alle 10s der Aktor getoggelt werden:

Code: Alles auswählen

string actor = "BidCoS-Wir.3014F711A0001618A98F985C:2";
var Switch = dom.GetObject(actor + ".STATE").State();

if (Switch == true)
{
  dom.GetObject(actor+".STATE").State(false);
}
else
{
  dom.GetObject(actor+".STATE").State(true);
}
Das Skript meldet keine Fehler, aber der Aktor schaltet nicht.

Im Systemlog erscheinen keine Meldungen dazu. Kann mir jemand sagen, wie dieser Teil
string actor = "BidCoS-Wir.3014F711A0001618A98F985C:2";
aussehen muss?


Vielen Dank!

VG
Christian
Zuletzt geändert von Roland M. am 31.03.2019, 01:06, insgesamt 1-mal geändert.
Grund: Thema verschoben

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von alchy » 27.03.2019, 13:19

kein Fehler im Fehlerprotokoll?

Auch IP Wired wird vielleicht der normalen Struktur folgen:
>> HM Script Abfrage von Datenpunkten (RF,IP...) <<


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

ckohrt
Beiträge: 43
Registriert: 27.09.2018, 13:05
Hat sich bedankt: 2 Mal

Re: HMIP WIRED DRS-8 per Skript schalten

Beitrag von ckohrt » 28.03.2019, 21:35

Hallo Alchy,
vielen Dank für die Infos, hat mir sehr geholfen. Ich habe mich auch noch daran erinnert, dass das AddOn/Tool "Script Parser" mir auch alle Datenpunkte anzeigt. Ich hatte schon alle erdenklichen Kombinationen durch, aber hier nochmal für die Nachwelt der Code der meinen HMIP WIRED DRS-8 Aktor mit jedem Aufruf umschaltet (der Code wird noch optimiert, da String concat, Objekt Verwendung und HmIP-RF noch verbessert oder geklärt werden muss):

Code: Alles auswählen

string actor = "HmIP-RF.001618A98F985C:2";

var Switch = dom.GetObject(actor + ".STATE").State();

if (Switch == true)
{
  dom.GetObject(actor+".STATE").State(false);
}
else
{
  dom.GetObject(actor+".STATE").State(true);
}

Ich werde auch nochmal schauen, warum ich nichts im Protokoll gefunden habe.

Vielen Dank!

VG
Christian

PS
Den von Dir verlinkten Post werde ich mir noch genauer anschauen. Stehen viele nützliche Infos drin.
Zuletzt geändert von ckohrt am 29.03.2019, 08:35, insgesamt 1-mal geändert.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von alchy » 29.03.2019, 07:58

ckohrt hat geschrieben:
28.03.2019, 21:35
hier nochmal für die Nachwelt der Code der meinen HMIP WIRED DRS-8 Aktor mit jedem Aufruf umschaltet:
Ernsthaft? Das will ich nicht glauben das ein Wired Aktor über das HmIP-RF Interface kommuniziert?
Der Code ist optimierungsbedürftig (auch wenn er bei Angabe der richtigen Daten grundsätzlich erstmal funktionieren kann)
Da wäre die >>string concatenation <<
zu verbessern (die außerdem eigentlich gar nicht nötig ist) dann wäre es noch besser die Objekte auch als die richtigen zu verwenden usw...

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

ckohrt
Beiträge: 43
Registriert: 27.09.2018, 13:05
Hat sich bedankt: 2 Mal

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von ckohrt » 29.03.2019, 08:32

Hallo Alchy,
ich habe das hm-rpi-rf-mod, kann es eventuell damit zusammen hängen? Ich habe auch eher was mit WIR erwartet, aber ja, es funktioniert. Der Aktor schaltet.
String concat ist klar. Mit Objekte meinst du was du verlinkt hast? Das wollte ich mir noch anschauen und den Code hier dann auch verbessern, aber verstehen sollte ich das ja schon. Brauch halt Zeit dafür.
VG
Christian

PS
Ich schreibe solange noch dazu, dass der Code noch optimiert werden muss.
Raspberry Pi 3 B mit fhem, CUNO
Raspberry Pi 3 B+ mit RaspberryMatic Version 3.37.8.20180922, S.USV Hardware Rev 2.2, Firmware 2.61, Software Version 2.40, mit Akku 300mAh, EQ3-Funkmodul HM-MOD-RPI-PCB & externe Antenne

Gerti
Beiträge: 3034
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 274 Mal

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von Gerti » 29.03.2019, 08:38

Hi,
alchy hat geschrieben:
29.03.2019, 07:58
Ernsthaft? Das will ich nicht glauben das ein Wired Aktor über das HmIP-RF Interface kommuniziert?
Doch, tut er.
HmIP macht keine Unterscheidung mehr zwischen Funk und Bus.

Gruß,
Gerti

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von alchy » 29.03.2019, 09:13

Gerti hat geschrieben:
29.03.2019, 08:38
HmIP macht keine Unterscheidung mehr zwischen Funk und Bus.
Gut zu wissen, vielen Dank für die Info. :!:
Da gehen mir ein paar WarnLichter an. :shock:
Das muss ich mir merken. (Ich habe ja kein wired, weder das alte noch das IP)
ckohrt hat geschrieben:
29.03.2019, 08:32
Mit Objekte meinst du was du verlinkt hast?
Ich meine, du solltest dir die Scriptdoku anschauen. (auch wenn da auch nicht alles / alles richtig drin steht)

Dein Script mal aufgedröselt, wäre das ein Beispiel wie man es auch machen könnte:

Code: Alles auswählen

! Wechselschaltung SWITCH auf Datenpunkt - ausfuehrlich by Alchy
object oDP = datapoints.Get("HmIP-RF.001618A98F985C:2.STATE");
if(oDP){
WriteLine("Datenpunkt vorhanden - Status: "#oDP.Value());
if(oDP.Value()){
WriteLine("Datenpunkt WAR eingeschalten");
oDP.State(false);
WriteLine("Datenpunkt WURDE ausgeschalten");
}else{
oDP.State(true);
WriteLine("Datenpunkt WURDE eingeschalten");
}
}else{ 
WriteLine("Datenpunkt NICHT vorhanden");
}
ganz ausführlich mit WriteLines zur Dokumentation. Aber nur "machen kann" und auf die Schnelle. Sicher auch noch nicht perfekt.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

ckohrt
Beiträge: 43
Registriert: 27.09.2018, 13:05
Hat sich bedankt: 2 Mal

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von ckohrt » 30.03.2019, 22:29

Hallo Alchy,

vielen Dank für Deinen Script Vorschlag. Finde ich echt gut wie du hier um String concat rum kommst und natürlich auch die Objekt Verwendung. Ich hab nochmal geschaut um die offenen Punkte nochmal zu klären:

1) Error wird nicht angezeigt -->Ich war doof
Hier der Fehler im Log:

Code: Alles auswählen

Mar 30 21:20:40 RaspiParkstr local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: .....
2) String concat
In der Doku habe ich gelesen, dass man das mit "#" machen soll - falls man da nicht drumrum kommt. War es aus anderen Sprachen anders gewöhnt (RTFM!).

3) Objekt Verwendung
Über den von dir verlinkten Artikel über Datenpunkt abfragen, hatte ich auch nochmal eine Frage bzgl. "dom.getObject"/"datapoints.Get", nämlich wann nehme ich was und was ist der Unterschied. Das ist wohl aber besser im anderen Thread aufgehoben.(dein Artikel)

4) Interface Name
Das wurde ja schon von Gerti bestätigt, dass es "HmIP-RF" heißen muss. Gibt ja auch nur das "hm-rpi-rf-mod" von daher schon "irgendwie" zu verstehen. Da gehen ja auch die Direktverknüpfungen über RF/Wired Grenzen hinweg.

5) Hier auch nochmal das aktuelle Programm
Zur Erklärung: Ich habe ein größeres Skript zur Heizungssteuerung geschrieben (viele Features, die es so nicht gab bzw. ich nicht gefunden habe). Da ja leider Unterprogramme heikel zu sein scheinen, habe ich darauf verzichtet und meine 13 Reglerskripte so aufgebaut, dass ich den variablen Anteil oben hin schreibe und den unteren Teil tausche ich dann einfach aus. Daher die vielen Variablen am Anfang.
Die "debug" Variable benötige ich, damit ich die "WriteLine" Ausgaben dann auch wieder ausschalten kann.
Ich hatte auch noch das Problem, dass in der HighCharts Anzeige leider keine Daten vorhanden waren. Deshalb habe ich LOGIT hinzugefügt, kam aber auch nichts raus. Nach ein wenig debuggen habe ich herausgefunden, dass im Logeintrag (also "...State(<Hier>;0)") dieser Zeile:

Code: Alles auswählen

dom.GetObject(Exec # ".LOGIT").State(raum # "_" # actorSerial # "_STATE;0");
kein Punkt "." sein darf. Daher hab ich da halt einen String rein gebastelt, jetzt geht es. Komisch ist aber schon, früher (also HM RF) wurde jeder Schaltvorgang geloggt auch ohne LOGIT.

Code: Alles auswählen

! Wechselschaltung SWITCH auf Datenpunkt - ausfuehrlich by Alchy, ergänzt von ckohrt

boolean debug = true;
string gateway = "HmIP-RF.";
string actorSerial = "001618A98F985C";
string actor = gateway # actorSerial;
string actorChannel = gateway # actorSerial # ":3";
string raum = "FBHDGGast";
string Exec = "CUxD.CUX2801001:1";

object oDP = datapoints.Get(actorChannel # ".STATE");

if(oDP){
	if(debug) {WriteLine("Datenpunkt vorhanden - Status: "#oDP.Value());};
	
	if(oDP.Value()){
		if(debug) {WriteLine("Datenpunkt WAR eingeschalten");};
		oDP.State(false);
		if(debug) {WriteLine("Datenpunkt WURDE ausgeschalten");};
    		dom.GetObject(Exec # ".LOGIT").State(raum # "_" # actorSerial # "_STATE;0");
	}else{
    		if(debug) {WriteLine("Datenpunkt WAR ausgeschalten");};
		oDP.State(true);
		if(debug) {WriteLine("Datenpunkt WURDE eingeschalten");};
    		dom.GetObject(Exec # ".LOGIT").State(raum # "_" # actorSerial # "_STATE;1");
	}
}else
{ 
	if(debug) {WriteLine("Datenpunkt NICHT vorhanden");}; ! TODO
}
6) Ein weiteres Problem
Das Skript ist ja nur ein Testskript, trotzdem habe ich es eben eine Weile laufen lassen und so eingestellt, dass es alle 10s umschalten soll. Manchmal höre ich kein Klackern mehr und kann weder mit "dom.GetObject" noch mit "datapoints.Get" und den jeweiligen "State" Kommandos den Aktor umschalten. Was geholfen hat war ein manuelles Schalten eines anderen Kanals des Aktors. Danach ging das Skript auch wieder. Hängende Releais kann ich daher ausschließen. Das Skript auch. Ich beobachte weiter und wenn es wieder auftritt versuche ich mal die Fehlerlogs zu analysieren. Die aktuellste Firmware spiele ich auch noch ein.

VG
Christian

spion00
Beiträge: 3
Registriert: 17.01.2015, 13:36

Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von spion00 » 11.06.2019, 18:18

Hallo kann mir jemand helfen ,ich habe nun 38 wired Aktoren der 1. Generationen getauscht.
wie spreche ich im skrip nun den DRS8 Kanal AN DAS ER SCHLATET

Code: Alles auswählen

! Eingestellten Sollwert von HM - TC - IT - WM - W - EU ermitteln
real Sollwert = dom.GetObject("BidCos-RF.MEQ1572192:2.SET_TEMPERATURE").Value();

! Aktuelle Temperatur von HM - TC -WM - EU ermitteln
real AktTemperatur = dom.GetObject("BidCos-RF.MEQ1572192:1.TEMPERATURE").Value();

! Erlaubten Schwankungsbereich der Temperatur setzen
real maxSoll = Sollwert + 0.2;
real minSoll = Sollwert - 0.2;

! Zugriff auf den Funk -Aktor
if(AktTemperatur > maxSoll) 
 {
 dom.GetObject("HmIP-RF.0016A49913C6B:22.STATE").State(false); ! Bei aktueller Temperatur > Sollwert + 0.2 Aktor ausschalten
 } 

if(AktTemperatur < minSoll)
 {
 dom.GetObject("HmIP-RF.0016A49913C6B:22.STATE").State(true); ! Bei aktueller Temperatur < Sollwert - 0.2 Aktor einschalten
 }
mit dem HmIP-RF eintrag geht es nicht
Zuletzt geändert von alchy am 11.06.2019, 20:04, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Giotto
Beiträge: 70
Registriert: 20.11.2011, 21:23
Hat sich bedankt: 5 Mal

Kanalaktion per Script bei DRS-8? Re: HMIP WIREDDRS-8 per Skript schalten

Beitrag von Giotto » 09.08.2020, 11:03

Hallo zusammen,

das Script von alchy funktioniert bei meinem DRS-8 einwandfrei.
alchy hat geschrieben:
29.03.2019, 09:13
Dein Script mal aufgedröselt, wäre das ein Beispiel wie man es auch machen könnte:
Allerdings würde ich gerne eine Kanalaktion per Script übergeben (Einschaltdauer auf 15min begrenzt, also "S=true,OT=900").
In der WebUI funktioniert das prima, ich brauche es aber für ein Script...
Ich habe mir schon im Forum und im restlichen Internet die Finger wund gesucht, aber nichts gefunden. :-(


Bei einem MP3-Gong hat die Kanalaktion so funktioniert:

Code: Alles auswählen

var x = "1,1,108000,45";
dom.GetObject("MP3_Buero:Audio").DPByHssDP("SUBMIT").State(x);
Das hier für den DRS-8 funktioniert leider nicht:

Code: Alles auswählen

var x = "S=true,OT=30";
dom.GetObject("IPWA1.3 Gardena Beet Rasen").DPByHssDP("SUBMIT").State(x);
Habe auch andere Varianten probiert: adressieren über die HMIP-Seriennr., mit und ohne DPByHssDP... - nichts hat geholfen.

Ist wahrscheinlich ganz einfach - ich komme nur nicht drauf.

Hilfe :-)

Besten Dank im Voraus!

ciao, Jörg

PS: @spion00: hast Du eventuell zuviele Netzwerkswitches zwischen Zentrale und DRAP?
Das war bei mir auch ein Problem, dass IP Wired nicht zuverlässig war... Der DRAP hatte nichts gemeldet, aber der DRS-8 hat oft nicht geschaltet...
Ich hatte 4 Gigabit-Switches bzw. sogar 4 GBit und einen 100MBit-Switch. Jetzt nur noch den 100MBit dazwischen und endlich keine Probleme mehr...

Antworten

Zurück zu „HomeMatic IP wired Aktoren und Sensoren“