Ik krijg op regel 17 een authenticatie succes van de server, maar daarna krijg ik inderdaad nog een "stream features" terug als ik verder wil gaan. Of ben ik misschien al helemaal klaar met connecten, en kan ik een verzoek gaan inschieten?kraades schreef op zaterdag 09 januari 2016 @ 22:27:
Goed om nog een php versie voorbij te zien komen. Zou natuurlijk mooi zijn om de code ook te zien.![]()
Ik heb er niet veel verstand van maar de server lijkt nog "stream features" terug te sturen?
http://xmpp.org/extensions/xep-0198.html#feature
Je krijgt de success niet terug van de server.
When life gives you lemons, start a battery factory
Je kunt het proberen, maar ik denk niet dat het werkt. De server wil een stream opzetten met een aantal features, en de client volgt dat. In de Node.js code regelt node-xmpp-client dat allemaal, daar hoef ik verder niks voor te doen.KabouterSuper schreef op zondag 10 januari 2016 @ 11:44:
Ik krijg op regel 17 een authenticatie succes van de server, maar daarna krijg ik inderdaad nog een "stream features" terug als ik verder wil gaan. Of ben ik misschien al helemaal klaar met connecten, en kan ik een verzoek gaan inschieten?
Dit is wat er allemaal gebeurt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| xmpp:client:session start socket connection xmpp:connection setup socket xmpp:connection use lazy socket xmpp:connection setup stream xmpp:connection send: <stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" to="wa2-mz36-qrmzh6.bosch.de"> xmpp:connection receive: <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="wa2-mz36-qrmzh6.bosch.de" id="df9f5c48" xml:lang="en" version="1.0"> xmpp:connection receive: <stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism></mechanisms><auth xmlns="http://jabber.org/features/iq-auth"/></stream:features> xmpp:connection send: <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> xmpp:connection receive: <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> xmpp:connection use standard socket xmpp:connection setup stream xmpp:connection send: <stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" to="wa2-mz36-qrmzh6.bosch.de"> xmpp:connection receive: <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="wa2-mz36-qrmzh6.bosch.de" id="df9f5c48" xml:lang="en" version="1.0"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism></mechanisms><auth xmlns="http://jabber.org/features/iq-auth"/></stream:features> xmpp:connection send: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"></auth> xmpp:connection receive: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">...</challenge> xmpp:connection send: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">...</response> xmpp:connection receive: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl">...</success> xmpp:connection send: <stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" to="wa2-mz36-qrmzh6.bosch.de"> xmpp:connection receive: <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="wa2-mz36-qrmzh6.bosch.de" id="df9f5c48" xml:lang="en" version="1.0"><stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> xmpp:connection send: <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/> xmpp:connection receive: <iq type="result" id="bind" to="wa2-mz36-qrmzh6.bosch.de/df9f5c48"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>rrccontact_MYSERIAL@wa2-mz36-qrmzh6.bosch.de/df9f5c48</jid></bind></iq> xmpp:connection send: <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/> xmpp:connection receive: <iq type="result" id="sess" from="wa2-mz36-qrmzh6.bosch.de" to="rrccontact_MYSERIAL@wa2-mz36-qrmzh6.bosch.de/df9f5c48"/> xmpp:connection send: <presence/> xmpp:connection send: <message from="rrccontact_MYSERIAL@wa2-mz36-qrmzh6.bosch.de" to="rrcgateway_MYSERIAL@wa2-mz36-qrmzh6.bosch.de"><body>GET /ecus/rrc/uiStatus HTTP/1.1&#13; User-Agent: NefitEasy&#13; &#13; </body></message> xmpp:connection receive: <message to="rrccontact_MYSERIAL@wa2-mz36-qrmzh6.bosch.de/df9f5c48" type="chat" xml:lang="en" from="rrcgateway_MYSERIAL@wa2-mz36-qrmzh6.bosch.de/RRC-RestApi"><body>HTTP/1.0 200 OK Content-Length: 640 Content-Type: application/json connection: close ...</body></message> xmpp:connection send: </stream:stream> xmpp:connection receive: </stream:stream> |
Maar ik zie dat je een bind doet op de plek waar ik het niet meer weet. Dit stap zit er bij mij niet op dezelfde manier in. Dat ga ik dus eens proberen.
When life gives you lemons, start a battery factory
👉🏻 Blog 👈🏻
[ Voor 9% gewijzigd door Shapeshifter op 10-01-2016 16:08 ]
HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m
Het is idd wel een aandachtspunt..
nieuws: Nest kampte met grote storing wereldwijd
[ Voor 66% gewijzigd door technorabilia op 10-01-2016 16:25 ]
👉🏻 Blog 👈🏻
Nee, XMPPHP. JAXL zat vol met dingen die mij overbodig leken, en XMPPHP doet tot dusver alles wat ik nodig heb, en niet veel meer.kraades schreef op zondag 10 januari 2016 @ 14:46:
Welke client gebruik je? JAXL?
Maar ik ben al weer een stukje verder. De authenticatie en binding werkt nu goed (ik miste in het begin mijn starttls-request). Ik ben nu klaar om mijn eerste request te sturen.....to be continued.
When life gives you lemons, start a battery factory
Ben benieuwd naar je verdere bevindingen. Succes!
👉🏻 Blog 👈🏻
Je krijgt toch een 500 error? Eventueel kan ik in de "reason phrase" (die nu op "Internal Server Error" staat) de naam van de error zetten, als dat handig is.Vaez schreef op maandag 11 januari 2016 @ 12:39:
Zou het mogelijk zijn dat het timeout commando van de web server een http error terug geeft ipv alleen een stack trace. Dit maakt het wat eenvoudiger om in het geval van een timeout dit netjes af te handelen.
Die timeout error wordt gegenereerd als de Nefit backend niet binnen X seconden een antwoord geeft op een request. Dat kan gebeuren als er meerdere clients actief zijn, het lijkt erop dat de backend dan niet elk request beantwoordt. Je kunt daarna weer gewoon een nieuw request opsturen, je hoeft niet te wachten.Vaez schreef op maandag 11 januari 2016 @ 15:12:
Dan zou ik daar inderdaad wel op kunnen checken, overigens een 500 error wordt ook opgegooid meestal als er iets anders mis is. Ik denk dat ik de timeout tijd gewoon korter moet zetten en dan de 500 moet afvangen. Wat doet de --timeout nou precies? Kapt deze jou request naar de web server af of het request van de web server naar nefit? En in het geval dat je deze timeout krijgt kan ik er dan zo goed als vanuit gaan dat de volgende call weer werkt of beter een tijdje geen calls uitvoeren dan?
Overigens wordt dit in de meest recente versies van nefit-easy-* beter afgehandeld en zal de hoeveelheid timeouts die je krijgt een stuk lager zijn dan voorheen.
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Ik niet, alhoewel ik vermoed dat het op dezelfde manier werkt als hoe de app met de backend communiceert (namelijk via XMPP).Icekiller2k6 schreef op maandag 11 januari 2016 @ 16:45:
Ivm dat dit werkt via de cloud.. iemand die al geprobeerd heeft de data van thermostaat te capturen naar de server en dan deze na te bootsen?
De manier waarop ik de communicatie tussen app en backend capture is door middel van XMPPloit. Het werkt wel een beetje omslachtig:
- Ik stel m'n Mac in als WiFi-hotspot (System Preferences > Sharing)
- Ik stel m'n iPhone in zodat ie gebruik maakt van dat WiFi-netwerk
- Ik stel de firewall op m'n Mac in zodat al het verkeer met target poort 5222 (XMPP) dat via het WiFi-hotspot verstuurd wordt, geredirect wordt naar de lokale poort 5222
- Op de lokale 5222 draai ik XMPPloit, die verbinding maakt met de backend
Precies dezelfde werkwijze zou ik ook kunnen gebruiken voor de Easy zelf, die moet ik dan zo instellen dat ie dat adhoc WiFi netwerk gebruikt ipv mijn gewone netwerk. Als ik binnenkort een keer niks te doen heb zal ik daar eens naar kijken.
Ik bedenk overigens dat het waarschijnlijk een stuk makkelijker kan: in m'n DHCP server zou ik kunnen instellen dat mijn lokale Linux-server als (primary) DNS gebruikt moet worden, en daar kan ik verkeer richting de Nefit/Bosch backend kunnen ombuigen naar localhost door 127.0.0.1 terug te geven ipv het IP-nummer van de backend zelf. Ook iets om uit te proberen.
Dat eerste ben ik benieuwd of dat gaat werken. Ik heb wel eens een WiFi-dimmer lopen sniffen met Wireshark, daarvoor moest ik het verkeer wel kunnen onderscheppen. Een WiFi-hotspot gemaakt door m'n Windows 7 PC werkte toen niet. M'n telefoon zag dat ad-hoc netwerk niet volgens mij.brightvalve schreef op dinsdag 12 januari 2016 @ 11:28:
[...]
Precies dezelfde werkwijze zou ik ook kunnen gebruiken voor de Easy zelf, die moet ik dan zo instellen dat ie dat adhoc WiFi netwerk gebruikt ipv mijn gewone netwerk. Als ik binnenkort een keer niks te doen heb zal ik daar eens naar kijken.
Ik bedenk overigens dat het waarschijnlijk een stuk makkelijker kan: in m'n DHCP server zou ik kunnen instellen dat mijn lokale Linux-server als (primary) DNS gebruikt moet worden, en daar kan ik verkeer richting de Nefit/Bosch backend kunnen ombuigen naar localhost door 127.0.0.1 terug te geven ipv het IP-nummer van de backend zelf. Ook iets om uit te proberen.
Uiteindelijk een oude router ingezet als accespoint en die aan 2e netwerkkaart in m'n PC verbonden. Netwerkbrug ingesteld in Windows 7 en op die manier kon ik het verkeer wel onderscheppen.
Heb ook een OpenWRT router waar ik de tweede methode die je beschrijft had kunnen proberen, maar mijn netwerkkennis is daar onvoldoende voor.
[ Voor 72% gewijzigd door ThinkPad op 12-01-2016 11:56 ]
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Dat werkt in ieder geval voor de app op m'n iPhone, en ik vermoed dat het ook voor de Easy zelf zal werken, tenzij die hardcoded DNS-servers gebruikt (ik meen namelijk dat je op het apparaat geen DNS kunt instellen).brightvalve schreef op dinsdag 12 januari 2016 @ 11:28:
Ik bedenk overigens dat het waarschijnlijk een stuk makkelijker kan: in m'n DHCP server zou ik kunnen instellen dat mijn lokale Linux-server als (primary) DNS gebruikt moet worden, en daar kan ik verkeer richting de Nefit/Bosch backend kunnen ombuigen naar localhost door 127.0.0.1 terug te geven ipv het IP-nummer van de backend zelf. Ook iets om uit te proberen.
Dan moet je het wel kunnen forceren met een redirect-rule op/in je firewall: http://unix.stackexchange...c-dns-provider-at-networkbrightvalve schreef op dinsdag 12 januari 2016 @ 12:55:
[...]
Dat werkt in ieder geval voor de app op m'n iPhone, en ik vermoed dat het ook voor de Easy zelf zal werken, tenzij die hardcoded DNS-servers gebruikt (ik meen namelijk dat je op het apparaat geen DNS kunt instellen).
Dat lijkt niet eens nodig te zijnThinkPadd schreef op dinsdag 12 januari 2016 @ 13:39:
Dan moet je het wel kunnen forceren met een redirect-rule op/in je firewall: http://unix.stackexchange...c-dns-provider-at-network
*: mijn Vigor router heeft iets genaamd 'LAN DNS' waarmee je kunt instellen dat de ingebouwde DNS-server voor bepaalde hostnames/domeinnamen een bepaald IP-nummer moet teruggeven. Ik laat 'em requests voor de backend op die manier verwijzen naar m'n Mac waar XMPPloit op draait als mitm.
Hieronder de code tot nu toe.
$message is het antwoord van Bosch,
$accessKey is het serial nummer (aangepast naar aanleiding van reactie hieronder. Credits: brightvalve),
$privatePassword is je eigen wachtwoord
De accessKey en wachtwoord zijn niet geprefixed of suffixed.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $message="..."; $accessKey="..."; $privatePassword="..."; $magicKey='58f18d70f667c9c79ef7de435bf0f9b1553bbb6e61816212ab80e5b0d351fbb1'; $magicKey=pack('H32',$magicKey); $inputKey=md5(utf8_encode($accessKey).$magicKey).md5($magicKey.utf8_encode($privatePassword)); //fout $inputKey=pack('H32',$inputKey); $inputKey=pack('H*',$inputKey); //[aangepast naar aanleiding van reactie hieronder. Credits: brightvalve] include 'AES.php'; //http://aesencryption.net/ $inputText = $message; $blockSize = 256; $aes = new AES($inputText, $inputKey, $blockSize); $aes->setData($message); $dec=$aes->decrypt(); echo "After decryption: ".$dec."\n"; |
Klopt mijn inputKey? Moet ik misschien toch prefixen of suffixen? Of ga ik de mist in met de stringrepresentatie versus de binaire representatie? Is er iemand die wil kijken of de berichten van nefit via http://aesencryption.net/ goed gedecrypt kunnen worden? Dit zou in elk geval bevestigen dat de AES-decryptie in php goed zou werken. Wat het testen moelijk maakt is dat als ik de inputKey kopieer van mijn scherm naar aesencryption.net/ dat de karakterset opeens heel belangrijk wordt in verband met de vreemde tekens.
[ Voor 4% gewijzigd door KabouterSuper op 13-01-2016 16:42 . Reden: Antwoorden van brightvalve ]
When life gives you lemons, start a battery factory
Ik neem aan dat je alleen de body bedoelt, en dat die al base64-decoded is?KabouterSuper schreef op woensdag 13 januari 2016 @ 13:40:
$message is het antwoord van Bosch,
Dat klopt niet, dat moet de "toegangscode" (of hoe dat ding ook heet) zijn. Je hebt een serienummer én een toegangscode, en daarnaast je eigen ingestelde wachtwoord.$accessKey is het serial nummer
Ik weet niks van PHP, maar "H32" klinkt vreemd. Moet dat niet "H*" zijn (of op z'n minst "H64")? De lengte van de byte-array die je nodig hebt moet in ieder geval 32 zijn.PHP:
1 2 $magicKey='58f18d70f667c9c79ef7de435bf0f9b1553bbb6e61816212ab80e5b0d351fbb1'; $magicKey=pack('H32',$magicKey);
Ja, ik bedoel de body. de body hoeft volgens mij niet ge-base64-decode-ded worden, omdat dit al in de AES-decryptie gebeurt (regel 149 van de php-code op http://aesencryption.net/).brightvalve schreef op woensdag 13 januari 2016 @ 13:57:
[...]
Ik neem aan dat je alleen de body bedoelt, en dat die al base64-decoded is?
My bad, een foutje in de tekst. In de code zat het wel goed.brightvalve schreef op woensdag 13 januari 2016 @ 13:57:
[...]
Dat klopt niet, dat moet de "toegangscode" (of hoe dat ding ook heet) zijn. Je hebt een serienummer én een toegangscode, en daarnaast je eigen ingestelde wachtwoord.
Je hebt gelijk. Ik had "H32" ook gebruikt bij de authenticatie, en dat werkte goed. Maar in dit geval is de string natuurlijk twee keer zo lang, omdat er twee md5-string aan elkaar geplakt worden.brightvalve schreef op woensdag 13 januari 2016 @ 13:57:
[...]
Ik weet niks van PHP, maar "H32" klinkt vreemd. Moet dat niet "H*" zijn (of op z'n minst "H64")? De lengte van de byte-array die je nodig hebt moet in ieder geval 32 zijn.
Maar helaas krijg ik nog steeds onzin terug.
When life gives you lemons, start a battery factory
Misschien kun je in de nodejs code wat debug messages zetten zodat je e.e.a. kan vergelijken en/of aan http://aesencryption.net/ kunt voeren?KabouterSuper schreef op woensdag 13 januari 2016 @ 16:40:
Maar helaas krijg ik nog steeds onzin terug.
https://github.com/robert...ter/lib/encryption.js#L44
Edit:
E.e.a. geprobeerd maar ik krijg de nodejs output niet in lijn met aes.php...
[ Voor 10% gewijzigd door technorabilia op 13-01-2016 17:35 ]
👉🏻 Blog 👈🏻
Als je Node.js draait (of installeert) zou je encryption.js kunnen downloaden naar een directory en daar mee spelen, bv door op strategische plaatsen wat data de console.log'en (maakt alleen gebruik van de standaard Node.js library dus je hoeft er niet nog extra modules voor te installeren).KabouterSuper schreef op woensdag 13 januari 2016 @ 16:40:
Maar helaas krijg ik nog steeds onzin terug.
Dan kun je dat naast je PHP code houden om te zien welke acties wel, en wel nog niet goed werken.
Voorbeeldscript:
1
2
3
4
5
6
7
8
9
10
| const Encryption = require('./encryption'); const crypt = Encryption(NEFIT_SERIAL_NUMBER, NEFIT_ACCESS_KEY, NEFIT_PASSWORD); // Chat key (byte-array) console.log('CHAT KEY :', crypt.keys.chat.toString('hex')); // Decrypt Base64-encoded data. const data = 'BASE 64 STRING HIER'; const buffer = new Buffer(data, 'base64'); console.log('DECRYPTED :', crypt.decrypt(buffer) ); |
EDIT: hier een werkende PHP-versie om data te decrypten (ik ben blij dat ik nooit iets in PHP hoef te doen, het zal voor PHP-devs vast heel logisch zijn om MCRYPT_RIJNDAEL_128 te moeten gebruiken om AES-256 te decrypten, maar voor mij niet...)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $magicKey = pack("H*", "58f18d70f667c9c79ef7de435bf0f9b1553bbb6e61816212ab80e5b0d351fbb1"); function generateKey($magicKey, $id_key_uuid, $privatePassword) { return md5($id_key_uuid . $magicKey, true) . md5($magicKey . $privatePassword, true); } function decrypt($message, $magicKey, $accessKey, $privatePassword) { // Generate the key. $key = generateKey($magicKey, $accessKey, $privatePassword); // Decrypt the (base64-encoded) message. // Apparently, AES-256 requires the use of MCRYPT_RIJNDAEL_128 for some reason... return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($message), MCRYPT_MODE_ECB); } |
En hier een versie die OpenSSL gebruikt (ziet er een stuk logischer uit):
1
2
3
4
5
6
7
| function decrypt($message, $magicKey, $accessKey, $privatePassword) { // Generate the key. $key = generateKey($magicKey, $accessKey, $privatePassword); // Decrypt the message. return openssl_decrypt($message, "aes-256-ecb", $key, OPENSSL_ZERO_PADDING); } |
[ Voor 60% gewijzigd door brightvalve op 13-01-2016 20:27 ]

Wat is eigenlijk het commando om te zien of hij aan het verwarmen is? Kan het zo niet vinden? of zie ik iets over het hoofd.
In de uitvoer van easy status (of .status() als je nefit-easy-commands direct gebruikt) staat het veld "boiler indicator", die heeft één van de volgende waarden: "central heating", "hot water" en "off". Daarmee kun je zien waar je ketel nu mee bezig is.sweebee schreef op woensdag 13 januari 2016 @ 22:25:
Wat is eigenlijk het commando om te zien of hij aan het verwarmen is? Kan het zo niet vinden? of zie ik iets over het hoofd.
Ik heb nu bezig met een plugin voor Homebridge. Dat werkt inderdaad wel heel erg gaafsweebee schreef op woensdag 13 januari 2016 @ 22:25:
Heel vet dit! Heb 't houtje-touwtje aan de praat gekregen met pimatic en homekit.
Zodra het een beetje fatsoenlijk werkt zal ik het wel op Github zetten.
Bij deze.
EDIT: duh, er bestond al een Easy plugin voor Homebridge!
[ Voor 20% gewijzigd door brightvalve op 14-01-2016 12:01 ]
When life gives you lemons, start a battery factory
Het is me niet helemaal duidelijk of je nu al kunt decrypten of niet (en wat het daadwerkelijke probleem isKabouterSuper schreef op donderdag 14 januari 2016 @ 11:31:
Weer even een update: het probleem blijkt niet in de AES-decryptie zelf te zitten. Ik heb node.js geinstalleerd, en daarmee de boel gecheckt. De php-versie geeft (en gaf al die tijd) dezelfde output als dat de node.js versie doet. Kortom, ik ga een dezer dagen op zoek naar het echte probleem.
Ik heb nog steeds geen leesbare outputbrightvalve schreef op donderdag 14 januari 2016 @ 11:58:
[...]
Het is me niet helemaal duidelijk of je nu al kunt decrypten of niet (en wat het daadwerkelijke probleem is).
When life gives you lemons, start a battery factory
Ah, dus de decryptie in Node.js werkt ook niet voor je?KabouterSuper schreef op donderdag 14 januari 2016 @ 14:00:
Ik heb nog steeds geen leesbare outputMaar in elk geval geeft de decryptie in node.js dezelfde output als php. Dus technisch gezien is het gelukt om de decrypt werkend te krijgen. Waar het fout gaat weet ik niet. Wellicht gebruik ik ergens het serialnr in plaats van het wachtwoord of iets dergelijks.
Klopt als een bus. Maar in elk geval bevestigde dit dat de php-versie goed werkt. Dus ik kan nu mijn energie focussen op de input, in plaats van me zorgen te maken of de decryptie wel goed werkt.brightvalve schreef op donderdag 14 januari 2016 @ 14:02:
[...]
Ah, dus de decryptie in Node.js werkt ook niet voor je?
When life gives you lemons, start a battery factory
Als parameters gebruik ik: /share/MD0_DATA/.qpkg/NefitEasyHttpServer/bin/easy-server --host=0.0.0.0 --timeout=10
De preciese error is: Error: REQUEST_TIMEOUT at null. (/share/MD0_DATA/.qpkg/NefitEasyHttpServer/node_modules/nefit-easy-core/lib/index.js:109:23) at Timer.listOnTimeout (timers.js:92:15)
[ Voor 13% gewijzigd door Vaez op 14-01-2016 22:53 ]
Je moet ff de nieuwste versie installeren, daarmee is de hoeveelheid timeouts een stuk minder.Vaez schreef op donderdag 14 januari 2016 @ 22:45:
Ik heb een virtueel device gemaakt op mijn fibaro home center 2 die de temperatuur en nog wat meer informatie toont. Maar heb al meerdere keren gehad dat de http server alleen nog maar timeouts terug geeft.
Dat klopt, maar ik vermoed dat je niet opnieuw npm install hebt gedraaid. De timeout foutmelding laat zien dat er een oude versie van nefit-easy-core gebruikt wordt.Vaez schreef op donderdag 14 januari 2016 @ 23:36:
Hoi ik gebruik de laatste revisie van de master branch van https://github.com/robertklep/nefit-easy-http-server dat is toch de nieuwste?
Overigens publiceer ik alles ook naar de NPM repository, je hebt de GH repo niet echt nodig (over het algemeen zal "master" wel werken maar het kan ook zijn dat ik dingen push die nog niet klaar zijn).
Mijn init script op de qnap checkt elke dag bij het opstarten of er een nieuwe versie is in github en haalt die dan binnen en zou install moeten draaien als er een nieuwe is, dit lijkt niet te werken nu.
Maar je raadt eigenlijk dus ook aan niet de git repo te gebruiken maar een npm repository? Want de master branch is niet altijd stable? Meestal zie je namelijk dat er gebruik gemaakt wordt van een develop branch in het geval dat code nog niet stable is.
Hoe configureer ik deze NPM repository precies? Of is npm update genoeg?
Geen idee wat daar de reden van is, ik kan die versie gewoon installeren:Vaez schreef op vrijdag 15 januari 2016 @ 01:47:
Ik denk dat je inderdaad gelijk hebt dat de nieuwe versie niet geinstalleerd is. Als ik npm list doe krijg ik namelijk npm ERR! invalid: nefit-easy-commands@1.0.4
1
2
3
4
5
| $ npm i nefit-easy-commands@1.0.4 nefit-easy-commands@1.0.4 node_modules/nefit-easy-commands |-- require-all@2.0.0 |-- bluebird@3.1.1 |-- nefit-easy-core@1.3.0 (promise-queue@2.2.2, http-string-parser@0.0.5, debug@2.2.0, node-xmpp-client@3.0.0) |
Als meerdere mensen aan een repo werken is dat wel te prefereren, maar ik neem vaak de moeite niet om elke feature in een aparte branch te implementeren. Ik zeg ook niet dat je er niet op kunt vertrouwen dat "master" niet gaat werken, meestal wijst "master" namelijk naar de laatste release (die ik overigens ook tag, dus als je per se via GH wilt installeren kun je ook tags uitchecken en de nieuwste pakken; die zijn "gegarandeerd" altijd goed).Mijn init script op de qnap checkt elke dag bij het opstarten of er een nieuwe versie is in github en haalt die dan binnen en zou install moeten draaien als er een nieuwe is, dit lijkt niet te werken nu.
Maar je raadt eigenlijk dus ook aan niet de git repo te gebruiken maar een npm repository? Want de master branch is niet altijd stable? Meestal zie je namelijk dat er gebruik gemaakt wordt van een develop branch in het geval dat code nog niet stable is.
Als je de server wilt installeren: $ npm install nefit-easy-http-server -gHoe configureer ik deze NPM repository precies? Of is npm update genoeg?
Dan komt ie waarschijnlijk ergens in /usr/local te staan. Als je dat niet wilt kun je de -g achterwege laten, dan komt de executable in de huidige directory in ./node_modules/.bin/ terecht.
Yes!!!! De basis werkt eindelijk in php :-). En eigenlijk heeft het vanaf het begin goed gewerkt. De fout zat in mijn wachtwoord. De Easy kapt wachtwoorden af op 10 tekens. En het wachtwoord dat ik gebruikte heeft 12 tekens....ik heb nooit gezien dat de laatste twee tekens genegeerd werden bij het invullen in de app.KabouterSuper schreef op donderdag 14 januari 2016 @ 14:04:
[...]
Klopt als een bus. Maar in elk geval bevestigde dit dat de php-versie goed werkt. Dus ik kan nu mijn energie focussen op de input, in plaats van me zorgen te maken of de decryptie wel goed werkt.
Ik ga van het weekend de php-code opschonen. Mocht iemand interesse hebben, laat het dan even weten. In elk geval draait het bij mij prima op mijn synology (DS216play), simpelweg via de webservice....dus geen ingewikkelde installaties nodig.
@brightvalve: heel erg bedankt voor je hulp, zonder je opmerkingen en extra code had ik niet kunnen deduceren dat het wachtwoord het enige wat fout kon zijn. Wellicht een idee om te kijken of er een commando is waarmee je je wachtwoord kunt checken. Nu komt er een nogal cryptische waarschuwing, namelijk : Error: [Syntax Error: Unexpected token ?].
When life gives you lemons, start a battery factory
Het "probleem" is dat je wachtwoord alleen gebruikt wordt om de data te ontsleutelen, niet voor authenticatie. Dus pas zodra de client is ingelogd, een request heeft gestuurd, en een response heeft teruggekregen kun je checken of het wachtwoord geldig is, en dan nog alleen maar omdat de data niet ontsleuteld kan worden (en dus geen geldige JSON oplevert).KabouterSuper schreef op vrijdag 15 januari 2016 @ 14:30:
@brightvalve: heel erg bedankt voor je hulp, zonder je opmerkingen en extra code had ik niet kunnen deduceren dat het wachtwoord het enige wat fout kon zijn. Wellicht een idee om te kijken of er een commando is waarmee je je wachtwoord kunt checken. Nu komt er een nogal cryptische waarschuwing, namelijk : Error: [Syntax Error: Unexpected token ?].
Dat was me 2 jaar geleden of zo toen ik met de Easy begon direct opgevallen.KabouterSuper schreef op vrijdag 15 januari 2016 @ 14:30:
[...]
....ik heb nooit gezien dat de laatste twee tekens genegeerd werden bij het invullen in de app.
Wel een beetje kort als dat wachtwoord de sleutel van de encryptie is vind ik.
Dat is wel zo, maar je moet ook het serienummer en de (zo te zien random) access key hebben als je daadwerkelijk iets wilt kunnen doen. Serienummer wordt wel plain text doorgestuurd, maar de access key niet.janne_nl schreef op vrijdag 15 januari 2016 @ 16:22:
Dat was me 2 jaar geleden of zo toen ik met de Easy begon direct opgevallen.
Wel een beetje kort als dat wachtwoord de sleutel van de encryptie is vind ik.
Maar als je de access key hebt, en het beginnetje van een geencrypt json-response (dat na decryptie toch wel erg vaak begint met {"id":"), dan kan je denk ik brute force het wachtwoord achterhalen (ik denk dat een rainbox table je niet gaat helpen). Natuurlijk is de access key niet voorhanden, maar anderzijds is deze niet aan te passen in de nefit easy. Dus als je eenmaal een access key hebt, kan jij gaan proberen, terwijl de eigenaar niets kan doen.brightvalve schreef op vrijdag 15 januari 2016 @ 16:49:
[...]
Dat is wel zo, maar je moet ook het serienummer en de (zo te zien random) access key hebben als je daadwerkelijk iets wilt kunnen doen. Serienummer wordt wel plain text doorgestuurd, maar de access key niet.
When life gives you lemons, start a battery factory
Ja, dat is wel zo. zeker omdat je de plaintext al aardig kunt raden, zoals je zegt. Alhoewel bruteforcen dan denk ik toch nog wel een aardige tijd zou kunnen duren, en dan moet je je afvragen of iemand die moeite wel wil nemen om bij jou thuis de thermostaat op 30 te zetten terwijl je op vakantie bent.KabouterSuper schreef op zaterdag 16 januari 2016 @ 11:39:
Maar als je de access key hebt, en het beginnetje van een geencrypt json-response (dat na decryptie toch wel erg vaak begint met {"id":"), dan kan je denk ik brute force het wachtwoord achterhalen (ik denk dat een rainbox table je niet gaat helpen). Natuurlijk is de access key niet voorhanden, maar anderzijds is deze niet aan te passen in de nefit easy. Dus als je eenmaal een access key hebt, kan jij gaan proberen, terwijl de eigenaar niets kan doen.
Dat gezegd hebbende: een wachtwoord beperken tot 10 karakters is natuurlijk gewoon slecht.
nodejs 4 staat er nu op en bij node -v laat hij ook de versie zien.
Vervolgens de easy-server geïnstalleerd en gestart:
osmc@osmc:~$ sudo bash
root@osmc:/home/osmc# npm i nefit-easy-http-server -g
/usr/local/bin/easy-server -> /usr/local/lib/node_modules/nefit-easy-http-server/bin/easy-server
nefit-easy-http-server@2.1.0 /usr/local/lib/node_modules/nefit-easy-http-server
├── docopt@0.6.2
├── cors@2.7.1 (vary@1.1.0)
├── morgan@1.6.1 (on-headers@1.0.1, basic-auth@1.0.3, depd@1.0.1, on-finished@2.3.0, debug@2.2.0)
├── body-parser@1.14.2 (bytes@2.2.0, content-type@1.0.1, depd@1.1.0, on-finished@2.3.0, http-errors@1.3.1, raw-body@2.1.5, debug@2.2.0, qs@5.2.0, type-is@1.6.10, iconv-lite@0.4.13)
├── bluebird@3.1.1
├── express@4.13.3 (escape-html@1.0.2, merge-descriptors@1.0.0, array-flatten@1.1.1, cookie@0.1.3, utils-merge@1.0.0, cookie-signature@1.0.6, methods@1.1.1, fresh@0.3.0, range-parser@1.0.3, vary@1.0.1, path-to-regexp@0.1.7, content-type@1.0.1, etag@1.7.0, parseurl@1.3.0, content-disposition@0.5.0, serve-static@1.10.0, depd@1.0.1, finalhandler@0.4.0, on-finished@2.3.0, qs@4.0.0, debug@2.2
root@osmc:/home/osmc# easy-server --serial=44fake2340311 --password=hetwachtwoord --access-key=7HgrD-fake-YEIidT9ae
HTTP server listening on http://127.0.0.1:3000
Maar als ik nu in Domoticz instel dat hij vanaf de RPi (IP=192.168.0.100) en poort 3000 de gegevens moet halen, dan krijg ik toch nog een foutmelding:
2016-01-16 23:19:14.079 Error: NefitEasy: Error getting http data!
Iemand een idee wat ik nog moet aanpassen om ermee aan de slag te kunnen?
¯\_(ツ)_/¯
M.v.Veelen schreef op zaterdag 16 januari 2016 @ 23:22:
Ik heb, omdat het op de Synology gewoon niet zo lukte allemaal, besloten om op een RPi die ik heb draaien voor OSMC daar de easy-server en nodejs op te zetten:
nodejs 4 staat er nu op en bij node -v laat hij ook de versie zien.
Vervolgens de easy-server geïnstalleerd en gestart:
osmc@osmc:~$ sudo bash
root@osmc:/home/osmc# npm i nefit-easy-http-server -g
/usr/local/bin/easy-server -> /usr/local/lib/node_modules/nefit-easy-http-server/bin/easy-server
nefit-easy-http-server@2.1.0 /usr/local/lib/node_modules/nefit-easy-http-server
├── docopt@0.6.2
├── cors@2.7.1 (vary@1.1.0)
├── morgan@1.6.1 (on-headers@1.0.1, basic-auth@1.0.3, depd@1.0.1, on-finished@2.3.0, debug@2.2.0)
├── body-parser@1.14.2 (bytes@2.2.0, content-type@1.0.1, depd@1.1.0, on-finished@2.3.0, http-errors@1.3.1, raw-body@2.1.5, debug@2.2.0, qs@5.2.0, type-is@1.6.10, iconv-lite@0.4.13)
├── bluebird@3.1.1
├── express@4.13.3 (escape-html@1.0.2, merge-descriptors@1.0.0, array-flatten@1.1.1, cookie@0.1.3, utils-merge@1.0.0, cookie-signature@1.0.6, methods@1.1.1, fresh@0.3.0, range-parser@1.0.3, vary@1.0.1, path-to-regexp@0.1.7, content-type@1.0.1, etag@1.7.0, parseurl@1.3.0, content-disposition@0.5.0, serve-static@1.10.0, depd@1.0.1, finalhandler@0.4.0, on-finished@2.3.0, qs@4.0.0, debug@2.2
root@osmc:/home/osmc# easy-server --serial=44fake2340311 --password=hetwachtwoord --access-key=7HgrD-fake-YEIidT9ae
HTTP server listening on http://127.0.0.1:3000
Maar als ik nu in Domoticz instel dat hij vanaf de RPi (IP=192.168.0.100) en poort 3000 de gegevens moet halen, dan krijg ik toch nog een foutmelding:
2016-01-16 23:19:14.079 Error: NefitEasy: Error getting http data!
Iemand een idee wat ik nog moet aanpassen om ermee aan de slag te kunnen?
Ik heb nu 3 devices ineens erbij:
Setpoint
Boiler Status
Display Code
Bij de eerste zie ik inderdaad de setpoint mee veranderen als ik de temperatuur via de app verander.
Bij de 2e zie ik "Off" en
bij de 3e zie ik "System standby" staan. Dat zou wel kunnen, want het is al laat en de CV zou nu inderdaad uit moeten staan en warm water staat nu ook uit, want er wordt 's nachts niet gedoucht. En anders zetten we het warm water eventjes aan
Morgen kijken of er wat mee te stoeien valt
Edit:
ik heb nog 3 devices erbij:
Pressure
Room temperature
Outside temperature
Edit 2:
Wat wel vreemd is: volgens de app op m'n telefoon is de CV druk 1,5 bar terwijl Domoticz aangeeft: 1,3 bar. Huh?
Edit 3: En nu is het volgens Domoticz toch ineens ook 1,5 bar
[ Voor 21% gewijzigd door M.v.Veelen op 16-01-2016 23:51 ]
¯\_(ツ)_/¯
Ik denk dat Domoticz periodiek de HTTP server pollt voor nieuwe waarden, dus er zit wat tijd tussen veranderingen die gemaakt worden aan de instellingen en het punt waarop die veranderingen zichtbaar worden.M.v.Veelen schreef op zaterdag 16 januari 2016 @ 23:38:
Wat wel vreemd is: volgens de app op m'n telefoon is de CV druk 1,5 bar terwijl Domoticz aangeeft: 1,3 bar. Huh?
Edit 3: En nu is het volgens Domoticz toch ineens ook 1,5 bar
Als ik komende week tijd heb wil ik kijken of het mogelijk is voor clients om events te ontvangen zodra een andere client een verandering heeft doorgevoerd. Op die manier zou je een meer realtime systeem kunnen bouwen.
Ik weet niet of ik vandaag nog tijd ga hebben om naar scripts e.d. te kijken, anders wordt dat komende week. Ik vind het nu al leuk om te kunnen uitlezen wat de Easy voor waardes uitspuugt naar Domoticz. Het aansturen komt op korte termijn ook nog wel
Edit: ik kom er zojuist achter dat Domoticz de hele nacht geen gegevens heeft ontvangen. Vanaf het moment dat ik m'n Macbook heb dichtgeklapt is het stil geweest. Ik heb net de server weer gestart en nu komen de gegevens weer binnen. Ehm.....huh?
[ Voor 28% gewijzigd door M.v.Veelen op 17-01-2016 10:27 ]
¯\_(ツ)_/¯
Moet ik de easy-server soms als daemon starten ofzo? Iemand een idee?
¯\_(ツ)_/¯
Ja, als je easy-server als gebruiker start dan blijft het programma actief zolang je ingelogd bent. Je kunt er een upstart init script voor maken. Zo ziet die van mij eruit:M.v.Veelen schreef op zondag 17 januari 2016 @ 14:33:
Net de Macbook weer een 2 uurtjes dichtgeklapt (heb even voetbal zitten kijken), en zie nu dat er weer geen data meer is ontvangen in de tussentijd.
Moet ik de easy-server soms als daemon starten ofzo? Iemand een idee?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
| #!/bin/sh ### BEGIN INIT INFO # Provides: # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/usr/local/bin/" cmd="easy-server --serial=12345678 --access-key=key --password=Ww --host=192.168.254.205" user="" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" if [ -z "$user" ]; then sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & else sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & fi echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` for i in {1..10} do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0 |
Als laatste nog even
1
| update-rc.d <initscript> defaults |
PSN: PcDCch
Thx!
Dat komt idd omdat je de easy server start in de ssh sessie. Als je de sessie stopt dan stopt ook de easy server.M.v.Veelen schreef op zondag 17 januari 2016 @ 14:33:
Net de Macbook weer een 2 uurtjes dichtgeklapt (heb even voetbal zitten kijken), en zie nu dat er weer geen data meer is ontvangen in de tussentijd.
Moet ik de easy-server soms als daemon starten ofzo? Iemand een idee?
Als je & achter het easy server start commando zet dan zou het door moeten blijven lopen. Althans dat is de gebruikelijke manier. Nohup ervoor zou ook nog kunnen...
👉🏻 Blog 👈🏻
Dit heb ik beide geprobeerd, maar helaas....kraades schreef op zondag 17 januari 2016 @ 18:18:
[...]
Dat komt idd omdat je de easy server start in de ssh sessie. Als je de sessie stopt dan stopt ook de easy server.
Als je & achter het easy server start commando zet dan zou het door moeten blijven lopen. Althans dat is de gebruikelijke manier. Nohup ervoor zou ook nog kunnen...
¯\_(ツ)_/¯
En beide? Nohup ... &M.v.Veelen schreef op zondag 17 januari 2016 @ 18:20:
[...]
Dit heb ik beide geprobeerd, maar helaas....
👉🏻 Blog 👈🏻
Edit:
lastig, want ik kan het script wel plaatsen in /etc/init/ maar via de CLI moet ik wel eerst het volgende commando geven, want anders werkt het niet:
export PATH=/volume1/Easy/node-v5.3.0-linux-armv7l/bin:$PATH
Daarnaast kent m'n Syno het volgende commando niet:
update-rc.d nefit-easy.conf defaults
(ik denk tenminste dat het zo moet?)
[ Voor 59% gewijzigd door M.v.Veelen op 17-01-2016 18:30 ]
¯\_(ツ)_/¯
Ja zie ik nu ook pas. Die kun je mooi gebruiken. Maar uiteindelijk maakt die ook gebruik van de &.M.v.Veelen schreef op zondag 17 januari 2016 @ 18:25:
Oh, sorry, die ook. Ik ga eens kijken of ik dan anders het startup script kan gebruiken dat hierboven door Mozart is gepost.
👉🏻 Blog 👈🏻
Hoe krijg je die centralheating zo in een Grafana graph?TrafeX schreef op zondag 10 januari 2016 @ 11:10:
Ik heb nu aardig voor elkaar wat ik wilde bereiken:
[afbeelding]
Een combinatie van InfluxDB & Grafana.
Grafieken met numerieke series is geen probleem, dat wijst zichzelf, maar measurements met specifieke waarden krijg ik niet in Grafana (waar ik overigens vandaag mee begonnen ben, dus noob
Yes, please. Ik hoor het graag. Alvast bedankt.KabouterSuper schreef op vrijdag 15 januari 2016 @ 14:30:
[...]
Ik ga van het weekend de php-code opschonen. Mocht iemand interesse hebben, laat het dan even weten.
👉🏻 Blog 👈🏻
Ik ben een behoorlijk eind, maar het is nog niet netjes genoeg naar mijn zin. Wel heb ik inmiddels synology icm domoticz draaiend (ik curl de huidige temp, de doeltemp en de buitentemperatuur via dit php-scriptje).kraades schreef op maandag 18 januari 2016 @ 18:38:
[...]
Yes, please. Ik hoor het graag. Alvast bedankt.

DM me anders even...
When life gives you lemons, start a battery factory
Goed bezigKabouterSuper schreef op maandag 18 januari 2016 @ 20:14:
[...]
Ik ben een behoorlijk eind, maar het is nog niet netjes genoeg naar mijn zin. Wel heb ik inmiddels synology icm domoticz draaiend (ik curl de huidige temp, de doeltemp en de buitentemperatuur via dit php-scriptje).
[afbeelding]
DM me anders even...
Maar ik (en denk vast nog wel meer mensen) heb interesse in je oplossing.
Dus waarom gewoon niet openbaar posten? (als je daar zelf geen problemen mee hebt.)
PS Volgens mij staat je DM uit....
Nu niet meer... kan iig weer een bericht naar je sturen.
kun je DM eigenlijk uitzetten...
[ Voor 7% gewijzigd door Tinusvolkel op 18-01-2016 21:11 ]
[ Voor 98% gewijzigd door ThaStealth op 18-01-2016 20:49 ]
Mess with the best, die like the rest
Ik wil eerst de code opgeschoond hebben. Daarbij zou ik graag ook wat documentatie/disclaimers/etc erbij schrijven, en het niet zomaar over de schutting gooien. Maar ik heb de code inmiddels naar twee mensen gestuurd om uit te proberen.Tinusvolkel schreef op maandag 18 januari 2016 @ 20:37:
[...]
Goed bezig![]()
Maar ik (en denk vast nog wel meer mensen) heb interesse in je oplossing.
Dus waarom gewoon niet openbaar posten? (als je daar zelf geen problemen mee hebt.)
When life gives you lemons, start a battery factory
In het script wat de Nefit Easy polled en data in InfluxDB zet heb ik de string waardes omgezet naar booleans:brightvalve schreef op maandag 18 januari 2016 @ 15:40:
[...]
Hoe krijg je die centralheating zo in een Grafana graph?
Grafieken met numerieke series is geen probleem, dat wijst zichzelf, maar measurements met specifieke waarden krijg ik niet in Grafana (waar ik overigens vandaag mee begonnen ben, dus noob)
https://github.com/TrafeX...b/master/index.js#L20-L26
Vervolgens heb ik 2 queries voor het ophalen van alle gegevens, 1 voor de temperaturen, deze staan op de linker Y-axis, 1 voor de aan/uit boolean waardes, deze staan op de rechter Y-axis.

Hotwater en Centralheating heb ik bars ipv lines van gemaakt, en de z-index op -3 gezet zodat deze naar de achtegrond gaat. Dit kan je instellen onder 'Display Styles' middels de 'Series specific overrides'.
Heb het inmiddels ruim 10 dagen draaien, werkt als een zonnetje! Geen last meer gehad van requests timeouts.
Op dit moment schrijf ik één measurement met een string value naar InfluxDB, maar aparte booleans is een stuk slimmer (ik vraag me af of ik ook drie queries kan gebruiken met een WHERE... helaas, dat werkt niet).TrafeX schreef op dinsdag 19 januari 2016 @ 11:38:
In het script wat de Nefit Easy polled en data in InfluxDB zet heb ik de string waardes omgezet naar booleans:
https://github.com/TrafeX...b/master/index.js#L20-L26
Vervolgens heb ik 2 queries voor het ophalen van alle gegevens, 1 voor de temperaturen, deze staan op de linker Y-axis, 1 voor de aan/uit boolean waardes, deze staan op de rechter Y-axis.
[afbeelding]
Hotwater en Centralheating heb ik bars ipv lines van gemaakt, en de z-index op -3 gezet zodat deze naar de achtegrond gaat. Dit kan je instellen onder 'Display Styles' middels de 'Series specific overrides'.
Heb het inmiddels ruim 10 dagen draaien, werkt als een zonnetje! Geen last meer gehad van requests timeouts.
Goed om te horen dat het verder goed werkt, ik heb ook geen timeouts meer
Ligt een beetje aan welke distro je erop draait.arjandijk162 schreef op woensdag 20 januari 2016 @ 20:46:
Ik heb de server gestart en het werkt perfect, wat moet ik nu doen om het ook bij een restart can mn Pi weer te laten lopen?
Ik draai Raspbian op m'n RPi, en de makkelijkste manier (IMHO) om iets na het rebooten te laten opstarten is via /etc/rc.local. Die file wordt bij het booten uitgevoerd, en vanuit daar kun je weer andere programma's uitvoeren.
Als je de server met -g hebt geïnstalleerd is de executable (denk ik) /usr/local/bin/easy-server. Om die bij het booten te starten zou je het volgende kunnen toevoegen aan /etc/rc.local (vóór de regel met exit 0):
export NEFIT_SERIAL_NUMBER=XXX export NEFIT_ACCESS_KEY=YYY export NEFIT_PASSWORD=ZZZ sudo -E -u youruser /usr/local/bin/easy-server > /var/log/easy-server.log 2>&1 &
Waarbij je youruser verandert naar je eigen username (of desnoods naar root, maar liever niet).
Ik heb het voor elkaar dat er een pid file wordt aangemaakt op de Syno, maar het monitoren lukt me nog niet helaas.
¯\_(ツ)_/¯
Heb je de kans gehad om de code al op te schonen?KabouterSuper schreef op dinsdag 19 januari 2016 @ 08:41:
[...]
Ik wil eerst de code opgeschoond hebben. Daarbij zou ik graag ook wat documentatie/disclaimers/etc erbij schrijven, en het niet zomaar over de schutting gooien. Maar ik heb de code inmiddels naar twee mensen gestuurd om uit te proberen.
Ik ben zelf bezig met een C# versie, maar mijn Javascript is nogal roestig (en ik heb nog geen Easy) testen is dus nogal lastig
Mess with the best, die like the rest
De code is opgeschoond. Ik heb alleen intussen mijn synology upgegraded naar DSM 6.0 beta 2, en in deze versie werkt de code niet meer; de XMPP connectie kan opeens niet meer aangemaakt worden! Ik heb het vermoeden dat dit te maken heeft met PHP, wat in DSM 6.0 opgehoogd is naar versie 5.6. Deze versie gaat strikter om met certificaten. De andere optie is dat het certificaat van Synology (per ongeluk) in een andere directory gezet is, en PHP dit certificaat niet meer vindt.ThaStealth schreef op maandag 25 januari 2016 @ 13:51:
[...]
Heb je de kans gehad om de code al op te schonen?
Ik ben zelf bezig met een C# versie, maar mijn Javascript is nogal roestig (en ik heb nog geen Easy) testen is dus nogal lastig
Kortom, even wat tegenslag. DM me even als je interesse hebt (hoewel je zonder Easy niet heel veel kunt zien).
update:het werkt weer met DSM 6.0 door self-signed certificates toe te laten.
[ Voor 4% gewijzigd door KabouterSuper op 26-01-2016 13:36 ]
When life gives you lemons, start a battery factory
Dat is het ip adres en poort nummer van de easy http server (in node.js door Robert Klep) die je ergens hebt draaien. Mag op de nas draaien maar ook ergens anders.slelieveld schreef op dinsdag 26 januari 2016 @ 22:10:
Kan iemand me helpen om uit te leggen... ik heb een easy, ik heb domoticz succesvol draaien op mijn nas. Ik kan in domoticz Nefit Easy HTTP server over LAN interface kiezen. Daar moet ik een ip adres en poortnummer invullen... maar waarvan? Van een http server? Hoe en waar installeer ik die? Kan iemand me helpen met een korte handleiding of beschrijving hoe ik dit praktisch doe?
Edit:
Als je nas (Synology?) een arm processor heeft dan kun je de node.js binaries downloaden en gebruiken om de easy http server te draaien.
[ Voor 9% gewijzigd door technorabilia op 26-01-2016 22:27 ]
👉🏻 Blog 👈🏻
Dank je voor je reactie... een http server ergens draaien :-). Ik heb op mijn synology nas een http server draaien... poort 80... wat nu? Kan je me uitleggen wat ik moet doen?kraades schreef op dinsdag 26 januari 2016 @ 22:25:
[...]
Dat is het ip adres en poort nummer van de easy http server (in node.js door Robert Klep) die je ergens hebt draaien. Mag op de nas draaien maar ook ergens anders.
Edit:
Als je nas (Synology?) een arm processor heeft dan kun je de node.js binaries downloaden en gebruiken om de easy http server te draaien.
Edit: ja dat heeft ie niet, maar wel een quad-core Intel Atom C2358 processor
[ Voor 7% gewijzigd door slelieveld op 26-01-2016 22:38 ]
Domoticz communiceert met de Easy http server welke communiceert met jouw Neftit Easy thermostaat.
Je kunt de kant en klare node binaries eens proberen op de Synology. Node heb je nodig om de Easy http server te kunnen draaien.
[ Voor 43% gewijzigd door technorabilia op 26-01-2016 22:46 ]
👉🏻 Blog 👈🏻
👉🏻 Blog 👈🏻
Als ik $ npm i nefit-easy-http-server -g geef, dan gebeurt er niets... Zonder $-teken begint er een cursor te draaien... en installeert er iets :-)
Dan commando easy-server (meteen zonder $-teken) geeft volgende:
/volume1/@appstore/Node.js/usr/lib/node_modules/nefit-easy-http-server/lib/cli/index.js:32
return client.connect().then(() => {
^
SyntaxError: Unexpected token )
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/volume1/@appstore/Node.js/usr/lib/node_modules/nefit-easy-http-server/bin/easy-server:3:1)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
Nu heb ik de commando's:
export NEFIT_SERIAL_NUMBER=serienummer
export NEFIT_ACCESS_KEY=acceskey
export NEFIT_PASSWORD=password
gegeven... en in domoticz de pluging op IP van de NAS en port 3000 gezet... en nu :-)?
[ Voor 8% gewijzigd door slelieveld op 27-01-2016 16:42 ]
👉🏻 Blog 👈🏻
Bedoel je de package van easy server of van node?kraades schreef op woensdag 27 januari 2016 @ 16:51:
De package is denk ik een te oude versie nl. v0.x. Je hebt min. v4.x nodig. Deze moet je handmatig installeren (= downloaden en unzippen in bv. /usr/local/bin). Hierna moet node en npm werkend zijn voordat je met npm de easy http server installeren.
Van de easy http server is geen Synology package beschikbaar. Deze kun je met npm installeren welke samen met de node installatie meekomt. Hiervoor moet je dus eerst node installeren op je Synology. Deze kun je downloaden van nodejs.org.
Als er geen kant en klare binaries beschikbaar zijn voor jouw model Synology dan heb je denk ik pech. Probeer de Linux binaries eens? Of je moet node zelf kunnen compileren.
[ Voor 15% gewijzigd door technorabilia op 27-01-2016 22:11 ]
👉🏻 Blog 👈🏻
Serial: 123456789
accesskey: abcdefghijklmnop
password: wachtw
1
| <message from="rrccontact_123456789@wa2-mz36-qrmzh6.bosch.de/45071d0d" to="rrcgateway_123456789@wa2-mz36-qrmzh6.bosch.de"><body>PUT /heatingCircuits/hc1/temperatureRoomManual HTTP/1.1&#13;Content-Type: application/json&#13;Content-Length:24&#13;User-Agent: NefitEasy&#13;&#13;jrI2v/8/xWuvuy1sznEPqw==</body></message> |
Het geencrypte stukje zou
1
| {"value":15} |
Zijn er trouwens nog meer commando's beschikbaar? Bij voorkeur om het gasverbruik uit te lezen?
Mess with the best, die like the rest
De encrypted value klopt in ieder geval, mijn code komt met dezelfde waarde.ThaStealth schreef op woensdag 27 januari 2016 @ 22:12:
Ik heb in mijn C# library bijna alles aan de gang, alleen de PUT wil nog niet, krijg telkens een HTTP400 (bad request) terug. Kan iemand even checken of deze aanvraag klopt:
Serial: 123456789
accesskey: abcdefghijklmnop
password: wachtw
XML:
1 <message from="rrccontact_123456789@wa2-mz36-qrmzh6.bosch.de/45071d0d" to="rrcgateway_123456789@wa2-mz36-qrmzh6.bosch.de"><body>PUT /heatingCircuits/hc1/temperatureRoomManual HTTP/1.1&#13;Content-Type: application/json&#13;Content-Length:24&#13;User-Agent: NefitEasy&#13;&#13;jrI2v/8/xWuvuy1sznEPqw==</body></message>
Het geencrypte stukje zou
JSON:moeten zijn
1 {"value":15}
Ik weet niet of die &'s letterlijk in je request staan, maar dat moet in ieder geval niet. Hier is een gist met hoe een PUT request eruit moet zien. Regelovergangen moeten line feeds (\n) zijn, en die 's moeten er letterlijk in staan.
Hier is een lijst met endpoints die mij bekend zijn. Om gasgebruik uit te lezen moet je denk ik /ecus/rrc/recordings/gasusage hebben; daar moet je wel een query achteraan plakken, anders krijg je een 400.Zijn er trouwens nog meer commando's beschikbaar? Bij voorkeur om het gasverbruik uit te lezen?
Bij mij werkt dit: /ecus/rrc/recordings/gasusage?page=19, maar het paginanummer is waarschijnlijk afhankelijk van wanneer je je Easy voor het eerst hebt geïnstalleerd.
Ik heb me er eerlijk gezegd nog niet erg in verdiept, maar ik kan me voorstellen dat er ook een endpoint is die de meest recente paginanummer teruglevert. Dit soort informatie (gasgebruik) haal ik zelf uit m'n slimme meter
Ik kreeg een vriendelijke e-mail van ze waarin ze me uitnodigden om eens te komen praten over de achtergrond van mijn project, en dat Bosch misschien zelf ook een open interface zou kunnen gaan aanbieden.
Mocht je specifieke vragen/opmerkingen/verzoeken hebben, dan hoor ik het graag en ik zal ze proberen mee te nemen naar Deventer.
Tnx waren inderdaad de tekens, in de Get werkte dit wel raar genoeg, vandaar dat ik er ook niet aan twijfelde.brightvalve schreef op donderdag 28 januari 2016 @ 11:06:
[...]
De encrypted value klopt in ieder geval, mijn code komt met dezelfde waarde.
Ik weet niet of die &'s letterlijk in je request staan, maar dat moet in ieder geval niet. Hier is een gist met hoe een PUT request eruit moet zien. Regelovergangen moeten line feeds (\n) zijn, en die 's moeten er letterlijk in staan.
[...]
Hier is een lijst met endpoints die mij bekend zijn. Om gasgebruik uit te lezen moet je denk ik /ecus/rrc/recordings/gasusage hebben; daar moet je wel een query achteraan plakken, anders krijg je een 400.
Bij mij werkt dit: /ecus/rrc/recordings/gasusage?page=19, maar het paginanummer is waarschijnlijk afhankelijk van wanneer je je Easy voor het eerst hebt geïnstalleerd.
Ik heb me er eerlijk gezegd nog niet erg in verdiept, maar ik kan me voorstellen dat er ook een endpoint is die de meest recente paginanummer teruglevert. Dit soort informatie (gasgebruik) haal ik zelf uit m'n slimme meter
Het /ecus/rrc/recordings/gasusagePointer request geeft een index terug, alleen ben ik niet erachter wat deze index moet betekenen, hij verwijst in ieder geval niet naar de pagina, wellicht de array index waarde. De komende dagen maar eens bekijken of hij oploopt.
Cool dat je Nefit hier blijkbaar meeleest en het project niet actief blokkeert.
Een volledige lijst van endpoints (met documentatie van de complexere returnvalues ) zou al fijn zijn
Mess with the best, die like the rest
Bij mij is de huidige pagina nr 19 en die pointer is 590. Per "pagina" krijg je 32 waarden terug. Math.ceil(590 / 32) = ... 19ThaStealth schreef op donderdag 28 januari 2016 @ 14:19:
Het /ecus/rrc/recordings/gasusagePointer request geeft een index terug, alleen ben ik niet erachter wat deze index moet betekenen, hij verwijst in ieder geval niet naar de pagina, wellicht de array index waarde. De komende dagen maar eens bekijken of hij oploopt.
Overigens, enig idee wat de waarde van de T veld in de gasUsage uitvoer betekent?
Ik ga een lijst aanmaken (van vragen, dus...)Cool dat je Nefit hier blijkbaar meeleest en het project niet actief blokkeert.
Een volledige lijst van endpoints (met documentatie van de complexere returnvalues ) zou al fijn zijn
[ Voor 8% gewijzigd door brightvalve op 28-01-2016 18:53 ]
Ah dus het is gewoon een indexerbrightvalve schreef op donderdag 28 januari 2016 @ 15:25:
[...]
Bij mij is de huidige pagina nr 19 en die pointer is 590. Per "pagina" krijg je 32 waarden terug. Math.ceil(590 / 32) = ... 19
Overigens, enig idee wat de waarde van de T veld in de gasUsage uitvoer betekent?
[...]
Ik ga een lijst aanmaken (van vragen, dus...)
Mijn easy is op dit moment stuk (bleef in een reboot loop hangen). Ik krijg morgen een nieuwe, dus kan zaterdag pas iets zeggen over een eventuele nieuwe sample...
Mess with the best, die like the rest
Verzoek van mij is of het mogelijk is om niet in de cloud te moeten draaien. Ik wil eigenaar zijn van mijn eigen data.brightvalve schreef op donderdag 28 januari 2016 @ 11:15:
Overigens: over twee weken zit ik bij Nefit/Bosch aan tafel om dit hobbyproject te bespreken
Ik kreeg een vriendelijke e-mail van ze waarin ze me uitnodigden om eens te komen praten over de achtergrond van mijn project, en dat Bosch misschien zelf ook een open interface zou kunnen gaan aanbieden.
Mocht je specifieke vragen/opmerkingen/verzoeken hebben, dan hoor ik het graag en ik zal ze proberen mee te nemen naar Deventer.
Bij mij gaat ie alle kanten op, van -41 naar 110 en van alles er tussenin, voor de meest recente pagina.ThaStealth schreef op donderdag 28 januari 2016 @ 21:48:
[...]
Nee ik heb de T variable ook gespot, bij mij stond hij op 110.
Inderdaad, als Bosch ooit een keer failliet draait/besluit te stoppen met de Easy kan ik hem ook weggooienniki_lauda schreef op donderdag 28 januari 2016 @ 22:26:
[...]
Verzoek van mij is of het mogelijk is om niet in de cloud te moeten draaien. Ik wil eigenaar zijn van mijn eigen data.
Mess with the best, die like the rest
👉🏻 Blog 👈🏻
En tsja, als je Bosch/Nefit daarin niet vertrouwd, geen Easy kopen.
Geen problemen met portforwarding op je thuis router. Nu initieert de Easy de communicatie naar het internet. Tenzij je de Bosch server geblokkeerd hebt in je router/geen internet hebt zal deze altijd online komen. Zelfde voor je telefoon. Vrij basale dingen die maar fout kunnen zijn (en de gebruiker ziet dit ook doordat hij geen Facebook meer kan gebruiken, hij zal het probleem dus bij zijn ISP neerleggen ipv Nefit). Het enige waar Nefit dus support op moet geven is het verbinden met het Wifi netwerk en eventuele server storingen.kraades schreef op vrijdag 29 januari 2016 @ 09:48:
Wat is de reden eigenlijk om het via de centrale servers te laten lopen? Is dat omdat de app dan altijd werkt dus binnen en buiten het lokale netwerk? 1 manier van werken dus geen configuratieproblemen.
Als je rechtstreeks naar je Easy wil verbinden moet je
1. Je externe IP weten
2. De Easy een statisch IP geven / DHCP reservering geven
3. Firewall poort(en) in je modem open zetten (en forwarden naar het goede interne IP van de Easy)
4. Hopen dat de poorten van de Easy niet geblokkeerd zijn door je ISP.
Als 1 van deze stappen niet werkt zal de klant naar Nefit bellen en kunnen hun dus een brakke netwerkopstelling gaan debuggen, of imagoschade lijden doordat ze het niet kunnen oplossen.
Verder ook security, als de Easy een bug heeft die het mogelijk maakt om de controle over te nemen door een bepaalde sequentie bytes te sturen kan iemand anders je ketel mollen (in vakantieperiodes 24/7 op 100% laten draaien)
Het voordeel wat ze nu hebben is dat de ook FW updates kunnen pushen naar de thermostaat zonder tussenkomst van gebruikers
[ Voor 25% gewijzigd door ThaStealth op 29-01-2016 10:10 ]
Mess with the best, die like the rest
👉🏻 Blog 👈🏻
De reden is naar mijn mening geld. Big Data is de drijvende kracht om de gegevens te verzamelen over stookgedrag. Als je weet wanneer mensen gaan stoken kunnen anderen daar nog meer geld mee gaan verdienen.kraades schreef op vrijdag 29 januari 2016 @ 09:48:
Wat is de reden eigenlijk om het via de centrale servers te laten lopen? Is dat omdat de app dan altijd werkt dus binnen en buiten het lokale netwerk? 1 manier van werken dus geen configuratieproblemen.
Verder wil ik de keuze hebben. Als ik er voor kies om de applicatie in eigen beheer te draaien ben ik verantwoordelijk voor de beveiliging.iemand die in de cloud wil draaien mag ook. Maar uiteindelijk zul je daar op een of andere manier voor betalen. Gratis bestaat niet (behalve de zon).
[ Voor 22% gewijzigd door niki_lauda op 29-01-2016 12:53 ]
👉🏻 Blog 👈🏻
Ik denk dat het wel een rol speelt, maar praktisch gezien is het netwerkaspect denk ik de voornaamste reden geweest. Zonder tussenstation (de Bosch backend) is het best lastig om "van buiten" toegang te bieden tot een apparaat in je thuisnetwerk (alhoewel je ook voor een ngrok-achtige tunnelopzet zou kunnen kiezen).kraades schreef op vrijdag 29 januari 2016 @ 13:17:
Interessante gedacht. Algemene voorwaarden en privacy statement sluiten dit inderdaad niet uit.
Daarnaast heb ik het vermoeden dat de Easy zelf niet uitblinkt in performance en opslagruimte, het is makkelijker en goedkoper om daar de wolk voor te gebruiken.
Ik heb begrepen dat data al lokaal wordt opgeslagen in de Easy, of bedoel jij misschien wat anders?brightvalve schreef op vrijdag 29 januari 2016 @ 13:25:
[...]
[knip]
Daarnaast heb ik het vermoeden dat de Easy zelf niet uitblinkt in performance en opslagruimte, het is makkelijker en goedkoper om daar de wolk voor te gebruiken.
Veilig voor uw privacy
Een belangrijk voordeel van Easy is dat hij geen data opslaat op een externe server. Alle informatie wordt alleen bewaard in de Easy thermostaat zelf en op de gebruikte smart devices.
[ Voor 21% gewijzigd door hardware-lover op 29-01-2016 15:26 ]
Testing, one, two ...
Zorg dat je geen wachtwoorden of andere gevoelige informatie in je bericht hebt staan, deze informatie is door iedereen te lezen (en evt. te misbruiken)!