nanoCUL und intertechno

Ich habe es hin bekommen. Ich hab jetzt noch eine klein function Namens sleep gebaut und vor dem Absetzten meiner Befehler warte ich damit nun 1 Sekunde. Vermutlich “verschluckt” sich mein nanoCUL etwas wenn direkt hintereinander ein X21 dann ein V und dann ein X67 gesendet werden. Ich warte nun jeweils eine Sekunde und es funktioniert damit bestens.

Vorerst noch einmal vielen Dank und Grüße
Dennis

@sathya ich bin auf deine homegear-Lösung gespannt. Diese werde ich auf jeden Fall auch einmal testen.

Hey @jogant,

jetzt hänge ich doch leider wieder. Kannst du mir zufällig verraten, was bei diesem Teil des Cripts passieren soll:

  mqtt.on('message', function (topic, message) {
     debugger;
     var data;
     var pattern = '^' + config.name + '/home/(.+)/(.+)';
     //var pattern = '^' + config.name + '/set/(.+)';
     var regExp = new RegExp(pattern);
     var value = message.toString();
     var parsed = regExp.exec(topic);

So wie ich das verstehe, wird hier das pattern in dem in dem topic gesucht. Aber laut Javascript-Doku liefert die Funktion exakt den Ausschnitt wieder zurück den man auch sucht. Ich denke aber, dass hier in dem parsed dann mehrer Values stecken. Nur leider ist bei mir immer die Variable parsed im anschluss leer und liefert Null. Hast du vielleicht eine Idee was hier falsch läuft?

Viele Grüße
Dennis

Hi @Dennis,
Ich bin mir nicht sicher, wo hier das Problem liegt. Ich bin auch nicht zu Hause und kann deswegen auch nicht debuggen. Es wird hier jedenfalls nach dem richtigen Topic geparsed. Am Anfang habe ich auch keine Daten vom mqtt bekommen, ich habe dann die Topics mit / beginnen lassen. Deswegen auch der der Parameter -n /cul.
Wenn ich Mittwoch wieder zu Hause bin kann ich aber noch mal debuggen… wenn das Problem dann noch besteht :wink:

Gruß
jogant

Ohne mir jetzt cul2mqtt angeschaut zu haben:

Der Teil des Script is das onMessageArrived des mqtt. In deinem Codefetzen wird versucht herrauszufinden, ob es sich bei einer Nachricht auf dem abonierten Topic um das Topic config.name + '/home/*/* handelt, das wird per regulärem Ausdruck geprüft.

Irgendwo wird es ein subscribe geben was wahrscheinlich einfach auf config.name hört. Dadurch wird dann bei jeder Message auf diesem Topic das “on”-event ausgelöst und der code prüft ob das Topic (zB) config.name + '/home/foo/bar/' ist.

so long,
p

Hi @pmayer,

genau so habe ich mir das auch schon gedacht. Komisch ist nur, dass diese paar Zeilen bei mir irgendwie nicht funktionieren. Meine Variablen in meinem Test sind zur Laufzeit sind wie folgt gefüllt:
pattern: '^/cul/home/(.+)/(.+)'
topic: ‘/cul/home/mqttsw1’

Müsste ich dann mit diesern Funktion in parsed nicht irgendwie einen Inhalt zurück bekommen?

Im nachfolgenden wird dann nämlich folgendes ausgeführt:

Preformatted textlog.debug(‘mqtt >’, topic, parsed[1], parsed[2], value);

so wie ich das sehe, müsste in parsed[1] so etwas wie mqttsw1 enhalten sein und parsed[2] wäre dann für mein Verständnis leer, da mein Topic keine vierte Ebene beseitzt.

Aber irgendwie erhalte ich hier einfach gar nichts zurück. Ich werde die Zeilen nun mal in ein eigenes Script auslagern und damit mal ein wenig spielen. Vielleicht verstehe ich dann mehr wie genau das funktiniert.

Viele Grüße
Dennis

PS: Man merkt schon das ich mehr in der SAP-Welt lebe und in ABAP programmiere. Aber so langsam aber sicher lerne ich ja auch bei Javascript dazu :slight_smile:

Schau mal hier: https://jsfiddle.net/0b4bzgno/
Öffne mal die Konsole in deinem Browser und drück mal den Button “Test”.

Array [ "test/home/foo/bar/", "foo", "bar/" ]

//edit:
Ahh… moment. Das Pattern will zwingend zwei Elemten haben. (.+) bedeutet ein belibiges Zeichen (.), ein oder beliebig viele Male wiederholt (+). Kein oder beliebig viele Male wäre ein *. Somit geht dein Topic nicht mit diesem RegExp.

Oha, da ging mir nun aber ein echt großes Licht auf. Ich hab es gerafft… uff, das hat aber wirklich nen Moment (nagut, vielleicht auch zwei Momente) gebraucht. Das einizige was ich leider nocht nicht ganz verstehe ist, warum bei dem pattern ein ^ vorangestellt wird.

Ich hoffe mein langer Lern-Thread wird dem einen oder anderen vielleicht auch einmal behilflich sein :wink:

Pfia di
Dennis

^ beschreibt den Anfang eines Strings, $ das Ende.

Wenn ich jetz zum Beispiel möchte, dass mein String NUR aus kleinen Buchstaben bestehen darf, wäre das Pattern folgendermaßen: ^[a-z]+$.

Auch meinerseits gibt es gute Nachrichten: Der Empfang von Paketen funktioniert jetzt für alle V3-Geräte und für die Fernbedienung von Elro. Die anderen auf der fhem-Seite beschriebenen Fernbedienungen baue ich morgen noch dazu ;-). Dann gibt’s auch eine kleine Anleitung.

@sathya

Das sind ja super Nachrichten! Ich werde im Laufe der Woche auf jeden Fall ein paar Minuten Zeit finden und deine Version einmal testen. Wäre klasse, wenn du bei deiner Anleitung evtl. noch darauf eingehen könntest, wie ich eine zweite Instanz in homegear anlegen kann. Ich hab nämlich ein HM-CFG-USB-Stick am laufen und würde als zweite Instanz dann einmal meinen CUL mit einbinden.

Pfia di
Dennis

Hallo,

fertig ;-). Im nächsten Nightly ist alles drin. Es sollte in ein paar Stunden online sein. Bin gespannt auf eure Rückmeldung…

Die Anleitung findet ihr auf doc.homegear.eu.

Einfach das Intertechno-Modul installieren und anschließend den CUL in “/etc/homegear/families/intertechno.conf” konfigurieren - siehe Anleitung. Falls irgendetwas noch unklar sein sollte, nicht zögern zu fragen ;-).

Viele Grüße

Sathya

4 posts were split to a new topic: SD-Karten-Sicherung

Hey @sathya,

ich hätte nun dein neues nightly am laufen. aber mir ist leider nicht so ganz klar, wie ich dann einen befehl sende. also ich habe mal ein device wie beschrieben angelegt. aber wie kann ich nun an homegear zu dieser serialnummer eine action schicken (also on oder off)?

Besten Dank schon einmal!

Pfai di
Dennis

Hallo @Dennis,

zum Testen am einfachsten über die Konsole mit:

homegear -e rc '$hg->setValue(PEER_ID, 1, "STATE", true);'
sleep 2
homegear -e rc '$hg->setValue(PEER_ID, 1, "STATE", false);'

“PEER_ID” ersetzt du mit der ID des Schaltaktors. Diese findest du über das Homegear CLI:

homegear -r
fs 16
ls

Die ID wird dir dann in der linken Spalte angezeigt.

Viele Grüße

Sathya

Hallo @sathya,

endlich komme ich ans testen, bisher leider ohne Erfolg.
Ich habe die Steckdosen so wie weiter oben beschrieben konfiguriert. Ich bekomme als Adressen die 303, 311, und 315 wenn ich das nach der Anleitung umrechne.
Also habe ich drei Devices definiert: so siehts dann aus:
(Family)> ls
ID │ Name │ Serial Number │ Address │ Type │ Type Description
─────────┼───────────────────────────┼───────────────┼──────────┼──────────┼───────────────────────────────────────────────
│ │ │ │ │
15 │ │ ITD00000303 │ 00000303 │ 000001 │ Intertechno Switch
16 │ │ ITD00000311 │ 00000311 │ 000001 │ Intertechno Switch
17 │ │ ITD00000315 │ 00000315 │ 000001 │ Intertechno Switch
18 │ │ ITD00000009 │ 00000009 │ 000024 │ Elro AB440 Remote
─────────┴───────────────────────────┴───────────────┴──────────┴──────────┴───────────────────────────────────────────────

Wenn ich dann einen Befehl schicke an die Adresse 303 sehe ich im Log aber folgendes:

10/22/16 00:22:07.276 Module Intertechno: Info: STATE of peer 15 with serial number ITD00000303:1 was set to 0x00.
10/22/16 00:22:07.277 Module Intertechno: Intertechno CUL "My-IT-CUL-1": Info: Sending (My-IT-CUL-1): FF000000FFF0

10/21/16 23:48:55.485 Module Intertechno: Info: STATE of peer 15 with serial number ITD00000303:1 was set to 0x01.
10/21/16 23:48:55.486 Module Intertechno: Intertechno CUL "My-IT-CUL-1": Info: Sending (My-IT-CUL-1): FF000000FFFF

Der erste Befehl sollte ausschalten, der zweite wieder ein.
Das sind aber nicht die Bitfolgen, die ich erwarten würde. Was habe ich denn da falsch verstanden?

Danke und Gruß
jogant

Hey @sathya,

also ich habe irgendwie das Problem, das ich mit homegear keine Berechtigung auf meinen CUL bekomme. Ich habe im Error-Log folgendes immer wieder stehend:

10/22/16 11:25:48.005 Module Intertechno: Intertechno CUL “MYCUL”: Error in file PhysicalInterfaces/Cul.cpp line 201 in function void MyFamily::Cul::listen(): Couldn’t open device “/dev/ttyUSB0”: Permission denied
10/22/16 11:25:48.005 Module Intertechno: Intertechno CUL “MYCUL”: Warning: Connection to device closed. Trying to reconnect…

Wie bekomme ich denn die entsprechende Berechitung dafür?

Pfia di
Dennis

Hi @Dennis,
versuche mal den homegear User in die Gruppe dialout einzutragen.

Gruß
jogant

Hi @jogant,

danke für den Hinweis, da hätte ich auch mal selber drau kommen können :frowning:

Nun läuft das ganze mal ohne ein Error-Log ab, mein homgear.log sieht nun wie folgt aus:

10/22/16 13:39:56.790 Info: CLI connection accepted. Client number: 38
10/22/16 13:39:56.791 Script Engine Server: Info: Starting script “/var/lib/homegear/scripts/inline.php” with id 3.
10/22/16 13:39:56.800 Script Engine Server: Info: Client number 0 is calling RPC method: setValue Parameters:
(Integer) 804
(Integer) 1
(String) STATE
(Boolean) 1
10/22/16 13:39:56.805 Info: Script with id 3 finished with exit code 255

Aber geschaltet an der Dose wird da leider nix. Was mach ich da denn nur falsch?

Pfia di
Dennis

Das hatte ich ja auch schon festgestellt. Ich denke, dass die Umrechnung in die IT Codes noch nicht ganz richtig ist. Ich habe mir den Code in Homegear aber noch nicht angesehen. Vielleicht fällt mir ja was auf. Aber ich denke, Sathya weiß Bescheid.

Hallo @jogant,

da hat sich ein Fehler eingeschlichen. Bei der Anlage der Geräte werden keine Dezimalzahlen verarbeitet. Gib bei der Geräteanlage statt “303” “12F” ein. Also z. B.:

pc My-IT-CUL-1 1 12F

Im nächsten Nightly ist das auch korrigiert.

@Dennis: Bei dir ist deine peerID ungültig (804). Ist das Gerät wie in der Dokumentation beschrieben angelegt? Poste mal die Ausgabe von:

homegear -r
fs 16
ls

Sowie den eingestellten DIP-Code. An Stelle der 804 trage dann die ID ein, welche nach “ls” in der ersten Spalte erscheint.

Viele Grüße

Sathya