HM-ES-TX-WM
Moderator: Co-Administratoren
-
- Beiträge: 8
- Registriert: 22.11.2020, 15:17
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Markdorf
- Kontaktdaten:
HM-ES-TX-WM
Hallo,
habe mir einen S0 Sensor nachgebaut und wollte diesen mit einem Akku betreiben.
Dazu muss der Atmega328p allerdings in den Sleep-Mode und da fängt das Problem an.
Die Ticks/Millis werden nicht mehr richtig gezählt sobald ich den SleepMode verwende.
Mit einer dauerhaften Stromanbindung und Idle Statt Sleep, also
hal.activity.savePower<Idle<> >(hal);
hal.activity.savePower<Sleep<> >(hal);
funktioniert es einwandfrei.
Jetzt habe ich etwas nachgeforscht und denke, das es nur über einen externen Trigger funktioniernen wird.
Kann mir jemand, als Neuling im Thema Arduino, unter die Arme greiffen und mir helfen, wie ich den S0 Sensor dazu bekomme, auf Knopfdruck, bzw. später per Timer, seine Daten an die Zentrale zu senden.
Folgendes müsste dafür ins File:
- Deaktivierung des MSG_Cycles
- Definierung eines Pins als Interrupt
- Ausführen der Sendeoperation bei Pin Interrupt
Gerne aber auch andere Lösungsvorschläge
Ziel ist es dasd vohandene Skript von PaPa so zu verwenden, wie es zum laden ist, leider zeigt die Realität hier, dass es so nicht geht wenn man den Sleep Modus aktiviert lässt.
Herzlichen Dank und Gruß vom bodensee
habe mir einen S0 Sensor nachgebaut und wollte diesen mit einem Akku betreiben.
Dazu muss der Atmega328p allerdings in den Sleep-Mode und da fängt das Problem an.
Die Ticks/Millis werden nicht mehr richtig gezählt sobald ich den SleepMode verwende.
Mit einer dauerhaften Stromanbindung und Idle Statt Sleep, also
hal.activity.savePower<Idle<> >(hal);
hal.activity.savePower<Sleep<> >(hal);
funktioniert es einwandfrei.
Jetzt habe ich etwas nachgeforscht und denke, das es nur über einen externen Trigger funktioniernen wird.
Kann mir jemand, als Neuling im Thema Arduino, unter die Arme greiffen und mir helfen, wie ich den S0 Sensor dazu bekomme, auf Knopfdruck, bzw. später per Timer, seine Daten an die Zentrale zu senden.
Folgendes müsste dafür ins File:
- Deaktivierung des MSG_Cycles
- Definierung eines Pins als Interrupt
- Ausführen der Sendeoperation bei Pin Interrupt
Gerne aber auch andere Lösungsvorschläge
Ziel ist es dasd vohandene Skript von PaPa so zu verwenden, wie es zum laden ist, leider zeigt die Realität hier, dass es so nicht geht wenn man den Sleep Modus aktiviert lässt.
Herzlichen Dank und Gruß vom bodensee
Zuletzt geändert von alchy am 22.11.2020, 16:26, insgesamt 1-mal geändert.
Grund: verschoben aus Homematic - HomeMatic allgemein
Grund: verschoben aus Homematic - HomeMatic allgemein
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-ES-TX-WM
Irgendwie verstehe ich das nicht. Welches Script willst Du verwenden ?
Wie sieht Dein Sketch zur Zeit aus ?
Der S0 bringt wahrscheinlich viele Impulse pro Sekunde. Damit wird die CPU immer wieder aus dem Schlaf geweckt. Da der Code aber nicht feststellen kann, ob das Wecken durch Ablauf der Sleep-Time oder irgendwas anderes passiert ist, kommt die gesamte Zeitberechnung durcheinander.
Wenn Du eine "ordentliche" Zeit haben willst, musst Du wohl auf eine Lösung mit RTC umsteigen. Die externe RTC tickt immer im Sekundentakt, egal was sonts noch so auf der CPU passiert.
Wie sieht Dein Sketch zur Zeit aus ?
Der S0 bringt wahrscheinlich viele Impulse pro Sekunde. Damit wird die CPU immer wieder aus dem Schlaf geweckt. Da der Code aber nicht feststellen kann, ob das Wecken durch Ablauf der Sleep-Time oder irgendwas anderes passiert ist, kommt die gesamte Zeitberechnung durcheinander.
Wenn Du eine "ordentliche" Zeit haben willst, musst Du wohl auf eine Lösung mit RTC umsteigen. Die externe RTC tickt immer im Sekundentakt, egal was sonts noch so auf der CPU passiert.
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 8
- Registriert: 22.11.2020, 15:17
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Markdorf
- Kontaktdaten:
Re: HM-ES-TX-WM
Hallo,
danke für die Antwort und folgende Erklärung.
Das S0 skript gibt es hier:
https://github.com/jp112sdl/Beispiel_As ... WM_CCU.ino
Folgendes Passiert. Pulse werden gezählt und zwischendurch geht der Controler in Sleep Mode. Alle 3min sollte er die Pulse übertragen. Er überträgt diese und alle Pulse seit begin.
Die Zentrale nimmt dann die Pulse und zeigt die Aktuelle Leistung an (Bezug 3min), die Gesamtanzahl der Pulse wird einfach mit der Impulszahl in der Homematic verrechnet und zeigt KWh, da dies Zeitlich unabhängig ist passen diese also.
Problem, wenn ich mir die Millis anzeigen lasse, zählen die nicht weiter wenn er schläft und somit hängt das Timing von dem Inpulsen ab. Bei ca 400W (1000Imp/KWh) passt es nahezu, ist aber zufall.
Ohne Sleep Mode, passen die Millis und ich bekomme meinen Wert alle 3min. Aber! Meine Batterie is in 2 Tagen leer, hält mit sleep ca 1 Jahr.
Ich sehe es somit auch, das wir hier von Extern kommen müssen, RTC oder ein 555 Timer.
Ich bin aber noch nicht so gut im Skript drum müsste ich das reguläre Senden nach Millis unterdrücken und nen externen Eingang nehmen (deklarieren) und dann entweder alle 3min oder bei sekunden erst aus 180 Zählen und den Sendevorgang auslösen.
Ich hofee es war verständlich
Meinst du kannst mir beim Skript helfen
danke für die Antwort und folgende Erklärung.
Das S0 skript gibt es hier:
https://github.com/jp112sdl/Beispiel_As ... WM_CCU.ino
Folgendes Passiert. Pulse werden gezählt und zwischendurch geht der Controler in Sleep Mode. Alle 3min sollte er die Pulse übertragen. Er überträgt diese und alle Pulse seit begin.
Die Zentrale nimmt dann die Pulse und zeigt die Aktuelle Leistung an (Bezug 3min), die Gesamtanzahl der Pulse wird einfach mit der Impulszahl in der Homematic verrechnet und zeigt KWh, da dies Zeitlich unabhängig ist passen diese also.
Problem, wenn ich mir die Millis anzeigen lasse, zählen die nicht weiter wenn er schläft und somit hängt das Timing von dem Inpulsen ab. Bei ca 400W (1000Imp/KWh) passt es nahezu, ist aber zufall.
Ohne Sleep Mode, passen die Millis und ich bekomme meinen Wert alle 3min. Aber! Meine Batterie is in 2 Tagen leer, hält mit sleep ca 1 Jahr.
Ich sehe es somit auch, das wir hier von Extern kommen müssen, RTC oder ein 555 Timer.
Ich bin aber noch nicht so gut im Skript drum müsste ich das reguläre Senden nach Millis unterdrücken und nen externen Eingang nehmen (deklarieren) und dann entweder alle 3min oder bei sekunden erst aus 180 Zählen und den Sendevorgang auslösen.
Ich hofee es war verständlich
Meinst du kannst mir beim Skript helfen
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-ES-TX-WM
Ich versuche mal schnell alles zusammenzufassen. Erst mal brauchst Du eine Hardware mit 32kHZ Quarz drauf z.B. das hier https://asksinpp.de/Projekte/psi/HMSensor/
Dann sind Anpassungen für den RTC-Support im HM-ES-TX-WM_CCU.ino vorzunehmen.
https://github.com/jp112sdl/Beispiel_As ... CU.ino#L27
Die RTC tickt in Sekunden - deshalb sind hier einfach die Sekunden anzugeben.
https://github.com/jp112sdl/Beispiel_As ... CU.ino#L51
Der HAL muss auf RTC umgestellt werden.
https://github.com/jp112sdl/Beispiel_As ... U.ino#L351
https://github.com/jp112sdl/Beispiel_As ... U.ino#L364
Zeiten anpassen.
https://github.com/jp112sdl/Beispiel_As ... U.ino#L458
rtc anstatt sysclock benutzen.
Wenn ich jetzt nichts übersehen habe, sollte alles funktionieren.
Dann sind Anpassungen für den RTC-Support im HM-ES-TX-WM_CCU.ino vorzunehmen.
https://github.com/jp112sdl/Beispiel_As ... CU.ino#L27
Code: Alles auswählen
#define MSG_CYCLE (60 * 3)
https://github.com/jp112sdl/Beispiel_As ... CU.ino#L51
Code: Alles auswählen
typedef AskSinRTC<LedType,BatterySensor,RadioType> HalType;
https://github.com/jp112sdl/Beispiel_As ... U.ino#L351
Code: Alles auswählen
actualConsumption = (c * sigs * 10) / (MSG_CYCLE / 60);
Code: Alles auswählen
actualConsumption = (60 * 100000 * c) / (sigs * (MSG_CYCLE / 60));
https://github.com/jp112sdl/Beispiel_As ... U.ino#L458
Code: Alles auswählen
rtc.add(sdev.channel(1));
Wenn ich jetzt nichts übersehen habe, sollte alles funktionieren.
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 8
- Registriert: 22.11.2020, 15:17
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Markdorf
- Kontaktdaten:
Re: HM-ES-TX-WM
Hallo,
erstnal herzlichen Dank für die schnelle Antwort.
328p habe ichnmit und ohne Quarz, werde beide testen und sehen was es ausmacht. RTC werde ich gleich einen bestellen und das ganze ausprobieren.
Jetzt noch die Frage des Anschlusses des RTC, wenn ich das richtig sehe, liegt der Impuls Pin auf einem der RTC Eingänge.
Kann ich den Impulszähler einfach auf einen anderen Pin legen und in der Definition ändern?
Welchen würden Sie nehmen?
Mein Favoirit: RTC DS3231 - SCL, SDA und 32k Ausgang, so könnte ich auch meine 328p ohne Quarz benutzen (wo kommt der dran und muss das ins Skript? )
Oder: DS1302 - hat CLK, DAT und RST
erstnal herzlichen Dank für die schnelle Antwort.
328p habe ichnmit und ohne Quarz, werde beide testen und sehen was es ausmacht. RTC werde ich gleich einen bestellen und das ganze ausprobieren.
Jetzt noch die Frage des Anschlusses des RTC, wenn ich das richtig sehe, liegt der Impuls Pin auf einem der RTC Eingänge.
Kann ich den Impulszähler einfach auf einen anderen Pin legen und in der Definition ändern?
Welchen würden Sie nehmen?
Mein Favoirit: RTC DS3231 - SCL, SDA und 32k Ausgang, so könnte ich auch meine 328p ohne Quarz benutzen (wo kommt der dran und muss das ins Skript? )
Oder: DS1302 - hat CLK, DAT und RST
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-ES-TX-WM
Wie RTC bestellen ?
Du brauchst eine Platine, die einen 32kHZ Quarz inklusive Kondensatoren vorsieht (Link siehe oben) und musst diesen auch bestücken. Die RTC (Real Time Clock) ist in Software und nutzt den 32kHz Quarz.
Du brauchst eine Platine, die einen 32kHZ Quarz inklusive Kondensatoren vorsieht (Link siehe oben) und musst diesen auch bestücken. Die RTC (Real Time Clock) ist in Software und nutzt den 32kHz Quarz.
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 8
- Registriert: 22.11.2020, 15:17
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Markdorf
- Kontaktdaten:
Re: HM-ES-TX-WM
Hi,
verstanden
Ich dachte der RTC kommt extern, war mein Fehler, dennoch werde ich die externen RTC's nehmen um meine 328 ohne Quarz benutzen zu können.
Somit werde ich das gleich mal ausprobieren, Danke
Ich benutze diese und warum kann ich die 328p nicht benutzen? PS: meiner mit Quarz hat 16Mhz drauf
Beim Testen geht der Controller jetzt kontinuierlich in den Sende Modus!
verstanden
Ich dachte der RTC kommt extern, war mein Fehler, dennoch werde ich die externen RTC's nehmen um meine 328 ohne Quarz benutzen zu können.
Somit werde ich das gleich mal ausprobieren, Danke
Ich benutze diese und warum kann ich die 328p nicht benutzen? PS: meiner mit Quarz hat 16Mhz drauf
Beim Testen geht der Controller jetzt kontinuierlich in den Sende Modus!
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-ES-TX-WM
Wenn Du es nicht so machen willst, wie ich gesagt habe, musst Du es selbst rausfinden. Sorry - ich habe dafür nicht genug Zeit.
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 8
- Registriert: 22.11.2020, 15:17
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Markdorf
- Kontaktdaten:
Re: HM-ES-TX-WM
Ok Danke,
hab im obigen link leider keine Bestelldetails gefunden und habe meine Platine soweit mit großer Batterie fertig. Controller ist der gleiche und das Konzept ist von Jerome Pech, wusste nicht das wir hier nicht kompatibel sind, ander Skripts gehen einwandfrei.
Vielleicht finde ich einen Schaltplan, dann finde ich den Unterschied selbst heraus.
Die ursprüngliche Frage war ja auch, wie ich auf einen Eingang hin den Sendebefehl absetze. Damit ich eben den externen RTC benutzen kann. Außerdem ist es auch nicht sicher das es mit der obigen Platine auch geht, wurde ja nicht getestet.
Schade das man bei Jerome anfängt, dann durch einen Link auf diesen Skripten landet um am Ende gesagt zu bekommen, fang von vorne an mit anderer Hardware.
Aber herzlichen Dank soweit, habe schon viel vom Skript verstanden und denke ich bekomme das noch hin!
Gruß Sven
hab im obigen link leider keine Bestelldetails gefunden und habe meine Platine soweit mit großer Batterie fertig. Controller ist der gleiche und das Konzept ist von Jerome Pech, wusste nicht das wir hier nicht kompatibel sind, ander Skripts gehen einwandfrei.
Vielleicht finde ich einen Schaltplan, dann finde ich den Unterschied selbst heraus.
Die ursprüngliche Frage war ja auch, wie ich auf einen Eingang hin den Sendebefehl absetze. Damit ich eben den externen RTC benutzen kann. Außerdem ist es auch nicht sicher das es mit der obigen Platine auch geht, wurde ja nicht getestet.
Schade das man bei Jerome anfängt, dann durch einen Link auf diesen Skripten landet um am Ende gesagt zu bekommen, fang von vorne an mit anderer Hardware.
Aber herzlichen Dank soweit, habe schon viel vom Skript verstanden und denke ich bekomme das noch hin!
Gruß Sven
-
- Beiträge: 12115
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 848 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: HM-ES-TX-WM
Ich versteh den Aufwand nicht.Iceman1101 hat geschrieben: ↑27.11.2020, 15:41ein Favoirit: RTC DS3231 - SCL, SDA und 32k Ausgang, so könnte ich auch meine 328p ohne Quarz benutzen (wo kommt der dran und muss das ins Skript? )
Oder: DS1302 - hat CLK, DAT und RST
Du nimmst den Pro Mini, schmeißt den 8MHz Schwinger runter und hängst nen 32kHz Quarz (und 2 Kondensatoren) stattdessen dran.
AVR Fuse umstellen natürlich nicht vergessen.
Die 16MHz arbeiten mit 5V statt mit 3.3V. Auch an den Pin-Pegeln.
Dein CC1101 wird das nicht lange gut finden.
Und die BOD Fuse bei den 16MHz steht auf 4.3V
Einfach so einen Sendebefehl aufgrund eines externen Interrupts absetzen ist sicher nicht zielführend, da die CCU das Telegramm ja in einem festgelegten Intervall erwartetIceman1101 hat geschrieben: ↑27.11.2020, 21:23Die ursprüngliche Frage war ja auch, wie ich auf einen Eingang hin den Sendebefehl absetze.
https://github.com/AskSinPP/asksinpp.de ... _wm.xml#L2