# R701 🕰️
[](https://www.rust-lang.org)
[](https://claude.com/product/claude-code)
[](https://choosealicense.com/licenses/agpl-3.0)
[](https://buymeacoffee.com/nicolabelluti)
[](https://git.nicolabelluti.me/nicolabelluti/r701/actions/?workflow=check-format-and-test.yaml)
> A reverse-engineered library to communicate with the
> [R701](https://ipsattendant.it/rilevatore-presenze-r701/) by [I.P.S.
> Informatica](https://ipsinformatica.info/), written in Rust
If you want to read about this reverse engineering attempt, check out
.
## Library Usage
1. Add the library to you project:
```shell
cargo add r701 --git https://git.nicolabelluti.me/nicolabelluti/r701.git
```
2. Use the library in you project:
This library is async and built on [tokio](https://tokio.rs); add it to your
own `[dependencies]` (e.g. `tokio = { version = "1", features =
["rt-multi-thread", "macros"] }`) to run the example below.
```rust
use r701::R701;
use tokio_stream::StreamExt;
#[tokio::main]
async fn main() {
let mut r701 = R701::connect("127.0.0.1:5005").await.unwrap();
let records = r701
.into_record_iter()
.await
.unwrap()
.collect::>()
.await;
println!("No\tMchn\tEnNo\t\tName\t\tMode\tIOMd\tDateTime\t");
for (id, record) in records.iter().rev().enumerate() {
let record = record.as_ref().unwrap();
let name = r701
.get_name(record.employee_id)
.await
.unwrap()
.unwrap_or(format!("user #{}", record.employee_id));
println!(
"{:0>6}\t{}\t{:0>9}\t{: <10}\t{}\t{}\t{}",
id + 1,
1,
record.employee_id,
name,
35,
record.clock as u8,
record.datetime.format("%Y/%m/%d %H:%M:%S"),
);
}
}
```