X10TRX Alpha

Hallo,

In diesem Thread hatte ich ja schon angekündigt mein X10 Script zu posten.
Also hier ist es. :stuck_out_tongue:

Manche haben ja das Problem, daß das CM11 nicht mehr reagiert und nur 0xA5 sendet. Laut der Protokollbeschreibung will das CM11 damit Markos anfordern. In diesem Script wird auch ein leeres Makro gesendet. Da mein CM11 jedoch sowas noch nicht gemacht hat konnte ich die Funktion leider nicht testen.
Das Script ist jedoch haupsächlich dazu da mit X10 Geräten zu kommunizieren.
Wie es eingebaut und benutzt wird steht im Script.
Vorab schon mal Sorry für den langen Text :o
Und denkt dran das ganze ist noch Alpha. Die einfachen Sachen wie ON und OFF sollten aber laufen. Das Script ist aber noch lange nicht durchgetestet.

Da das Script auch etwas länger ist hab ich es mal als Anhang gepostet.

Viel Spaß damit…

geändert von MST: weiter unten gibt es ein neueres Skript.

Hallo McFly,

vielen Dank für Dein Skript.
Bei mir hat soweit alles geklappt. Das „Open“ Icon hat noch keine Funktion. Wir werden es „grauen“. Es funktioniert mit „New“, wenn vorher das Skript in den Ordner kopiert wurde.
Es gab eine Fehlermeldung / Zeile 379 – mit $TX_DATA[0] = ““; in 123 war sie verschwunden :confused:
Mein Gerät sendet leider weiterhin A5. Die „elseif“ scheint nicht ausgefügt zu werden. Ich werde heute abend weiter testen.

MST

PS: Com-Settings: 4800,8,1,N

hmm,

bei mir steht in Zeile 379:

SetValueString($TX_BUFFER, GetValueString($TX_BUFFER));  //Das Senden nochmal neu Triggern.

Da kommt doch das $TX_DATA gar nicht vor :confused:
Wie sah die Fehlermeldung denn aus?
Kann ja höchstens sein, das die Sendepuffervariable noch nicht angelegt war.

Beim 0xA5 Problem:
Kommt auch die Log Meldung nicht?
Ob die Antwort richtig ist weiß ich nicht. Aber er sollte schon erkennen, daß er 0xA5 empfängt.

Sonst kommentier doch mal die Zeile 275 aus.

$temp = sprintf("Neue Daten empfangen (0x%02x)", ord($CM11_DATA));
//IPS_LogMessage($LOG_NAME, $temp);

vielleicht kommt da noch was anderes mit als 0xA5.

hast du auch „Overwrite Variable“ angehackt in den Properties? Hatte mal ein ähnliches Problem.

Ansonsten schick mir doch mal einen Teil deines log-files.
Vielleicht hilft es ja etwas.
Kann man da eigentlich auch die Debug-Ausgabe der COM-Port Instanz reinkriegen?

cu…

Hi,

vielen Dank erstmal für Dein Skript. Habe nun auch etwas getestet. Bei mir will’s nicht. Nach dem ersten starten des Skripts kommt bei mir fast im Sekundentakt folgendes:

PHP Error/Warning/Notice ~ Script: X10TRX ~ Variable: COM.BUFFER

Notice: Undefined variable: TX_DATA in line 371

Zeile 371 sieht bei mir so aus:

 IPS_LogMessage($LOG_NAME, "Checksumme $RX_Check != $Check stimmt nicht (\"$TX_DATA[0]\").");

Das CM11 sendet weiterhin im Sekundentakt sein A5. Prinzipiell scheint Dein Skript aber darauf zu reagieren:

| DEBUG   | VariableManager      | Variable: COM.BUFFER (String), Value: ¥
18.01.2006 07:20:21 | DEBUG   | EventScripter        | [Queued,Size=0] | Script: X10TRX | Variable: COM.BUFFER
18.01.2006 07:20:21 | DEBUG   | ScriptThread         | Executing Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:21 | CUSTOM  | X10                  | CM11 fordert Makros an.
18.01.2006 07:20:21 | DEBUG   | VariableManager      | Variable: X10.CRC (Integer), Value: 251
18.01.2006 07:20:23 | DEBUG   | VariableManager      | Variable: COM.BUFFER (String), Value: ¥
18.01.2006 07:20:23 | DEBUG   | EventScripter        | [Queued,Size=1] | Script: X10TRX | Variable: COM.BUFFER
18.01.2006 07:20:25 | DEBUG   | VariableManager      | Variable: COM.BUFFER (String), Value: ¥
18.01.2006 07:20:25 | DEBUG   | EventScripter        | [Queued,Size=2] | Script: X10TRX | Variable: COM.BUFFER
18.01.2006 07:20:26 | CUSTOM  | X10                  | Leeres Makro an CM11 gesendet.
18.01.2006 07:20:26 | DEBUG   | VariableManager      | Variable: X10.State (Integer), Value: 2
18.01.2006 07:20:26 | DEBUG   | ScriptThread         | Executed Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | DEBUG   | ScriptThread         | Executing Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | DEBUG   | ScriptThread         | Executed Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | ERROR   | EventScripter        | # PHP Error/Warning/Notice ~ Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | ERROR   | EventScripter        | Notice: Undefined variable: TX_DATA in line 371
18.01.2006 07:20:26 | ERROR   | EventScripter        | # END #
18.01.2006 07:20:26 | DEBUG   | ScriptThread         | Executing Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | DEBUG   | ScriptThread         | Executed Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | ERROR   | EventScripter        | # PHP Error/Warning/Notice ~ Script: X10TRX ~ Variable: COM.BUFFER #
18.01.2006 07:20:26 | ERROR   | EventScripter        | Notice: Undefined variable: TX_DATA in line 371
18.01.2006 07:20:26 | ERROR   | EventScripter        | # END #

Ich habe trotzdem mal versucht, die X10.TX mit einem Befehl zu füllen, aber leider schaltete nichts.

Any hints?

@steiner
schaltet Dein CM11 jetzt wieder, obwohl die A5’er gesendet werden ?

Gruß
rob.

Danke für das Log,

wie es aussieht reagiert das CM11 einfach nicht auf das Makro.
Der ausgegebene Fehler kommt daher, das die LogMessage den gesendeten Befehl ausgeben will. Den gibt es bei einem Makro natürlich nicht.
Daher kam wahrscheinlich auch die meldung von Steiner.
Du kannst die Zeile einfach so ändern:

IPS_LogMessage($LOG_NAME, "Checksumme $RX_Check != $Check stimmt nicht.");

Kommt dann auch in die nächste Version rein. Man erkennt ja am log welcher Befehl nicht klappte.

Laut Definition sollte das Interface mit der Checksumme antworten, wenn das Script ihm das Makro gesendet hat.
Was wohl nicht geklappt hat. :frowning:

Bitte kommentier doch auch mal die Zeile 275 (siehe Posting oben) aus.
Vielleicht kommt die Checksumme und ich bin noch nicht empfangsbereit.

P.S.: Nicht aufgeben… :smiley:

Ich hab mich mal im Netz etwas umgeschaut.

Wie es aussieht kann 0xA5 auch bedeuten, daß das CM11 nach einem Netzausfall die Uhrzeit neugesetzt haben möchte (RESET).
Tolle Protokolldefinition ein Wert für zwei Sachen :mad:

Naja ich hab mal versucht solch ein Uhrzeittelegramm zu basteln.
Komplizierter kann man sowas nicht aufbauen. Die hätten doch bestimmt noch 2 Byte mehr Platz gehabt :eek:
Mein CM11 scheint es jedenfalls zu fressen. Solch ein Uhrzeittelegramm darf man dann zu jeder Zeit senden.

Es kann aber auch sein, das das CM11 wegen Störungen auf der Leitung ständig einen Powerfail bekommt.
Schaut euch mal diesen Thread im Newsnet an.

Ich hab auch mal die $TX_BUFFER Behandlung erweitert. Leerzeilen sollten jetzt keine Fehler mehr hervorrufen.

Probiert mal diese Version.

cu…

X10TRX_18_1_2006.ips.zip (7.79 KB)

Hallo McFly,

leider ist mein CM11 mit „Deinem Makro“ nicht zufrieden.
Die „Debug-Ausgabe“ haben wir hier entfernt > neu: „IP-Symcon-Debugger“

MST

err_181.jpg

hmm, warte mal

das ist nur wieder ein 0xA5.

Versuche mal das neue Script.

:slight_smile:

Bericht folgt…

debug1801.jpg

…es werde Licht:


SetValueString("X10.TX", "A1
A ON");

Vielen Dank!

MST

PS: Zur Info

auf eine Helligkeit setzen z.B.: SetValueString(„X10.TX“, „A BRIGHT 16“);

und runter dimmen (dunkler) um 2 Stufen z.B.: SetValueString(„X10.TX“, „A DIM 2“);

Juhu,

hört man gerne :smiley:

Aber den Befehl würde ich nicht so in einem Script schreiben.

Besser wäre:

SetValueString("X10.TX", "A1
A ON");

Ich weiss, sieht etwas seltsam aus. So kann man aber ganz gut mehrere Geräte gleichzeitig einschalten.

Bei deiner Variante, wird nur ein „A ON“ gesendet.

Viel Spaß damit…

Ich freu mich schon auf eure Berichte :wink:

cu…

Hallo McFly,

Du hast vollkommen Recht, bis jetzt „klackt“ alles gut :smiley:

MST

Hoi,

bei mir klappts leider immernoch nicht:(

Angehängte Meldungen kommen bei mir …
…und die A5’er kommen immernoch ständig…

Hast Du zufällig noch ne Idee ??

Gruß
rob.

X10-Fehler2.JPG

hmm,
klappte es mit der alten Version auch nicht?

Hast du dir mal den google Thread durchgelesen.
Vielleicht hast du auch solche Störungen auf der Leitung.

Probier mal nen anderen Stromkreis.

Viel Glück…

Hallo McFly,

also, mit der alten Version klappt es auch nicht (gleicher Fehler wie bei steiner). Bei der neuen finde ich Interessant, das die Antwort nach dem senden des Uhrzeittelegramms sich immer verändert (meist steigt der Wert um 4). Ich denke nicht, daß es am Stromkreis o.ä. liegt, da das CM11, sobald ich ActiveHome starten, einwandfrei schaltet (selbe Steckdose, selber Rechner, selber COM-Port…alles gleich).
Ich habe mal den Traffic am ComPort mitgehorcht und der sieht beim Starten von ActiveHome (also da, wo es funktioniert) wie folgt aus (siehe erste Grafik).
Leider verstehe ich wohl zu wenig davon, daß es mir helfen könnte, aber vielleicht fällt Dir etwas auf, daß meinem CM11 beim Betrieb unter IPS noch fehlt, wenn Du Dir den log von ActiveHome mal ansiehst.
Das ist die einzige Kommunikation zwischen Rechner und CM11 während des Startens von ActiveHome (die nächste kommt erst beim ersten Schaltvorgang). Im Grunde genommen müssten ich doch hier die Lösung finden …:frowning:

Das zweite Log (zweite Grafik) ist dann die mitgetracete Kommunikation auf dem COM-Port beim Start von IP-Symcon…Hab ich mal zum Vergleichen mit drangehängt.

Danke schonmal
rob.

EDIT:
Hab gerade bemerkt, dam man bei den Logs nicht gut erkennen kann, wo das eine aufhört und das andere anfängt:
Also ab der Zeile „GetStatus 0 2800“ beginnt das Log, das beim Starten von IP-Symcon erstellt wird.
Alles vorher ist der Start von ActiveHome.

Com-Prot.JPG

Com-Prot_IPS.JPG

ActiveHome sendet direkt nach öffnen des COM-Ports ein „Status Request“ (0x8B).

Daraufhin antwortet das CM11 auch mit solch einem Protokoll.
Ist nur komisch, das das CM11 überhaupt auf solch ein Protokoll reagiert.
Testweise kannst du ja mal Über ein Script dieses 0x8b senden.
Also mein Script deaktivieren. Und dieses Script ausführen:

COMPort_SendText(12345, chr(0x8b));

Das wird noch keine Besserung bringen, weil dann die Bestätigung fehlt, aber man würde schon mal sehen ob dein CM11 überhaupt antwortet.

Ich glaube langsam, das es an den Einstellungen der seriellen Schnittstelle liegt. ActiveHome setzt das Handshake auf „None“. IPSymcron aber auf „CTS DTR“. Vielleicht mal in der COM Instanz die Flow Control auf „None“ stellen.
Auch wird bei ActiveHome das DTR Signal gesetzt bei IPS wird es zurückgesetzt. Da weiss ich aber nicht, wie ich das aus dem Script herraus ändern kann.

Mach mal bitte den 0x8B Test. Vielleicht sind wir dann ja schlauer.

EDIT: Da ist noch was komisch. Das Uhrzeittelegramm sollte 7 Byte haben. Hat bei Dir aber nur 6 Byte.
Füge doch bitte mal in Zeile 437 folgendes ein:

 $temp = sprintf("Länge Uhrzeit: %d", strlen($TX_BUF));
IPS_LogMessage($LOG_NAME, $temp)

cu…

… meine Settings:

Port: COMx
Baud rate: 4800
Data bits: 8
Stop bits 1
Parity: None
Flow control: None

Status: OPEN (grün)

[COM Port] ---->-[Register Variable]

Variable: COM.BUFFER

  • Overwrite Variable

… und noch wichtig: eigene ID des COM Port Modul im Skript eintragen und es kann Probleme
mit „USB > Seriell Wandlern“ geben, die über einen HUB betrieben werden.

MST

Ja, USB ist ohnehin so ein Thema.
Siehe hier :frowning:

@Steiner:
Kann es sein, das durch die COM Einstellungen ein Zeichen verschluckt wird?
Kannst du bei dir auch mal einen Mitschrieb der Schnittstelle machen. da sollten 7 Bytes rübergehen.

:smiley: Jippieh…jetzt geht’s !!:smiley:

So ein Mist, …es lag tatsächlich an der „Flow Control“ - Einstellung des Com-Ports. Ich hatte bei meinen ersten Tests mit steiners Skript da dran rumgespielt und die Flow-Control Einstellung stand auf „Hardware“. Ich hab sie jetzt umgestellt auf „None“ und schon „klackts“ hier bestens !!!
Hab danach das ganze auch nochmal über nen Seriell–>USB Adapter probiert (Keyspan)…und auch damit funktionierts problemlos.

Somit kann ich nun endlich alle meine Geräte über eine Oberfläche steuern :cool:

Nochmals vielen Dank an McFly und das IPSymcon-Team (die es geschafft haben, daß ich mir tatsächlich wieder nen Windows-Rechner ins Haus geholt habe) für die Super-Unterstützung !!!

EDIT:
@McFly: Das mit dem 7. Byte beim Uhrzeittelegramm war mein Fehler. Ich hatte bei den Tests gestern Abend ein bißchen in Deinem Skript rumgespielt und das komplette Uhrzeittelegramm mal auskommentiert, um dort das 0x8b zu senden. Beim einkommentieren habe ich dann die letzte Zeile vergessen … Hab’s gerade eben wieder einkommentiert und jetzt werden auch wieder 7 Bytes übertragen (funktionierte aber vorher auch schon mit nur 6 Bytes)…

Jaja, das CM11 ist schon eine wundersame Kiste :rolleyes:

cu…