[gelöst] RPI_1wire und DS2408

Begonnen von dan1180, 19 November 2023, 11:06:05

Vorheriges Thema - Nächstes Thema

dan1180

Hallo zusammen,

ich habe gestern mein FHEM auf einem RPI4B neu aufgesetzt. Dabei bin ich über das neue Modul RPI_1wire gestolpert.

Set-up bisher:
  • 5xDS18B20 über 1wire und Modul GPIO4
  • DS2408 über USBBUS und OWSERVER/OWSWITCH

Nun möchte ich das gerne alles über das neue Modul anschließen auch wenn ich gelesen habe, dass der DS2408 noch nicht getestet ist.

Folgende Fragen dazu:
  • Der Zustand der "Schalter" wird mir verkehrt herum angezeigt. "off"=LED am Relais an, "on"=LED am Relais aus. Schalten kann ich zwar trotzdem aber ich finde das etwas verwirrend. Gibt es dafür einen Grund? Kann man das ändern?
  • Leider bietet das Modul nur die Zustände "on" und "off". Ist es möglich (ohne tiefreichende Programmierkenntnisse) hier noch ein "on-for-timer" zu nutzen? Kann ich das (in der Zwischenzeit) irgendwie über einen Dummy lösen?
  • Können die Namen der einzelnen Relais (pio0-7) irgendwie geändert werden?

Ich bin wirklich begeistert von dem Modul an sich, da es mir ermöglicht alle 1wire Geräte über 1 Modul zu steuern.

Vielen Dank für jede Hilfe,
Dan
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Adimarantis

#1
Hi Eisman,

Der Grund dafür, dass die Schalter invertiert sind ist genau der: konnte ich mangels HW nie testen.
Müsste sich hoffentlich mit der angehängten Version beheben lassen, wenn das das einzige Problem ist.

Edit: Also nur die Anzeige war falsch, oder? "set ... on" schaltet korrekt ein? Ich habe jetzt nämlich nur die Anzeige "umgedreht"

Kannst du deinen "on-for-timer" use case etwas beschreiben - was möchtest du genau erreichen?

Die Readingnamen sind fest, du könntest dir aber über userReadings eine "sprechende" Kopie anlegen - hilft dir allerdings nur zum Lesen
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

dan1180

Hi Adimarantis,
die Anfrage war von mir  ;D

Ja genau. Die pio's lassen sich problemlos und zuverlässig schalten, nachdem ich auf die Datei ,,output" im Verzeichnis des Device mit chmod die Berechtigung 775 gegeben habe. Nur ,,on" und ,,off" (bzw. 0 und 1) sind vertauscht.

Mit on-for-timer meine ich die Funktion, die die meisten schaltbaren Devices haben. Ich möchte meinen Mischer für die Fußbodenheizung steuern und muss dazu einen Ausgang für x Sekunden schalten.

Die Umbenennung ist das am wenigsten wichtige Thema für mich. Hätte halt der Übersicht gut getan. OWSWITCH hat dafür Attribute, falls du's mal anschauen magst.

Vielen Dank für die schnelle Reaktion. Bin gerade mit meinem Sohn beim Fußballturnier, werde es aber heute Abend auf jeden Fall noch testen!

Grüße,
Dan

PS: Ich stehe auch für weitere DS2408 Tests bereit, wenn du die Geduld aufbringst mir jeweils zu erklären was ich testen soll 😁

FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Adimarantis

OK, hab mir das mal bei RPI_GPIO angeschaut. Das ist eine standard Erweiterung für Devices in FHEM, die sich aber leider darauf stützt das es eine "set on" und "set off" Funktion geben muss - d.h. nur geht wenn das Device genau einen Wert schaltet. Beim DS2408 sind es ja 8 on/off Funktionen. Dafür ist es nicht ausgelegt.
Die Liste würde auch übelst lang werden: (8 Schalter)*(2 Zustände)*(4 Funktionen) plus (8 Schalter)*(3 allgemeine Funktionen) -> 88 Befehle
In so einem set-pulldown findet sich keiner mehr zurecht.
Selbst wenn man jetzt nur on/off-for-timer nimmt, sind es schon 16 Einträge (wobei man da zweistufige Befehle mit zwei Pulldowns machen könnte, wie ich es schon in Signalbot implementiert habe - machbar ist alles, müsste ich aber eben ausprogrammieren, da ich die setExtensions nicht nutzen kann.
Die unmittelbar einfachste Variante ist ein DOIF:
defmod DI_Warmwasser DOIF ([Warmwasser] eq "on") (set Warmwasser off)
attr DI_Warmwasser do always
attr DI_Warmwasser wait 300
So schalte ich meine Umwälzpumpe nach 5 Min wieder aus nachdem sie per Google Sprachbefehl eingeschaltet wurde.

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

dan1180

Hallo Adimarantis,

sorry, ich hatte dich wohl falsch verstanden. Es war nicht nur die Anzeige. Die Schaltung war falsch herum.
set...on schält das Relais (die LED) aus, set...off schält es ein. Die Anzeige hat zum falschen Schaltzustand gepasst (on=1, off=0).
Das neue Modul hat irgend einen anderen Fehler. Die Schaltung war auf einmal ganz wirr. Ich konnte einzelne pio's nur noch umschalten (z.B. 5 auf 6 auf 5 ...), andere haben nicht mehr zur Nummer gepasst (z.B. 2 war 3). Welche Nummern das genau waren; bitte nicht festnageln.

Ich habe nun erst mal wieder das "alte" installiert.

Zu deiner zweiten Nachricht: Ich habe nicht von RPI_GPIO gesprochen sondern von OWSWITCH. Dort funktioniert sowohl der Befehl "on-for-timer", als auch die Umbenennung der Kanäle.
Deine DOIF-Variante könnte funktionieren, wenn ich für jedes Delta-T ein eigenes DOIF schreibe. Mit on-for-timer konnte ich bei "viel zu heiß" 5 Sekunden lang schließen, bei "etwas zu heiß" 1 Sekunde, ...

@eisman:
Danke für die Hilfe mit dem Schalter. Da ich das dann aber für den Ölbrenner, die Fußbodenpumpe, die Heizkörperpumpe und für die Umwälzpumpe brauchen würde weiß ich nicht, ob es nicht einfacher wäre, wieder auf OWSWITCH zu wechseln?!

FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Adimarantis

Hi Dan,

ok, wahrscheinlich kommt das jetzt durcheinander weil durchs "umdrehen" dann beim Setzen die Bitmaske nicht mehr stimmt.
Wenn ich weiss, dass es vorher - eben invertiert - ging kann ich mir das nochmal in Ruhe anschauen und muss ein paar Testfälle durchspielen, damit es wirklich geht. Vielleicht reicht es schon das Setzen einfach auch zu invertieren.
Ist halt ohne HW immer etwas umständlicher - als ich den DS2413 mit jemandem "aus der Ferne" implementiert habe, hat das auch einige Iterationen gebraucht.

Mit dem on-for-timer geht OWSWITCH auch einen Sonderweg (nimmt nicht die Standardfunktion von FHEM). Eigentlich auch kein Hexenwerk. Wie schaut dann das "set" Menü dort aus?

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

Mal ein Schuss ins Blaue. Angehängte Version sollte einfach die Bits auch beim Schreiben invertieren.

Wenn das nicht klappt, bräuchte ich ein paar Experimente mit der "output" Datei in "/sys/bus/w1/devices/29-xxxxxxxxxxxx/" (was auch immer das xxx ist, dein 2408 müsste vorne eine 29- haben.

Die Datei einfach in verschiedenen Schaltzuständen wegkopieren (und einen Namen geben, womit man den Zustand erkennen kann, z.B. 1-0-1-0-0-0-0-0 für Port 0 und Port 3 sind an - der Rest ist aus.) und dann probieren ob man durch "cat datei >output" den entsprechenden Schaltzustand herstellen kann.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

dan1180

#7
Hi Adimarantis,

hat leider nicht funktioniert. Es lässt sich nichts mehr schalten. Weder über die Auswahl, noch über die Befehlszeile. Im Anhang findest du die output Datei jedes Kanals (00000000 - 00000001).

Ich mach das schon richtig? 58...pm Datei in /opt/fhem/FHEM kopieren, alte Datei überschreiben. Besitzer, Gruppe und Rechte anpassen und "shutdown restart"?

Noch ein weiteres Finding: Ich muss nach jedem Neustart die Rechte der Output-Datei neu setzen (775, kleiner habe ich noch nicht versucht).

Grüße,
Dan
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Adimarantis

Hi Dan,

Danke,
schaut schonmal wie erwartet aus. Nur zur Sicherheit für den Schreibmodus:
Wenn du jetzt cat "output-00000000 >output" machst dann schalten alle Kanäle auf aus?
Und ebenso bei cat "output-00000001 >output" schaltet nur Kanal 7 ein (und alle anderen bleiben aus bzw werden ausgeschaltet)
bei "output-10000000 >output" schaltet Kanal 0 ein und Kanal 7 geht aus?

Dann kann ich das jetzt schön simulieren. Irgendwo hab ich wahrscheinlich noch einen Denkfehler beim Bitgefrickel drin.

Das mit den Rechten hatte ich mir schon gedacht. Für die Temperatursensoren hab ich da einen Test drin und stelle ein udev Script zur Verfügung. Das mache ich dann für die Schalter auch noch. Das udev wird dann beim Booten ausgeführt und setzt die Rechte entsprechend - dann ist Ruhe.

Du machst das schon richtig. Wenn du die Datei als "fhem" User drüberkopierst sollten alle Rechte eigentlich automatisch passen.
Ein "shutdown restart" ist nicht zwangsläufig notwendig, da reicht auch ein "reload 58_RPI_1Wire"

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

dan1180

#9
Servus,

das mit cat bekomme ich leider nicht hin. Ich habe folgendes versucht:
pi@raspberrypi:/sys/bus/w1/devices/29-000000191172 $ cat >output
01111000
cat: Schreibfehler: Die Datei ist zu gro?
pi@raspberrypi:/sys/bus/w1/devices/29-000000191172 $ cat >output
01000000
cat: Schreibfehler: Die Datei ist zu gro?
pi@raspberrypi:/sys/bus/w1/devices/29-000000191172 $

pi@raspberrypi:/sys/bus/w1/devices/29-000000191172 $ cat "output-00000001 >output"
cat: 'output-00000001 >output': Datei oder Verzeichnis nicht gefunden

Mache ich da etwas falsch?

Grüße,
Dan
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Adimarantis

Also eigentlich war der zweite Ansatz fast richtig:
cat output-00000001 >outputohne Anführungszeichen. Sorry mein Fehler - ich wollte wahrscheinlich den ganzen Befehl "cat yy >xx" quoten und hab das erste Anführungszeichen falsch gesetzt.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

Hab jetzt mal eine kleine Simulation gemacht und einen Fehler gefunden.
Schau mal ob das jetzt besser geht.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

dan1180

#12
Yippie - es funktioniert!
Konnte alle ports mit on/off richtig schalten.

Der "cat"-Befehl hat aber immer noch nicht funktioniert. Im Anhang ein Screenshot meiner Versuche.

Mein Problem mit on-for-timer versuche ich aktuell über das "wait"-Attribut in meinem DOIF zu lösen. Klappt auch in den meisten Fällen.  ;D
Solltest du daran noch arbeiten (wollen), oder auch andere Befehle eines Schalters implementieren, teste ich gerne weiter. Auch gerne später mal melden, wenn ich dir mit dem DS2408 was testen soll.

Auf jeden Fall Viiieeelen Dank für das Modul und deine Unterstützung!
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Adimarantis

Super. Ok das mit dem "cat" ist jetzt ja nicht mehr wichtig, scheint ja so zu passen.

Probier mal die angehängte Version. Da hab ich jetzt on-for-timer und off-for-timer implementiert. Ich hoffe dabei hab ich nichts kaputt gemacht, also bitte auch das normale on/off nochmal testen.

Eine Frage wäre, ob man das jetzt so lässt (set dev pio1 on-for-timer 60) oder vereinfacht, indem set .. on einfach ein optionales Argument bekommt (was es jetzt zwangläufig auch hat, aber immer ignoriert wird).
Dann wäre der Syntax: "set dev pio1 on 60" - und ohne "60" halt permanent.

Ich hab jetzt auch mal einen Check darauf eingebaut ob "output" schreibbar ist. Wenn nicht, sollte eine Meldung im Device kommen und es wird mit "get udev" ein Script und eine Kurzanleitung angeboten, wie das zu konfigurieren ist.
Hier ist wichtig zu erwähnen, dass die Schreibrechte der Gruppe "gpio" gewährt werden - der "fhem" User also unbedingt dieser Gruppe angehören muss.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

dan1180

Hi,

also 50% funktionieren schon  ;D

Wenn ich on-for-timer direkt im Device auswähle, macht es was es soll: Einschalten, 10 Sekunden warten, Ausschalten.
Auch andersherum habe ich es getestet. Mit off-for-timer: Ausschalten, 10 Sekunden warten, Einschalten.

In einem DOIF eingebaut hat es dann aber nicht funktioniert. Der Port wurde ein-, aber nicht wieder ausgeschaltet. Wenn ich dann den Befehl in der Befehlszeile eingebe
set relais pio2 on-for-timer 10bekomme ich "Invalid duration -" zurück.

Manuelles (oder programmiertes) Ein-/Ausschalten (on/off) der Ports funktioniert nach wie vor.

Grüße!
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte