Hallo,
ich hatte ja vor einiger Zeit mal angefragt, wie man Daten (Temperaturen von 1-Wire Bausteinen)
übers LAN auf einen USB-Stick an der Fritz!Box mitloggt. Es kamen diverse Antworten und daraus habe ich was lauffähiges zusammengebastelt.
Für die, die's interessiert hier ne kleine Zusammenfassung:
Die Daten sollten per UDP übers Netz empfangen, und in eine Textdatei mit dem jeweiligen Datum als Filename geschrieben werden.
Dazu sollte netcat benutzt werden. Leider enthält die Busybox der Fritz!Box nur eine abgespeckte Version vom netcat die kein UDP unterstützt.
Ein Vollversion kann mittels Freetz eingebaut werden. Dazu die Trunk-Version von Freetz compilieren. Diese benutzt die aktuelle Firmware der Fritz!Box, in der auch die aktuellen Sicherheitslücken gestopft sind.
Im Eib-PC sieht das dann so aus:
[highlight=epc]
// Den HA7E Adapter mit den Bibilitheken von BMX einbinden
HA7E_Init(HA7E_Debug_Important, 5052u16, 192.168.178.31, '0/3/100'b01, '0/3/101'b01 )
// ********** Alle Temperatursensoren in der Heizung alle 2min auslesen
HA7E_Sensor(HLHeizung,$F90000027E254D28$,HLHeizung _Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS09 )
HA7E_Sensor(RLHeizung,$A30000027E367A28$,RLHeizung _Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS09 )
HA7E_Sensor(WohnzimmerTemp,$FB0000027E31B328$,Wohn zimmerTemp_Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS10 )
HA7E_Sensor(AussenTemp,$5E0000027E4CBC28$,AussenTe mp_Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS10 )
[MacroLibs]
//Makro-Bibliotheken
D:/Hausbau/EibPC_Brunnenweg/MakroLibs_1.016/Bibliotheken/EnertexOneWire.lib
D:/Hausbau/EibPC_Brunnenweg/MakroLibs_1.016/Bibliotheken/EnertexWebV2.lib
D:/Hausbau/EibPC_Brunnenweg/MakroLibs_1.016/Bibliotheken/BMXHA7E_15a.lib
[EibPC]
// Die Variablen in denen die letzten gemessenen Temperaturen vom 1-Wire stehen
HLHeizung_Temperature = 0f16
RLHeizung_Temperature = 0f16
WohnzimmerTemp_Temperature = 0f16
AussenTemp_Temperature = 0f16
CRLF = $ $
if systemstart() then {
stringset(CRLF, 0x0d, 0u16);
stringset(CRLF, 0x0a, 1u16);
} endif
TempSend = $$
TempSendLenght = 0u16
TempGesendet = AUS
if cycle(04,00) then { /* alle x min (0x,00) Temperaturen auslesen und per UDP rausschicken */
TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(WohnzimmerTemp_Temperature,$$)+$,$;
TempSend = TempSend + convert(AussenTemp_Temperature,$$)+$,$;
stringset(TempSend, 0x0D0Au16,size(TempSend));
TempSendLenght = size(TempSend);
sendudparray (5051u16,192.168.178.31,TempSend,size(TempSend));
sendudparray (5051u16,192.168.178.1,TempSend,size(TempSend));
TempGesendet = EIN
} else {
TempGesendet = AUS;
// TempSend = $$
} endif
[/highlight]
Die Fritz!Box mit einem USB-STick o.ä. bestücken und den Pfad zu einem Verzeichnis zum ablegen der Daten merken.
Im Freetz der Fritz!Box dann unter CronTab folgendes eintragen:
0 0 * * * killall netcat
1 0 * * * netcat -l -u -p 5051 >> /var/media/ftp/uStor01/EibPC/Templog/`date "+TempLog-%Y-%m-%d.txt"`
Cron dann noch auf Autostart setzen.
Das startet dann zu jedem Tageswechsel ein netcat, welches dann eine frische Datei mit dem neuen Datum anlegt.
Zu beachten: Netcat wird über "netcat" und nicht wie sonst üblich über "nc" aufgerufen. Ruft man es über "nc" auf
gibt's nur die abgespeckte Version ohne UDP.
So läuft's hier, es geht aber bestimmt eleganter. Ich bin für Ideen zu haben
ich hatte ja vor einiger Zeit mal angefragt, wie man Daten (Temperaturen von 1-Wire Bausteinen)
übers LAN auf einen USB-Stick an der Fritz!Box mitloggt. Es kamen diverse Antworten und daraus habe ich was lauffähiges zusammengebastelt.
Für die, die's interessiert hier ne kleine Zusammenfassung:
Die Daten sollten per UDP übers Netz empfangen, und in eine Textdatei mit dem jeweiligen Datum als Filename geschrieben werden.
Dazu sollte netcat benutzt werden. Leider enthält die Busybox der Fritz!Box nur eine abgespeckte Version vom netcat die kein UDP unterstützt.
Ein Vollversion kann mittels Freetz eingebaut werden. Dazu die Trunk-Version von Freetz compilieren. Diese benutzt die aktuelle Firmware der Fritz!Box, in der auch die aktuellen Sicherheitslücken gestopft sind.
Im Eib-PC sieht das dann so aus:
[highlight=epc]
// Den HA7E Adapter mit den Bibilitheken von BMX einbinden
HA7E_Init(HA7E_Debug_Important, 5052u16, 192.168.178.31, '0/3/100'b01, '0/3/101'b01 )
// ********** Alle Temperatursensoren in der Heizung alle 2min auslesen
HA7E_Sensor(HLHeizung,$F90000027E254D28$,HLHeizung _Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS09 )
HA7E_Sensor(RLHeizung,$A30000027E367A28$,RLHeizung _Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS09 )
HA7E_Sensor(WohnzimmerTemp,$FB0000027E31B328$,Wohn zimmerTemp_Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS10 )
HA7E_Sensor(AussenTemp,$5E0000027E4CBC28$,AussenTe mp_Temperature,'0/3/0'f16, 120u16, 0.2f16,0.0f16, BITS10 )
[MacroLibs]
//Makro-Bibliotheken
D:/Hausbau/EibPC_Brunnenweg/MakroLibs_1.016/Bibliotheken/EnertexOneWire.lib
D:/Hausbau/EibPC_Brunnenweg/MakroLibs_1.016/Bibliotheken/EnertexWebV2.lib
D:/Hausbau/EibPC_Brunnenweg/MakroLibs_1.016/Bibliotheken/BMXHA7E_15a.lib
[EibPC]
// Die Variablen in denen die letzten gemessenen Temperaturen vom 1-Wire stehen
HLHeizung_Temperature = 0f16
RLHeizung_Temperature = 0f16
WohnzimmerTemp_Temperature = 0f16
AussenTemp_Temperature = 0f16
CRLF = $ $
if systemstart() then {
stringset(CRLF, 0x0d, 0u16);
stringset(CRLF, 0x0a, 1u16);
} endif
TempSend = $$
TempSendLenght = 0u16
TempGesendet = AUS
if cycle(04,00) then { /* alle x min (0x,00) Temperaturen auslesen und per UDP rausschicken */
TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(WohnzimmerTemp_Temperature,$$)+$,$;
TempSend = TempSend + convert(AussenTemp_Temperature,$$)+$,$;
stringset(TempSend, 0x0D0Au16,size(TempSend));
TempSendLenght = size(TempSend);
sendudparray (5051u16,192.168.178.31,TempSend,size(TempSend));
sendudparray (5051u16,192.168.178.1,TempSend,size(TempSend));
TempGesendet = EIN
} else {
TempGesendet = AUS;
// TempSend = $$
} endif
[/highlight]
Die Fritz!Box mit einem USB-STick o.ä. bestücken und den Pfad zu einem Verzeichnis zum ablegen der Daten merken.
Im Freetz der Fritz!Box dann unter CronTab folgendes eintragen:
0 0 * * * killall netcat
1 0 * * * netcat -l -u -p 5051 >> /var/media/ftp/uStor01/EibPC/Templog/`date "+TempLog-%Y-%m-%d.txt"`
Cron dann noch auf Autostart setzen.
Das startet dann zu jedem Tageswechsel ein netcat, welches dann eine frische Datei mit dem neuen Datum anlegt.
Zu beachten: Netcat wird über "netcat" und nicht wie sonst üblich über "nc" aufgerufen. Ruft man es über "nc" auf
gibt's nur die abgespeckte Version ohne UDP.
So läuft's hier, es geht aber bestimmt eleganter. Ich bin für Ideen zu haben

Kommentar