Homematic Wired - Homebrew Devices

Begonnen von Thorsten Pferdekaemper, 27 April 2014, 00:13:17

Vorheriges Thema - Nächstes Thema

loetmeister

Zitat von: Thorsten Pferdekaemper am 11 September 2018, 14:51:24
Hi,Eigentlich sollte HBW die originale SoftSerial gar nicht verwenden. Dafür wird ja die HBWSoftwareSerial mitgeliefert. Möglicherweise können die Probleme aber trotzdem da irgendwo liegen, da das Timing schon etwas "frickelig" ist.
Momentan habe ich dazu allerdings keine richtige Idee. Die zwei Änderungen zur normalen SoftwareSerial.cpp habe ich mit "PFE" markiert.
Möglicherweise kannst Du mal ein Gerät bauen, dass per Hardware-Serial kommuniziert. Dann könnte man schonmal das Problem eingrenzen.

Hi Thorsten,

stimmt SoftSerial war ja eine eigene... habe noch kein Testmodul für die Hardware Variante, aber schon im kompilieren zeigen sich auch dort Abweichungen.

HW Serial
1.8.5
Der Sketch verwendet 16308 Bytes (53%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 455 Bytes (22%) des dynamischen Speichers, 1593 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
1.8.6
Der Sketch verwendet 16368 Bytes (53%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 453 Bytes (22%) des dynamischen Speichers, 1595 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Differenz -60 Bytes

Soft Serial
1.8.5
er Sketch verwendet 18112 Bytes (58%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 562 Bytes (27%) des dynamischen Speichers, 1486 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
1.8.6
Der Sketch verwendet 17812 Bytes (57%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 562 Bytes (27%) des dynamischen Speichers, 1486 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Differenz -300 Bytes

Hab dann mal die Kompilierte *.elf Dateien von 1.8.5 und 1.8.6 in Assembler übersetzt und geschaut ob sich da offensichtliche Unterschiede zeigen... war aber nix was mir in Auge gesprungen ist (bin aber auch kein Assembler Spezi ::) ) Ein Teil des Codes habe ich 1:1 in beiden Versionen gefunden, andere Teile waren aber komplett anders aufgebaut (CALL statt JMP für eeprom_write_byte Aufruf) verteilt. Oder z.b. 5 vs. 7 mal der Aufruf der Funktion <eeprom_read_byte> (call   0x..) in v1.8.6.
Export: ...\arduino\hardware\tools\avr\bin\avr-objdump.exe" -S ...Local\Temp\arduino_build_395116\HBW-IO-10-Dim-6.ino.elf

Hab die kleineren Hardware-Serial Assembler Versionen mal angehängt..  ;D

Ich bleibe jedenfalls erst mal auf der 1.8.5...


Gruß,
Thomas

loetmeister

#511
Zitat von: Thorsten Pferdekaemper am 31 August 2018, 14:57:23
Könntest Du die Liste im Wiki entsprechend erweitern?
...oder mir die Daten geben, dann mach ich das.

Hi Thorsten,

wäre schön wenn du das Device hinzufügen könntest.
HBW-IO-10-Dim-6
ID 0x96
6 analoge Ausgangskanäle (Dimmer)
10 Eingänge (20 Kanäle: 10 Taster, 10 Sensorkontakte/Schließerkontakt)



Etwas detaillierter:
Direktes Peering möglich (HBWLinkDimmerAdvanced & HBWLinkKey)

Die 6 analogen Ausgangskanäle geben eine Spannung von "0-10V" (alternativ "1-10V", pro Kanal) als Dimmer aus (0-100%). Das PWM Signal kann auch direkt ausgeben werden (12V Ausgangsspannung). Der PWM, bzw. Spannungsbereich kann auf ein Maximalwert von 40-100% pro Kanal konfiguriert werden.

Die 10 Eingänge stehen als Sensor oder Schalterkanal gleichzeitig zur Verfügung, d.h. pro Eingang sind Zwei Kanäle vorhanden.
Die Schalterkanäle können normal als Taster/Schalter inkl. Peering genutzt werden. Mögliche Typen: PUSHBUTTON, SWITCH, MOTIONSENSOR, DOORSENSOR)
Die Sensor Kanäle müssen abgefragt werden (kein Peering), und liefern dann "sensor_open" oder "sensor_closed" zurück. (Möglichkeit der Invertierung über Kanalkonfiguration)

https://github.com/loetmeister/HBWired/tree/master/HBW-SC-10-Dim-6

Gruß,
Thomas

loetmeister

Hi,

noch eine kleine Änderung für HBWired...
Bei Devices mit vielen Kanälen steigt meiner Ansicht nach die Gefahr die receive(); Funktion (Teil des main loops) nicht oft genug aufzurufen und eventuell Daten auf dem Bus zu verpassen.
Ich habe daher die "for" schleife gegen einen counter 'getauscht' (+10 byte Speicher, +1 byte RAM).
Teste aktuell mit dem 26 Kanal IO/Dimmer. Test mit long press "spam" alle 300ms auf dem Bus + Key events an einen anderen Aktor - Funktioniert...

@@ -834,8 +834,10 @@ void HBWDevice::loop()
   // send announce message, if not done yet
   handleBroadcastAnnounce();
// feedback from switches and handle keys
-   for(uint8_t i = 0; i < numChannels; i++)
-        channels[i]->loop(this,i);
+   static uint8_t loopCurrentChannel = 0;
+   channels[loopCurrentChannel]->loop(this,loopCurrentChannel);
+   loopCurrentChannel++;
+   if (loopCurrentChannel >= numChannels) loopCurrentChannel = 0;
// config Button
    handleConfigButton();
};


Erstelle noch einen Pull request....   ;)
https://github.com/ThorstenPferdekaemper/HBWired/compare/master...loetmeister:5e226dd4d8dccac9853ae7e6c7d10daa4bacec4e


Ich würde gerne den "libraries" Ordner etwas umbauen.. als Arduino lib wäre es einfacher wenn alle Dateien *.cpp und *.h in einem Ordern sind, z.B.:
HBWired\libraries
  library.properties
  keywords.txt
  src\
    *.h
    *.cpp

library.properties:
name=HBWired
version=1
author=Thorsten Pferdekaemper (thorsten@pferdekaemper.com)
maintainer=Thorsten Pferdekaemper (thorsten@pferdekaemper.com)
sentence=HBWired Homebrew
paragraph=Build your own Homematic Wired bus Devices.
category=Communication
url=https://github.com/ThorstenPferdekaemper/HBWired/tree/master/libraries
architectures=*



Gruß,
Thomas

Thorsten Pferdekaemper

Zitat von: loetmeister am 18 September 2018, 00:40:45
wäre schön wenn du das Device hinzufügen könntest.
Erledigt.

Zitat von: loetmeister am 19 September 2018, 00:19:35
noch eine kleine Änderung für HBWired...
Bei Devices mit vielen Kanälen steigt meiner Ansicht nach die Gefahr die receive(); Funktion (Teil des main loops) nicht oft genug aufzurufen und eventuell Daten auf dem Bus zu verpassen.
Ich habe daher die "for" schleife gegen einen counter 'getauscht' (+10 byte Speicher, +1 byte RAM).

Erstelle noch einen Pull request....   ;)
Sieht ok aus, aber einen Pull Request habe ich bisher keinen bekommen.

Zitat
Ich würde gerne den "libraries" Ordner etwas umbauen.. als Arduino lib wäre es einfacher wenn alle Dateien *.cpp und *.h in einem Ordern sind, z.B.:
Was würde das bringen? Eigentlich dachte ich, dass man so bessere Kontrolle darüber hat, was alles benutzt wird. Es soll ja nur das reingelinkt werden, was auch gebraucht wird. 
...oder verstehe ich da was falsch?

Gruß,
    Thorsten
FUIP

loetmeister

#514
Hi Thorsten,

danke fürs aktualisieren des Wikis.

Bzgl. dem "libraries" Ordner. Vermutlich reden wir aneinander Vorbei.  ??? Der Hintergrund ist folgender.
Aktuell kopiere ich immer die Dateien (*.cpp und *.h) aus dem GitHub Repository (bzw. dessen Ordnerstruktur) in ein "HBWired\src" Verzeichnis welcher in "Arduino\libraries\" liegt. Da es nun Teil der Standard Arduino Library ist, hatte ich mir eine Beschreibungs und "Syntax Coloring" (keywords.txt) Datei erstellt. Finde ich eigentlich ganz praktisch...  ;)
Wenn nun das GitHub Repository die selbe Ordnerstruktur wie die "Arduino\libraries\HBWired\..." hätte, kann man sich das hin- und herkopieren sparen, bzw. es ist etwas einfacher.
Ich meine der linker bindet auch ein was inkludiert wurde. So verstehe ich das, was ich im arduino_build cache sehe.

Hier mal der Inhalt der beiden Verzeichnisse:

Verzeichnis von C:\Users\user\Documents\Arduino\libraries\HBWired

[.]                  keywords.txt         [src]
[..]                 library.properties
               2 Datei(en),          1.729 Bytes

Verzeichnis von C:\Users\user\Documents\Arduino\libraries\HBWired\src

[.]                         HBWBlind.cpp                HBWLinkBlindSimple.h        HBWSoftwareSerial.cpp
[..]                        HBWBlind.h                  HBWLinkKey.cpp              HBWSoftwareSerial.h
ClickButton.cpp             HBWired.cpp                 HBWLinkKey.h                HBWSwitch.cpp
ClickButton.h               HBWired.h                   HBWLinkSwitchAdvanced.cpp   HBWSwitch.h
FreeRam.cpp                 HBWKey.cpp                  HBWLinkSwitchAdvanced.h     HBWSwitchAdvanced.cpp
FreeRam.h                   HBWKey.h                    HBWLinkSwitchSimple.cpp     HBWSwitchAdvanced.h
hardware.h                  HBWLinkBlindSimple.cpp      HBWLinkSwitchSimple.h
              25 Datei(en),        110.458 Bytes



Edit: Habe mal einen pull request erstellt. Dateien habe ich noch keine verschoben. Es sind erst mal alle bisherigen Änderungen.
HBWired: channels[loop... geändert
HBWKey.cpp - Erweitert
Der Rest für HBW-IO-10-Dim-6, bzw. "Kosmetik" für den Rest...
https://github.com/ThorstenPferdekaemper/HBWired/compare/master...loetmeister:020d764c12089e32dd1ba60c984d333710bdca34


Gruß,
Thomas

Thorsten Pferdekaemper

Hi,
sorry, hat ein bisschen gedauert, aber der Pull-Request ist jetzt drin.
Gruß,
   Thorsten
FUIP

Langerrenner

Hallo Thorsten,
ich habe einige Module seid ca. 10 Monaten in einer Probe- Fhem Anlage am laufen.
HBW-LC-BL-4
HBW-LC-SW8
HBW-Sen-Key-12
HM Modul
HBW-1W-T10
Ziel soll es sein, meine 10 Jahre alte HM- Anlage komplett zu ersetzen, da es die Module mit RS485 in der Form wie ich sie brauche nicht mehr gibt.
Ich würde gerne die Module auf die neuste Software bringen.
Welchen Stand hat die Software erreicht. Ist ein finaler Zustand fast erreicht?
MfG. Willi Florin

Thorsten Pferdekaemper

Zitat von: Langerrenner am 28 November 2018, 14:59:14
Hallo Thorsten,
Hi,
ich habe an dem Kram schon ewig nichts mehr gemacht. Vielleicht mag Thomas (loetmeister) etwas dazu sagen.
...einen "finalen Stand" gibt es meiner Meinung nach bei Software nicht. Speziell bei Open Source musst Du für Dich selbst entscheiden, ob das alles für Dich funktioniert. Insbesondere wenn es das laut 10-monatigem Test tut, würde ich an Deiner Stelle kein Update machen.
Gruß,
   Thorsten
FUIP

Langerrenner

Ja sorry Thomas,
loetmeister hat die letzten Erweiterungen eingestellt. Daher die Frage an Ihn.
Ich möchte schon gerne den letzten Stand verwenden, weil hier gerade die Erweiterungen drin sind, die ich auch gerne hätte.
Auch möchte ich einige Sonderfunktionen noch zusätzlich einbauen, dies wird aber erst nächstes Jahr was werden.
MfG. Willi Florin

loetmeister

Hi,

ein 10-monatiger Test ist ja schon mal ne Hausnummer  8)
Wenns aber nur eine Testanlage ist, dann spiele mal neue Software in ein Modul ein und schau ob alles weiterhin funktioniert :) Kann natürlich sein das die neuen Device XML Dateien nicht mit den alten Modulen funktionieren... mischen könnte da ein Problem sein.


Welcher Stand hat denn deine Firmware? (wann Kompiliert?)
Du kannst dir für die Module die Commits anschauen, z.B.
HBW-Sen-Key-12
--> https://github.com/ThorstenPferdekaemper/HBWired/commits/master/HBW-Sen-Key-12
Funktionen sind dort eigentlich nicht verändert worden, (fast) nur Anpassungen für Änderungen in den Libraries, und ein paar kosmetische Änderungen.

Bei HBW-LC-BL-4 oder HBW-LC-SW8 sind ein paar zusätzliche Funktionen hinzugekommen.
Größere Änderungen gibt es bei den neuen Modulen, oder auch z.B. HBW-LC-Sw-8_AdvancedPeering (Peering mit TOGGLE, TOGGLE_TO_COUNTER, TOGGLE_INVERSE_TO_COUNTER, onTime, offTime (Ein-/Ausschaltdauer), onDelayTime, offDelayTime (Ein-/Ausschaltverzögerung).

Gruß,
Thomas

Langerrenner

Hallo Thomas,
danke für Deine Infos und für Deine umfangreiche Arbeit an diesen Modulen.
Ich werde meine Anlage mal komplett auf die neuste Software und XML Files setzen. Genau diese neuen Funktionen fehlten mir nämlich noch.
Dann wieder alle Verknüpfungen erzeugen und mein Tasten- Simulator wieder darauf ansetzten.
Die Module Temperatur- Module zeigten in der Eindraht- Kommunikation ab und zu mal Probleme.
Muss ich mal untersuchen. Nächstes Jahr werde ich wohl mehr Zeit haben, bin dann in Rente :) (Hoffe ich  ???, bei vier Enkelkindern?).
Gruß Willi

Thorsten Pferdekaemper

Zitat von: Langerrenner am 29 November 2018, 09:12:57Die Module Temperatur- Module zeigten in der Eindraht- Kommunikation ab und zu mal Probleme.
Dass es beim Temperatur-Teil Probleme gibt habe ich auch schon gehört. Ich glaube, das kommt vor, wenn man mehr als 5 (oder so) Sensoren dranhängen hat. Ein Arduino ist halt doch kein vollwertiger 1-Wire Busmaster. Allerdings weiß ich nicht, was man da viel besser machen könnte. Vielleicht einen richtigen Busmaster kaufen (?) und den dann wiederum per Arduino ansteuern. Vielleicht reicht aber auch ein bisschen Hühnerfutter an der richtigen Stelle.
Gruß,
   Thorsten
FUIP

Langerrenner

Ja, mal sehen, vielleicht setze ich auch I2C Bausteine ein. Der BM280 von Bosch liefert direkt Luftdruck, Feuchte und Temperatur.
Gruß Willi

holzwurm83

Zitat von: Thorsten Pferdekaemper am 29 November 2018, 09:19:37
Dass es beim Temperatur-Teil Probleme gibt habe ich auch schon gehört. Ich glaube, das kommt vor, wenn man mehr als 5 (oder so) Sensoren dranhängen hat. Ein Arduino ist halt doch kein vollwertiger 1-Wire Busmaster. Allerdings weiß ich nicht, was man da viel besser machen könnte. Vielleicht einen richtigen Busmaster kaufen (?) und den dann wiederum per Arduino ansteuern. Vielleicht reicht aber auch ein bisschen Hühnerfutter an der richtigen Stelle.
Gruß,
   Thorsten

Das Problem ist das diese wohl in der Konstellation sehr Störanfällig sind. Ihr könnt hier mal schauen.
https://forum.fhem.de/index.php/topic,89519.0.html
Hat zwar gedauert aber mittlerweile laufen die problemlos.
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Langerrenner

Danke holzwurm83 für die Infos. Sie sind mir bekannt, hab aber noch nicht alles eingebaut. Aber schon ein Kondensator über der Versorgungsspannung und ein kleiner über dem Bus waren schon sehr hilfreich.
Frage an Thomas, da ich einige Sonderwünsche bei mir einbauen möchte, muss ich natürlich erstmal in die Software einsteigen.
Gibt es hilfreiche Darstellungen, oder Infos über die Struktur und Ablauf? Das ein oder andere Bild könnte hilfreich sein.
Gruß Willi