• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Streaming von Daten zu einem Eventhub

JSNewbieG

New member
Hallo Zusammen,

vorweg möchte ich euch mitteilen, dass ich KEIN JS Programmierer bin, nicht einmal die Grundlagen von JS beherrsche und mein eigentliches Tätigkeitsfeld in einem anderen Bereich der IT liegt.
Ich wurde damit beauftragt, ein Skript aus zwei bereits existierenden Skripts zu erstellen welches Daten an ein Eventhub streamed. Der Ausgangspunkt ist die Übergabe der X,Y,Z Werte an den Eventhub von dieser Seite, welche mit dem Smartphone angesteuert werden kann:
Code:
http://www.omiod.com/iphone/acceleration-demo.php

Das Skript zum Streaming findet sich auf Github:
Code:
https://github.com/ytechie/eventhubs-js

Ich muss lediglich die Werte an die Variable im Skript übergeben.
Ich habe den Vormittag damit verbracht einigermaßen etwas hinzubekommen, das ist das Ergebnis. Würde es so funktionieren ?
Code:
<script src="http://www.github...../eventhub.js" type="text/javascript">

<script> 

eventHubs.init({
    hubNamespace: eventHubsNamespace,
    hubName: eventHubsHubName,
    keyName: eventHubsKeyName,
    key: eventHubsKey
});

function pad(str, len, pad) {
	str = String(str);
	if (typeof(len) == "undefined") { var len = 0; }
	if (typeof(pad) == "undefined") { var pad = '0'; }
	if (len + 1 >= str.length) str = Array(len + 1 - str.length).join(pad) + str;
	return str;
}

// Rolls
var ax = 0;
var ay = 0;
var az = 0;
var rot = 0;
 
var nax = 0;
var nay = 0;
var naz = 0;
var nrot = 0;
 
var delay = 10;
 
if (window.DeviceMotionEvent != undefined) {

	window.ondevicemotion = function(event) {
		ax = Math.floor(Math.abs(event.accelerationIncludingGravity.x)/10*255);
		ay = Math.floor(Math.abs(event.accelerationIncludingGravity.y)/10*255);
		az = Math.floor(Math.abs(event.accelerationIncludingGravity.z)/10*255);
		
		rot = -event.accelerationIncludingGravity.x*10;
	}
 
	setInterval(function() {
	
		nax = nax + (ax - nax)/15;
		nay = nay + (ay - nay)/15;
		naz = naz + (az - naz)/15;
		nrot = nrot + (rot - nrot)/20;
	
		var r = Math.floor(nax);
		var g = Math.floor(nay);
		var b = Math.floor(naz);
			
		var deviceMessage = {

			hubr = r;
			hubg = g;
			hubb = b;

		}

		eventHubs.sendMessage();
		
		var out = document.getElementById("out");
		out.innerHTML = "x : "+pad(r,3)+"<br>y : "+pad(g,3)+"<br>z : "+pad(b,3);
		
		out.style.webkitTransform = "rotate(" + nrot + "deg)";
				
		var scr = document.getElementById("screen");
		scr.style.backgroundColor = 'rgba('+r+','+g+','+b+',1)';
		
	}, delay);


	eventHubs.sendMessage({
	    message: deviceMessage,
	    deviceId: 1,
	});

} 
 
</script>



Vielen Dank für Eure Hilfe.:)
 
ich KEIN JS Programmierer bin, nicht einmal die Grundlagen von JS beherrsche [...] Ich wurde damit beauftragt, ein Skript aus zwei bereits existierenden Skripts zu erstellen welches Daten an ein Eventhub streamed.
Warum wurdest du dann überhaupt beauftragt, wenn das nicht deiner Expertise entspricht?

Würde es so funktionieren ?
Hast du es denn ausprobiert?

Zu deinem Problem: Was willst du denn eigentlich wirklich machen/erreichen? Wir sind hier alle in unserer Freizeit unterwegs und ich glaube nicht, dass hier irgendwer besonders viel Lust hat, sich für dein Problem erst einmal durch ein Repository und dann noch durch deinen Code zu arbeiten, wenn sie/er noch nicht einmal den Kontext kennt.

PS: zu deinem Code kann ich nur auf den ersten Blick sagen, dass globale Variablen keine gute Idee sind.
 
@kkapsner:

Die Erklärung dafür wäre wiederum ein eigener Thread, außer es spielt eine Rolle.


Ich kann es leider nicht ausprobieren, da ich die Login Daten zum Eventhub noch nicht habe, werde es jedoch alsbald tun sobald ich diese erhalte.

Prinzipiell geht es einfach nur darum die generierten Variablen z.B. var a an den folgenden Code zu übergeben und diesen in dasselbe Skript einzubetten:

Code:
eventHubs.init({
    hubNamespace: eventHubsNamespace,
    hubName: eventHubsHubName,
    keyName: eventHubsKeyName,
    key: eventHubsKey
});

var deviceMessage = {
  Temperature: 45.2,
    Pressure: 23.7
}

eventHubs.sendMessage({
    message: deviceMessage,
    deviceId: 1,
});

Ich weiß, dass ihr es alle in eurer Freizeit macht und umso mehr schätze ich eure Hilfe. Aus dem Grund habe ich es erst einmal selbst probiert - und das Ergebnis ist das längere Stück Code weiter oben.


Vielen Dank.
 
Prinzipiell geht es einfach nur darum die generierten Variablen z.B. var a an den folgenden Code zu übergeben
Wenn der Code so funktioniert, wird er auch immer noch funktioneren, wenn du eine der festen Zahlen durch eine Variable ersetzt. Aber in dem Code oben ist nicht ersichtlich, wo die ganzen globalen Variablen (eventHubsNamespace, eventHubsHubName, etc.) eigentlich definiert werden. Sind die auch wirklich da?

Prinzipiell scheinst du ja in dem ersten Code mehr als nur das eine zu machen. Ich würde das in funktionale Untereinheiten unterteilen und die dann getrennt testen.
 
das
Code:
eventHubs.sendMessage();
scheint mir falsch zu sein

das
Code:
	eventHubs.sendMessage({
	    message: deviceMessage,
	    deviceId: 1,
	});
muss ins intervall

du solltest mal überlegen den ganzen intervall-code ins ondevicemotion zu stecken, sonst werden ohne bewegung immer die gleichen werte übertragen. das ist aber sinnlos. im ondevicemotion kannst du dann abprüfen ob eine bestimmte zeit vergangen ist um z.b nur jede sekunde eine msg zu senden.
du hast eine intervallzeit von 10 ms eingestellt, das ist ein zu kleines intervall
 
Zurück
Oben