FHEM+Arduino Firmata via Ethernet+RF 433 Mhz Sender+Baumarkt-Funksteckdosen

Begonnen von blueberry63, 08 April 2014, 16:16:31

Vorheriges Thema - Nächstes Thema

Wzut

Zitat von: blueberry63 am 25 April 2014, 11:42:03
bekomme aber wieder denselben Fehler beim Neustart:
Trotz SubDev 1 beim zweiten Device ??? poste doch bitte mal den ganzen Firmata Abschnitt deiner config
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

blueberry63

Here we go:


define ARD433 FRM 3030 global

define STECKD_FLURO FRM_RC 7
attr STECKD_FLURO DIP 1110000100
attr STECKD_FLURO room Flur_oben,Lampen,Steckdosen

define STECKD_FLURU FRM_RC 7
attr STECKD_FLURU DIP 1110001000
attr STECKD_FLURU IODev ARD433
attr STECKD_FLURU SubDev 1
attr STECKD_FLURU room Flur_unten,Lampen,Steckdosen

define STECKD_DRUCKER FRM_RC 7
attr STECKD_DRUCKER DIP 1110010000
attr STECKD_DRUCKER IODev ARD433
attr STECKD_DRUCKER SubDev 1
attr STECKD_DRUCKER room Steckdosen

define STECKD_TVBZ FRM_RC 7
attr STECKD_TVBZ DIP 1110000010
attr STECKD_TVBZ IODev ARD433
attr STECKD_TVBZ SubDev 1
attr STECKD_TVBZ room Steckdosen

define STECKD_TVV FRM_RC 7
attr STECKD_TVV DIP 1111010000
attr STECKD_TVV IODev ARD433
attr STECKD_TVV SubDev 1
attr STECKD_TVV room Steckdosen

define STECKD_WERKR FRM_RC 7
attr STECKD_WERKR DIP 1110001000
attr STECKD_WERKR IODev ARD433
attr STECKD_WERKR SubDev 1
attr STECKD_WERKR room Steckdosen


Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

blueberry63

Habe gerade gesehen, das beim 1. Geräte (STECKD_FLURO) kein "ioDev" definiert ist. Wenn ich das nachholen will, kommt folgende Meldung:
Zitat
cannot set attribute IODev to ARD433 for STECKD_FLURO: Device 'STECKD_DRUCKER' allready defined for pin 7

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Wzut

Jo , ist klar :)
FRM arbeitet deine Firmata Devices NICHT in der Reihenfolge ab wie sie in der config stehen , sondern alphabetisch -> demnach ist Drucker dein erstes Device, wirf da das SubDevice raus und beim FLURO das IoDev rein.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

blueberry63

FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Wzut

Zitat von: Christian. am 25 April 2014, 08:11:18
Die Perl-Seite ist ja zur Zeit funktionsfähig, aber nicht besonders komfortabel.
FIRMATA Empfang wäre natürlich auch noch schön , bleibe bitte an der Arduino Seite dran. Ich möchte auf der Perl/FHEM Seite weiter schrauben, allerdings habe ich es bis jetzt nicht geschafft mit deinen Dateien meine Steckdose zu schalten. Finde z.Z auch nicht raus warum es nicht klappt.
Die Fehlermeldung auf der Konsole beim senden :
Use of uninitialized value $buf in split at ./FHEM/10_FRM.pm line 616.
Use of uninitialized value $wbuf in string eq at /usr/local/lib/perl/5.10.1/Device/SerialPort.pm line 1729.

$buf hat keinen Inhalt beim senden .... hm hm hm
Beim suchen bin ich in deiner Protocol.pm noch über eine print Anweisung gestolpert.
Tipp : ich würde sie ersetzen durch etwas in der Art :
main::Log 3 , "FRM: unsupported character -> ".$c
dann hat man die Fehlermeldung zumindest im log :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Christian.

Hmmm... da fällt mir spontan wenig zu ein. Wir müssen herausbekommen, wie weit Deine Nachricht kommt.

Bau doch mal Log-Statements ein,

  • in FRM_RCSWITCH.FRM_RCSWITCH_Set vor rcswitch_send
  • in Platform.rcswitch_send vor packet_rcswitch_send
  • in Protocol.packet_rcswitch_send vor packet_sysex_command
Damit Änderungen an den Dateien in lib wirksam werden, muss man (glaube ich) FHEM neustarten; das Modul FRM_RCSWITCH neu zu laden reicht jedenfalls nicht.

Der Aufruf, der meine Steckdose erfolgreich schaltet, lautet übrigens
set rcswitch message 00F0FF0FFF0F

Das println habe ich ersetzt. Vielleicht wäre es noch sinnvoller, bei einem fehlerhaftem Code abzubrechen und eine Fehlermeldung zurückzugeben.

Ich mache wie beschrieben auf der Arduino-Seite weiter. Gib Bescheid, wenn Du irgendwie weiterkommst.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Wzut

Ok, das mit dem FHEM Neustart ist kler - ebenso das ich die Bits ändern muss , d.h wenn ich ne 1 hatte jetzt ne 0 und statt 0 ein F
einen Fehler habe ich inzwischen gefunden in der Constants.pm :
RCSWITCH                 => 0x10
war nur im Block für die V2.06 , ich verwende allerdings noch die V2.05
den Loglevel habe ich inzwischen auf 5 und da sehe ich auch das es beim Sendeversuch nichts zum senden gibt :
2014.04.27 10:19:55 5: 4>
2014.04.27 10:19:55 5: SW:

aber ich bleibe dran , wäre doch gelacht ....

EDIT : in Constants.pm fehlte mir bei V2.05 auch noch
RCSWITCH_SEND_REQUEST    => 0x67

nun klappt es :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

Update :
Ich habe meine 20_FRM_RC angepasst damit sie mit der Version von Christian. zusammen arbeitet.
In meiner Bastelkiste hatte ich auch noch von Intertechno einen Funk-Allrounder ITL-1000 und eine Mini Fernbedienung ITK-200
Den ITL-1000 kann ich inzwischen auch an & aus schalten musste nur das Attr OnCode 00 setzen (OffCode konnte bei 01 bleiben)
Da der ITL-1000 keine 10er Dip Schalter Reihe hat sondern den Code von der Fernbedienung lernt, hatte ich zuerst den Mini Handsender angelernt und danach versucht diesen Code zu senden. Der Sender hat z.Z am Drehrad die Einstellung B 2 , das entspricht dem DIP Code 01110 11110
Wenn an dem Thema Intertechno schalten Interesse besteht werde ich noch versuchen das Modul so zu ändern das man die Intertechno Sender Einstellung direkt als Attribut angeben kann und nicht erst auf DIP Schalter umrechnen muss. Da ich selbst aber keine weiteren IT Produkte habe eine Frage an die IT Nutzer :
Die Mini Fernbedienung hat ein Drehrad mit den möglichen Einstellungen von A1 bis D4 (d.h. 16 Stellungen) ist das bei den grösseren Modellen identisch oder kann hier mehr eingestellt werden ?   

Edit : gerade eim Wiki gefunden : http://www.fhemwiki.de/wiki/Intertechno_Code_Berechnung
Ich werde das Modul ändern so das dann immer IT Code verwendet werden muss   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

papa

Zitat von: Wzut am 28 April 2014, 11:10:48
Ich werde das Modul ändern so das dann immer IT Code verwendet werden muss

Macht es wirklich Sinn, noch ein Modul für IT zu machen ? Neben dem 10_IT.pm gibt es ja schon das FHEMduino. Und nun noch eines. Ist es nicht möglich, das FRM_RC als IODev für das 10_IT Modul zur Verfügung zu stellen ? Dann hat man die ganze IT Code Berechnung nur einmal.

Ich finde die Idee, IT über FRM zu schalten übrigens sehr gut. Da könnte ich mir auch einen Arduino sparen :-)
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Christian.

Zitat von: papa am 28 April 2014, 17:01:39Ist es nicht möglich, das FRM_RC als IODev für das 10_IT Modul zur Verfügung zu stellen ?
Aus meiner Sicht ist ein RCSwitch-FHEM-Modul zuständig für den RC-Sender, also 1 Arduino-Pin. Die logischen Geräte, also z.B. Steckdosen, kämen oben drauf - die teilen sich alle den 1 Sende-Pin. Mit diesem Ansatz wären auch mehrere Funk-Sender mit unterschiedlichen Frequenzen denkbar, die man gleichzeitig nutzen kann. Ich kann papa also nur zustimmen und fände es sehr sinnvoll, eine solche Schichtenarchitektur aufzubauen und 10_IT weiterzuverwenden.

Ich hatte mir das im Vorfeld auch schonmal angeschaut; zur Zeit sind in 10_IT aber direkte Aufrufe auf CUL_SimpleWrite, die Kopplung zum CUL ist recht hoch. Ich fühle mich immer noch als FHEM- und Perl-Neuling - könnte hier vielleicht jemand aushelfen und die CUL-spezifischen aus dem Modul herausziehen?

Zitat von: papa am 28 April 2014, 17:01:39Neben dem 10_IT.pm gibt es ja schon das FHEMduino.
Wenn ich FHEMduino richtig verstanden habe, ist das ein CUL-Emulator, d.h. das bestehende 10_IT sollte damit laufen. Leider steht der Arduino mit FHEMduino aber leider für keine weiteren Aufgaben zur Verfügung.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Wzut

Zitat von: Christian. am 28 April 2014, 19:44:38
die Kopplung zum CUL ist recht hoch. Ich fühle mich immer noch als FHEM- und Perl-Neuling
Jetzt mach dich mal nicht kleiner als du bist .... Ob Neuling oder nicht, was du bisher geliefert hast hatte Hand und Fuß, also Brust raus :)
Spass beiseite, schau noch mal rein ins 10_IT und ziehe den FHEM Grundpart ab den jedes Modul hat und  die Homematic / IT Umschaltung für den CUL. Was bleibt dann noch an echten netto Funktionen übrig ?

a. die Tabellen für die verschiedenen Schaltertypen. Es sind genau diese Codes die jetzt zu Firmata rüber müssen damit die RCSwitch.cpp sie mit ihrer SendTriState Funktion an/aus schalten kann und das ist genau der Teil den ich eigentlich in 20_FRM_RC noch einbauen wollte.

b. kann das 10_IT noch Schalter dimmen. Wäre das mit der RCSwitch.cpp heute überhaupt machbar ?     
 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Christian.

Danke für das Lob!

Zitat von: Wzut am 28 April 2014, 20:31:22ziehe den FHEM Grundpart ab den jedes Modul hat und  die Homematic / IT Umschaltung für den CUL
Ach so, sind die CUL-Abhängigkeiten nur zum Hin- und Herschalten zwischen FS und HM? Dann ist das für das Senden über Firmata ja überflüssig...

Zitat von: Wzut am 28 April 2014, 20:31:22b. kann das 10_IT noch Schalter dimmen. Wäre das mit der RCSwitch.cpp heute überhaupt machbar ?
Wenn ich das Modul 10_IT richtig lese, gibt es technisch keinen Unterschied zwischen schalten und dimmen - in beiden Fällen wird ein Code gesendet, auf den das Gerät dann entsprechend reagiert.

Wie würde denn die gemeinsme Nutzung eines einzelnen Arduino-Pins durch mehrere Geräte aussehen, geht das sauber in nur einem Modul?
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Wzut

Zitat von: Christian. am 28 April 2014, 21:14:43
Wie würde denn die gemeinsme Nutzung eines einzelnen Arduino-Pins durch mehrere Geräte aussehen, geht das sauber in nur einem Modul?
Ja, das geht  siehe meine Postings vom WE. Ich würde den Fall allerdings gerne nochmal mit Norbert durchsprechen vllt. hat er ja noch eine bessere Idee.
(mir gefällt z.Z.nur nicht das 10_FRM die Devices nicht in der Reihenfolge abarbeitet wie sie in der config stehen)

Als Anhang meine letzte  Version mit direkter IT Code Unterstützung, die sollte bei dir fast aus dem Stand auch laufen, da ich von deinen Dateien nur in der Protocol.pm die Message Prüfung ganz entfernt und in mein Modul verlagert habe.
Ich habe nun eine Baumarktdose mit DIP Schalter und die eine IT Dose am laufen, so schaut es aktuell aus :
define Steckdose1 FRM_RC 3
attr Steckdose1 IODev FIRMATA
attr Steckdose1 CodeType DIP
attr Steckdose1 RCCode 1000101000

define Steckdose2 FRM_RC 3
attr Steckdose2 IODev FIRMATA
attr Steckdose2 CodeType IT
attr Steckdose2 RCCode B2
attr Steckdose2 OnCode FF
attr Steckdose2 OffCode F0
attr Steckdose2 SubDev 1

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Christian.

Hm, das sieht eigentlich ganz gut aus. Nur eine Sache gefällt mir dabei aber noch nicht 100%ig. Ich erweitere den Arduino-Sketch ja gerade um die RCSwitch-Parameter (protocol, pulseLength, repeatTransmit). Das sind Eigenschaften des Senders, die für alle Empfänger gemeinsam gelten. In FHEM möchte ich die über eine attr-Deklaration setzen. Wo gehört diese Deklaration hin? Zur ersten deklarierten Steckdose? Zur alphabetisch ersten Steckdose? Mehrfach, also an jeder Steckdose? Ich sehe die eher in einem eigenen FHEM-Modul, das nur für den Sender zuständig ist. Das Modul für die Steckdosen käme dann oben drauf.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee