Decodoare pentru accesorii - DIY

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Nu stiu daca exista alta biblioteca mai buna, inca nu m-a deranjat QOS-ul ca sa caut ceva mai bun.
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
man, care e avantajul pentru care se foloseste eeprom la stocarea informatiilor gen ip, ssid, pass, etc?
ma refer la cazul in care decodorul este stationar si nu e nevoie de modificat setari, nu la varianta "loco"

intreb pentru ca nu stiu cum am reusit dar am pus in genunchi un esp12, nu se mai rescrie, indiferent ce i-as face (si am incercat destule metode)! sa-l ia dracu!
incepuse sa ramana cu valorile vechi, indiferent ce ii faceam (ars nodemcu, espeasy, format cu lualoader, le-am si uitat)
pus si simplu nu vroia sa stearga ce-i intrase in cap
pana la urma a crapat. se "scrie" teoretic cand il bag in mod flash, scrierea decurge normal dar dupa aia face tot ce vrea el, adica scoate tampenii pe seriala, nimic utilizabil
am incercat toate vitezele de conectare, tot, degeaba
n-ar fi mare paguba ca si bani dar nu mai am nici unul acum pentru teste

insa ma enerveaza mai tare faza cu variabilele scrise in eeprom, nu-i vad rostul (in cazul asta)
imi pare o scarpinatura in urechea stanga cu mana dreapta dar bagata printre picioare mai intai, complicatie inutila
sau ma insel?

tnx

PS: nu a fost implicat si nici vatamat un release de-al tau! orice asemanare e pur intamplatoare! :D
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Sorry. :(
1. Cand am probleme, sterg flash-ul (ESP n-are eeprom, e emulat in flash) cu esptool.
Cod:
esptool.py -p /dev/ttyUSB0 -b 115200 erase_flash
Eu il folosesc in Linux, nu stiu daca si cum e in windows.
2. In eeprom (in sketchul meu) salvez parametrii porturilor, aia pe care pot sa-i modific si in Rocrail si pe care nu vreau sa-i pierd la oprirea alimentarii. Gen intratrare/iesire, servo, pozitii stanga/dreapta...

Succes,
Liviu

PS Sunt prin deplasari, o sa raspund probabil mai greu.
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
salut Liviu

sper sa nu te superi pe mine dar n-am apucat sa fac nici un test
m-au prins treburile si nu prea mai am timp

am lasat insa sa mearga rocrailul cu o locomotiva care se plimba intre doua blocuri, in bucla, cu 4 senzori "Dagnall" si "Ellard"
cand am testat prima data RN-ul imi aduc aminte ca aveam aceeasi buba, adica:
problema care persista si e prezenta in toate variantele e ca de multe ori - sa apreciez undeva intre 3-5% din cazuri, senzorii nu raporteaza cand se elibereaza
orice activare manuala a inputurilor face ca senzorul sa reinceapa sa lucreze
am crezut initial ca e ceva local dar nu e, toate esp-urile pe toate inputurile fac la fel, aleator

intre timp am pus si rocrail server pe acelasi RPI
acum macar sunt sigur ca pachetele mqtt intre rocrail server si mosquitto nu mai au de ce sa nu se gaseasca

din cauza asta banuiesc ca e totusi nevoie de QOS1 sau 2
am gasit libraria asta: https://github.com/adafruit/Adafruit_MQTT_Library care zice ca stie sa faca publish QOS1
am incercat eu ceva dar nu sunt atat de bazat in programare incat sa inlocuiesc pubsubclient cu adafruit_mqtt, la un anumit moment m-am blocat :D
ma gandesc insa ca tu ai intelege mai usor ce zic aia acolo

nu-i graba, take your time
danke
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
si totusi nu e din senzori!!!!!!!!!!!!!!!!!!!!!!!!!
am avut azi ceva timp si am sapat mai mult prin softurile astea

am pus o monitorizare pe mosquitto si se pare ca esp-urile trimit pachet spre broker (care si ajung in acesta) dar rocrail nu schimba starea senzorului
deci se pierde ceva intre mqtt si rocrail :-x
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Salut Seba,
Din cate tin eu minte, cand mi-am depanat modulul am constatat ca Rocrail reactioneaza numai la mesajele corect formatate pentru el.
Adica le vede pe toate, dar le ignora pe cele care nu-i plac. :D
Tranzactiile le vezi in terminalul serverului si cred ca le si salveaza in fisierele .trc. Eventual trebuie sa activezi "raportarea byte" (nu mai stiuprin ce meniu se ascunde, daca e cazul ma uit cand ajung acasa si-ti zic).
Asa ca poti sa compari ce afiseaza mosquitto cu ce afiseaza serverul si cu ce e luat in considerare de Rocrail.

Succes,
Liviu

PS Portatul la biblioteca Adafruit inca nu ma tenteaza.
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
pai si sin cazul asta unde e rezolvarea?
pentru ca rocrail nu pierde mereu acele pachete, doar cateodata
e o discutie pe rocrail intre Rob si Dagnall, cand Rob a implementat (cu greu) qos0 pentru citire
teoretic sunt de acord cu Rob, ca nu e ok sa se foloseasca QOS0 dar in acelasi timp Dagnall cere QOS0 pentru ca doar atat stie pubsubclient (la publish)
sa inteleg ca implementarea lui QOS0 nu e chiar bug-less??

ma tot uit prin documentatii si am ametit, deja un mai stiu care e capul si care e coada
daca nu-ti e greu, da-mi si mie te rog, un exemplu de informatie ce trebuie publicata de un senzor la activare/dezactivare
incerc sa detectez asta din log-uri dar sunt atat de stufoase ca ma pierd in ele

am gasit un esp, bag si RN-ul in curand in teste

danke
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Ca sa trimit modificarea unei intrari, am bucatile astea de cod:
- "construiesc" mesajul:
Cod:
       sendLen = myIos[i].BuildSensorMessage(sendBuff, ROCRAIL);
- il public in "rocnet/sr"(sensor report):
Cod:
        mqttClient.publish("rocnet/sr", (const uint8_t *) sendBuff, sendLen);

Iar mesajul il "construiesc" cu:
Cod:
<i>
</i>#define RN_GROUP_SENSOR        8
#define RN_SENSOR_REPORT       1

uint8_t RNIOClass::BuildSensorMessage(uint8_t *mess, uint16_t dest){
  uint8_t nrBytes = RN.BuildHeader(mess, dest); //build the general header (same for all messages I send)

  mess[nrBytes++] = RN_GROUP_SENSOR; //sensor group
  mess[nrBytes++] = RN_SENSOR_REPORT; //code
  uint8_t sendDataLen = 4;
  mess[nrBytes++] = sendDataLen; //data length
  mess[nrBytes++] = 0; //addrH - ¹) Address of the reporting loco ??
  mess[nrBytes++] = 0; //addrL - ¹) Address of the reporting loco ??
  mess[nrBytes++] = State; //status
  mess[nrBytes++] = Addr; //== port number
  
  return(nrBytes);
}
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
tnx man
daca o sa imi vina "transpiratia" (adica in cazul in care se trezeste piticul turbat ce-l am pe creier) si o sa am si ceva timp, poate o sa incerc sa fac ceva de capul meu, cu biblioteca de la adafruit si modelul tau
iti dai seama ca o sa te mai bat la cap, da? :D

ca o sa ma fac de ras, asta e clar, dar macar tine lumea minte ca a fost unu pe aici (io adica) ce spunea/facea prostii (in public) :D :D :D

pana una alta, am facut "replace" la un "dagnall" cu un "liviu"
in primele 15 minute de alergat fierataniile pe sine n-am avut nici o eroare
in acelasi interval de timp, un dagnall a dat doua erori (testul este inca in derulare, next level va fi cu doua "liviu") :lautar:
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Salut,

vezi ca tocmai am uploadat o varianta cu un "pseudo QOS1" - pentru ca mosquitto retransmite mesajele pe care i le trimite RN, RN repeta ultimul mesaj (de senzori) pana primeste un "ecou" cu acelasi mesaj.
Acum, cand scriu, imi dau seama ca probabil am facut o aiureala, mai trebuie sa sap la ea, da' e un inceput.

Spor,
Liviu
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
salut Liviu,

am o eroare la compilare, la ultima versiune, 0.49
Cod:
Arduino: 1.8.1 (Windows 7), Board: "Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None"

C:\Users\SeB\Documents\Arduino\RNMqttv4\RNMqttv4.ino: In function 'void loop()':

RNMqttv4:249: error: 'class RNIOClass' has no member named 'SendState'

            myIos[i].SendState = true;

                     ^

RNMqttv4:262: error: 'class RNIOClass' has no member named 'SendState'

     if(myIos[i].SendState){ //

                 ^

RNMqttv4:263: error: 'class RNIOClass' has no member named 'SendState'

        myIos[i].SendState = false;

                 ^

exit status 1
'class RNIOClass' has no member named 'SendState'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.


LATER EDIT:
NU MAI AM EROAREA, nu bagasem noua versiune ca librarie, d-aia aparea eroarea aia!
tnx!
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Salut,

desi functional n-am modificat prea mult, am restructurat codul si l-am facut (sper eu) mai usor de citit. Ca de obicei, ultima varianta e (si) pe github.

Liviu
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
Salut Liviu,

am pus ultimul RN pe un esp
ca si raportare pare sa mearga la fel ca si celalalt, mai vechi putin, adica nu am intalnit probleme pana acum
am insa o mica problema:
am pus 5 pini de input
Cod:
byte ioPins[] = {5,4,13,12,14}; //the ESP ports used

si
Cod:
#define IOS_NR      5

iar apoi am intrat in rocnetnode setup si am setat primii 5 pini ca si input
am legat doar primii 3 pini in layout dar am o problema cu inputul 3 (adica pinul 13, ca ordonanta, cu ghinion) :D
il seteaza ca input dar nu pastreaza setarea
dupa fiecare oprire/pornire a esp-ului setarea input-ului 3 revine la starea de "output"
nu mai retin daca pinul 4 a fost sau nu input de la inceput. acolo am mereu input dar cu un delay de 65ms pe care, tot asa, il vad pus acolo dupa fiecare pornire

ID-ul nodului s-a salvat (din default 11)
primele doua inputuri merg ok

intrebare: nu ar fi mai simplu daca s-ar declara din cod atat ID-ul (cel putin cel initial), IP-ul si starea pinilor? cel putin ca valori/setari initiale
o alta chestie care mi-a placut la proiectul lui Ellard e ca baga adresa ca fiind aceeasi cu IP-ul (ultima grupa din IP), parca e mai simplu si mai usor de gestionat

altfel, raportarea senzorilor pare sa fie ce trebuie
acum am doua esp-uri RN care gestioneaza 5 senzori si inca unul "dagnall" cu 2 senzori
il modific si pe ala in RN curand si apoi incep testarile mai serioase, 4-5 trenuri pe 6-7 blocuri
cam de joi incolo o sa fiu mai liber, cred

multumesc
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Salut Seba,
am o problema cu inputul 3 (adica pinul 13, ca ordonanta, cu ghinion) :D
il seteaza ca input dar nu pastreaza setarea
ciudat, m-am jucat week-endul asta cu (pana la) 8 porturi (cu Launchpad-ul, e drept) si de la versiunea
V0.53 - Changed the place for EEPROM indexes define.
- Fixed a bug (wrong index) in EEPROM write of the channel config data.
n-am mai avut nici o problema de genul asta. Pana atunci pateam ceva similar cu ce patesti tu, numai ca atunci cand incercam sa configurez iesirile ca servo-uri.
Ce e si mai ciudat e ca porturile sunt configurate implicit ca intrari.
O sa mai verific si eu, dar am sa te rog sa:
1. verifici si tu ca ai ultima varianta (sau o varianta mai noua de 0.53)
2. sa resetezi EEPROM-ul (cum scrie si in wiki):
- faci true variabila
Cod:
boolean bForceInit = true;
- recompilezi
- reprogramezi
- pornesti modulul
- faci
Cod:
boolean bForceInit = false;
- recompilezi, reprogramezi, repornesti modulul.

N-am inteles ce vrei sa zici cu
daca s-ar declara din cod atat ID-ul (cel putin cel initial), IP-ul si starea pinilor?
Modulul are o stare "implicita"(vezi si wiki-ul)- board ID = 11, toate porturile intrari cu pull-up. Numai ca initializarea asta e valabila pana la prima configurare din Rocrail, dupa care configuratia din Rocrail ramane chiar si la reprogramarea "normala"
Reprogramarea modulului fara o stergere prealabila (completa, cu esptool.py sau prin reinititalizarea fortata, ca mai sus) lasa EEPROMUL nemodificat, asa casi dupa reprogramare "simpla" modulul isi pastreaza configuratia avuta inainte de reprogramare.

Referitor la IP pe post de board id, nu sunt inca sigur ca e mai bine, das sunt dispus sa ma razgandesc. :D
Pe de o parte vreau sa las libertatea de programare din Rocrail, pe de alta nu stiu ce se intampla daca iau IP-ul prin DHCP (cum e acum cu varianta pentru ESP).
Desi daca ma gandesc mai bine pare o modificare rezonabila. Ma mai gandesc.
Oricum, daca vrei poti s-o implementezi singur - modifici (ultima linie):
Cod:
  /*
   * No/wrong data in EEPROM or eeprom write forcing
   */
  if(bEeProgrammingNeeded || bForceInit){
     bEeProgrammingNeeded = false;
     if(bSerialOk){
       Serial.println(F("Write the eeprom"));
     }
     //write the boards parameters in the eeprom
     RN.Init();  //init the board with the default address (11)
in
Cod:
  /*
   * No/wrong data in EEPROM or eeprom write forcing
   */
  if(bEeProgrammingNeeded || bForceInit){
     bEeProgrammingNeeded = false;
     if(bSerialOk){
       Serial.println(F("Write the eeprom"));
     }
     //write the boards parameters in the eeprom
     RN.Init(subIpL);  //init the board with the IP as the address

Cu iesirile te-ai jucat?

Spor,
Liviu
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
thanks,

inca nu m-am jucat cu iesirile
pe moment am 4 macazuri cu decodoare dcc attiny85 care merg aproape perfect (spun aproape pentru ca in vreo saptamana de teste doar de vreo 4-5 ori s-a intamplat sa nu se schimbe macazul - insa nu sunt sigur ca nu era altceva de vina, ceva prin rocrail la rute, pentru ca la actionari manuale au mers perfect)
si a mai fi avantajul ca fiind dcc le pot comanda si din Mobile Station 2

am inteles, o sa il bag din nou in fire si ii sterg eepromul
revin dupa aia cu feedback - insa nu stiu cand o sa mai reusesc

o intrebare: daca se depinde asa de mult de stergerea eepromului nu s-ar putea face stergerea acestuia in mod automat dupa fiecare compilare a codului in esp, la prima pornire?
sau ceva "imprumutat" de la dagnall, cu stergerea la "update" rocnode, cand bagi 0000 parca in tabul "Update" :)

testez si revin, dar nu stiu daca azi
tnx
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
da man, dupa stergerea eeprom-ului totul e perfect
a vazut din prima 5 input-uri, e curat si frumos :)
tnx
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Salut Seba,

Teoretic stergerea/reoprogramarea nu e necesara decat in cazul in care modific eu alocarile eepromului. In rest, cel mai simplu "reset" e prin reprogramarea porturilor ca intrari (codul meu de reset asta face, face porturile intrari si pune 0 in toate celelalte locatii).
Daca n-am (si alte) buguri prin cod, ar trebui sa fie suficient.
Din pacate nu stiu nici o metoda sa sterg/scriu ceva in eeprom la programare. In orice caz, nu din IDE-ul arduino. La PIC-uri merge (si stiu si cum), la Launchpad nu stiu nici la el. Si fara sa pot altera continutul eepromului (sau sa-l sterg direct), nu pot salva nici informatia "proaspat ars".
Ar fi o varianta sa implementez metoda lui Dagnall, dar intra deja la fineturi.
sebba a spus:
si a mai fi avantajul ca fiind dcc le pot comanda si din Mobile Station 2
Asta am zis si eu la inceput, da' dupa ce-am mai vorbit am ramas cu senzatia ca tu de fapt n-ai MS2, ci o emulezi cu Raspi. Si daca Raspi tot merge...

Mai vorbim,
Liviu

PS Am inceput sa scriu mesajul asta de vreo ora, da' intre timp am avut ceva treaba si am luat o pauza. Intre timp a mai aparut un post (cu "Merge" :D), da' nu mai stau sa modific, ca iarasi nu mai apuc sa postez.
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
Man, e perfect.
Unde merge nu pune mâna, zice o vorbă din bătrâni... :D

O să testez și cu ieșirile, poate revin la varianta cu un esp in macaz și care să gestioneze și senzorii din apropiere

De joi o să fiu mai liber, intru în convalescență post-operatorie. Nimic grav, doar trecut de 40, fac implant de cristalin... Că nu mai văd bine in H0! :D :D

Baftă
 

sebba

Active Member
18 Ianuarie 2017
56
0
Arad
LOCATION
Arad
ah, si da, am si MS2
RPI-ul e doar pe post de CS2 prin care se leaga si rocrail-ul
tot pe RPI mai ruleaza mosquitto si serverul rocrail

(alta) intrebare: :D
la intrari am vazut cum se aloca pinii dar la iesiri cum e?
adica, in cazul meu, am pus intrari pe 5,4,13,12,14 (parca asta era ordinea) si stiu ca ma duc cu semnalul catre acel pin de la esp
dar iesirile cum le declar? cu ce pini ai testat pana acum in/out-urile?
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Nu stiu daca am inteles intrebarea.
Un port poate fi intrare sau iesire, dupa cum il programezi din meniul PI02.
Daca-l programezi intrare si te joci cu un buton (un senzor), modulul trimite la Rocral mesajul corespunzator. Daca le-ai imperecheat bine, un simbol de senzor se aprinde in plan.
In mod similar, cand programezi portul ca iesire, daca-l "conectezi" cu un macaz:
- programezi bus ID la macaz = busID-ul modulului (implicit 11)
- adresa macazului o pui numarul portului transformat in iesire
- bifezi single gate (parca, verific si adaug si in wiki),
cand schimbi pozitia macazului in plan, se schimba si starea iesirii pe modulul fizic.

LE: Am senzatia ca in Rocrail poti defini si alte "accesorii" pe care sa le folosesti ca sa comuti iesiri, da' inca nu le-am testat.

Parca am mai zis, eu am testat cu Launchpad-ul ca are 4 LED-uri si 2 butoane. Cu butoanele am simulat senzorii, cu LED-urile iesirile - le-am aprins si stins din Rocrail.

In week-end am testat si un servo - l-am legat la +5V, GND si un pin oarecare (Launchped) si l-am invartit cu comenzi din Rocrail. Din pacate inca nu functioneaza cum trebuie.

Sanatate maxima si recuperare rapida si usoara!