[gelöst]Probleme mit receive (alte Daten werden geladen)

Begonnen von frober, 08 Juli 2021, 18:15:33

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: frober am 10 Juli 2021, 09:18:43
Es gibt bestimmt Verbesserungspotential im Sketch, MySensors ist mein erstes Projekt mit der ArduinoIDE 8) , davor hatte ich nur mal einen kleinen Sketch mit Bascom geschrieben.
Für einen "Erstling" finde ich das ziemlich cool, und die "Kritik" ist auf eher hohem Niveau angesiedelt - ohne behaupten zu wollen, dass ich alles verstanden habe, was da vercoded ist...

Zitat von: frober am 10 Juli 2021, 09:18:43
Hmm, bin mir nicht sicher, was du damit meinst.
Ich setze doch einen Zähler, dieser wird, sobald die Nachricht eintrifft auf 0 gesetzt, ansonsten wird der Befehl neu gesendet.
Es geht nur um die "receive()"-Funktion, und das mit dem Zähler ist soweit klar.

Innerhalb der Funktion sind aber die Teile relativ weit hinten angesiedelt, die sich mit Ack-Nachrichten beschäftigen. Hat man keinen Zähler, ist man dann eigentlich schon fertig, hat man einen, könnte man die Ack-Behandlung innerhalb eines einzigen "if"-Zweiges (ggf. mit weiteren Unterscheidungen nach Typ etc. innerhalb dieses Zweiges) unterbringen - da wird ja jeweils nur der Zähler auf "0" (= ok) gesetzt...
Wäre m.E. übersichtlicher...

Pseudecode ist evtl. einfacher:
void receive(const MyMessage &message) {
    if (message.isAck() ) {
        if (message.type == V_STATUS && Relays[message.sensor].relayAckCountR > 0) {
           [reset des zählers]
        }
       
        else if (...percentage...) {            [bla]
        }
    }
    else if ( [Behandlung der Nachrichten vom Controller] ...


(Wie gesagt: Gejammer auf hohem Niveau...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frober

#16
Zitat von: Beta-User am 10 Juli 2021, 15:31:49
Für einen "Erstling" finde ich das ziemlich cool, und die "Kritik" ist auf eher hohem Niveau angesiedelt - ohne behaupten zu wollen, dass ich alles verstanden habe, was da vercoded ist...
Es geht nur um die "receive()"-Funktion, und das mit dem Zähler ist soweit klar.

Innerhalb der Funktion sind aber die Teile relativ weit hinten angesiedelt, die sich mit Ack-Nachrichten beschäftigen. Hat man keinen Zähler, ist man dann eigentlich schon fertig, hat man einen, könnte man die Ack-Behandlung innerhalb eines einzigen "if"-Zweiges (ggf. mit weiteren Unterscheidungen nach Typ etc. innerhalb dieses Zweiges) unterbringen - da wird ja jeweils nur der Zähler auf "0" (= ok) gesetzt...
Wäre m.E. übersichtlicher...

Pseudecode ist evtl. einfacher:
void receive(const MyMessage &message) {
    if (message.isAck() ) {
        if (message.type == V_STATUS && Relays[message.sensor].relayAckCountR > 0) {
           [reset des zählers]
        }
       
        else if (...percentage...) {            [bla]
        }
    }
    else if ( [Behandlung der Nachrichten vom Controller] ...


(Wie gesagt: Gejammer auf hohem Niveau...)

Wow, danke für das Kompliment. :)
Bei Gelegenheit werde ich mir das nochmal ansehen.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...